#ifndef MODULE_DRV_H
|
#define MODULE_DRV_H
|
|
#include <qthread.h>
|
#include <QDebug>
|
#include <QMutex>
|
#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
|