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:
parent
2376da1722
commit
a2880cc447
@ -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;
|
|
||||||
}
|
|
||||||
@ -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);
|
|
||||||
};
|
};
|
||||||
@ -13,4 +13,15 @@ void DevControlCommand::udpateCRC(uint8_t len)
|
|||||||
uint16_t crc = crc16(&_payload[10], len);
|
uint16_t crc = crc16(&_payload[10], 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;
|
||||||
}
|
}
|
||||||
@ -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);
|
||||||
};
|
};
|
||||||
@ -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) {
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user