#pragma once #include "IR_config.h" class IOffsets { public: uint8_t msgOffset; uint8_t addressFromOffset; uint8_t addressToOffset; uint8_t DataOffset; }; class IPackInfo { public: IR_FOX::PackInfo* packInfo; }; class IBaseEmptyPack : virtual public IOffsets, virtual public IPackInfo {}; class IEmptyPack : virtual protected IBaseEmptyPack { bool isAvailable; public: IEmptyPack(IR_FOX::PackInfo* _packInfo) { packInfo = _packInfo; } virtual bool available() { if (isAvailable) { isAvailable = false; return true; } else { return false; } }; virtual uint8_t getMsgInfo() { return packInfo->buffer[0] & IR_MASK_MSG_INFO; }; virtual uint8_t getMsgType() { return (packInfo->buffer[0] >> 5) & IR_MASK_MSG_TYPE; }; virtual uint8_t getMsgRAW() { return packInfo->buffer[0]; }; virtual uint16_t getErrorCount() { return packInfo->err.all(); }; virtual uint8_t getErrorLowSignal() { return packInfo->err.lowSignal; }; virtual uint8_t getErrorHighSignal() { return packInfo->err.highSignal; }; virtual uint8_t getErrorOther() { return packInfo->err.other; }; virtual uint16_t getTunerTime() { return packInfo->rTime; }; }; class IHasAddresFrom : virtual protected IBaseEmptyPack { virtual uint16_t getAddrFrom() { return packInfo->buffer[addressFromOffset] | packInfo->buffer[addressFromOffset + 1]; }; }; class IHasAddresTo : virtual protected IBaseEmptyPack { virtual uint16_t getAddrTo() { return packInfo->buffer[addressToOffset] | packInfo->buffer[addressToOffset + 1]; }; }; class IHasAddresData : virtual protected IBaseEmptyPack { virtual uint8_t getDataSize() { return /* packInfo->buffer[packInfo->packSize-2] */0; };//TODO: virtual uint8_t* getDataPrt() { return packInfo->buffer + DataOffset; }; virtual uint8_t getDataRawSize() { return packInfo->packSize; }; virtual uint8_t* getDataRawPtr() { return packInfo->buffer; }; }; class Data : virtual public IEmptyPack, virtual public IHasAddresFrom { public: Data(IR_FOX::PackInfo* packInfo) : IEmptyPack(packInfo) { msgOffset = 0; } };