//############################################################################################################################################################################################################# #ifndef _IDIBUS_SLAVE_H_ #define _IDIBUS_SLAVE_H_ //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- #include "IdiBusSystem.h" #include "IdiBusDateTime.h" #include "IdiBusMes.h" #include "IdiBusSerialLine.h" //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- class IdiMasterState { public : IDISTATUS_STATE_TYPE STATE; struct { struct { uint8_t GS1_country[3]; uint8_t GS1_company[6]; uint8_t ModuleType[3]; uint8_t HW_rev[2]; uint8_t Serial[7]; uint8_t MAC[6]; } FIX; struct VAR { VAR() : VerifDate(0,0,0,0), VerifExpDate(0,0,0,0) {} uint8_t SW_rev[2]; IdiDateFormat VerifDate; IdiDateFormat VerifExpDate; uint8_t IPv4[4]; uint8_t IPv6[16]; uint8_t AES[32]; } VAR; } SN; void parseSmesDataNoAes(uint8_t *Data); }; //============================================================================================================================================================================================================= //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //============================================================================================================================================================================================================= class IdiBusLongOpData { public : IdiBusLongOpData() { this->State = IDILONGOP_STATE_COMPLETE_NO_ERR; this->Timeout = 0; } uint8_t State; uint32_t Timeout; }; //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- class IdiBusChannel { public : IdiBusChannel() { this->MMES_Error = IDIER_NOPE; } IdiBusLongOpData LONG_OP; uint8_t MMES_Error; }; //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- class IdiBusDevice { public : IdiBusDevice (void *ParentModule) { this->Module = ParentModule; } virtual IdiBusChannel *getChannel(uint8_t Num) { return NULL; } protected : void *Module; }; //============================================================================================================================================================================================================= //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //============================================================================================================================================================================================================= class IdiBusSlave { public : // Constructors and init IdiBusSlave(IdiBusSerialLine *SlaveLine, uint8_t SlaveAddress); IdiBusSlave(void); void Init(IdiBusSerialLine *SlaveLine, uint8_t SlaveAddress); // Standard communication API uint8_t SendRequestMMES(IdiBusMMES *MMES); uint8_t SendRequestMMESG(IdiBusMMESG *MMESG); //Module commands (return ErrorCode) uint8_t c_Init (void); uint8_t c_Init (uint8_t Gpoup); uint8_t c_ShtDown (void); uint8_t c_Freeze (void); uint8_t c_Resume (void); uint8_t c_ReadDevFullSN_MS(void); uint8_t c_WriteSnIPv4IPv6(uint32_t IPv4, uint32_t IPv6_B3, uint32_t IPv6_B2, uint32_t IPv6_B1, uint32_t IPv6_B0); uint8_t c_WriteSnVerifyDates(IdiDateFormat VDate, IdiDateFormat VEXPDate); uint8_t c_WriteSnAES256(uint8_t *AES256_key); uint8_t c_SendTimeDate(IdiTimeFormat Time, IdiDateFormat Date); uint8_t c_DummyModule(void); uint8_t c_CheckModuleLongOp(void); // Channel Commands uint8_t c_Dummy(uint8_t Device, uint8_t Channel); uint8_t c_AssignGroup(uint8_t Device, uint8_t Channel, uint8_t Group); uint8_t c_CheckChannelLongOp(uint8_t Device, uint8_t Channel); // Utils uint8_t getAddress(void); void setAes256ToSn(uint8_t *AES256_key); IdiBusLongOpData getModuleLongOpData(void); IdiBusLongOpData getChLongOpData(uint8_t Device, uint8_t Channel); IdiMasterState getModuleSN(void); // Interface - must be overridden in derived classes virtual IdiBusDevice *getDevice(uint8_t Num) { return NULL; } protected : IdiBusSerialLine *Line; uint8_t Address; IdiMasterState ModuleST; uint8_t ModuleError; IdiBusLongOpData ModuleLongOpData; uint8_t CRC_MultipleError; struct { uint8_t CRC_ErrAvrBuf[16]; uint8_t CRC_ErrAvrBufCounter; uint8_t CRC_ErrAvrBufPos; uint8_t CRC_ErrAvrBufSum; } CRC_AVR; uint8_t SendModuleSimpleSetCommand(uint8_t Command); uint8_t SendModuleSimpleSetCommand(uint8_t Command, uint8_t *TxData, uint16_t TxDataLength); void CrcAvrErrorCalc(uint8_t ErrorCode); }; //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- #endif //#define _IDIBUS_SLAVE_H_ //#############################################################################################################################################################################################################