Ubuntu12.04.4_lts
2023-08-01 961efe36f62f7eba688d504ec0cdf3e1daa4dd74
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#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