mirror of
https://github.com/Show-maket/IR-protocol.git
synced 2025-05-04 15:20:16 +00:00
107 lines
2.4 KiB
C++
107 lines
2.4 KiB
C++
#include "PacketTypes.h"
|
|
|
|
namespace PacketTypes
|
|
{
|
|
bool BasePack::checkAddress() { return true; };
|
|
void BasePack::set(IR_FOX::PackInfo *packInfo, uint16_t id)
|
|
{
|
|
this->packInfo = packInfo;
|
|
this->id = id;
|
|
|
|
if (checkAddress())
|
|
{
|
|
isAvailable = true;
|
|
isRawAvailable = true;
|
|
#ifdef IRDEBUG_INFO
|
|
Serial.print(" OK ");
|
|
#endif
|
|
}
|
|
else
|
|
{
|
|
isRawAvailable = true;
|
|
#ifdef IRDEBUG_INFO
|
|
Serial.print(" NOT-OK ");
|
|
#endif
|
|
}
|
|
}
|
|
|
|
uint16_t BasePack::_getAddrFrom(BasePack *obj)
|
|
{
|
|
return (obj->packInfo->buffer[obj->addressFromOffset] << 8) | obj->packInfo->buffer[obj->addressFromOffset + 1];
|
|
};
|
|
uint16_t BasePack::_getAddrTo(BasePack *obj)
|
|
{
|
|
return (obj->packInfo->buffer[obj->addressToOffset] << 8) | obj->packInfo->buffer[obj->addressToOffset + 1];
|
|
};
|
|
|
|
uint8_t BasePack::_getDataSize(BasePack *obj)
|
|
{
|
|
return obj->packInfo->packSize - crcBytes - obj->DataOffset;
|
|
};
|
|
uint8_t *BasePack::_getDataPrt(BasePack *obj)
|
|
{
|
|
return obj->packInfo->buffer + obj->DataOffset;
|
|
};
|
|
uint8_t BasePack::_getDataRawSize(BasePack *obj)
|
|
{
|
|
return obj->packInfo->packSize;
|
|
};
|
|
|
|
bool BasePack::available()
|
|
{
|
|
if (isAvailable)
|
|
{
|
|
isAvailable = false;
|
|
isRawAvailable = false;
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
};
|
|
bool BasePack::availableRaw()
|
|
{
|
|
if (isRawAvailable)
|
|
{
|
|
isRawAvailable = false;
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
};
|
|
|
|
bool Data::checkAddress()
|
|
{
|
|
bool ret;
|
|
IR_FOX::checkAddressRuleApply(getAddrTo(), this->id, ret);
|
|
return ret;
|
|
}
|
|
|
|
bool DataBack::checkAddress()
|
|
{
|
|
bool ret;
|
|
if (getMsgType() == IR_MSG_BACK_TO)
|
|
{
|
|
DataOffset = 5;
|
|
IR_FOX::checkAddressRuleApply((packInfo->buffer[addressToOffset] << 8) | packInfo->buffer[addressToOffset + 1], this->id, ret);
|
|
}
|
|
else
|
|
{
|
|
DataOffset = 3;
|
|
ret = true;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
bool Accept::checkAddress() { return true; }
|
|
|
|
bool Request::checkAddress()
|
|
{
|
|
bool ret;
|
|
IR_FOX::checkAddressRuleApply(getAddrTo(), this->id, ret);
|
|
return ret;
|
|
}
|
|
} |