/********************************************************************** Project: Automatic cat feeder Date: march 19 2006 Author: Jean-Fran�ois Martel Target: PIC 18F252 Compiler: Microchip mcc18 Filename: Protocol.h File description: Communication protocol implementation. jean-francois.martel@polymtl.ca **********************************************************************/ #ifndef BOOTLOADERINTERFACE_H #define BOOTLOADERINTERFACE_H //Protocol buffer specific definitions #include "ProtocolDefs.h" #define MASTER_ADDRESS 0x01 #define MY_DEVICE_ADDRESS 0x01 #define ADDRESS 0x01 enum eProtocolUser { NETWORK_PROTOCOL_USER_LORA, NETWORK_PROTOCOL_USER_LTE }; //State Machine states enum States { Initialization, RxHeader, RxAdd, RxID, RxMyID, RxMyAddress, RxFlags, RxCMD, RxSize1, RxSize2, RxSize3, RxSize4, RxData, RxCRC }; //enum DEVICES_IDS //{ // ID_MASTER, //Master Controller // ID_CONSOLE, //LCD Console // ID_PC, //PC // ID_AV_MUX, //Audio Video Multiplexer // ID_IR_REMOTE, // ID_DEADBOLT //}; //enum MESSAGE_IDS //{ // TX_NETWORK_ACK = 1, // RX_GET_STATUS, // TX_DEADBOLT_STATUS, // // MAX_NETWORK_CMD //}; //State machine states definition typedef struct stProtocolData { unsigned char mRxData[MAX_MESSAGE_SIZE+10]; unsigned char mTxData[MAX_MESSAGE_SIZE+10]; unsigned int DataSize; unsigned int DataCtr; unsigned int BufPtr; unsigned char RxPtr; unsigned char Command; unsigned char State; unsigned char CRC; unsigned char SenderID; unsigned char SenderAddress; unsigned char Flags; unsigned char IsUpdating; unsigned char *BmpDataPtr; }ProtocolData_t; void ProtocolInit(int User); void StateMachine(unsigned char STATE, ProtocolData_t *ProtocolData); void ProtocolAnalyzeNewData(unsigned char RxByte, int User); void ResetStateMachine(ProtocolData_t *ProtocolData); void ProtocolExecCmd(void); void ProtocolAcknowledge(unsigned char Answer,unsigned char Cmd, unsigned char Data); unsigned char* ProtocolGetFrame(unsigned char DestDevice,unsigned char DestAddress, unsigned char SenderDevice, unsigned char Cmd, unsigned char *Data,unsigned int Size,unsigned char Flags, int *FrameSize); unsigned char ProtocolCalcCrc(unsigned char* Buffer,unsigned char size); unsigned char ProtocolIsReceiving(void); unsigned char *ProtocolMsgDataPtr(ProtocolData_t *ProtocolData); #endif