Add RX main command to structure which is passed to handleResponse

This is required because the DevControlCommands just set the first byte to define whether the request was successfull or not
This commit is contained in:
Thomas Basler 2022-09-13 20:49:47 +02:00
parent 2376da1722
commit a2880cc447
6 changed files with 15 additions and 7 deletions

View File

@ -42,8 +42,3 @@ PowerLimitControlType ActivePowerControlCommand::getType()
{ {
return (PowerLimitControlType)(((uint16_t)_payload[14] << 8) | _payload[15]); return (PowerLimitControlType)(((uint16_t)_payload[14] << 8) | _payload[15]);
} }
bool ActivePowerControlCommand::handleResponse(InverterAbstract* inverter, fragment_t fragment[], uint8_t max_fragment_id)
{
return true;
}

View File

@ -16,6 +16,4 @@ public:
void setActivePowerLimit(float limit, PowerLimitControlType type = RelativNonPersistent); void setActivePowerLimit(float limit, PowerLimitControlType type = RelativNonPersistent);
float getLimit(); float getLimit();
PowerLimitControlType getType(); PowerLimitControlType getType();
virtual bool handleResponse(InverterAbstract* inverter, fragment_t fragment[], uint8_t max_fragment_id);
}; };

View File

@ -14,3 +14,14 @@ void DevControlCommand::udpateCRC(uint8_t len)
_payload[10 + len] = (uint8_t)(crc >> 8); _payload[10 + len] = (uint8_t)(crc >> 8);
_payload[10 + len + 1] = (uint8_t)(crc); _payload[10 + len + 1] = (uint8_t)(crc);
} }
bool DevControlCommand::handleResponse(InverterAbstract* inverter, fragment_t fragment[], uint8_t max_fragment_id)
{
for (uint8_t i = 0; i < max_fragment_id; i++) {
if (fragment[i].mainCmd != (_payload[0] | 0x80)) {
return false;
}
}
return true;
}

View File

@ -6,6 +6,8 @@ class DevControlCommand : public CommandAbstract {
public: public:
explicit DevControlCommand(uint64_t target_address = 0, uint64_t router_address = 0); explicit DevControlCommand(uint64_t target_address = 0, uint64_t router_address = 0);
virtual bool handleResponse(InverterAbstract* inverter, fragment_t fragment[], uint8_t max_fragment_id);
protected: protected:
void udpateCRC(uint8_t len); void udpateCRC(uint8_t len);
}; };

View File

@ -90,6 +90,7 @@ void InverterAbstract::addRxFragment(uint8_t fragment[], uint8_t len)
// Packets with 0x81 will be seen as 1 // Packets with 0x81 will be seen as 1
memcpy(_rxFragmentBuffer[(fragmentCount & 0b01111111) - 1].fragment, &fragment[10], len - 11); memcpy(_rxFragmentBuffer[(fragmentCount & 0b01111111) - 1].fragment, &fragment[10], len - 11);
_rxFragmentBuffer[(fragmentCount & 0b01111111) - 1].len = len - 11; _rxFragmentBuffer[(fragmentCount & 0b01111111) - 1].len = len - 11;
_rxFragmentBuffer[(fragmentCount & 0b01111111) - 1].mainCmd = fragment[0];
_rxFragmentBuffer[(fragmentCount & 0b01111111) - 1].wasReceived = true; _rxFragmentBuffer[(fragmentCount & 0b01111111) - 1].wasReceived = true;
if ((fragmentCount & 0b01111111) > _rxFragmentLastPacketId) { if ((fragmentCount & 0b01111111) > _rxFragmentLastPacketId) {

View File

@ -11,6 +11,7 @@ union serial_u {
#define MAX_RF_PAYLOAD_SIZE 32 #define MAX_RF_PAYLOAD_SIZE 32
typedef struct { typedef struct {
uint8_t mainCmd;
uint8_t fragment[MAX_RF_PAYLOAD_SIZE]; uint8_t fragment[MAX_RF_PAYLOAD_SIZE];
uint8_t len; uint8_t len;
bool wasReceived; bool wasReceived;