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.

150 lines
3.6 KiB

3 months ago
#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