wirelessgateway/uart/SH_Uart.hpp

118 lines
3.9 KiB
C++
Raw Normal View History

2021-09-18 13:45:24 +08:00
#ifndef _UART_H_
#define _UART_H_
#include <list>
#include <map>
#include <iostream>
#include <boost/asio.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/unordered_set.hpp>
#include <boost/unordered_map.hpp>
#include "../utility/SH_MySingleton.hpp"
#include "../common/SH_CommonFunc.hpp"
#include "../common/SH_global.h"
#include "../dbaccess/SH_SqlDB.hpp"
2024-07-09 09:49:42 +08:00
#include "../calculation/Calculation.hpp"
2021-09-18 13:45:24 +08:00
2021-09-18 13:45:24 +08:00
//using namespace boost::asio;
//using std::string;
//using boost::system::error_code;
typedef unsigned int UINT;
2024-07-09 09:49:42 +08:00
typedef void (*pTestRecvCallBack)(int Status);
2021-09-18 13:45:24 +08:00
class Uart : public MySingleton<Uart>
{
private :
2024-07-09 09:49:42 +08:00
boost::posix_time::ptime mLocalTime;
boost::asio::io_service mIoSev;
boost::asio::serial_port mUart;
int mRdLength;
int mlastSize;
int mPackgeIndex;
string strTimetamp;
//DataNodeInfo dataNodeInfo;
std::string m_strDestShortAddr;
int waittime;
enum{BUF_LENGTH = 40960};
unsigned char mUartRecvBuf[BUF_LENGTH];
char mUartRecvTmpBuf[BUF_LENGTH*15];
boost::mutex mLock;
boost::asio::io_service::strand mStrand;
2021-09-18 13:45:24 +08:00
public :
Uart();
~Uart();
2024-07-09 09:49:42 +08:00
void InitZigbee();
void InitUart(speed_t speed);
void Close();
void InitTestUart(speed_t speed);
void ReadTestUart();
int fd,TestFd;
bool bUpdate;
bool bUpdatePre;
bool bUpdateconfig;
bool bTest;
bool bZigbeeSinal;
bool bModifyAddr;
bool bSendTimeStamp;
std::string DataNodeUpdateFile;
2021-09-18 13:45:24 +08:00
void WriteToUart(const char *strSend,int pLen);
2024-07-09 09:49:42 +08:00
int ReadFromUart();
2021-09-18 13:45:24 +08:00
void setCallBack(onReceiveUart _callback);
void Run();
void Stop();
void UpdateZigbeeInfoCtrl();
void UpdateZigbeeInfo(const char *pData);
void DealRecvData(const char *pData);
void DealDataNodeInfo(const char *pData);
2024-07-09 09:49:42 +08:00
void DealDataNodeName(const char *pData);
2021-09-18 13:45:24 +08:00
void DealDataNodeFeature(const char *pData, int flag);
void DealDataNodeWave(const char *pData);
void DealWaveThread();
void DealWave();
2024-07-09 09:49:42 +08:00
void DealNodeSendTime(unsigned char* shortaddr);
2021-09-18 13:45:24 +08:00
void ZigbeeInit();
2024-07-09 09:49:42 +08:00
int ZigbeeTest();
2024-08-05 10:25:50 +08:00
void RecordBattery(string & strLongAddr,DataRecvStatic& dataStatic,string& nowTimetamp);
2021-09-18 13:45:24 +08:00
void modify_info(unsigned short id, char * zigbee);
void modify_distaddr_info(unsigned short id, char * zigbee,unsigned char* distAddr);
2024-07-09 09:49:42 +08:00
void modify_LocalAddr(unsigned short id);
void modify_DistAddr(unsigned char* distAddr);
void modify_Localchannel(unsigned char pad);
void modify_LocalPanID(unsigned short padID);
void getZigbeeSignal(unsigned char* distAddr);
2021-09-18 13:45:24 +08:00
void zigbee_reset(unsigned short pad, unsigned short type);
void WriteChanl2Zigbee(unsigned char pad);
void WritePanId2Zigbee(unsigned short pad);
2024-07-09 09:49:42 +08:00
void WriteSpeed2Zigbee();
//void WriteLocalAddr(unsigned short id);
void WriteTranTimeout2Zigbee(unsigned char Time);
2021-09-18 13:45:24 +08:00
void WriteShortAddr2Zigbee(unsigned short pad);
void WriteShortAddr_DistAddr2Zigbee(unsigned short pad,unsigned char* pDestShortAddr);
void UpdateWirelessNode(unsigned short shortAdd);
2024-07-09 09:49:42 +08:00
void UpdateWirelessNodeTime(unsigned char* pDestShortAddr,int modifyaddr/*,int nodewaveindex,int nodetime,int nodeindex*/);
int UpdateConfig(unsigned char* pDestShortAddr);
bool ReadUpdatePackge(unsigned char* shortAddr);
2024-07-09 09:49:42 +08:00
bool CheckCrc(char* pCheckBuff,int No);
int FindRecvPackage(int bytesRead, char* mUartRecvBuf,char* head);
2021-09-18 13:45:24 +08:00
virtual void DataAnalysis_R(DevDataOfGwid &pData);
virtual void DataAnalysis_W(DevData &pData,bool pFlag);
virtual void ThreadInit();
2024-07-09 09:49:42 +08:00
int UartRecv(int fd, char srcshow,char* buffer);
void openSwitch();
2021-09-18 13:45:24 +08:00
private :
2024-07-09 09:49:42 +08:00
void ReadHandle(char* pUartRecvBuf,size_t bytesRead);
2021-09-18 13:45:24 +08:00
void WriteHandle(const char *strSend,const boost::system::error_code &ec,size_t bytesWrite);
onReceiveUart m_callback;
std::vector<RecvData> m_VecWaveData;
unsigned long m_TimeStamp;
2024-07-09 09:49:42 +08:00
bool m_waveTrans;
2021-09-18 13:45:24 +08:00
};
#endif