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
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
|
||
|
|
||
|
|