#ifndef MODULE_DRV_H #define MODULE_DRV_H #include #include #include #include "Common/data_define.h" //---------------------------------------------------------------------------------------------- #define CRC_NORMAL 0 #define CRC_REVERSE 1 #define DEVICE_ADDR_BROADCAST 0xFF //---------------------------------------------------------------------------------------------- //NRF905模块 #define NRegAddr_GetVersion 0x0000 #define NRegAddr_ModuleDropIndex 0x0001 #define NRegAddr_GetDeviceAddr 0x0002 #define NRegAddr_GetMonomerVol 0x1000 #define NRegAddr_SetGroupNum 0x0011 #define NRegAddr_SetBattNumEachGrp 0x0012 #define NRegAddr_SetMonomerOrder 0x0013 #define NRegAddr_SetWorkFreq 0x0014 #define NRegAddr_SetMonomerAddr 0x0015//设置0号地址 #define NRegAddr_SetMonomerFreq 0x0016 #define NRegAddr_SetMonAddrNew 0x0017//设置目标地址 #define NRegAddr_SetAdjIndex 0x0020 #define NRegAddr_SetMonomerAdj 0x0021 typedef struct _current_module_data_ { quint16 moduleVersion; quint16 Cur1_offset; quint16 Cur2_offset; quint16 Cur1_slope; quint16 Cur2_slope; quint16 Vol1_offset; quint16 Vol2_offset; quint16 Vol1_slope; quint16 Vol2_slope; quint16 Temp_offset; quint16 Flash_status1; quint16 Flash_status2; quint16 Adc_sample[8]; quint16 Cur_dir1; quint16 Cur_dir2; }CURR_MODULE_DATA; typedef struct _nrf905_module_data_ { quint16 moduleVersion; quint16 moduleDropIndex; quint16 monomerVol[MONOMER_NUM_MAX]; }N905_MODULE_DATA; class ModuleDrv : public QThread { Q_OBJECT public: ModuleDrv(const char *dev); virtual void run(); ~ModuleDrv(); public: void SetMonomerNum(const quint16 num); int ReadFromModule(const quint16 data_addr,const quint16 read_data_num, void *read_data_buf); int MultiWriteModule(const quint16 data_addr,quint16 *wr_data_buf, const quint16 WriteDataNum); int SingleWriteModule(const quint16 data_addr,const quint16 wr_data, const quint16 timeout_ms); int SingleWriteModuleEx(const quint16 data_addr, const quint16 wr_data,const quint16 wr_data2, const quint16 wr_data3, const quint16 timeout_ms); quint8 IF_MONCLEAR; private: int FD_NRF905; bool runEn; quint16 MonomerNum; static const int CommOK = 0; static const int CommTxError = -1; static const int CommRxError = -2; static const int CommDataError = -3; static const int CommWrFailError = -4; private: void set_speed(int fd, int speed); int set_Parity(int fd,int databits,int stopbits,int parity); unsigned short CalModbusCRC16(void *puchMsg, unsigned short usDataLen,const quint8 mode_type =0); int OpenDev(const char *Dev); void SetDevAttr(int fd,int bitrate, char bitlen, char stopbitlen, char checktype); int WriteDev(int fd, void *buf, int len); int ReadDev(int fd, void *buf, int len); int ReadFromIOModule(int fd,const quint16 data_addr, const quint16 read_data_num, void *read_data_buf,const quint8 CRC_mode=0); int MultiWriteIOModule( int fd,const quint16 data_addr, quint16 *wr_data_buf, const quint16 WriteDataNum,const quint8 CRC_mode=0); int SingleWriteIOModule( int fd,const quint16 data_addr, const quint16 wr_data, const quint16 timeout_ms,const quint8 CRC_mode=0); int SingleWriteIOModuleEx( int fd,const quint16 data_addr,const quint16 wr_data, const quint16 wr_data2,const quint16 wr_data3,const quint16 timeout_ms,const quint8 CRC_mode=0); signals: void sendN905ModuleData(N905_MODULE_DATA data); }; #endif // MODULE_DRV_H