#ifndef _TRANSMIT_H_ #define _TRANSMIT_H_ #include "./Spi.h" #include "./ECatMain.h" #define FRAME_NUM_MAX 255 #define FRAME_LENGTH_MAX 1014 #define SLAVE_NUM_MAX 128 #define NET_NODE_MAX 128 #define PCC_NUM_MAX 16 #define EAU_NUM_MAX 16 #define CCU_NUM_MAX 64 #define PCS_NUM_MAX 4 typedef struct _HeadInformation { uint8_t headNumberOne ; uint8_t headNumberTwo ; uint8_t frameType ; uint8_t frameNumber ; uint16_t anotherHeart ; uint16_t dataLength ; }HeadInformation ; typedef enum _ControlMode { ErrorRetain = 0 , DeviceReset = 1 , ECATReset = 2 , OtherRetain = 3 }ControlMode ; //未使用 typedef enum _NodeType { CCMNode = 0 , CCSNode = 1 , EAUNode = 265 , CCUNode = 4369 , PCSNode = 2 , OtherNode = 3 }NodeType ; typedef struct _ControlFrame { ControlMode controlMode ; }ControlFrame ; typedef struct _ManageFrame { uint16_t nodeNumber ; uint16_t nodeLength ; uint16_t aoLength ; uint16_t aiLength ; NetNode netNode[NET_NODE_MAX] ; }ManageFrame ; typedef struct _SendToDataFrame { uint8_t aoBlock[FRAME_NUM_MAX][FRAME_LENGTH_MAX] ; uint8_t frameNumber ; uint8_t frameAoNumber[FRAME_NUM_MAX] ; uint16_t frameAoLength[FRAME_NUM_MAX] ; }SendToDataFrame ; typedef struct _RecvFromDataFrame { uint8_t aoAiBlock[FRAME_NUM_MAX][FRAME_LENGTH_MAX] ; uint8_t frameNumber ; uint16_t aoLength ; uint16_t aiLength ; }RecvFromDataFrame ; class Transmit { public : ControlFrame sendToControlFrame ; ControlFrame recvFromControlFrame ; ManageFrame manageFrame ; SendToDataFrame sendToDataFrame ; RecvFromDataFrame recvFromDataFrame ; Transmit(Spi *para_spi , ECatMain *para_ecat_main) ; ~Transmit() ; void dataInit() ; void printRecvInformation() ; void transmitMutexLock() ; void transmitMutexUnLock() ; int16_t littleToBigEndian(int16_t para_signed_short) ; uint64_t littleToBigEndian(uint64_t para_unsigned_long) ; int16_t bigToLittleEndian(int16_t para_signed_short) ; uint16_t bigToLittleEndian(uint16_t para_unsigned_short) ; uint64_t bigToLittleEndian(uint64_t para_unsigned_long) ; int addCRCToTxBuffer(unsigned char *para_tx_buffer , int para_tx_len) ; unsigned char checkCRCFromRxBuffer(unsigned char *para_rx_buffer , int para_rx_len) ; void setControlFrame( ControlMode para_control_mode ) ; int getControlFrame() ; int sendControlFrame() ; int recvControlFrame() ; void autoControlFrame( ControlMode para_control_mode ) ; void setManagementFrame() ; int getManagementFrame() ; void sendManagementFrame() ; int recvManagementFrame() ; void autoManagementFrame() ; void eauLittleToBigEndianConversion(sEAU *para_dest_eau , sEAU *para_src_eau) ; void ccuLittleToBigEndianConversion(sCCU *para_dest_ccu , sCCU *para_src_ccu) ; void eauBigToLittleEndianConversion(sEAU *para_dest_eau , sEAU *para_src_eau) ; void ccuBigToLittleEndianConversion(sCCU *para_dest_ccu , sCCU *para_src_ccu) ; int setSendDataFrame() ; int getRecvDataFrame() ; void sendDataFrame( uint8_t para_frame_number , uint8_t para_end_number) ; int recvDataFrame() ; void autoDataFrame() ; void run() ; void test() ; private : Spi *spi ; ECatMain *eCatMain ; pthread_mutex_t transmit_mutex ; HeadInformation headInformation ; uint16_t heart ; uint16_t another_heart ; } ; #endif