You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
3.6 KiB
149 lines
3.6 KiB
#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 |
|
|
|
|
|
|