4502 lines
156 KiB
C++
4502 lines
156 KiB
C++
|
|
#include <signal.h>
|
|||
|
|
#include <stdio.h>
|
|||
|
|
#include <fcntl.h>
|
|||
|
|
#include <unistd.h>
|
|||
|
|
#include <termios.h>
|
|||
|
|
#include <sys/types.h>
|
|||
|
|
#include <sys/stat.h>
|
|||
|
|
#include <boost/thread/thread.hpp>
|
|||
|
|
#include <boost/lexical_cast.hpp>
|
|||
|
|
#include <boost/algorithm/string.hpp>
|
|||
|
|
#include <boost/bind.hpp>
|
|||
|
|
#include <boost/timer.hpp>
|
|||
|
|
#include <boost/date_time/posix_time/posix_time.hpp>
|
|||
|
|
#include "../uart/SH_Uart.hpp"
|
|||
|
|
#include "../serial/serial.h"
|
|||
|
|
|
|||
|
|
|
|||
|
|
namespace{
|
|||
|
|
Uart *pUart = Uart::instance();
|
|||
|
|
Calculation *pCalculation = Calculation::instance();
|
|||
|
|
}
|
|||
|
|
char g_UartRecvBuf[GENERAL_BUF_SIZE];
|
|||
|
|
int offSize = 0;
|
|||
|
|
pTestRecvCallBack pTestRecv ;
|
|||
|
|
std::vector<RecvData> g_VecWaveDataX;
|
|||
|
|
std::vector<RecvData> g_VecWaveDataY;
|
|||
|
|
std::vector<RecvData> g_VecWaveDataZ;
|
|||
|
|
map<string,compressWaveChannel> g_mapCompress;
|
|||
|
|
// namespace{
|
|||
|
|
// PlatformInit *platform = PlatformInit::instance();
|
|||
|
|
// LocalServer *wlServer = LocalServer::instance();
|
|||
|
|
// GenericFunc *genericFunc = GenericFunc::instance();
|
|||
|
|
// }
|
|||
|
|
using namespace boost::asio;
|
|||
|
|
const UINT CharSize = 8;
|
|||
|
|
const UINT UartBaud = 115200;
|
|||
|
|
|
|||
|
|
int Uart::UartRecv(int fd, char srcshow,char* buffer)
|
|||
|
|
{
|
|||
|
|
char buff[BUF_LENGTH];
|
|||
|
|
int ret = 0;
|
|||
|
|
int maxSize = 0;
|
|||
|
|
int offSize = 0;
|
|||
|
|
int timeoutflag = 0;
|
|||
|
|
char head[] = {0xAA,0x55,0xAA};
|
|||
|
|
char szbuffer[BUF_LENGTH]={0x00};
|
|||
|
|
while(1)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if((unsigned short)GlobalConfig::Zigbee_G.MyAddr == 0x9999){
|
|||
|
|
|
|||
|
|
memset(buff, 0, sizeof(buff));
|
|||
|
|
ret = read_data(fd, buff, BUF_LENGTH, 10);
|
|||
|
|
if (ret <= 0 ){
|
|||
|
|
if(!bUpdate && !bUpdateconfig && GlobalConfig::EnterZigBeeWaveTransmittingCnt_G > 15){
|
|||
|
|
timeoutflag ++;
|
|||
|
|
if(timeoutflag > 300){
|
|||
|
|
LOG_DEBUG("===============0x9999 timeout= %d offSize = %d===============\n",timeoutflag,offSize);
|
|||
|
|
print_info("0x9999 timeout %d===============Size = %d\n",timeoutflag,offSize);
|
|||
|
|
FindRecvPackage(offSize, mUartRecvTmpBuf,head);
|
|||
|
|
GlobalConfig::Zigbee_G.MyAddr = 0x8888;
|
|||
|
|
timeoutflag = 0;
|
|||
|
|
offSize = 0;
|
|||
|
|
maxSize = 0;
|
|||
|
|
tcflush(fd,TCIFLUSH);
|
|||
|
|
bModifyAddr = true;
|
|||
|
|
modify_LocalAddr(0x8888);
|
|||
|
|
bSendTimeStamp = false;
|
|||
|
|
mssleep(10000);
|
|||
|
|
m_waveTrans = true;
|
|||
|
|
memset(mUartRecvTmpBuf,0,BUF_LENGTH);
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = NO_ENTER_TRANSMITTING_STATUS;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
|||
|
|
|
|||
|
|
LOG_DEBUG("wave end\n");
|
|||
|
|
}
|
|||
|
|
mssleep(10000);
|
|||
|
|
}else if(bUpdatePre || (bUpdateconfig && GlobalConfig::EnterZigBeeWaveTransmittingCnt_G > 15)){
|
|||
|
|
timeoutflag ++;
|
|||
|
|
if(timeoutflag > 300){
|
|||
|
|
print_info("bUpdateconfig %d===============\n",timeoutflag);
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = NO_ENTER_TRANSMITTING_STATUS;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
|||
|
|
timeoutflag = 0;
|
|||
|
|
offSize = 0;
|
|||
|
|
maxSize = 0;
|
|||
|
|
bUpdate = false;
|
|||
|
|
bUpdatePre = false;
|
|||
|
|
bUpdateconfig = false;
|
|||
|
|
bModifyAddr = true;
|
|||
|
|
bSendTimeStamp = false;
|
|||
|
|
modify_LocalAddr(0x8888);
|
|||
|
|
mssleep(10000);
|
|||
|
|
GlobalConfig::Zigbee_G.MyAddr = 0x8888;
|
|||
|
|
}
|
|||
|
|
mssleep(10000);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if(ret > 0){
|
|||
|
|
maxSize += ret;
|
|||
|
|
// print_debug("0x9999===str_recv===,ret = %d offSize = %d,bUpdatePre = %d,bUpdateconfig = %d\n",ret,maxSize,bUpdatePre,bUpdateconfig);
|
|||
|
|
// for(int i = 0; i < ret;i++){
|
|||
|
|
// printf("[%02x]", buff[i]&0xff);
|
|||
|
|
// }
|
|||
|
|
//print_debug("maxSize = %d\n",maxSize);
|
|||
|
|
//print_debug("\n");
|
|||
|
|
timeoutflag = 0;
|
|||
|
|
|
|||
|
|
if((bUpdatePre || bUpdateconfig))
|
|||
|
|
{
|
|||
|
|
for(int i = 0; i < ret;i++){
|
|||
|
|
printf("%02x ", buff[i]&0xff);
|
|||
|
|
}
|
|||
|
|
//print_debug("maxSize111 = %d\n",maxSize);
|
|||
|
|
// string strTime = GetLocalTimeWithMs();
|
|||
|
|
// LOG_INFO("str_recv strTime1 = %s\n",strTime.c_str());
|
|||
|
|
FindRecvPackage(ret,buff,head);
|
|||
|
|
// ReadHandle(buff,ret);
|
|||
|
|
// strTime = GetLocalTimeWithMs();
|
|||
|
|
// LOG_INFO("str_recv strTime2 = %s\n",strTime.c_str());
|
|||
|
|
}else{
|
|||
|
|
m_TimeStamp = 0;
|
|||
|
|
memcpy(mUartRecvTmpBuf + offSize,buff,ret);
|
|||
|
|
offSize = offSize + ret;
|
|||
|
|
if(offSize > BUF_LENGTH * 15){
|
|||
|
|
LOG_INFO("maxSize = %d\n",offSize);
|
|||
|
|
memset(mUartRecvTmpBuf,0,BUF_LENGTH);
|
|||
|
|
timeoutflag = 0;
|
|||
|
|
offSize = 0;
|
|||
|
|
maxSize = 0;
|
|||
|
|
tcflush(fd,TCIOFLUSH);
|
|||
|
|
bModifyAddr = true;
|
|||
|
|
modify_LocalAddr(0x8888);
|
|||
|
|
GlobalConfig::Zigbee_G.MyAddr = 0x8888;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = NO_ENTER_TRANSMITTING_STATUS;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
|||
|
|
}
|
|||
|
|
//print_debug("offSize = %d\n",offSize);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}else if((unsigned short)GlobalConfig::Zigbee_G.MyAddr == 0x8888){
|
|||
|
|
#ifdef IMX6UL_GATEWAY
|
|||
|
|
memset(buff, 0, sizeof(buff));
|
|||
|
|
ret = read_data(fd, buff, BUF_LENGTH, 50);
|
|||
|
|
if (ret <= 0){
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
if (srcshow) {
|
|||
|
|
print_info("0x8888 ===str_recv===,ret = %d\n",ret);
|
|||
|
|
for(int i = 0; i < ret;i++){
|
|||
|
|
print_debug("[%02x]", buff[i]&0xff);
|
|||
|
|
}
|
|||
|
|
printf("\n");
|
|||
|
|
FindRecvPackage(ret, buff,head);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
#else if G2UL_GATEWAY
|
|||
|
|
memset(buff, 0x00, sizeof(buff));
|
|||
|
|
ret = read_data(fd, buff, BUF_LENGTH, 50);
|
|||
|
|
if (ret <= 0 ){
|
|||
|
|
timeoutflag ++;
|
|||
|
|
if(timeoutflag > 5){
|
|||
|
|
|
|||
|
|
FindRecvPackage(offSize, szbuffer,(char*)head);
|
|||
|
|
memset(szbuffer,0x00,sizeof(szbuffer));
|
|||
|
|
timeoutflag = 0;
|
|||
|
|
offSize = 0;
|
|||
|
|
maxSize = 0;
|
|||
|
|
mssleep(10000);
|
|||
|
|
}
|
|||
|
|
}else if(ret > 0){
|
|||
|
|
maxSize += ret;
|
|||
|
|
print_debug("0x8888==str_recv===,ret = %d offSize = %d\n",ret,maxSize);
|
|||
|
|
for(int i = 0; i < ret;i++){
|
|||
|
|
print_debug("%02x ", buff[i]&0xff);
|
|||
|
|
}
|
|||
|
|
print_debug("\n");
|
|||
|
|
timeoutflag = 0;
|
|||
|
|
m_TimeStamp = 0;
|
|||
|
|
memcpy(szbuffer + offSize,buff,ret);
|
|||
|
|
offSize = offSize + ret;
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
//mssleep(50);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
Uart::Uart():mUart(mIoSev),mStrand(mIoSev)
|
|||
|
|
{
|
|||
|
|
mRdLength = 0;
|
|||
|
|
m_TimeStamp = 0;
|
|||
|
|
mlastSize = 0;
|
|||
|
|
fd = 0;
|
|||
|
|
waittime = 0;
|
|||
|
|
mPackgeIndex = -1;
|
|||
|
|
bUpdate = false;
|
|||
|
|
m_strDestShortAddr = "";
|
|||
|
|
memset(mUartRecvBuf,0,BUF_LENGTH);
|
|||
|
|
memset(mUartRecvTmpBuf,0,BUF_LENGTH);
|
|||
|
|
bTest = false;
|
|||
|
|
TestFd = 0;
|
|||
|
|
DataNodeUpdateFile = "";
|
|||
|
|
strTimetamp = "";
|
|||
|
|
bZigbeeSinal = false;
|
|||
|
|
bModifyAddr = false;
|
|||
|
|
bUpdatePre = false;
|
|||
|
|
bSendTimeStamp = false;
|
|||
|
|
m_waveCountX = 0;
|
|||
|
|
m_waveCountY = 0;
|
|||
|
|
m_waveCountZ = 0;
|
|||
|
|
VecWaveDataX.reserve(300000);
|
|||
|
|
VecWaveDataY.reserve(300000);
|
|||
|
|
VecWaveDataZ.reserve (500000);
|
|||
|
|
}
|
|||
|
|
Uart::~Uart()
|
|||
|
|
{
|
|||
|
|
close(fd);
|
|||
|
|
close(TestFd);
|
|||
|
|
if (mUart.is_open())
|
|||
|
|
mUart.close();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::openSwitch()
|
|||
|
|
{
|
|||
|
|
char buffer[100]={0x00};
|
|||
|
|
int len;
|
|||
|
|
int fdSwitch = config_uart("/dev/ttymxc1",B38400);
|
|||
|
|
char strSend[8]={0x01,0x06,0x00,0x00,0x00,0x00,0x89,0xCA};
|
|||
|
|
len = write_data(fdSwitch,(char*)strSend,8);
|
|||
|
|
sleep(1);
|
|||
|
|
len = read_data(fdSwitch,(char*)buffer,100,10);
|
|||
|
|
for ( int i = 0; i < len; i++)
|
|||
|
|
print_debug("%02X ",buffer[i]&0xFF);
|
|||
|
|
char strSend2[8]={0x01,0x06,0x00,0x00,0x00,0x01,0x48,0x0A};
|
|||
|
|
len = write_data(fdSwitch,(char*)strSend2,8);
|
|||
|
|
sleep(1);
|
|||
|
|
len = read_data(fdSwitch,(char*)buffer,100,10);
|
|||
|
|
for ( int i = 0; i < len; i++)
|
|||
|
|
print_debug("%02X ",buffer[i]&0xFF);
|
|||
|
|
close(fdSwitch);
|
|||
|
|
}
|
|||
|
|
void Uart::InitUart(speed_t speed)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
#ifdef G2UL_GATEWAY
|
|||
|
|
fd = config_uart("/dev/ttySC2",speed);
|
|||
|
|
#endif
|
|||
|
|
#ifdef IMX6UL_GATEWAY
|
|||
|
|
fd = config_uart("/dev/ttymxc4",speed);
|
|||
|
|
#endif
|
|||
|
|
print_info("InitUart fd = %d\n",fd);
|
|||
|
|
if(fd < 0){
|
|||
|
|
printf("config_uart error\n");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
void Uart::Close()
|
|||
|
|
{
|
|||
|
|
close(fd);
|
|||
|
|
fd = 0;
|
|||
|
|
}
|
|||
|
|
void Uart::InitZigbee()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
InitUart(B115200);
|
|||
|
|
UpdateZigbeeInfoCtrl();
|
|||
|
|
sleep(2);
|
|||
|
|
int iRet = ReadFromUart();
|
|||
|
|
if(iRet <= 0)
|
|||
|
|
{
|
|||
|
|
Close();
|
|||
|
|
sleep(2);
|
|||
|
|
print_info("Speed error\n");
|
|||
|
|
InitUart(B57600);
|
|||
|
|
UpdateZigbeeInfoCtrl();
|
|||
|
|
sleep(2);
|
|||
|
|
ReadFromUart();
|
|||
|
|
print_info("modify speed\n");
|
|||
|
|
WriteSpeed2Zigbee();
|
|||
|
|
ReadFromUart();
|
|||
|
|
}
|
|||
|
|
Close();
|
|||
|
|
sleep(1);
|
|||
|
|
}
|
|||
|
|
void TestRecv(int status)
|
|||
|
|
{
|
|||
|
|
char szStatus[10]={0x00};
|
|||
|
|
sprintf(szStatus,"%d",status);
|
|||
|
|
write_data(pUart->TestFd,(char*)szStatus,strlen(szStatus));
|
|||
|
|
}
|
|||
|
|
void Regist(pTestRecvCallBack pTestRecv1){
|
|||
|
|
pTestRecv = pTestRecv1;
|
|||
|
|
}
|
|||
|
|
void Uart::InitTestUart(speed_t speed)
|
|||
|
|
{
|
|||
|
|
print_info("InitTestUart\n");
|
|||
|
|
TestFd = config_uart("/dev/ttymxc2",speed);//Test
|
|||
|
|
if(TestFd < 0){
|
|||
|
|
printf("Test config_uart error\n");
|
|||
|
|
}
|
|||
|
|
Regist(TestRecv);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::ReadTestUart()
|
|||
|
|
{
|
|||
|
|
char buff[BUF_LENGTH] = {0x00};
|
|||
|
|
print_info("ReadTestUart\n");
|
|||
|
|
while(1){
|
|||
|
|
int ret = read_data(TestFd, buff, BUF_LENGTH, 10);
|
|||
|
|
if(ret > 0){
|
|||
|
|
print_info("buff = %s\n",buff);
|
|||
|
|
if(!strcmp(buff,"0")){
|
|||
|
|
|
|||
|
|
char buf[256] = {0};
|
|||
|
|
sprintf(buf, "{\"dataNodeGatewayNo\":\"%s\",\"cmd\":\"12\",\"status\":\"REQ\"}",
|
|||
|
|
GlobalConfig::MacAddr_G.c_str());
|
|||
|
|
std::string str = std::string(buf);
|
|||
|
|
int iRet = data_publish(str.c_str(), GlobalConfig::Topic_G.mPubCmd.c_str());
|
|||
|
|
if(iRet < 0){
|
|||
|
|
pTestRecv(1);
|
|||
|
|
}else{
|
|||
|
|
pTestRecv(0);
|
|||
|
|
}
|
|||
|
|
iRet = ZigbeeTest();
|
|||
|
|
}else if(!strcmp(buff,"1")){
|
|||
|
|
string IP = GetGwIp_("eth0");
|
|||
|
|
write_data(TestFd,(char*)IP.c_str(),IP.size());
|
|||
|
|
IP = GetGwIp_("eth1");
|
|||
|
|
write_data(TestFd,(char*)"|",1);
|
|||
|
|
write_data(TestFd,(char*)IP.c_str(),IP.size());
|
|||
|
|
write_data(TestFd,(char*)"|",1);
|
|||
|
|
}else{
|
|||
|
|
ModifyMac(buff);
|
|||
|
|
pTestRecv(0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
mssleep(20000);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int Uart::ZigbeeTest()
|
|||
|
|
{
|
|||
|
|
char buff[BUF_LENGTH] = {0x00};
|
|||
|
|
modify_Localchannel(22);
|
|||
|
|
mssleep(100000);
|
|||
|
|
|
|||
|
|
modify_LocalPanID(2222);
|
|||
|
|
|
|||
|
|
mssleep(100000);
|
|||
|
|
modify_LocalAddr(6666);
|
|||
|
|
|
|||
|
|
mssleep(100000);
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::WriteToUart(const char *strSend,int pLen)
|
|||
|
|
{
|
|||
|
|
//#ifdef ZIGBEE_TEST
|
|||
|
|
if(!bUpdate){
|
|||
|
|
print_debug("Write To Uart Start:\n");
|
|||
|
|
for(int i=0; i<pLen ; i++){
|
|||
|
|
print_debug("%02X ", *(strSend+i) & 0xFF);
|
|||
|
|
}
|
|||
|
|
print_debug("\nWrite To Uart End.\n");
|
|||
|
|
}
|
|||
|
|
//#endif
|
|||
|
|
/* if (mUart.is_open()) {
|
|||
|
|
mUart.async_write_some(buffer(strSend,pLen),
|
|||
|
|
mStrand.wrap(
|
|||
|
|
boost::bind(&Uart::WriteHandle,this,strSend,
|
|||
|
|
boost::asio::placeholders::error,
|
|||
|
|
boost::asio::placeholders::bytes_transferred))
|
|||
|
|
);
|
|||
|
|
}*/
|
|||
|
|
int len = write_data(fd,(char*)strSend,pLen);
|
|||
|
|
// printf("len = %d\n",len);
|
|||
|
|
// ReadFromUart();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int Uart::ReadFromUart()
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
/* if (mUart.is_open()) {
|
|||
|
|
print_info("async_read_some,wait......................................\n");
|
|||
|
|
mUart.async_read_some(buffer(&mUartRecvBuf[mRdLength], BUF_LENGTH-mRdLength-offSize),
|
|||
|
|
mStrand.wrap(
|
|||
|
|
boost::bind(&Uart::ReadHandle,this,
|
|||
|
|
boost::asio::placeholders::error,
|
|||
|
|
boost::asio::placeholders::bytes_transferred))
|
|||
|
|
);
|
|||
|
|
}*/
|
|||
|
|
char buffer[100]={0x00};
|
|||
|
|
int len = read_data(fd,(char*)buffer,100,10);
|
|||
|
|
for ( int i = 0; i < len; i++)
|
|||
|
|
print_debug("%02X ",buffer[i]&0xFF);
|
|||
|
|
print_info("\n");
|
|||
|
|
print_info("==========ReadFromUart========len = %d\n",len);
|
|||
|
|
|
|||
|
|
if(len){
|
|||
|
|
char head[] = {0xAA,0x55,0xAA};
|
|||
|
|
FindRecvPackage(len, buffer,head);
|
|||
|
|
}
|
|||
|
|
return len;
|
|||
|
|
/*if(len > 0){
|
|||
|
|
ReadHandle(buffer,len);
|
|||
|
|
}*/
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::Run()
|
|||
|
|
{
|
|||
|
|
mIoSev.run();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::Stop()
|
|||
|
|
{
|
|||
|
|
if (mUart.is_open())
|
|||
|
|
mUart.close();
|
|||
|
|
mIoSev.stop();
|
|||
|
|
}
|
|||
|
|
int Uart::FindRecvPackage(int bytesRead, char* mUartRecvBuf,char* head)
|
|||
|
|
{
|
|||
|
|
string strTime = GetLocalTimeWithMs();
|
|||
|
|
char head1[] = {0xAB,0xBC,0xCD};
|
|||
|
|
char head2[] = {0xDE,0xDF,0xEF};
|
|||
|
|
|
|||
|
|
//LOG_INFO("m_VecWaveData= %d\n",m_VecWaveData.size());
|
|||
|
|
int lastSize = 0;
|
|||
|
|
char UartRecvBuf[BUF_LENGTH*15]={0x00};
|
|||
|
|
char RecvBuf[200] = {0x00};
|
|||
|
|
if(mlastSize > 0){
|
|||
|
|
print_info("mlastSize = %d\n",mlastSize);
|
|||
|
|
memcpy(UartRecvBuf,mUartRecvTmpBuf,mlastSize);
|
|||
|
|
for(int i = 0; i < mlastSize;i++){
|
|||
|
|
print_info("%02x ",UartRecvBuf[i]);
|
|||
|
|
}
|
|||
|
|
print_info("\n ");
|
|||
|
|
memset(mUartRecvTmpBuf,0x00,sizeof(mUartRecvTmpBuf));
|
|||
|
|
}
|
|||
|
|
memcpy(UartRecvBuf + mlastSize,mUartRecvBuf,bytesRead);
|
|||
|
|
// for(int i = 0 ; i < bytesRead;i++){
|
|||
|
|
// if(!(i % 100))
|
|||
|
|
// printf("\n");
|
|||
|
|
// printf("%02x ",mUartRecvBuf[i]);
|
|||
|
|
// }
|
|||
|
|
bytesRead = bytesRead + mlastSize;
|
|||
|
|
for(int i = 0; i < bytesRead;i++){
|
|||
|
|
if(UartRecvBuf[i] == head[0]){
|
|||
|
|
char buf[6]={0x00};
|
|||
|
|
char ShortAddr[8]={0x00};
|
|||
|
|
sprintf(&buf[0], "%02X", UartRecvBuf[i]&0xFF);
|
|||
|
|
sprintf(&buf[2], "%02X", UartRecvBuf[i+1]&0xFF);
|
|||
|
|
sprintf(&buf[4], "%02X", UartRecvBuf[i+2]&0xFF);
|
|||
|
|
sprintf(ShortAddr, "%02x%02x", UartRecvBuf[i+3]&0xFF, UartRecvBuf[i+4]&0xFF);
|
|||
|
|
std::string strShortAddr(ShortAddr);
|
|||
|
|
std::string strHeadFlag(buf);
|
|||
|
|
if ( 0 == strHeadFlag.compare("AA55AA")) {
|
|||
|
|
char buf[8]={0x00};
|
|||
|
|
sprintf(buf, "%02d", UartRecvBuf[i+5]&0xFF);
|
|||
|
|
int command = atoi(buf);
|
|||
|
|
//print_info("command = %d\n",command);
|
|||
|
|
//print_info("index = %d\n",UartRecvBuf[i+6]&0xFF);
|
|||
|
|
//print_info("mPackgeIndex1 = %d\n",mPackgeIndex);
|
|||
|
|
if((mPackgeIndex == -1 || (unsigned int)UartRecvBuf[i+6] == 0) && (!bUpdatePre && !bUpdateconfig)){
|
|||
|
|
//print_info("mPackgeIndex2 = %d\n",mPackgeIndex);
|
|||
|
|
mPackgeIndex = UartRecvBuf[i+6]&0xFF;
|
|||
|
|
}else if((unsigned int)mPackgeIndex == (unsigned int)UartRecvBuf[i+6] &&
|
|||
|
|
mPackgeIndex != -1 && (!bUpdatePre && !bUpdateconfig) && command != 2){
|
|||
|
|
LOG_ERROR("mPackgeIndex same index1:%d,index2:%02d ShortAddr :%s \n",\
|
|||
|
|
mPackgeIndex,UartRecvBuf[i+6]&0xff,strShortAddr.c_str());
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
}else if((unsigned int)mPackgeIndex + 1 != (unsigned int)UartRecvBuf[i+6] &&
|
|||
|
|
mPackgeIndex != -1 && (!bUpdatePre && !bUpdateconfig) && command != 2){
|
|||
|
|
m_TimeStamp = 0;
|
|||
|
|
//print_info("mPackgeIndex3 = %d\n",mPackgeIndex);
|
|||
|
|
LOG_ERROR("mPackgeIndex error index1:%d,index2:%02d ShortAddr :%s \n",\
|
|||
|
|
mPackgeIndex,UartRecvBuf[i+6]&0xff,strShortAddr.c_str());
|
|||
|
|
mPackgeIndex = -1;
|
|||
|
|
print_error("mPackgeIndex error ShortAddr :%s \n",strShortAddr.c_str());
|
|||
|
|
|
|||
|
|
char tmp[10]={0x00};
|
|||
|
|
char tmp2[10]={0x00};
|
|||
|
|
for(int j = 0; j < 100;j++){
|
|||
|
|
sprintf(tmp,"%02x ",UartRecvBuf[i + j] & 0xff);
|
|||
|
|
strcat(tmp2,tmp);
|
|||
|
|
}
|
|||
|
|
LOG_ERROR("error str = %s\n",tmp2);
|
|||
|
|
GlobalConfig::Zigbee_G.MyAddr = 0x8888;
|
|||
|
|
tcflush(fd,TCIOFLUSH);
|
|||
|
|
sleep(1);
|
|||
|
|
modify_LocalAddr(0x8888);
|
|||
|
|
sleep(1);
|
|||
|
|
bModifyAddr = true;
|
|||
|
|
bSendTimeStamp = false;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = NO_ENTER_TRANSMITTING_STATUS;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
|||
|
|
//std::vector<RecvData>().swap(m_VecWaveData);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(command == 32){
|
|||
|
|
LOG_INFO("bUpdatepackge command = %d ShortAddr :%s\n",command,strShortAddr.c_str());
|
|||
|
|
memcpy(RecvBuf,(char*)&UartRecvBuf[i],12);
|
|||
|
|
//for(int j = i; j < i+12;j++){
|
|||
|
|
// print_info("%02X ",UartRecvBuf[j]&0xFF);
|
|||
|
|
//}
|
|||
|
|
|
|||
|
|
if(!CheckCrc(RecvBuf,11)){
|
|||
|
|
LOG_INFO("CheckCrc error command 20 \n");
|
|||
|
|
mPackgeIndex = -1;
|
|||
|
|
GlobalConfig::Zigbee_G.MyAddr = 0x8888;
|
|||
|
|
tcflush(fd,TCIOFLUSH);
|
|||
|
|
sleep(1);
|
|||
|
|
modify_LocalAddr(0x8888);
|
|||
|
|
sleep(1);
|
|||
|
|
bModifyAddr = true;
|
|||
|
|
bSendTimeStamp = false;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = NO_ENTER_TRANSMITTING_STATUS;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
bUpdate = true;
|
|||
|
|
m_TimeStamp = 0;
|
|||
|
|
DealRecvData(RecvBuf);
|
|||
|
|
break;
|
|||
|
|
}else if(!bUpdatePre && !bUpdateconfig && (command == 3 || command == 4 || command == 5)){
|
|||
|
|
if(!CheckCrc(&UartRecvBuf[i],99)){
|
|||
|
|
m_TimeStamp = 0;
|
|||
|
|
mPackgeIndex = -1;
|
|||
|
|
LOG_INFO("CheckCrc error ShortAddr :%s command = %d\n",strShortAddr.c_str(),command);
|
|||
|
|
print_error("CheckCrc error ShortAddr :%s \n",strShortAddr.c_str());
|
|||
|
|
char tmp[10]={0x00};
|
|||
|
|
char tmp2[10]={0x00};
|
|||
|
|
for(int j = 0; j < 100;j++){
|
|||
|
|
sprintf(tmp,"%02x ",UartRecvBuf[i + j] & 0xff);
|
|||
|
|
strcat(tmp2,tmp);
|
|||
|
|
}
|
|||
|
|
LOG_ERROR("error str = %s\n",tmp2);
|
|||
|
|
print_info("\n");
|
|||
|
|
GlobalConfig::Zigbee_G.MyAddr = 0x8888;
|
|||
|
|
tcflush(fd,TCIOFLUSH);
|
|||
|
|
sleep(1);
|
|||
|
|
modify_LocalAddr(0x8888);
|
|||
|
|
bModifyAddr = true;
|
|||
|
|
sleep(1);
|
|||
|
|
bSendTimeStamp = false;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = NO_ENTER_TRANSMITTING_STATUS;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
|||
|
|
m_waveCountX = 0;
|
|||
|
|
m_waveCountY = 0;
|
|||
|
|
m_waveCountZ = 0;
|
|||
|
|
g_VecWaveDataX.clear();
|
|||
|
|
g_VecWaveDataY.clear();
|
|||
|
|
g_VecWaveDataZ.clear();
|
|||
|
|
//std::vector<RecvData>().swap(m_VecWaveData);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
mlastSize = 0;
|
|||
|
|
lastSize = bytesRead - i;
|
|||
|
|
//print_info("laseSize = %d , i = %d\n",lastSize,i);
|
|||
|
|
if(lastSize < 100 && lastSize > 0){
|
|||
|
|
memcpy(mUartRecvTmpBuf,(char*)&UartRecvBuf[bytesRead-lastSize],lastSize);
|
|||
|
|
mlastSize = lastSize;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
memcpy(RecvBuf,(char*)&UartRecvBuf[i],100);
|
|||
|
|
DealDataNodeWave(RecvBuf,command);
|
|||
|
|
}else if(!bUpdate && !bUpdateconfig && (command == 1 || command == 2 || command == 6 || command == 7)){
|
|||
|
|
char RecvBuf[100] = {0x00};
|
|||
|
|
memcpy(RecvBuf,&UartRecvBuf[i],100);
|
|||
|
|
if(!CheckCrc(RecvBuf,99)){
|
|||
|
|
LOG_INFO("CheckCrc error ShortAddr :%s command = %d \n",strShortAddr.c_str(),command);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
DealRecvData(RecvBuf);
|
|||
|
|
|
|||
|
|
}else if(bUpdate && !bUpdateconfig && (command == 1 || command == 2 || command == 6 || command == 7)){
|
|||
|
|
|
|||
|
|
print_info("m_strDestShortAddr = %s,strShortAddr = %s,waittime = %d\n",\
|
|||
|
|
m_strDestShortAddr.c_str(),strShortAddr.c_str(),waittime);
|
|||
|
|
//if(waittime >= 2 || m_strDestShortAddr == strShortAddr)
|
|||
|
|
{
|
|||
|
|
char RecvBuf[100] = {0x00};
|
|||
|
|
memcpy(RecvBuf,&UartRecvBuf[i],100);
|
|||
|
|
DealRecvData(RecvBuf);
|
|||
|
|
LOG_INFO("Online = %s,command = %d\n",strShortAddr.c_str(),command);
|
|||
|
|
waittime = 0;
|
|||
|
|
bUpdate = false;
|
|||
|
|
bUpdatePre = false;
|
|||
|
|
m_strDestShortAddr = "";
|
|||
|
|
GlobalConfig::Zigbee_G.MyAddr = 0x8888;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = NO_ENTER_TRANSMITTING_STATUS;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
|||
|
|
//break;
|
|||
|
|
}/*else if(m_strDestShortAddr != strShortAddr){
|
|||
|
|
mssleep(100000);
|
|||
|
|
waittime ++;
|
|||
|
|
}*/
|
|||
|
|
|
|||
|
|
}else if(command == 34 && bUpdateconfig){
|
|||
|
|
LOG_INFO("bUpdateconfig command = %d ShortAddr :%s\n",command,strShortAddr.c_str());
|
|||
|
|
memset(RecvBuf,0x00,sizeof(RecvBuf));
|
|||
|
|
print_info("bUpdateconfig ShortAddr :%s\n",strShortAddr.c_str());
|
|||
|
|
//memcpy(RecvBuf,(char*)&UartRecvBuf[i],100);
|
|||
|
|
/*for(int j = i; j < i+100;j++){
|
|||
|
|
print_info("%02X ",UartRecvBuf[j]&0xFF);
|
|||
|
|
}*/
|
|||
|
|
m_TimeStamp = 0;
|
|||
|
|
//if(!CheckCrc((char*)&UartRecvBuf[i],99))
|
|||
|
|
{
|
|||
|
|
char whereCon[1024] = {0};
|
|||
|
|
char updateSql[1024] = { 0 };
|
|||
|
|
char buf[20]={0x00};
|
|||
|
|
sprintf(buf, "%02x%02x", UartRecvBuf[i+3]&0xFF, UartRecvBuf[i+4]&0xFF);//Zigbee 本地地址 2 byte
|
|||
|
|
sprintf(updateSql, "UpdateFlag = UpdateFlag + 1");
|
|||
|
|
sprintf(whereCon, "zigbeeShortAddr='%s'", buf);
|
|||
|
|
sql_ctl->UpdateTableData(T_SENSOR_INFO(TNAME), updateSql, whereCon);
|
|||
|
|
//string strData = sql_ctl->GetNodeConfigureInfor(whereCon);
|
|||
|
|
//data_publish(strData.c_str(), GlobalConfig::Topic_G.mPubConfig.c_str());
|
|||
|
|
GlobalConfig::Zigbee_G.MyAddr = 0x8888;
|
|||
|
|
bUpdateconfig = false;
|
|||
|
|
mPackgeIndex = -1;
|
|||
|
|
tcflush(fd,TCIOFLUSH);
|
|||
|
|
sleep(1);
|
|||
|
|
modify_LocalAddr(0x8888);
|
|||
|
|
bModifyAddr = true;
|
|||
|
|
bSendTimeStamp = false;
|
|||
|
|
sleep(1);
|
|||
|
|
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = NO_ENTER_TRANSMITTING_STATUS;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}else if(command == 35){
|
|||
|
|
//LOG_INFO("command = %d ShortAddr :%s,Timetamp=%s\n",command,strShortAddr.c_str(),strTimetamp.c_str());
|
|||
|
|
// for(int j = i; j < i+100;j++){
|
|||
|
|
// printf("%02X ",UartRecvBuf[j]&0xFF);
|
|||
|
|
// }
|
|||
|
|
char signalNode[10]={0x00};
|
|||
|
|
sprintf(signalNode,"%02d",UartRecvBuf[i+14]&0xFF);
|
|||
|
|
if(!strcmp(signalNode,"00") || !strcmp(signalNode,"0")){
|
|||
|
|
char errorInfo[100]={0x00};
|
|||
|
|
sprintf(errorInfo,"未检测到信号!%s",signalNode);
|
|||
|
|
LOG_ERROR(errorInfo);
|
|||
|
|
}else{
|
|||
|
|
char whereCon[1024] = {0};
|
|||
|
|
char updateSql[1024] = { 0 };
|
|||
|
|
char tableName[100]={0x00};
|
|||
|
|
sprintf(whereCon, "zigbeeShortAddr='%s'", strShortAddr.c_str());
|
|||
|
|
vec_t vecDataNodeNo = sql_ctl->GetDataSingleLine(T_SENSOR_INFO(TNAME), " dataNodeNo,RSSI ", whereCon);
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
sprintf(updateSql, "zigbeeSignalNode = '%02d' ",UartRecvBuf[i+14]&0xFF);//zigbeeRSSIType = 0 传感器获取网关信号强度
|
|||
|
|
sprintf(whereCon, "dataNodeNo='%s' and timeStamp = '%s'", (char*)vecDataNodeNo[0].c_str(),strTimetamp.c_str());
|
|||
|
|
sprintf(tableName,"t_dataStatic_%s",(char*)vecDataNodeNo[0].c_str());
|
|||
|
|
sql_ctl->UpdateTableData(tableName, updateSql, whereCon);
|
|||
|
|
|
|||
|
|
vector<string> vParamRSSI;
|
|||
|
|
boost::split( vParamRSSI, vecDataNodeNo[1], boost::is_any_of( "," ), boost::token_compress_on );
|
|||
|
|
if(vParamRSSI.size() > 0){
|
|||
|
|
sprintf(updateSql, "RSSI = '%s,%02d' ",vParamRSSI[0].c_str(),UartRecvBuf[i+14]&0xFF);
|
|||
|
|
//LOG_INFO(updateSql);
|
|||
|
|
sprintf(whereCon, "dataNodeNo='%s'", (char*)vecDataNodeNo[0].c_str());
|
|||
|
|
sql_ctl->UpdateTableData(T_SENSOR_INFO(TNAME), updateSql, whereCon);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
mPackgeIndex = (unsigned int)UartRecvBuf[i+6];
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else{
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
}else if(UartRecvBuf[i] == head1[0]){
|
|||
|
|
char buf[6]={0x00};
|
|||
|
|
sprintf(&buf[0], "%02X", UartRecvBuf[i]&0xFF);
|
|||
|
|
sprintf(&buf[2], "%02X", UartRecvBuf[i+1]&0xFF);
|
|||
|
|
sprintf(&buf[4], "%02X", UartRecvBuf[i+2]&0xFF);
|
|||
|
|
std::string strHeadFlag(buf);
|
|||
|
|
if ( 0 == strHeadFlag.compare("ABBCCD")) {
|
|||
|
|
char buf[8]={0x00};
|
|||
|
|
sprintf(buf, "%02d", UartRecvBuf[i+3]&0xFF);
|
|||
|
|
int command = atoi(buf);
|
|||
|
|
print_info("command = %d\n",command);
|
|||
|
|
if(command == 209){
|
|||
|
|
UpdateZigbeeInfo(&UartRecvBuf[i]);
|
|||
|
|
}else if(command == 220){//DC
|
|||
|
|
bModifyAddr = false;
|
|||
|
|
LOG_INFO("zigbeeShortAddr = %s , ret = %02d\n",m_strDestShortAddr.c_str(),UartRecvBuf[i+6]&0xFF);
|
|||
|
|
if(UartRecvBuf[i+6]&0xFF != 00){
|
|||
|
|
modify_LocalAddr(0x8888);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}else if(UartRecvBuf[i] == head2[0]){
|
|||
|
|
char buf[6]={0x00};
|
|||
|
|
sprintf(&buf[0], "%02X", UartRecvBuf[i]&0xFF);
|
|||
|
|
sprintf(&buf[2], "%02X", UartRecvBuf[i+1]&0xFF);
|
|||
|
|
sprintf(&buf[4], "%02X", UartRecvBuf[i+2]&0xFF);
|
|||
|
|
std::string strHeadFlag(buf);
|
|||
|
|
if ( 0 == strHeadFlag.compare("DEDFEF")) {
|
|||
|
|
char buf[8]={0x00};
|
|||
|
|
sprintf(buf, "%02d", UartRecvBuf[i+3]&0xFF);
|
|||
|
|
int command = atoi(buf);
|
|||
|
|
print_info("command = %d\n",command);
|
|||
|
|
char tmp[16] = {0x00};
|
|||
|
|
if(command == 209){//D1
|
|||
|
|
pTestRecv(command);
|
|||
|
|
}else if(command == 219){//DB
|
|||
|
|
pTestRecv(command);
|
|||
|
|
}else if(command == 220){//DC
|
|||
|
|
bModifyAddr = false;
|
|||
|
|
print_info("%02x,%02x,%02x,%02x,%02x \n",UartRecvBuf[i],UartRecvBuf[i+1],UartRecvBuf[i+2],UartRecvBuf[i+3],UartRecvBuf[i+4]);
|
|||
|
|
LOG_INFO("zigbeeShortAddr = %s , ret = %02d\n",m_strDestShortAddr.c_str(),UartRecvBuf[i+4]&0xFF);
|
|||
|
|
|
|||
|
|
//pTestRecv(command);
|
|||
|
|
}else if(command == 218){//DA
|
|||
|
|
//LOG_INFO("command = %d,zigbeeShortAddr = %s , signal = %02d,strTimetamp = %s\n",command,m_strDestShortAddr.c_str(),UartRecvBuf[i+6]&0xFF,strTimetamp.c_str());
|
|||
|
|
char whereCon[1024] = {0};
|
|||
|
|
char updateSql[1024] = { 0 };
|
|||
|
|
char tableName[100]={0x00};
|
|||
|
|
bZigbeeSinal = false;
|
|||
|
|
sprintf(whereCon, "zigbeeShortAddr='%s'", m_strDestShortAddr.c_str());
|
|||
|
|
vec_t vecDataNodeNo = sql_ctl->GetDataSingleLine(T_SENSOR_INFO(TNAME), " dataNodeNo,LooseValue,RSSI ", whereCon);
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
sprintf(updateSql, "zigbeeSignal = '%02d' ",UartRecvBuf[i+6]&0xFF);//zigbeeRSSIType = 1 网关获取传感器信号强度
|
|||
|
|
sprintf(whereCon, "dataNodeNo='%s' and timeStamp = '%s'", (char*)vecDataNodeNo[0].c_str(),strTimetamp.c_str());
|
|||
|
|
sprintf(tableName,"t_dataStatic_%s",(char*)vecDataNodeNo[0].c_str());
|
|||
|
|
sql_ctl->UpdateTableData(tableName, updateSql, whereCon);
|
|||
|
|
Json::Value jsBody,jsonVal;
|
|||
|
|
Json::FastWriter showValue;
|
|||
|
|
char looseValue[10]={0x00};
|
|||
|
|
readStringValue("config", "loose",looseValue,(char*)GlobalConfig::Config_G.c_str());
|
|||
|
|
if(atof(looseValue) < atof(vecDataNodeNo[1].c_str())){
|
|||
|
|
jsBody["looseStatus"] = "1";
|
|||
|
|
}else{
|
|||
|
|
jsBody["looseStatus"] = "0";
|
|||
|
|
}
|
|||
|
|
vector<string> vParamRSSI;
|
|||
|
|
boost::split( vParamRSSI, vecDataNodeNo[2], boost::is_any_of( "," ), boost::token_compress_on );
|
|||
|
|
if(vParamRSSI.size() == 1){
|
|||
|
|
sprintf(updateSql, "RSSI = '%02d,%s' ",UartRecvBuf[i+6]&0xFF,vParamRSSI[0].c_str());
|
|||
|
|
//LOG_INFO(updateSql);
|
|||
|
|
|
|||
|
|
}else if(vParamRSSI.size() == 2){
|
|||
|
|
sprintf(updateSql, "RSSI = '%02d,%s' ",UartRecvBuf[i+6]&0xFF,vParamRSSI[1].c_str());
|
|||
|
|
//LOG_INFO(updateSql);
|
|||
|
|
}
|
|||
|
|
sprintf(whereCon, "dataNodeNo='%s'", (char*)vecDataNodeNo[0].c_str());
|
|||
|
|
sql_ctl->UpdateTableData(T_SENSOR_INFO(TNAME), updateSql, whereCon);
|
|||
|
|
|
|||
|
|
jsonVal["cmd"] = "52";
|
|||
|
|
jsBody["timeStamp"] = strTimetamp;
|
|||
|
|
jsBody["dataNodeNo"] = vecDataNodeNo[0];
|
|||
|
|
jsBody["zigbeeSignal"] = UartRecvBuf[i+6]&0xFF;
|
|||
|
|
std::string dataBody = showValue.write(jsBody);
|
|||
|
|
jsonVal["cmdBody"] = dataBody;
|
|||
|
|
data_publish(showValue.write(jsonVal).c_str(), GlobalConfig::Topic_G.mPubConfig.c_str());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
strTime = GetLocalTimeWithMs();
|
|||
|
|
// LOG_INFO("findRecvPackage strTime2 = %s\n",strTime.c_str());
|
|||
|
|
}
|
|||
|
|
void Uart::ReadHandle(char* pUartRecvBuf,size_t bytesRead)
|
|||
|
|
{
|
|||
|
|
/*try{
|
|||
|
|
if (ec) {
|
|||
|
|
mRdLength = 0;
|
|||
|
|
ReadFromUart();
|
|||
|
|
return ;
|
|||
|
|
}
|
|||
|
|
else*/
|
|||
|
|
{ //长度检测
|
|||
|
|
char UartRecvBuf[BUF_LENGTH]={0x00};
|
|||
|
|
memcpy(UartRecvBuf,pUartRecvBuf,bytesRead);
|
|||
|
|
print_info("recv uart len in ZigBee short address %4x : %d\n recv uart data:",
|
|||
|
|
(unsigned short)GlobalConfig::Zigbee_G.MyAddr, bytesRead);
|
|||
|
|
// for ( int i = 0; i < bytesRead; i++)
|
|||
|
|
// print_debug("%02X ",mUartRecvBuf[i]&0xFF);
|
|||
|
|
|
|||
|
|
int iPackageSize = bytesRead / 100;
|
|||
|
|
if (0 == iPackageSize) {
|
|||
|
|
iPackageSize = 1;
|
|||
|
|
}
|
|||
|
|
int Count = bytesRead;
|
|||
|
|
/*每次看到这块代码时总感觉不妥,因为bytesRead是100的整数倍时对结果不影响;如果不是,则会造成数据丢失(例如1024时,iPackageSize的值
|
|||
|
|
为10,这样就丢失了24字节的数据)。况且一个传感器与无线网关通信数据量对 无线网关的处理影响不大,但是如果是多个传感器都在和无线网关
|
|||
|
|
通信,数据量处理不好就会产生很大的影响。我的逻辑:利用while循环,条件是判断bytesRead是否大于0,如果条件满足,再取数据包的前3字节,
|
|||
|
|
判断命令码是ABBCCD还是AA55AA,如果是ABBCCD就处理74字节数据,如果是AA55AA就处理100自己数据,此时存放数据的buf减去处理的大小数据,
|
|||
|
|
然后进入下一次while循环。*/
|
|||
|
|
|
|||
|
|
if((unsigned short)GlobalConfig::Zigbee_G.MyAddr == (unsigned short)0x9999){
|
|||
|
|
|
|||
|
|
}else{
|
|||
|
|
for (int j = 0; j < iPackageSize; j++) {
|
|||
|
|
char buf[6];
|
|||
|
|
char mUartRecvPackage[100] = {0};
|
|||
|
|
char ShortAddr[8];
|
|||
|
|
|
|||
|
|
// 多包分包,解包,
|
|||
|
|
if (Count < 100) {
|
|||
|
|
memcpy(mUartRecvPackage, &UartRecvBuf[j * 100], Count);
|
|||
|
|
} else {
|
|||
|
|
memcpy(mUartRecvPackage, &UartRecvBuf[j * 100], 100);
|
|||
|
|
Count = Count - 100;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sprintf(&buf[0], "%02X", mUartRecvPackage[0]&0xFF);
|
|||
|
|
sprintf(&buf[2], "%02X", mUartRecvPackage[1]&0xFF);
|
|||
|
|
sprintf(&buf[4], "%02X", mUartRecvPackage[2]&0xFF);
|
|||
|
|
sprintf(ShortAddr, "%02x%02x", mUartRecvPackage[3]&0xFF, mUartRecvPackage[4]&0xFF);
|
|||
|
|
if(bUpdate){//waitting for the upated node 4s
|
|||
|
|
std::string strShortAddr(ShortAddr);
|
|||
|
|
print_info("m_strDestShortAddr = %s,strShortAddr = %s,waittime = %d\n",m_strDestShortAddr.c_str(),strShortAddr.c_str(),waittime);
|
|||
|
|
if(waittime >= 40 || m_strDestShortAddr == strShortAddr){
|
|||
|
|
LOG_INFO("Online = %s\n",strShortAddr.c_str());
|
|||
|
|
waittime = 0;
|
|||
|
|
bUpdate = false;
|
|||
|
|
m_strDestShortAddr = "";
|
|||
|
|
}else if(m_strDestShortAddr != strShortAddr){
|
|||
|
|
mssleep(100000);
|
|||
|
|
waittime ++;
|
|||
|
|
return ;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
std::string strHeadFlag(buf);
|
|||
|
|
print_info("data package head command type:%s\n", strHeadFlag.c_str());
|
|||
|
|
|
|||
|
|
if ( 0 == strHeadFlag.compare("ABBCCD") && (0xD1 == (mUartRecvPackage[3]&0xFF))) {
|
|||
|
|
UpdateZigbeeInfo(mUartRecvPackage);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ( 0 == strHeadFlag.compare("DEDFEF") ) {
|
|||
|
|
LOG_INFO("ReadHandle flag = %s\n",strHeadFlag.c_str());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ( 0 == strHeadFlag.compare("AA55AA") ) {
|
|||
|
|
DealRecvData(mUartRecvPackage);
|
|||
|
|
}
|
|||
|
|
}}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
/* //读串口循环
|
|||
|
|
ReadFromUart();
|
|||
|
|
} catch(...) {
|
|||
|
|
print_error("PlatFormInit exception happend.\n");
|
|||
|
|
// LOG_ERROR("%s,%d\n", __FUNCTION__, __LINE__);
|
|||
|
|
}*/
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::setCallBack(onReceiveUart _callback)
|
|||
|
|
{
|
|||
|
|
m_callback = _callback;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::DataAnalysis_R(DevDataOfGwid &pData)
|
|||
|
|
{
|
|||
|
|
mLocalTime = boost::posix_time::microsec_clock::local_time();
|
|||
|
|
m_callback(pData);
|
|||
|
|
mLocalTime = boost::posix_time::microsec_clock::local_time();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::WriteHandle(const char *strSend,const boost::system::error_code &ec,size_t bytesWrite)
|
|||
|
|
{
|
|||
|
|
if (ec) {
|
|||
|
|
print_error("Fail To Write Uart! ]\n");
|
|||
|
|
// LOG_ERROR("Fail To Write Uart! ]\n");
|
|||
|
|
} else {
|
|||
|
|
// print_info("[ To Uart ][ Bytes:%d ]\n",bytesWrite);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void Uart::ThreadInit()
|
|||
|
|
{
|
|||
|
|
// SignalInit();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::DataAnalysis_W(DevData &pData,bool pFlag)
|
|||
|
|
{
|
|||
|
|
this->WriteToUart(pData.mData,pData.mLen);
|
|||
|
|
// LOG_INFO("WriteToUart:%s", pData.mDataMing);
|
|||
|
|
boost::this_thread::sleep(boost::posix_time::milliseconds(110));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::UpdateZigbeeInfoCtrl()
|
|||
|
|
{
|
|||
|
|
/* char buf[5] = {0xAB, 0xBC, 0xCD, 0xD1, 0x05};
|
|||
|
|
WriteToUart(buf, 5);
|
|||
|
|
sleep(1);*/
|
|||
|
|
// ReadFromUart();
|
|||
|
|
char command[5]={0x00};
|
|||
|
|
unsigned char command1[100]={0x00};
|
|||
|
|
command[0] = 0xab;
|
|||
|
|
command[1] = 0xbc;
|
|||
|
|
command[2] = 0xcd;
|
|||
|
|
command[3] = 0xd1;
|
|||
|
|
command[4] = 0xaa;
|
|||
|
|
WriteToUart(command,5);
|
|||
|
|
LOG_INFO("UpdateZigbeeInfoCtrl \n");
|
|||
|
|
/*for ( int i = 0; i < 20; i++)
|
|||
|
|
print_info("%02X ",command[i]);
|
|||
|
|
print_info("\n");*/
|
|||
|
|
/*int ret = write_data(fd, (char*)command, 5);
|
|||
|
|
if (ret < 0) {
|
|||
|
|
perror("write");
|
|||
|
|
return ;
|
|||
|
|
}
|
|||
|
|
// sleep(1);
|
|||
|
|
|
|||
|
|
/*ret = read_data(fd, (char *)command1, 100, 10);
|
|||
|
|
printf("ret = %d\n",ret);
|
|||
|
|
if (ret <= 4) {
|
|||
|
|
printf("info get error!\n");
|
|||
|
|
return ;
|
|||
|
|
}
|
|||
|
|
UpdateZigbeeInfo((char*)command1);*/
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::UpdateZigbeeInfo(const char *pData)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
print_info("update gateway zigbee info\n");
|
|||
|
|
GlobalConfig::Zigbee_G = *((ZIGBEE *)pData);
|
|||
|
|
char buff[8];
|
|||
|
|
sprintf(buff, "%02d", pData[36]&0xFF);
|
|||
|
|
GlobalConfig::ZigbeeInfo_G.DevMode = atoi(buff);
|
|||
|
|
|
|||
|
|
memset(buff, 0, 8);
|
|||
|
|
sprintf(buff, "%02d", pData[37]&0xFF);
|
|||
|
|
GlobalConfig::ZigbeeInfo_G.Channel = atoi(buff);
|
|||
|
|
|
|||
|
|
memset(buff, 0, 8);
|
|||
|
|
sprintf(buff, "%02x%02x", pData[38]&0xFF, pData[39]&0xFF);
|
|||
|
|
GlobalConfig::ZigbeeInfo_G.PanID = std::string(buff);
|
|||
|
|
|
|||
|
|
memset(buff, 0, 8);
|
|||
|
|
sprintf(buff, "%02x%02x", pData[40]&0xFF, pData[41]&0xFF);
|
|||
|
|
GlobalConfig::ZigbeeInfo_G.MyAddr = std::string(buff);
|
|||
|
|
|
|||
|
|
|
|||
|
|
memset(buff, 0, 8);
|
|||
|
|
sprintf(buff, "%02x%02x", pData[50]&0xFF, pData[51]&0xFF);
|
|||
|
|
GlobalConfig::ZigbeeInfo_G.DstAddr = std::string(buff);
|
|||
|
|
|
|||
|
|
memset(buff, 0, 8);
|
|||
|
|
sprintf(buff, "%d", pData[62]);
|
|||
|
|
GlobalConfig::ZigbeeInfo_G.RetryNum = std::string(buff);
|
|||
|
|
|
|||
|
|
memset(buff, 0, 8);
|
|||
|
|
sprintf(buff, "%d", pData[63]);
|
|||
|
|
GlobalConfig::ZigbeeInfo_G.TranTimeout = std::string(buff);
|
|||
|
|
|
|||
|
|
LOG_INFO("local zigbee module info Mode : %d Chan : %d PanID : %s MyAddr : %s DstAddr : %s,RetryNum:%s,TranTimeout:%s\n", GlobalConfig::ZigbeeInfo_G.DevMode, GlobalConfig::ZigbeeInfo_G.Channel,
|
|||
|
|
GlobalConfig::ZigbeeInfo_G.PanID.c_str(),GlobalConfig::ZigbeeInfo_G.MyAddr.c_str(), GlobalConfig::ZigbeeInfo_G.DstAddr.c_str(),GlobalConfig::ZigbeeInfo_G.RetryNum.c_str(),GlobalConfig::ZigbeeInfo_G.TranTimeout.c_str());
|
|||
|
|
// if(GlobalConfig::ZigbeeInfo_G.MyAddr != "8888"){
|
|||
|
|
// modify_LocalAddr(0x8888);
|
|||
|
|
//
|
|||
|
|
// LOG_INFO("zigbee Update \n");
|
|||
|
|
// GlobalConfig::ZigbeeInfo_G.MyAddr = "8888";
|
|||
|
|
// }
|
|||
|
|
LOG_INFO("PanID = %s,MacAddr_G= %s\n",GlobalConfig::ZigbeeInfo_G.PanID.c_str(),GlobalConfig::MacAddr_G.c_str());
|
|||
|
|
// if(GlobalConfig::ZigbeeInfo_G.PanID != GlobalConfig::MacAddr_G.substr(8)){
|
|||
|
|
// string strPanId = GlobalConfig::MacAddr_G.substr(8);
|
|||
|
|
// long lShortAddr = strtol(strPanId.c_str(), NULL, 16);
|
|||
|
|
// unsigned short panid = lShortAddr & 0xffff;
|
|||
|
|
// //modify_LocalPanID(panid);
|
|||
|
|
// WritePanId2Zigbee(panid);
|
|||
|
|
// mssleep(100000);
|
|||
|
|
// LOG_ERROR("PanID error");
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
|
|||
|
|
std::string strchan = ReadStrByOpt(ZIGBEECONFIG, "Zigbee", "channel");
|
|||
|
|
LOG_INFO("Channel = %d,strchan = %s\n",GlobalConfig::ZigbeeInfo_G.Channel,strchan.c_str());
|
|||
|
|
// if(GlobalConfig::ZigbeeInfo_G.Channel != atoi(strchan.c_str())){
|
|||
|
|
// unsigned short Chan = (unsigned short)strtol(strchan.c_str(), NULL, 10);
|
|||
|
|
// if(Chan > 10 && Chan < 27)
|
|||
|
|
// {
|
|||
|
|
// //modify_Localchannel(Chan);
|
|||
|
|
// WriteChanl2Zigbee(Chan);
|
|||
|
|
// mssleep(100000);
|
|||
|
|
// }
|
|||
|
|
// LOG_ERROR("channel error");
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
std::string strType = ReadStrByOpt(SYSTEMINFOFILE, "ZigbeeType", "type");
|
|||
|
|
print_info("TranTimeout = %02x,strType = %s \n",GlobalConfig::Zigbee_G.TranTimeout,strType.c_str());
|
|||
|
|
if(strType == "aw21"){
|
|||
|
|
unsigned short TranTimeout = 0x0A;
|
|||
|
|
WriteTranTimeout2Zigbee(TranTimeout);
|
|||
|
|
}
|
|||
|
|
if( strType == "zm5161"){
|
|||
|
|
unsigned short TranTimeout = 0x03;
|
|||
|
|
WriteTranTimeout2Zigbee(TranTimeout);
|
|||
|
|
}
|
|||
|
|
// LOG_INFO("[UpdateZigbeeInfo---] ZigBee PanID: %s ; Channel: %d ; MyAddr : %s ",GlobalConfig::ZigbeeInfo_G.PanID.c_str(),GlobalConfig::ZigbeeInfo_G.Channel,GlobalConfig::ZigbeeInfo_G.MyAddr.c_str());
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
void int2bytes(int i, unsigned char* bytes, int size) {
|
|||
|
|
// byte[] bytes = new byte[4];
|
|||
|
|
memset(bytes,0,sizeof(unsigned char) * size);
|
|||
|
|
bytes[0] = (unsigned char) (0xff & i);
|
|||
|
|
bytes[1] = (unsigned char) ((0xff00 & i) >> 8);
|
|||
|
|
bytes[2] = (unsigned char) ((0xff0000 & i) >> 16);
|
|||
|
|
bytes[3] = (unsigned char) ((0xff000000 & i) >> 24);
|
|||
|
|
}
|
|||
|
|
bool Uart::ReadUpdatePackge(unsigned char* pDestShortAddr)
|
|||
|
|
{
|
|||
|
|
//compare hardversion in update list
|
|||
|
|
std::vector<std::string> strHWversion;
|
|||
|
|
std::string strFileName = "",strSoftVersion = "";
|
|||
|
|
std::vector <DataNodeUpdate> vecDataNodeUpdate;
|
|||
|
|
vecDataNodeUpdate = ReadStrUpdate("/opt/DataNode/config.json");
|
|||
|
|
char gethardVersion_sql[32] = { 0 };
|
|||
|
|
char selectsql[1024]={ 0 };
|
|||
|
|
sprintf(gethardVersion_sql, "zigbeeShortAddr='%02x%02x'", pDestShortAddr[0],pDestShortAddr[1]);
|
|||
|
|
sprintf(selectsql,"%s,%s",T_SENSOR_INFO(HARDVERSION),T_SENSOR_INFO(SOFTVERSION));
|
|||
|
|
vec_t vecResult = sql_ctl->GetDataSingleLine(T_SENSOR_INFO(TNAME), selectsql, gethardVersion_sql);
|
|||
|
|
if(vecResult.size() < 1){
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
print_info("hardversion %s,softversion %s\n",vecResult[0].c_str(),vecResult[1].c_str());
|
|||
|
|
int thisindex = -1;
|
|||
|
|
int flag = -1;
|
|||
|
|
for(int j = 0; j < vecDataNodeUpdate.size();j++){
|
|||
|
|
for(int i = 0; i < vecDataNodeUpdate[j].hwVersion.size();i++){
|
|||
|
|
if(vecResult[0] == vecDataNodeUpdate[j].hwVersion[i]){
|
|||
|
|
if(vecResult[1] == vecDataNodeUpdate[j].strSoftVersion){
|
|||
|
|
flag = 0;
|
|||
|
|
break;
|
|||
|
|
}else{
|
|||
|
|
thisindex = i;
|
|||
|
|
strFileName = vecDataNodeUpdate[j].strUpdataFileName;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if(thisindex >= 0 || flag == 0)
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(thisindex < 0)
|
|||
|
|
return false;
|
|||
|
|
|
|||
|
|
// if(!strncmp(vecResult[0].c_str(),"3",1)){
|
|||
|
|
// WriteTranTimeout2Zigbee(0x03);
|
|||
|
|
// }else if(!strncmp(vecResult[0].c_str(),"4",1)){
|
|||
|
|
// WriteTranTimeout2Zigbee(0x0A);
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
print_info("thisindex = %d\n",thisindex);
|
|||
|
|
|
|||
|
|
FILE * pFile=NULL;
|
|||
|
|
int thisSize = 0;
|
|||
|
|
DataNodeUpdateFile = "/opt/DataNode/" + strFileName;
|
|||
|
|
print_info("strFileName = %s\n",DataNodeUpdateFile.c_str());
|
|||
|
|
pFile = fopen (DataNodeUpdateFile.c_str(),"rb");
|
|||
|
|
if (pFile==NULL){
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
while (fgetc(pFile) != EOF) {
|
|||
|
|
++thisSize;
|
|||
|
|
}
|
|||
|
|
fclose (pFile);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// WriteShortAddr_DistAddr2Zigbee(localAddr,pDestShortAddr);//永久参数配置
|
|||
|
|
/* char tmpbuf[8] = {0x00};
|
|||
|
|
* unsigned short localAddr = 0x9999;
|
|||
|
|
sprintf(tmpbuf,"%02x%02x",pDestShortAddr[0],pDestShortAddr[1]);
|
|||
|
|
m_strDestShortAddr = std::string(tmpbuf);
|
|||
|
|
modify_distaddr_info(localAddr,"",pDestShortAddr);//临时参数配置
|
|||
|
|
GlobalConfig::Zigbee_G.MyAddr = 0x9999;*/
|
|||
|
|
|
|||
|
|
unsigned char Data[12]={0x00};
|
|||
|
|
unsigned char size[4]={0x00};
|
|||
|
|
print_info("thisSize = %d\n",thisSize);
|
|||
|
|
//帧头[3byte] 节点地址[2byte] 数据类型[1byte] 序号[1byte] 升级包大小[4byte] CRC校验[1byte]
|
|||
|
|
Data[0]=0xAA;
|
|||
|
|
Data[1]=0x55;
|
|||
|
|
Data[2]=0xAA;
|
|||
|
|
Data[3]=pDestShortAddr[0];
|
|||
|
|
Data[4]=pDestShortAddr[1];
|
|||
|
|
Data[5]=0x20;
|
|||
|
|
Data[6]=0x00;
|
|||
|
|
int2bytes(thisSize,size,4);
|
|||
|
|
Data[7]=size[3];
|
|||
|
|
Data[8]=size[2];
|
|||
|
|
Data[9]=size[1];
|
|||
|
|
Data[10]=size[0];
|
|||
|
|
unsigned char tmp = 0x00;
|
|||
|
|
for(int i = 0 ; i < 11;i++){
|
|||
|
|
tmp +=Data[i];
|
|||
|
|
}
|
|||
|
|
Data[11]=tmp;
|
|||
|
|
sleep(1);
|
|||
|
|
WriteToUart((const char*)Data,12);
|
|||
|
|
int iRet = CheckZigbeeACK();
|
|||
|
|
if(iRet == 0){
|
|||
|
|
LOG_DEBUG("Packge ACK send success,shortAddr = %02x%02x\n",pDestShortAddr[0],pDestShortAddr[1]);
|
|||
|
|
}else{
|
|||
|
|
LOG_ERROR("Packge ACK send failed,shortAddr = %02x%02x\n",pDestShortAddr[0],pDestShortAddr[1]);
|
|||
|
|
}
|
|||
|
|
string strTime = GetLocalTimeWithMs();
|
|||
|
|
LOG_INFO("ReadUpdatePackge strTime = %s\n",strTime.c_str());
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
void Uart::UpdateWirelessNode(unsigned short shortAdd)
|
|||
|
|
{
|
|||
|
|
string strTime = GetLocalTimeWithMs();
|
|||
|
|
LOG_INFO("UpdateWirelessNode start = %s UpdateWirelessNode id = %02x %02x\n",strTime.c_str(),UINT16_HIGH(shortAdd),UINT16_LOW(shortAdd));
|
|||
|
|
/*std::string strFileName = "",strSoftVersion = "";
|
|||
|
|
std::vector <DataNodeUpdate> vecDataNodeUpdate;
|
|||
|
|
vecDataNodeUpdate = ReadStrUpdate("/opt/DataNode/config.json");
|
|||
|
|
|
|||
|
|
char gethardVersion_sql[32] = { 0 };
|
|||
|
|
sprintf(gethardVersion_sql, "zigbeeShortAddr='%02x%02x'", UINT16_HIGH(shortAdd),UINT16_LOW(shortAdd));
|
|||
|
|
std::string SoftVersion = sql_ctl->GetData(T_SENSOR_INFO(TNAME), "softVersion", gethardVersion_sql);
|
|||
|
|
|
|||
|
|
print_info("SoftVersion = %s\n",SoftVersion.c_str());
|
|||
|
|
LOG_INFO(" NOW SoftVersion = %s\n",SoftVersion.c_str());*/
|
|||
|
|
//////
|
|||
|
|
//////
|
|||
|
|
//strFileName = "/opt/DataNode/" + strFileName;
|
|||
|
|
FILE * pFile=NULL;
|
|||
|
|
int thisSize = 0;
|
|||
|
|
char *buffer=NULL;
|
|||
|
|
int resendCount = 0;
|
|||
|
|
pFile = fopen (DataNodeUpdateFile.c_str(),"rb");
|
|||
|
|
if (pFile==NULL) perror ("Error opening file");
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
while (fgetc(pFile) != EOF) {
|
|||
|
|
++thisSize;
|
|||
|
|
}
|
|||
|
|
rewind(pFile);
|
|||
|
|
buffer = (char*)malloc(thisSize);//
|
|||
|
|
fread (buffer, sizeof (char), thisSize, pFile);
|
|||
|
|
fclose (pFile);
|
|||
|
|
|
|||
|
|
int Count = thisSize / 92;
|
|||
|
|
int lastSize = thisSize % 92;
|
|||
|
|
unsigned char UpdateData[100]={0x00};
|
|||
|
|
//帧头[3byte] 节点地址[2byte] 数据类型[1byte] 序号[1byte] 数据包[92byte] CRC校验[1byte]
|
|||
|
|
print_info("Start Update!!! file Size = %d\n",thisSize);
|
|||
|
|
unsigned char tmp = 0x00;
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigAckreset,0);
|
|||
|
|
//boost::this_thread::sleep(boost::posix_time::milliseconds(1));
|
|||
|
|
mssleep(1000);
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigAckreset,1);
|
|||
|
|
for(int j = 0; j < Count;j++){
|
|||
|
|
int time ,value;
|
|||
|
|
UpdateData[0]=0xAA;
|
|||
|
|
UpdateData[1]=0x55;
|
|||
|
|
UpdateData[2]=0xAA;
|
|||
|
|
UpdateData[3]=UINT16_HIGH(shortAdd);
|
|||
|
|
UpdateData[4]=UINT16_LOW(shortAdd);
|
|||
|
|
UpdateData[5]=0x21;
|
|||
|
|
UpdateData[6]=0xff & j;
|
|||
|
|
memcpy(&UpdateData[7],buffer+92*j,92);
|
|||
|
|
tmp = 0x00;
|
|||
|
|
for(int k = 0; k < 99;k++){
|
|||
|
|
tmp +=UpdateData[k];
|
|||
|
|
}
|
|||
|
|
UpdateData[99] = tmp;
|
|||
|
|
// RESEND:
|
|||
|
|
WriteToUart((const char*)UpdateData,100);
|
|||
|
|
if(gpio_read(GlobalConfig::GPIO_G.zigAckrep) == 48)
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigAckreset,1);
|
|||
|
|
time = 0;
|
|||
|
|
do{
|
|||
|
|
value = gpio_read(GlobalConfig::GPIO_G.zigAckrep);
|
|||
|
|
if(value == 49)
|
|||
|
|
break;
|
|||
|
|
mssleep(10000);
|
|||
|
|
time += 1;
|
|||
|
|
}while(time < 150);
|
|||
|
|
if(time >= 150){
|
|||
|
|
resendCount++;
|
|||
|
|
if(resendCount < 5){
|
|||
|
|
LOG_INFO(" RESEND gpio_read failed shortAdd %x %x,error index %d\n",UINT16_HIGH(shortAdd),UINT16_LOW(shortAdd),j);
|
|||
|
|
}else{
|
|||
|
|
LOG_INFO("gpio_read failed shortAdd %x %x,error index %d\n",UINT16_HIGH(shortAdd),UINT16_LOW(shortAdd),j);
|
|||
|
|
print_red("gpio_read failed \n");
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = NO_ENTER_TRANSMITTING_STATUS;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
|||
|
|
bUpdate = false;
|
|||
|
|
goto endUpdate;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigAckreset,0);
|
|||
|
|
mssleep(2000);
|
|||
|
|
// if(gpio_read(GlobalConfig::GPIO_G.zigAckrep) == 48)
|
|||
|
|
// gpio_set(GlobalConfig::GPIO_G.zigAckreset,1);
|
|||
|
|
memset(UpdateData,0x00,sizeof(UpdateData));
|
|||
|
|
//boost::this_thread::sleep(boost::posix_time::milliseconds(5));
|
|||
|
|
mssleep(5000);
|
|||
|
|
}
|
|||
|
|
if(gpio_read(GlobalConfig::GPIO_G.zigAckrep) == 48)
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigAckreset,1);
|
|||
|
|
// printf("Count =%d,lastSize = %d\n",Count,lastSize);
|
|||
|
|
if(lastSize > 0){
|
|||
|
|
UpdateData[0]=0xAA;
|
|||
|
|
UpdateData[1]=0x55;
|
|||
|
|
UpdateData[2]=0xAA;
|
|||
|
|
UpdateData[3]=UINT16_HIGH(shortAdd);
|
|||
|
|
UpdateData[4]=UINT16_LOW(shortAdd);
|
|||
|
|
UpdateData[5]=0x21;
|
|||
|
|
UpdateData[6]=0xff & Count;
|
|||
|
|
memcpy(&UpdateData[7],buffer+92*Count,lastSize);
|
|||
|
|
tmp = 0x00;
|
|||
|
|
for(int k = 0; k < 99;k++){
|
|||
|
|
tmp +=UpdateData[k];
|
|||
|
|
}
|
|||
|
|
UpdateData[99] = tmp;
|
|||
|
|
WriteToUart((const char*)UpdateData,100);
|
|||
|
|
boost::this_thread::sleep(boost::posix_time::milliseconds(10));
|
|||
|
|
// if(gpio_read(GlobalConfig::GPIO_G.zigAckrep) == 49){
|
|||
|
|
// gpio_set(GlobalConfig::GPIO_G.zigAckreset,0);
|
|||
|
|
// boost::this_thread::sleep(boost::posix_time::milliseconds(1));
|
|||
|
|
// if(gpio_read(GlobalConfig::GPIO_G.zigAckrep) == 48)gpio_set(GlobalConfig::GPIO_G.zigAckreset,1);
|
|||
|
|
// }
|
|||
|
|
int time = 0;
|
|||
|
|
do{
|
|||
|
|
int value = gpio_read(GlobalConfig::GPIO_G.zigAckrep);
|
|||
|
|
if(value == 49){
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigAckreset,0);
|
|||
|
|
mssleep(10000);
|
|||
|
|
if(gpio_read(GlobalConfig::GPIO_G.zigAckrep) == 48)
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigAckreset,1);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
mssleep(10000);
|
|||
|
|
time += 1;
|
|||
|
|
}while(time < 150);
|
|||
|
|
if(time >= 150){
|
|||
|
|
LOG_INFO("gpio_read failed shortAdd %x %x\n",UINT16_HIGH(shortAdd),UINT16_LOW(shortAdd));
|
|||
|
|
print_info("gpio_read failed \n");
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = NO_ENTER_TRANSMITTING_STATUS;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
|||
|
|
bUpdate = false;
|
|||
|
|
goto endUpdate;
|
|||
|
|
}
|
|||
|
|
memset(UpdateData,0x00,sizeof(UpdateData));
|
|||
|
|
}
|
|||
|
|
print_info("Update END!!! file Size = %d\n",thisSize);
|
|||
|
|
}
|
|||
|
|
endUpdate:
|
|||
|
|
resendCount = 0;
|
|||
|
|
free(buffer);
|
|||
|
|
tcflush(fd,TCIFLUSH);
|
|||
|
|
boost::this_thread::sleep(boost::posix_time::seconds(1));
|
|||
|
|
bUpdate = false;
|
|||
|
|
bSendTimeStamp = false;
|
|||
|
|
modify_LocalAddr(0x8888);
|
|||
|
|
bModifyAddr = true;
|
|||
|
|
boost::this_thread::sleep(boost::posix_time::milliseconds(100));
|
|||
|
|
GlobalConfig::Zigbee_G.MyAddr = 0x8888;
|
|||
|
|
DataNodeUpdateFile = "";
|
|||
|
|
// std::vector<RecvData>().swap(m_VecWaveData);
|
|||
|
|
// WriteShortAddr2Zigbee(shortAddr);
|
|||
|
|
// UpdateZigbeeInfoCtrl();
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = NO_ENTER_TRANSMITTING_STATUS;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
|||
|
|
LOG_INFO("UpdateWirelessNode end");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
int Uart::UpdateConfig(unsigned char* pDestShortAddr)
|
|||
|
|
{
|
|||
|
|
char whereCon[64] = { 0 };
|
|||
|
|
char selCon[100]={0x00};
|
|||
|
|
sprintf(whereCon, "zigbeeShortAddr='%02x%02x'", pDestShortAddr[0],pDestShortAddr[1]);
|
|||
|
|
//std::string strUpdate = sql_ctl->GetData(T_SENSOR_INFO(TNAME), "UpdateFlag", whereCon);
|
|||
|
|
vec_t vecResultNode = sql_ctl->GetDataSingleLine(T_SENSOR_INFO(TNAME), "*", whereCon);
|
|||
|
|
if(vecResultNode.size() <= 0)
|
|||
|
|
return -1;
|
|||
|
|
if(vecResultNode[41] == "0")
|
|||
|
|
{
|
|||
|
|
// if(!strncmp(vecResult[1].c_str(),"3",1)){//zm5161
|
|||
|
|
// WriteTranTimeout2Zigbee(0x03);
|
|||
|
|
// }else if(!strncmp(vecResult[1].c_str(),"4",1)){//aw21
|
|||
|
|
// WriteTranTimeout2Zigbee(0x0A);
|
|||
|
|
// }
|
|||
|
|
print_info("UpdateConfig\n");
|
|||
|
|
LOG_INFO("UpdateConfig\n");
|
|||
|
|
bUpdateconfig = true;
|
|||
|
|
unsigned short localAddr = 0x9999;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = ENTER_TRANSMITTING_STATUS;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
|||
|
|
// WriteShortAddr_DistAddr2Zigbee(localAddr,pDestShortAddr);//永久参数配置
|
|||
|
|
char tmpbuf[8] = {0x00};
|
|||
|
|
sprintf(tmpbuf,"%02x%02x",pDestShortAddr[0],pDestShortAddr[1]);
|
|||
|
|
m_strDestShortAddr = std::string(tmpbuf);
|
|||
|
|
//modify_distaddr_info(localAddr,"",pDestShortAddr);//临时参数配置
|
|||
|
|
GlobalConfig::Zigbee_G.MyAddr = 0x9999;
|
|||
|
|
boost::this_thread::sleep(boost::posix_time::milliseconds(500));
|
|||
|
|
vec_t vecResult;
|
|||
|
|
sprintf(selCon,"featureInterVal,waveInterVal,range,samplingRate,ACCSampleTime,startBrands,stopBrands,\
|
|||
|
|
envelopeBandPass,faultFrequency,timeStamp,viff,ZigbeePower,ZigbeeRetry,MeasurementID,NodeWaveSend");
|
|||
|
|
vecResult = sql_ctl->GetDataSingleLine(T_SENSOR_INFO(TNAME),selCon,whereCon);
|
|||
|
|
print_info("vecResult size = %d\n",vecResult.size());
|
|||
|
|
if(vecResult.size() < 1){
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
unsigned char UpdateData[100]={0x00};
|
|||
|
|
//帧头[3byte] 节点地址[2byte] 数据类型[1byte] 序号[1byte] 数据包[92byte] CRC校验[1byte]
|
|||
|
|
UpdateData[0]=0xAA;
|
|||
|
|
UpdateData[1]=0x55;
|
|||
|
|
UpdateData[2]=0xAA;
|
|||
|
|
UpdateData[3]=pDestShortAddr[0];
|
|||
|
|
UpdateData[4]=pDestShortAddr[1];
|
|||
|
|
UpdateData[5]=0x22;
|
|||
|
|
UpdateData[6]=0x00;
|
|||
|
|
UpdateData[7]=0x01;
|
|||
|
|
UpdateData[8]=UINT16_LOW(atoi(vecResult[0].c_str()));
|
|||
|
|
UpdateData[9]=UINT16_HIGH(atoi(vecResult[1].c_str()));
|
|||
|
|
UpdateData[10]=UINT16_LOW(atoi(vecResult[1].c_str()));
|
|||
|
|
int y = 0;
|
|||
|
|
if(vecResultNode[17] == "01"){
|
|||
|
|
if(vecResult[3]=="3200"){
|
|||
|
|
y = 0;
|
|||
|
|
}else if(vecResult[3]=="6400"){
|
|||
|
|
y = 1;
|
|||
|
|
}else if(vecResult[3]=="12800"){
|
|||
|
|
y = 2;
|
|||
|
|
}else if(vecResult[3]=="25600"){
|
|||
|
|
y = 3;
|
|||
|
|
}
|
|||
|
|
}else if(vecResultNode[17] == "02"){
|
|||
|
|
if(vecResult[3]=="8000"){
|
|||
|
|
y = 0;
|
|||
|
|
}else if(vecResult[3]=="16000"){
|
|||
|
|
y = 1;
|
|||
|
|
}else if(vecResult[3]=="24000"){
|
|||
|
|
y = 2;
|
|||
|
|
}else if(vecResult[3]=="32000"){
|
|||
|
|
y = 3;
|
|||
|
|
}else if(vecResult[3]=="48000"){
|
|||
|
|
y = 4;
|
|||
|
|
}else if(vecResult[3]=="96000"){
|
|||
|
|
y = 5;
|
|||
|
|
}else if(vecResult[3]=="192000"){
|
|||
|
|
y = 6;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
UpdateData[18] = atoi(vecResult[11].c_str()) & 0xFF;;
|
|||
|
|
UpdateData[19] = atoi(vecResult[12].c_str()) & 0xFF;;
|
|||
|
|
int x = atoi(vecResult[2].c_str());
|
|||
|
|
UpdateData[21] = BUILD_UINT2(x,y);
|
|||
|
|
UpdateData[22] = atoi(vecResult[4].c_str()) & 0xFF;
|
|||
|
|
print_info("vecResult size = %s==%s==%s==%s=%s\n",vecResult[5].c_str(),vecResult[6].c_str(),vecResult[7].c_str(),vecResult[8].c_str(),vecResult[14].c_str());
|
|||
|
|
vector<string> vStart,vStop,vEnvelopeBandPass,vfaultFrequency,vNodeWaveSend;
|
|||
|
|
boost::split( vStart, vecResult[5], boost::is_any_of( "," ), boost::token_compress_on );
|
|||
|
|
boost::split( vStop, vecResult[6], boost::is_any_of( "," ), boost::token_compress_on );
|
|||
|
|
boost::split( vEnvelopeBandPass, vecResult[7], boost::is_any_of( "," ), boost::token_compress_on );
|
|||
|
|
boost::split( vfaultFrequency, vecResult[8], boost::is_any_of( "," ), boost::token_compress_on );
|
|||
|
|
if(vecResult[14] != "")
|
|||
|
|
boost::split( vNodeWaveSend, vecResult[14], boost::is_any_of( "," ), boost::token_compress_on );
|
|||
|
|
|
|||
|
|
UpdateData[23] = UINT16_HIGH(atoi(vStart[0].c_str()));
|
|||
|
|
UpdateData[24] = UINT16_LOW(atoi(vStart[0].c_str()));
|
|||
|
|
UpdateData[25] = UINT16_HIGH(atoi(vStop[0].c_str()));
|
|||
|
|
UpdateData[26] = UINT16_LOW(atoi(vStop[0].c_str()));
|
|||
|
|
|
|||
|
|
UpdateData[27] = UINT16_HIGH(atoi(vStart[1].c_str()));
|
|||
|
|
UpdateData[28] = UINT16_LOW(atoi(vStart[1].c_str()));
|
|||
|
|
UpdateData[29] = UINT16_HIGH(atoi(vStop[1].c_str()));
|
|||
|
|
UpdateData[30] = UINT16_LOW(atoi(vStop[1].c_str()));
|
|||
|
|
|
|||
|
|
UpdateData[31] = UINT16_HIGH(atoi(vStart[2].c_str()));
|
|||
|
|
UpdateData[32] = UINT16_LOW(atoi(vStart[2].c_str()));
|
|||
|
|
UpdateData[33] = UINT16_HIGH(atoi(vStop[2].c_str()));
|
|||
|
|
UpdateData[34] = UINT16_LOW(atoi(vStop[2].c_str()));
|
|||
|
|
|
|||
|
|
UpdateData[35] = UINT16_HIGH(atoi(vStart[3].c_str()));
|
|||
|
|
UpdateData[36] = UINT16_LOW(atoi(vStart[3].c_str()));
|
|||
|
|
UpdateData[37] = UINT16_HIGH(atoi(vStop[3].c_str()));
|
|||
|
|
UpdateData[38] = UINT16_LOW(atoi(vStop[3].c_str()));
|
|||
|
|
|
|||
|
|
UpdateData[39] = UINT16_HIGH(atoi(vStart[4].c_str()));
|
|||
|
|
UpdateData[40] = UINT16_LOW(atoi(vStart[4].c_str()));
|
|||
|
|
UpdateData[41] = UINT16_HIGH(atoi(vStop[4].c_str()));
|
|||
|
|
UpdateData[42] = UINT16_LOW(atoi(vStop[4].c_str()));
|
|||
|
|
|
|||
|
|
UpdateData[43] = UINT16_HIGH(atoi(vEnvelopeBandPass[0].c_str()));
|
|||
|
|
UpdateData[44] = UINT16_LOW(atoi(vEnvelopeBandPass[0].c_str()));
|
|||
|
|
UpdateData[45] = UINT16_HIGH(atoi(vEnvelopeBandPass[1].c_str()));
|
|||
|
|
UpdateData[46] = UINT16_LOW(atoi(vEnvelopeBandPass[1].c_str()));
|
|||
|
|
|
|||
|
|
UpdateData[47] = UINT16_HIGH(atoi(vfaultFrequency[0].c_str()));
|
|||
|
|
UpdateData[48] = UINT16_LOW(atoi(vfaultFrequency[0].c_str()));
|
|||
|
|
UpdateData[49] = UINT16_HIGH(atoi(vfaultFrequency[1].c_str()));
|
|||
|
|
UpdateData[50] = UINT16_LOW(atoi(vfaultFrequency[1].c_str()));
|
|||
|
|
|
|||
|
|
UpdateData[51] = UINT16_HIGH(atoi(vfaultFrequency[2].c_str()));
|
|||
|
|
UpdateData[52] = UINT16_LOW(atoi(vfaultFrequency[2].c_str()));
|
|||
|
|
UpdateData[53] = UINT16_HIGH(atoi(vfaultFrequency[3].c_str()));
|
|||
|
|
UpdateData[54] = UINT16_LOW(atoi(vfaultFrequency[3].c_str()));
|
|||
|
|
|
|||
|
|
UpdateData[55] = UINT32_HIGH_1(atoi(vecResult[9].c_str()));
|
|||
|
|
UpdateData[56] = UINT32_HIGH_2(atoi(vecResult[9].c_str()));
|
|||
|
|
UpdateData[57] = UINT32_LOW_1(atoi(vecResult[9].c_str()));
|
|||
|
|
UpdateData[58] = UINT32_LOW_2(atoi(vecResult[9].c_str()));
|
|||
|
|
|
|||
|
|
UpdateData[59] = (atoi(vecResult[10].c_str())) & 0xFF;
|
|||
|
|
|
|||
|
|
size_t bytesSize = strlen(vecResult[13].c_str()) / 2;
|
|||
|
|
unsigned char* bytes = (unsigned char*)malloc(bytesSize);
|
|||
|
|
|
|||
|
|
if (hexStringToBytes(vecResult[13].c_str(), bytes, bytesSize) != 0) {
|
|||
|
|
free(bytes);
|
|||
|
|
}else{
|
|||
|
|
UpdateData[60] = bytes[0];
|
|||
|
|
UpdateData[61] = bytes[1];
|
|||
|
|
UpdateData[62] = bytes[2];
|
|||
|
|
UpdateData[63] = bytes[3];
|
|||
|
|
UpdateData[64] = bytes[4];
|
|||
|
|
UpdateData[65] = bytes[5];
|
|||
|
|
UpdateData[66] = bytes[6];
|
|||
|
|
UpdateData[67] = bytes[7];
|
|||
|
|
}
|
|||
|
|
unsigned char byte = 0;
|
|||
|
|
if(vNodeWaveSend.size() > 0){
|
|||
|
|
if (vNodeWaveSend[0] == "0")
|
|||
|
|
{
|
|||
|
|
Binary_Bit(&byte,0,0);
|
|||
|
|
}
|
|||
|
|
if (vNodeWaveSend[0] == "1")
|
|||
|
|
{
|
|||
|
|
Binary_Bit(&byte,0,1);
|
|||
|
|
}
|
|||
|
|
if (vNodeWaveSend[1] == "0")
|
|||
|
|
{
|
|||
|
|
Binary_Bit(&byte,1,0);
|
|||
|
|
}
|
|||
|
|
if (vNodeWaveSend[1] == "1")
|
|||
|
|
{
|
|||
|
|
Binary_Bit(&byte,1,1);
|
|||
|
|
}
|
|||
|
|
if (vNodeWaveSend[2] == "0")
|
|||
|
|
{
|
|||
|
|
Binary_Bit(&byte,2,0);
|
|||
|
|
}
|
|||
|
|
if (vNodeWaveSend[2] == "1")
|
|||
|
|
{
|
|||
|
|
Binary_Bit(&byte,2,1);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
UpdateData[68] = byte;
|
|||
|
|
free(bytes);
|
|||
|
|
unsigned char tmp1 = 0x00;
|
|||
|
|
for(int k = 0; k < 99;k++){
|
|||
|
|
tmp1 +=UpdateData[k];
|
|||
|
|
}
|
|||
|
|
UpdateData[99] = tmp1;
|
|||
|
|
tcflush(fd,TCIFLUSH);
|
|||
|
|
WriteToUart((const char*)UpdateData,100);
|
|||
|
|
int iRet = CheckZigbeeACK();
|
|||
|
|
if(iRet == 0){
|
|||
|
|
LOG_DEBUG("updataconfig ACK send success,shortAddr = %02x%02x\n",pDestShortAddr[0],pDestShortAddr[1]);
|
|||
|
|
}else{
|
|||
|
|
LOG_ERROR("updataconfig ACK send failed,shortAddr = %02x%02x\n",pDestShortAddr[0],pDestShortAddr[1]);
|
|||
|
|
}
|
|||
|
|
return 0;
|
|||
|
|
}else if(vecResultNode[41] == "-1"){
|
|||
|
|
|
|||
|
|
bUpdateconfig = true;
|
|||
|
|
unsigned short localAddr = 0x9999;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = ENTER_TRANSMITTING_STATUS;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
|||
|
|
string strName = sql_ctl->GetData(T_SENSOR_INFO(TNAME)," dataNodeName ",whereCon);
|
|||
|
|
|
|||
|
|
unsigned char UpdateData[100]={0x00};
|
|||
|
|
//帧头[3byte] 节点地址[2byte] 数据类型[1byte] 序号[1byte] 数据包[92byte] CRC校验[1byte]
|
|||
|
|
UpdateData[0]=0xAA;
|
|||
|
|
UpdateData[1]=0x55;
|
|||
|
|
UpdateData[2]=0xAA;
|
|||
|
|
UpdateData[3]=pDestShortAddr[0];
|
|||
|
|
UpdateData[4]=pDestShortAddr[1];
|
|||
|
|
UpdateData[5]=0x22;
|
|||
|
|
UpdateData[6]=0x00;
|
|||
|
|
UpdateData[7]=0x02;
|
|||
|
|
char hex[200]={0X00};
|
|||
|
|
stringToHex(strName.c_str(),hex);
|
|||
|
|
size_t bytesSize = strlen(hex) / 2;
|
|||
|
|
unsigned char* bytes = (unsigned char*)malloc(bytesSize);
|
|||
|
|
|
|||
|
|
if (hexStringToBytes(hex, bytes, bytesSize) != 0) {
|
|||
|
|
free(bytes);
|
|||
|
|
}else{
|
|||
|
|
for (size_t i = 0; i < bytesSize; i++)
|
|||
|
|
{
|
|||
|
|
UpdateData[8 + i] = bytes[i];
|
|||
|
|
}
|
|||
|
|
free(bytes);
|
|||
|
|
unsigned char tmp1 = 0x00;
|
|||
|
|
for(int k = 0; k < 99;k++){
|
|||
|
|
tmp1 += UpdateData[k];
|
|||
|
|
}
|
|||
|
|
UpdateData[99] = tmp1;
|
|||
|
|
tcflush(fd,TCIFLUSH);
|
|||
|
|
WriteToUart((const char*)UpdateData,100);
|
|||
|
|
int iRet = CheckZigbeeACK();
|
|||
|
|
if(iRet == 0){
|
|||
|
|
LOG_DEBUG("updataname ACK send success,shortAddr = %02x%02x\n",pDestShortAddr[0],pDestShortAddr[1]);
|
|||
|
|
}else{
|
|||
|
|
LOG_ERROR("updataname ACK send failed,shortAddr = %02x%02x\n",pDestShortAddr[0],pDestShortAddr[1]);
|
|||
|
|
}
|
|||
|
|
return 0;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
}else{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
int Uart::UpdateWirelessNodeTime(unsigned char* pDestShortAddr,int modifyaddr/*,int nodewaveindex,int nodetime,int nodeindex*/)
|
|||
|
|
{
|
|||
|
|
if(modifyaddr)
|
|||
|
|
modify_DistAddr(pDestShortAddr);
|
|||
|
|
mssleep(10000);
|
|||
|
|
//print_info("nodewaveindex = %d,nodetime = %d,nodeindex = %d\n",nodewaveindex,nodetime,nodeindex);
|
|||
|
|
char localtimestamp[32]={0x00};
|
|||
|
|
int millisecond = 0;
|
|||
|
|
|
|||
|
|
string rtcTime = GetRTC(localtimestamp,millisecond);
|
|||
|
|
LOG_INFO("ShortAddr = %02x%02x,rtcTime = %s,localtimestamp = %s,millisecond = %d,bSendTimeStamp = %d \n",pDestShortAddr[0],pDestShortAddr[1],rtcTime.c_str(),localtimestamp,millisecond,bSendTimeStamp);
|
|||
|
|
// struct timeval tv;
|
|||
|
|
// gettimeofday(&tv, NULL);
|
|||
|
|
// int millisecond = tv.tv_usec / 1000;
|
|||
|
|
|
|||
|
|
// sprintf(localtimestamp, "%ld", tv.tv_sec);
|
|||
|
|
|
|||
|
|
unsigned char UpdateData[100]={0x00};
|
|||
|
|
UpdateData[0]=0xAA;
|
|||
|
|
UpdateData[1]=0x55;
|
|||
|
|
UpdateData[2]=0xAA;
|
|||
|
|
UpdateData[3]=pDestShortAddr[0];
|
|||
|
|
UpdateData[4]=pDestShortAddr[1];
|
|||
|
|
UpdateData[5]=0x23;
|
|||
|
|
UpdateData[6]=0x00;
|
|||
|
|
UpdateData[7]=0x00;
|
|||
|
|
UpdateData[8]=UINT32_LOW_2(atol(localtimestamp));
|
|||
|
|
UpdateData[9]=UINT32_LOW_1(atol(localtimestamp));
|
|||
|
|
UpdateData[10]=UINT32_HIGH_2(atol(localtimestamp));
|
|||
|
|
UpdateData[11]=UINT32_HIGH_1(atol(localtimestamp));
|
|||
|
|
UpdateData[12]=UINT16_LOW(millisecond);
|
|||
|
|
UpdateData[13]=UINT16_HIGH(millisecond);
|
|||
|
|
//UpdateData[13]=UINT16_HIGH(nodetime);
|
|||
|
|
//UpdateData[14]=UINT16_LOW(nodetime);
|
|||
|
|
//UpdateData[15]=UINT16_LOW(nodewaveindex);
|
|||
|
|
//UpdateData[16]=UINT16_LOW(nodeindex);
|
|||
|
|
unsigned char tmp = 0x00;
|
|||
|
|
for(int k = 0; k < 99;k++){
|
|||
|
|
tmp += UpdateData[k];
|
|||
|
|
}
|
|||
|
|
UpdateData[99] = tmp;
|
|||
|
|
WriteToUart((const char*)UpdateData,100);
|
|||
|
|
int iRet = CheckZigbeeACK();
|
|||
|
|
if(iRet == 0){
|
|||
|
|
LOG_DEBUG("NodeTime ACK send success,shortAddr = %02x%02x\n",pDestShortAddr[0],pDestShortAddr[1]);
|
|||
|
|
}else{
|
|||
|
|
LOG_ERROR("NodeTime ACK send failed,shortAddr = %02x%02x\n",pDestShortAddr[0],pDestShortAddr[1]);
|
|||
|
|
}
|
|||
|
|
return iRet;
|
|||
|
|
}
|
|||
|
|
void Uart::DealRecvData(const char *pData)
|
|||
|
|
{
|
|||
|
|
char buf[8];
|
|||
|
|
char shortAdd[8]={0x00};
|
|||
|
|
sprintf(buf, "%02d", pData[5]&0xFF);
|
|||
|
|
sprintf(shortAdd, "%02x%02x", pData[3]&0xFF,pData[4]&0xFF);
|
|||
|
|
unsigned short ushortAdd = BUILD_UINT16(pData[3]&0xFF,pData[4]&0xFF);
|
|||
|
|
int flag = atoi(buf);
|
|||
|
|
print_info("the data package type(1,2,3,4,5,6) is %s,%x\n",buf,pData[5]&0xFF);
|
|||
|
|
|
|||
|
|
switch (flag)
|
|||
|
|
{
|
|||
|
|
case 1:{//0x01:设备信息
|
|||
|
|
DealDataNodeInfo(pData);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 2:{//0x02:特征值
|
|||
|
|
DealDataNodeFeature(pData, 0);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
/* case 3:{//0x03:长波形X轴
|
|||
|
|
DealDataNodeWave(pData);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 4:{//0x04:长波形Y轴
|
|||
|
|
DealDataNodeWave(pData);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 5:{//0x05:长波形Z轴
|
|||
|
|
DealDataNodeWave(pData);
|
|||
|
|
}
|
|||
|
|
break;*/
|
|||
|
|
case 6:{//0x06:特征值+长波形
|
|||
|
|
//LOG_INFO("DealDataNodeFeature 06");
|
|||
|
|
DealDataNodeFeature(pData, 1);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 32:{//升级
|
|||
|
|
|
|||
|
|
UpdateWirelessNode(ushortAdd);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 7:{
|
|||
|
|
DealDataNodeName(pData);
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::DealDataNodeName(const char* pData)
|
|||
|
|
{
|
|||
|
|
bSendTimeStamp = false;
|
|||
|
|
print_info("DealDataNodeName \n");
|
|||
|
|
string strTime = GetLocalTimeWithMs();
|
|||
|
|
//LOG_INFO("DealDataNodeName Time = %s\n",strTime.c_str());
|
|||
|
|
char szShortAdd[8]={0x00};
|
|||
|
|
char shortAdd[8]={0x00};
|
|||
|
|
char NodeName[64]={0x00};
|
|||
|
|
sprintf(szShortAdd, "%02x%02x", pData[3]&0xFF,pData[4]&0xFF);
|
|||
|
|
memcpy(NodeName,&pData[7],64);
|
|||
|
|
memcpy(shortAdd,&pData[3],2);
|
|||
|
|
char whereCon[64] = { 0 };
|
|||
|
|
char uplCon[200]={0x00};
|
|||
|
|
int iRet = -1;
|
|||
|
|
char nodeWaveSend[10]={0x00};
|
|||
|
|
|
|||
|
|
UpdateWirelessNodeTime((unsigned char*)shortAdd,1);
|
|||
|
|
|
|||
|
|
for(int i = 0; i < 64;i++){
|
|||
|
|
sprintf(&NodeName[i * 2], "%02X", pData[7 + i]&0xFF);
|
|||
|
|
}
|
|||
|
|
char MeasurementID[100]={0x00};
|
|||
|
|
sprintf(MeasurementID, "%02x%02x%02x%02x%02x%02x%02x%02x", pData[71], pData[72], pData[73], pData[74],
|
|||
|
|
pData[75], pData[76], pData[77],pData[78]);
|
|||
|
|
sprintf(nodeWaveSend,"%d,%d,%d",GET_BIT(pData[79], 0 ),GET_BIT(pData[79], 1 ),GET_BIT(pData[79], 2 ));
|
|||
|
|
char gbkNodeName[128]={0x00};
|
|||
|
|
sprintf(whereCon, "zigbeeShortAddr='%s'", szShortAdd);
|
|||
|
|
print_info("whereCon = %s\n",whereCon);
|
|||
|
|
array_t vecRes = sql_ctl->GetDataMultiLine(T_SENSOR_INFO(TNAME)," dataNodeNo, MeasurementID,hardVersion,softVersion",whereCon);
|
|||
|
|
if(vecRes.size() > 1){
|
|||
|
|
for(int i = 0; i < vecRes.size();i++){
|
|||
|
|
if(vecRes[i][1] != ""){
|
|||
|
|
char whereCon1[64] = { 0 };
|
|||
|
|
sprintf(whereCon1, " dataNodeNo='%s' ", vecRes[i][0].c_str());
|
|||
|
|
sql_ctl->DeleteTableData(T_SENSOR_INFO(TNAME), whereCon1);
|
|||
|
|
sql_ctl->DeleteTableData(T_DATA_INFO(TNAME), whereCon1);
|
|||
|
|
sql_ctl->DeleteTableData(T_DATASTATIC_INFO(TNAME), whereCon1);
|
|||
|
|
sql_ctl->DeleteTableData(T_DATANODE_TIME(TNAME), whereCon1);
|
|||
|
|
char szTableName[50]={0x00};
|
|||
|
|
sprintf(szTableName,"DROP TABLE t_data_%s",vecRes[i][0].c_str());
|
|||
|
|
sql_ctl->CreateTable(szTableName, 0);
|
|||
|
|
memset(szTableName,0x00,sizeof(szTableName));
|
|||
|
|
sprintf(szTableName,"DROP TABLE t_dataStatic_%s",vecRes[i][0].c_str());
|
|||
|
|
sql_ctl->CreateTable(szTableName, 0);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
string hardVersion = vecRes[0][2];
|
|||
|
|
string softVersion = vecRes[0][3];
|
|||
|
|
if((hardVersion == "3.0" && compareVersions(softVersion,"3.6") == -1) ||
|
|||
|
|
(hardVersion == "4.0" && compareVersions(softVersion,"4.6") == -1)){
|
|||
|
|
memcpy(MeasurementID , vecRes[0][0].c_str(),sizeof(MeasurementID));
|
|||
|
|
}
|
|||
|
|
std::string strNodeName(NodeName);
|
|||
|
|
print_info("strNodeName = %s\n",strNodeName.c_str());
|
|||
|
|
solve(gbkNodeName,NodeName);
|
|||
|
|
print_info("gbkNodeName = %s\n",gbkNodeName);
|
|||
|
|
string utfNodeName = GBKToUTF8(gbkNodeName);
|
|||
|
|
print_info("NodeName = %s\n",NodeName);
|
|||
|
|
print_info("whereCon = %s\n",whereCon);
|
|||
|
|
sprintf(uplCon,"dataNodeName = '%s' , MeasurementID = '%s',NodeWaveSend = '%s'",gbkNodeName,MeasurementID,nodeWaveSend);
|
|||
|
|
iRet = sql_ctl->UpdateTableData(T_SENSOR_INFO(TNAME),uplCon,whereCon,0);
|
|||
|
|
string strData = sql_ctl->GetNodeConfigureInfor(whereCon);
|
|||
|
|
iRet = data_publish(strData.c_str(), GlobalConfig::Topic_G.mPubConfig.c_str());
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::DealDataNodeInfo(const char *pData)
|
|||
|
|
{
|
|||
|
|
print_info("recv remote zigbee module info\n");
|
|||
|
|
RecvData * pRecvData = (RecvData *)pData;
|
|||
|
|
char buf[32] = {0};
|
|||
|
|
char chTemp = pRecvData->Data[0];//设备状态标志 1 byte
|
|||
|
|
DataNodeInfo dataNodeInfo;
|
|||
|
|
dataNodeInfo.EquipSta = GET_BIT(chTemp, 2 );
|
|||
|
|
dataNodeInfo.TemTopFlag = GET_BIT(chTemp, 3 );
|
|||
|
|
dataNodeInfo.TemBotFlag = GET_BIT(chTemp , 4);
|
|||
|
|
dataNodeInfo.ZigbeeFlag = GET_BIT(chTemp , 5);
|
|||
|
|
dataNodeInfo.AccFlag = GET_BIT(chTemp ,6);
|
|||
|
|
dataNodeInfo.InitFlag = GET_BIT(chTemp ,7);
|
|||
|
|
|
|||
|
|
sprintf(buf, "%02x%02x%02x%02x%02x%02x%02x%02x", pRecvData->Data[1], pRecvData->Data[2], pRecvData->Data[3], pRecvData->Data[4],
|
|||
|
|
pRecvData->Data[5], pRecvData->Data[6], pRecvData->Data[7],pRecvData->Data[8]);
|
|||
|
|
dataNodeInfo.ZigbeeLongAddr = std::string(buf);//Zigbee MAC 8 byte
|
|||
|
|
|
|||
|
|
chTemp = pRecvData->Data[9];//硬件版本 1 byte
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%.1f", 0.1*chTemp);
|
|||
|
|
dataNodeInfo.HardVersion = std::string(buf);
|
|||
|
|
|
|||
|
|
chTemp = pRecvData->Data[10];//软件版本 1 byte
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
//sprintf(buf, "%02x", chTemp);
|
|||
|
|
sprintf(buf, "%.1f", 0.1*chTemp);
|
|||
|
|
dataNodeInfo.SoftVersion = std::string(buf);
|
|||
|
|
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%d", BUILD_UINT32(pRecvData->Data[11], pRecvData->Data[12], pRecvData->Data[13], pRecvData->Data[14]));
|
|||
|
|
dataNodeInfo.BpNo = std::string(buf);//生产批号 4 byte
|
|||
|
|
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%d", BUILD_UINT32(pRecvData->Data[15], pRecvData->Data[16], pRecvData->Data[17], pRecvData->Data[18]));
|
|||
|
|
dataNodeInfo.SerialNo = std::string(buf);//生产序列号 4 byte
|
|||
|
|
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%d", BUILD_UINT32(pRecvData->Data[19], pRecvData->Data[20], pRecvData->Data[21], pRecvData->Data[22]));
|
|||
|
|
dataNodeInfo.FirstPowerTime = std::string(buf);//首次上电日期 4 byte
|
|||
|
|
|
|||
|
|
//23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38=>序号13 无线信号强度
|
|||
|
|
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%d", BUILD_UINT32(pRecvData->Data[23], pRecvData->Data[24], pRecvData->Data[25], pRecvData->Data[26]));
|
|||
|
|
dataNodeInfo.WakeupTime = atoi(buf);//唤醒次数 4 byte
|
|||
|
|
printf("WakeupTime = %d\n",dataNodeInfo.WakeupTime);
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%d", BUILD_UINT32(pRecvData->Data[27], pRecvData->Data[28], pRecvData->Data[29], pRecvData->Data[30]));
|
|||
|
|
dataNodeInfo.StaticTime = atoi(buf);//特征值发送次数 4 byte
|
|||
|
|
printf("StaticTime = %d\n",dataNodeInfo.StaticTime);
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
// sprintf(buf, "%d", BUILD_UINT32(pRecvData->Data[31], pRecvData->Data[32], pRecvData->Data[33], pRecvData->Data[34]));
|
|||
|
|
|
|||
|
|
dataNodeInfo.WaveTime = BUILD_UINT32(pRecvData->Data[31], pRecvData->Data[32], pRecvData->Data[33], pRecvData->Data[34]);//原始波形发送次数 4 byte
|
|||
|
|
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
// sprintf(buf, "%02x%02x", pRecvData->Data[35], pRecvData->Data[36]);
|
|||
|
|
dataNodeInfo.BateryV = BUILD_UINT16(pRecvData->Data[35],pRecvData->Data[36]);//电池电压 2 byte
|
|||
|
|
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%02x", pRecvData->Data[37]);
|
|||
|
|
dataNodeInfo.ProductNo = std::string(buf);//产品型号 1 byte
|
|||
|
|
|
|||
|
|
// 获取 RSSI
|
|||
|
|
chTemp = pRecvData->Data[38];
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%d", chTemp);
|
|||
|
|
dataNodeInfo.RSSI = atoi(buf); //无线信号强度 1 byte
|
|||
|
|
|
|||
|
|
chTemp = pRecvData->Data[39];
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%02x", chTemp);
|
|||
|
|
dataNodeInfo.ConfigFlag = ((0 == std::string(buf).compare("aa")) ? 1 : 0); //配置标志 1 byte
|
|||
|
|
|
|||
|
|
chTemp = pRecvData->Data[40];
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%d", chTemp);
|
|||
|
|
dataNodeInfo.FeatureInterVal = atoi(buf); //唤醒周期 1 byte
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
// yxq
|
|||
|
|
sprintf(buf, "%u%u", pRecvData->Data[41],pRecvData->Data[42]);
|
|||
|
|
dataNodeInfo.WaveInterVal = atoi(buf);//原始波形发送周期 2 byte
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[43], pRecvData->Data[44]); //Zigbee PID 2 byte
|
|||
|
|
dataNodeInfo.ZigbeePanId = std::string(buf);
|
|||
|
|
|
|||
|
|
chTemp = pRecvData->Data[45];
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%d", chTemp);
|
|||
|
|
dataNodeInfo.ZigbeeChannel = atoi(buf);//Zigbee 信道 1 byte
|
|||
|
|
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[46], pRecvData->Data[47]);//Zigbee 本地地址 2 byte
|
|||
|
|
|
|||
|
|
dataNodeInfo.ZigbeeShortAddr = std::string(buf);
|
|||
|
|
unsigned char shortAddr[2] = {0x00};
|
|||
|
|
memcpy(shortAddr,(unsigned char*)&pRecvData->Data[46],2);
|
|||
|
|
modify_DistAddr(shortAddr);//修改目标地址
|
|||
|
|
string strTime = GetLocalTimeWithMs();
|
|||
|
|
//LOG_INFO("DealDataNodeInfo modify_DistAddr Time = %s\n",strTime.c_str());
|
|||
|
|
|
|||
|
|
//LOG_INFO("ZigbeeShortAddr = %s,SoftVersion = %s\n",dataNodeInfo.ZigbeeShortAddr.c_str(),dataNodeInfo.SoftVersion.c_str());
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[48], pRecvData->Data[49]);//Zigbee 目标地址 2 byte
|
|||
|
|
dataNodeInfo.ZigbeeDesAddr = std::string(buf);
|
|||
|
|
//print_info("ZigbeeDesAddr = %s\n",buf);
|
|||
|
|
//50 51 52=》序号23 zigbee重试间隔
|
|||
|
|
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%02x", pRecvData->Data[50]);//Zigbee 发射功率 1 byte
|
|||
|
|
dataNodeInfo.ZigbeePower = atoi(buf);
|
|||
|
|
//print_info("ZigbeePower = %s\n",buf);
|
|||
|
|
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%d", BUILD_UINT16(00,pRecvData->Data[51]));//Zigbee 重试次数 1 byte
|
|||
|
|
dataNodeInfo.ZigbeeRetry = atoi(buf);
|
|||
|
|
//print_info("ZigbeeRetry = %s\n",buf);
|
|||
|
|
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%d", BUILD_UINT16(00,pRecvData->Data[52]));//Zigbee 重试间隔 1 byte
|
|||
|
|
dataNodeInfo.ZigbeeRetryGap = atoi(buf);
|
|||
|
|
//print_info("ZigbeeRetryGap = %s\n",buf);
|
|||
|
|
|
|||
|
|
|
|||
|
|
if(dataNodeInfo.ProductNo == "01"){
|
|||
|
|
chTemp = pRecvData->Data[53];
|
|||
|
|
unsigned char range = (chTemp >> 2) & 0x3;
|
|||
|
|
dataNodeInfo.Range = range;
|
|||
|
|
int SamplingRate = (chTemp & 0x3);
|
|||
|
|
print_info("SamplingRate = %d\n",SamplingRate);
|
|||
|
|
if(SamplingRate == 0){
|
|||
|
|
dataNodeInfo.SamplingRate = 3200;
|
|||
|
|
}else if(SamplingRate == 1){
|
|||
|
|
dataNodeInfo.SamplingRate = 6400;
|
|||
|
|
}else if(SamplingRate == 2){
|
|||
|
|
dataNodeInfo.SamplingRate = 12800;
|
|||
|
|
}else if(SamplingRate == 3){
|
|||
|
|
dataNodeInfo.SamplingRate = 25600;
|
|||
|
|
}
|
|||
|
|
}else if(dataNodeInfo.ProductNo == "02"){
|
|||
|
|
chTemp = pRecvData->Data[53];
|
|||
|
|
unsigned char range = (chTemp >> 3) & 0x7;
|
|||
|
|
dataNodeInfo.Range = range;
|
|||
|
|
int SamplingRate = (chTemp & 0x7);
|
|||
|
|
print_info("SamplingRate = %d\n",SamplingRate);
|
|||
|
|
if(SamplingRate == 0){
|
|||
|
|
dataNodeInfo.SamplingRate = 8000;
|
|||
|
|
}else if(SamplingRate == 1){
|
|||
|
|
dataNodeInfo.SamplingRate = 16000;
|
|||
|
|
}else if(SamplingRate == 2){
|
|||
|
|
dataNodeInfo.SamplingRate = 24000;
|
|||
|
|
}else if(SamplingRate == 3){
|
|||
|
|
dataNodeInfo.SamplingRate = 32000;
|
|||
|
|
}else if(SamplingRate == 4){
|
|||
|
|
dataNodeInfo.SamplingRate = 48000;
|
|||
|
|
}else if(SamplingRate == 5){
|
|||
|
|
dataNodeInfo.SamplingRate = 96000;
|
|||
|
|
}else if(SamplingRate == 6){
|
|||
|
|
dataNodeInfo.SamplingRate = 192000;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// 54=》序号25 ACC采样时间
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%u", pRecvData->Data[54]);//ACC 采样时间 1 byte
|
|||
|
|
dataNodeInfo.ACCSampleTime = atoi(buf);
|
|||
|
|
|
|||
|
|
int iTemp = 0;
|
|||
|
|
//使用了55 56 59 60 63 64 67 68 71 72
|
|||
|
|
for (int i = 0; i < 5; i++) {
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[55 + i * 4], pRecvData->Data[55 + i * 4 + 1]);
|
|||
|
|
iTemp = (int)strtol(buf, NULL, 16);
|
|||
|
|
|
|||
|
|
if (0 == i) {
|
|||
|
|
dataNodeInfo.StartBrands = to_string(iTemp);
|
|||
|
|
} else {
|
|||
|
|
dataNodeInfo.StartBrands += ("," + to_string(iTemp));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//使用了57 58 61 62 65 66 69 70 73 74
|
|||
|
|
for (int j = 0; j < 5; j++) {
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[57 + j * 4], pRecvData->Data[57 + j * 4 + 1]);
|
|||
|
|
iTemp = (int)strtol(buf, NULL, 16);
|
|||
|
|
if (0 == j) {
|
|||
|
|
dataNodeInfo.StopBrands = to_string(iTemp);
|
|||
|
|
} else {
|
|||
|
|
dataNodeInfo.StopBrands += ("," + to_string(iTemp));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[75], pRecvData->Data[76]);
|
|||
|
|
iTemp = (int)strtol(buf, NULL, 16);
|
|||
|
|
dataNodeInfo.EnvelopeBandPass = to_string(iTemp);
|
|||
|
|
|
|||
|
|
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[77], pRecvData->Data[78]);
|
|||
|
|
iTemp = (int)strtol(buf, NULL, 16);
|
|||
|
|
dataNodeInfo.EnvelopeBandPass += ("," + to_string(iTemp));
|
|||
|
|
//使用了79 80 81 82 83 84 85 86
|
|||
|
|
for (int j = 0; j < 4; j++) {
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[79 + j * 2], pRecvData->Data[79 + j * 2 + 1]);
|
|||
|
|
iTemp = (int)strtol(buf, NULL, 16);
|
|||
|
|
|
|||
|
|
if (0 == j) {
|
|||
|
|
dataNodeInfo.FaultFrequency = to_string(iTemp);
|
|||
|
|
} else {
|
|||
|
|
dataNodeInfo.FaultFrequency += ("," + to_string(iTemp));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%02x%02x%02x%02x", pRecvData->Data[87], pRecvData->Data[88], pRecvData->Data[89],pRecvData->Data[90]);
|
|||
|
|
long lTimeStamp = strtol(buf, NULL, 16);
|
|||
|
|
dataNodeInfo.ConfigDate = to_string(lTimeStamp);
|
|||
|
|
|
|||
|
|
chTemp = pRecvData->Data[91];
|
|||
|
|
memset(buf, 0, 32);
|
|||
|
|
sprintf(buf, "%d", chTemp);
|
|||
|
|
dataNodeInfo.VIntegralFilterFrequency = atoi(buf);
|
|||
|
|
|
|||
|
|
char whereCon[64] = {0};
|
|||
|
|
sprintf(whereCon, "dataNodeNo='%s'", dataNodeInfo.ZigbeeLongAddr.c_str());
|
|||
|
|
if (sql_ctl->GetTableRows(T_SENSOR_INFO(TNAME), whereCon) > 0) {
|
|||
|
|
|
|||
|
|
char updateSql[1024] = { 0 };
|
|||
|
|
sprintf(updateSql, " initFlag = '%d',accFlag = '%d',zigbeeFlag = '%d',temTopFlag = '%d',temBotFlag = '%d',equipSta = '%d',\
|
|||
|
|
hardVersion = '%s',softVersion = '%s',bpNo = '%s',serialNo = '%s',firstPowerTime = '%s',WakeupTime = '%d',\
|
|||
|
|
StaticTime = '%d',WaveTime = '%d',BateryV = '%d',ProductNo = '%s',configFlag = '%d',startBrands = '%s',\
|
|||
|
|
stopBrands = '%s',featureInterVal = '%u',waveInterVal = '%d',samplingRate = '%d',scope = '%s',range = '%d',envelopeBandPass = '%s',faultFrequency = '%s',\
|
|||
|
|
zigbeePanId = '%s',zigbeeChannel = '%d',zigbeeShortAddr = '%s',zigbeeLongAddr = '%s',zigbeeDesAddr = '%s',\
|
|||
|
|
ZigbeePower = '%d',ZigbeeRetry = '%d',ZigbeeRetryGap = '%d',ACCSampleTime = '%d',status = '%s',timeStamp = '%s',viff = '%d',RSSI = '0,%d',UpdateFlag = 1",
|
|||
|
|
dataNodeInfo.InitFlag, dataNodeInfo.AccFlag, dataNodeInfo.ZigbeeFlag, dataNodeInfo.TemTopFlag, dataNodeInfo.TemBotFlag,dataNodeInfo.EquipSta,\
|
|||
|
|
dataNodeInfo.HardVersion.c_str(), dataNodeInfo.SoftVersion.c_str(), dataNodeInfo.BpNo.c_str(), dataNodeInfo.SerialNo.c_str(), dataNodeInfo.FirstPowerTime.c_str(), dataNodeInfo.WakeupTime,\
|
|||
|
|
dataNodeInfo.StaticTime,dataNodeInfo.WaveTime,dataNodeInfo.BateryV,dataNodeInfo.ProductNo.c_str(),dataNodeInfo.ConfigFlag, dataNodeInfo.StartBrands.c_str(), \
|
|||
|
|
dataNodeInfo.StopBrands.c_str(), dataNodeInfo.FeatureInterVal, dataNodeInfo.WaveInterVal, dataNodeInfo.SamplingRate,"",dataNodeInfo.Range, dataNodeInfo.EnvelopeBandPass.c_str(), dataNodeInfo.FaultFrequency.c_str(),\
|
|||
|
|
dataNodeInfo.ZigbeePanId.c_str(), dataNodeInfo.ZigbeeChannel, dataNodeInfo.ZigbeeShortAddr.c_str(), dataNodeInfo.ZigbeeLongAddr.c_str(), dataNodeInfo.ZigbeeDesAddr.c_str(), \
|
|||
|
|
dataNodeInfo.ZigbeePower,dataNodeInfo.ZigbeeRetry,dataNodeInfo.ZigbeeRetryGap,dataNodeInfo.ACCSampleTime,"1", dataNodeInfo.ConfigDate.c_str(),dataNodeInfo.VIntegralFilterFrequency,dataNodeInfo.RSSI);
|
|||
|
|
sprintf(whereCon,"dataNodeNo = '%s'",dataNodeInfo.ZigbeeLongAddr.c_str());
|
|||
|
|
sql_ctl->UpdateTableData(T_SENSOR_INFO(TNAME), updateSql, whereCon);
|
|||
|
|
}else{
|
|||
|
|
char insertSql[1024] = { 0 };
|
|||
|
|
sprintf(insertSql, " '%s','%s','%d','%d','%d','%d','%d','%d',\
|
|||
|
|
'%s','%s','%s','%s','%s','%d',\
|
|||
|
|
'%d','%d','%d','%s','%d','%s',\
|
|||
|
|
'%s','%u','%d','%d','%s','%d', '%s', '%s',\
|
|||
|
|
'%s','%d','%s','%s','%s',\
|
|||
|
|
'%d','%d','%d','%d','%s','%s', '%d', '0,%d','1','0,0','','',''",
|
|||
|
|
dataNodeInfo.ZigbeeLongAddr.c_str(), " ", dataNodeInfo.InitFlag, dataNodeInfo.AccFlag, dataNodeInfo.ZigbeeFlag, dataNodeInfo.TemTopFlag, dataNodeInfo.TemBotFlag,dataNodeInfo.EquipSta,\
|
|||
|
|
dataNodeInfo.HardVersion.c_str(), dataNodeInfo.SoftVersion.c_str(), dataNodeInfo.BpNo.c_str(), dataNodeInfo.SerialNo.c_str(), dataNodeInfo.FirstPowerTime.c_str(), dataNodeInfo.WakeupTime,\
|
|||
|
|
dataNodeInfo.StaticTime,dataNodeInfo.WaveTime,dataNodeInfo.BateryV,dataNodeInfo.ProductNo.c_str(),dataNodeInfo.ConfigFlag, dataNodeInfo.StartBrands.c_str(), \
|
|||
|
|
dataNodeInfo.StopBrands.c_str(), dataNodeInfo.FeatureInterVal, dataNodeInfo.WaveInterVal, dataNodeInfo.SamplingRate,"",dataNodeInfo.Range, dataNodeInfo.EnvelopeBandPass.c_str(), dataNodeInfo.FaultFrequency.c_str(),\
|
|||
|
|
dataNodeInfo.ZigbeePanId.c_str(), dataNodeInfo.ZigbeeChannel, dataNodeInfo.ZigbeeShortAddr.c_str(), dataNodeInfo.ZigbeeLongAddr.c_str(), dataNodeInfo.ZigbeeDesAddr.c_str(), \
|
|||
|
|
dataNodeInfo.ZigbeePower,dataNodeInfo.ZigbeeRetry,dataNodeInfo.ZigbeeRetryGap,dataNodeInfo.ACCSampleTime,"1", dataNodeInfo.ConfigDate.c_str(),dataNodeInfo.VIntegralFilterFrequency,dataNodeInfo.RSSI);
|
|||
|
|
sql_ctl->InsertData(T_SENSOR_INFO(TNAME), insertSql);
|
|||
|
|
}
|
|||
|
|
char szTableName[50]={0x00};
|
|||
|
|
sprintf(szTableName,"t_data_%s",dataNodeInfo.ZigbeeLongAddr.c_str());
|
|||
|
|
sql_ctl->Createtable(szTableName);
|
|||
|
|
memset(szTableName,0x00,sizeof(szTableName));
|
|||
|
|
sprintf(szTableName,"t_dataStatic_%s",dataNodeInfo.ZigbeeLongAddr.c_str());
|
|||
|
|
sql_ctl->CreatedataStatictable(szTableName);
|
|||
|
|
Json::Value jsonVal;
|
|||
|
|
jsonVal.clear();
|
|||
|
|
jsonVal["cmd"] = "26";
|
|||
|
|
|
|||
|
|
Json::Value jsBody;
|
|||
|
|
jsBody["dataNodeGatewayNo"] = GlobalConfig::MacAddr_G;
|
|||
|
|
jsBody["dataNodeNo"] = dataNodeInfo.ZigbeeLongAddr;
|
|||
|
|
jsBody["type"] = "insert";
|
|||
|
|
|
|||
|
|
Json::Value jsSensorData;
|
|||
|
|
jsSensorData["dataNodeNo"] = dataNodeInfo.ZigbeeLongAddr;
|
|||
|
|
jsSensorData["dataNodeName"] = "";
|
|||
|
|
jsSensorData["initFlag"] = dataNodeInfo.InitFlag;
|
|||
|
|
jsSensorData["accFlag"] = dataNodeInfo.AccFlag;
|
|||
|
|
jsSensorData["zigbeeFlag"] = dataNodeInfo.ZigbeeFlag;
|
|||
|
|
jsSensorData["temTopFlag"] = dataNodeInfo.TemTopFlag;
|
|||
|
|
jsSensorData["temBotFlag"] = dataNodeInfo.TemBotFlag;
|
|||
|
|
jsSensorData["equipsta"] = dataNodeInfo.EquipSta;
|
|||
|
|
jsSensorData["hardVersion"] = dataNodeInfo.HardVersion;
|
|||
|
|
jsSensorData["softVersion"] = dataNodeInfo.SoftVersion;
|
|||
|
|
jsSensorData["bpNo"] = dataNodeInfo.BpNo;
|
|||
|
|
jsSensorData["serialNo"] = dataNodeInfo.SerialNo;
|
|||
|
|
jsSensorData["firstPowerTime"] = dataNodeInfo.FirstPowerTime;
|
|||
|
|
jsSensorData["configFlag"] = dataNodeInfo.ConfigFlag;
|
|||
|
|
jsSensorData["startBrands"] = dataNodeInfo.StartBrands;
|
|||
|
|
jsSensorData["stopBrands"] = dataNodeInfo.StopBrands;
|
|||
|
|
jsSensorData["featureInterVal"] = dataNodeInfo.FeatureInterVal;
|
|||
|
|
jsSensorData["waveInterVal"] = dataNodeInfo.WaveInterVal;
|
|||
|
|
jsSensorData["samplingRate"] = dataNodeInfo.SamplingRate;
|
|||
|
|
jsSensorData["range"] = dataNodeInfo.Range;
|
|||
|
|
jsSensorData["envelopeBandPass"] = dataNodeInfo.EnvelopeBandPass;
|
|||
|
|
jsSensorData["faultFrequency"] = dataNodeInfo.FaultFrequency;
|
|||
|
|
jsSensorData["zigbeePanId"] = dataNodeInfo.ZigbeePanId;
|
|||
|
|
jsSensorData["zigbeeChannel"] = dataNodeInfo.ZigbeeChannel;
|
|||
|
|
jsSensorData["zigbeeAddr"] = dataNodeInfo.ZigbeeLongAddr;
|
|||
|
|
jsSensorData["zigbeeDesAddr"] = dataNodeInfo.ZigbeeDesAddr;
|
|||
|
|
jsSensorData["status"] = 1;
|
|||
|
|
jsSensorData["timeStamp"] = dataNodeInfo.ConfigDate;
|
|||
|
|
jsSensorData["VIntegralFilterFrequency"] = dataNodeInfo.VIntegralFilterFrequency;
|
|||
|
|
jsSensorData["RSSI"] = dataNodeInfo.RSSI;
|
|||
|
|
|
|||
|
|
jsBody["dataNodeInfo"] = jsSensorData;
|
|||
|
|
|
|||
|
|
Json::FastWriter showValue;
|
|||
|
|
std::string dataBody = showValue.write(jsBody);
|
|||
|
|
jsonVal["cmdBody"] = dataBody;
|
|||
|
|
std::string strCmd26 = showValue.write(jsonVal);
|
|||
|
|
//传感器发来的数据包中的表示设备信息的数据转化为json格式后,通过调用data_publish将数据传给mqttclient : Topic:wireless/cmd/60294D203717
|
|||
|
|
data_publish(strCmd26.c_str(), GlobalConfig::Topic_G.mPubCmd.c_str());
|
|||
|
|
|
|||
|
|
print_info("remote wireless sensor device info AccFlag : %d EquipSta : %d BpNo : %s ConfigFlag : %d EnvelopeBandPass : %s FaultFrequency : %s FeatureInterVal : %u FirstPowerTime : %s HardVersion : %s InitFlag : %d SamplingRate : %d range : %d SerialNo : %s\
|
|||
|
|
SoftVersion : %s StartBrands : %s StopBrands : %s TemBotFlag : %d TemTopFlag : %d WaveInterVal : %d ZigbeeChannel : %d ZigbeeDesAddr : %s ZigbeeFlag : %d ZigbeeLongAddr : %s panid : %s ZigbeeShortAddr : %s Configdate : %s vintegralfilterfrequency : %d RSSI : %d \n", \
|
|||
|
|
dataNodeInfo.AccFlag, dataNodeInfo.EquipSta, dataNodeInfo.BpNo.c_str(), dataNodeInfo.ConfigFlag, dataNodeInfo.EnvelopeBandPass.c_str(), dataNodeInfo.FaultFrequency.c_str(),\
|
|||
|
|
dataNodeInfo.FeatureInterVal, dataNodeInfo.FirstPowerTime.c_str(), dataNodeInfo.HardVersion.c_str(), dataNodeInfo.InitFlag, dataNodeInfo.SamplingRate, dataNodeInfo.Range, dataNodeInfo.SerialNo.c_str(),\
|
|||
|
|
dataNodeInfo.SoftVersion.c_str(), dataNodeInfo.StartBrands.c_str(), dataNodeInfo.StopBrands.c_str(), dataNodeInfo.TemBotFlag, dataNodeInfo.TemTopFlag, dataNodeInfo.WaveInterVal,\
|
|||
|
|
dataNodeInfo.ZigbeeChannel, dataNodeInfo.ZigbeeDesAddr.c_str(), dataNodeInfo.ZigbeeFlag, dataNodeInfo.ZigbeeLongAddr.c_str(), dataNodeInfo.ZigbeePanId.c_str(), dataNodeInfo.ZigbeeShortAddr.c_str(), dataNodeInfo.ConfigDate.c_str(), dataNodeInfo.VIntegralFilterFrequency, dataNodeInfo.RSSI);
|
|||
|
|
|
|||
|
|
if (g_mapCompress.find(dataNodeInfo.ZigbeeShortAddr) == g_mapCompress.end()){
|
|||
|
|
|
|||
|
|
compressWaveChannel tempchannel;
|
|||
|
|
g_mapCompress.insert(std::make_pair(dataNodeInfo.ZigbeeShortAddr,tempchannel));
|
|||
|
|
print_info("new Node,size = %d\n",g_mapCompress.size());
|
|||
|
|
}
|
|||
|
|
LOG_INFO("DealDataNodeInfo %s \n",dataNodeInfo.ZigbeeShortAddr.c_str());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::RecordBattery(string & strLongAddr,DataRecvStatic& dataStatic,string& nowTimetamp)
|
|||
|
|
{
|
|||
|
|
char insertSql[1024] = { 0 };
|
|||
|
|
sprintf(insertSql, "'%s','%d','%f','%f','%f','%d','','','%s'",
|
|||
|
|
strLongAddr.c_str(), dataStatic.Dip, dataStatic.TemBot,dataStatic.nodeWorkTime,dataStatic.nodeSendTime, dataStatic.Voltage,nowTimetamp.c_str());
|
|||
|
|
sql_ctl->InsertData(T_BATTERY_INFO(TNAME), insertSql);
|
|||
|
|
}
|
|||
|
|
void Uart::DealDataNodeFeature(const char *pData, int flag)
|
|||
|
|
{
|
|||
|
|
print_info("recv feature\n");
|
|||
|
|
RecvData * pRecvData = (RecvData *)pData;
|
|||
|
|
char whereCon[1024] = {0};
|
|||
|
|
char updateSql[1024] = { 0 };
|
|||
|
|
char buf[20] = {0x00};
|
|||
|
|
int nodeResend = 0,timing = 0;
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->ShortAddr[0], pRecvData->ShortAddr[1]);
|
|||
|
|
if (flag == 1)
|
|||
|
|
{
|
|||
|
|
LOG_INFO("DealDataNodeFeature %02x%02x, %d\n",pRecvData->ShortAddr[0], pRecvData->ShortAddr[1],flag);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (bSendTimeStamp)//波形处理中
|
|||
|
|
return;
|
|||
|
|
std::string strShortAddr = std::string(buf);
|
|||
|
|
print_info("zigbeeShortAddr='%s'\n", strShortAddr.c_str());
|
|||
|
|
char getLongAddr_sql[32] = { 0 };
|
|||
|
|
//根据数据包中的传感器的短地址获取数据库中长地址(MAC),在下面判断该传感器是否存在,如果不存在则把数据包丢弃
|
|||
|
|
sprintf(getLongAddr_sql, "zigbeeShortAddr='%s'", strShortAddr.c_str());
|
|||
|
|
//std::string strLongAddr = sql_ctl->GetData(T_SENSOR_INFO(TNAME), T_SENSOR_INFO(ZIGBEELONGADDR), getLongAddr_sql);
|
|||
|
|
vec_t vecResult = sql_ctl->GetDataSingleLine(T_SENSOR_INFO(TNAME)," softVersion,dataNodeNo,MeasurementID ",getLongAddr_sql);
|
|||
|
|
|
|||
|
|
if (vecResult.size() < 1) {
|
|||
|
|
LOG_ERROR("device info not found %02x%02x\n",pRecvData->ShortAddr[0], pRecvData->ShortAddr[1]);
|
|||
|
|
print_error("device info not found\n");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
print_info("--------->the remote sensor short addr:%s strLongAddr=%s,softVersion = %s\n",buf,vecResult[1].c_str(),vecResult[0].c_str());
|
|||
|
|
|
|||
|
|
std::string strLongAddr = vecResult[1];
|
|||
|
|
std::string strMeasurementID = vecResult[2];
|
|||
|
|
if (1 == flag) {
|
|||
|
|
|
|||
|
|
tcflush(fd,TCIOFLUSH);
|
|||
|
|
|
|||
|
|
if (!bSendTimeStamp)
|
|||
|
|
{
|
|||
|
|
bSendTimeStamp = true;
|
|||
|
|
modify_distaddr_info(0x9999,"",pRecvData->ShortAddr);//临时参数配置
|
|||
|
|
mssleep(10000);
|
|||
|
|
|
|||
|
|
LOG_DEBUG("Zigbee Signal !\n");
|
|||
|
|
int Times = 0;
|
|||
|
|
mssleep(20000);
|
|||
|
|
while(Times < 3 ){
|
|||
|
|
getZigbeeSignal(pRecvData->ShortAddr);
|
|||
|
|
Times ++ ;
|
|||
|
|
mssleep(20000);
|
|||
|
|
}
|
|||
|
|
mssleep(10000);
|
|||
|
|
timing = UpdateWirelessNodeTime((unsigned char*)pRecvData->ShortAddr,0);
|
|||
|
|
}else
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//modify_distaddr_info(0x9999,"",pRecvData->ShortAddr);//临时参数配置
|
|||
|
|
|
|||
|
|
GlobalConfig::ZigbeeInfo_G.MyAddr = "9999";
|
|||
|
|
GlobalConfig::Zigbee_G.MyAddr = 0x9999;
|
|||
|
|
string strTime = GetLocalTimeWithMs();
|
|||
|
|
|
|||
|
|
m_strDestShortAddr = std::string(buf);
|
|||
|
|
|
|||
|
|
bool isUpdate = ReadUpdatePackge(pRecvData->ShortAddr);
|
|||
|
|
bUpdatePre = isUpdate;
|
|||
|
|
if(!isUpdate){
|
|||
|
|
int iRet = UpdateConfig(pRecvData->ShortAddr);
|
|||
|
|
}
|
|||
|
|
if(isUpdate || bUpdateconfig){
|
|||
|
|
|
|||
|
|
}else{
|
|||
|
|
LOG_DEBUG("DealDataNodeFeature %02x%02x,localaddr %02x%02x \n",pRecvData->ShortAddr[0], pRecvData->ShortAddr[1],\
|
|||
|
|
UINT16_HIGH(GlobalConfig::Zigbee_G.MyAddr),UINT16_LOW(GlobalConfig::Zigbee_G.MyAddr));
|
|||
|
|
// 进入传输原始数据状态,启动计数 60秒
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = ENTER_TRANSMITTING_STATUS;
|
|||
|
|
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
|||
|
|
}
|
|||
|
|
unsigned char compressChannel = pRecvData->Data[34];
|
|||
|
|
compressWaveChannel tempchannel;
|
|||
|
|
tempchannel.compressChannelX = GET_BIT(compressChannel ,0);
|
|||
|
|
tempchannel.compressChannelY = GET_BIT(compressChannel ,2);
|
|||
|
|
tempchannel.compressChannelZ = GET_BIT(compressChannel ,4);
|
|||
|
|
tempchannel.CountX = BUILD_UINT16(pRecvData->Data[55],pRecvData->Data[54]);
|
|||
|
|
tempchannel.CountY = BUILD_UINT16(pRecvData->Data[57],pRecvData->Data[56]);
|
|||
|
|
tempchannel.CountZ = BUILD_UINT16(pRecvData->Data[59],pRecvData->Data[58]);
|
|||
|
|
g_mapCompress[strShortAddr] = tempchannel;
|
|||
|
|
|
|||
|
|
print_info("count X = %d,Y = %d,Z = %d\n",tempchannel.CountX,tempchannel.CountY,tempchannel.CountZ);
|
|||
|
|
print_info("compress X = %d,Y = %d,Z = %d \n",tempchannel.compressChannelX,tempchannel.compressChannelY,tempchannel.compressChannelZ);
|
|||
|
|
}else{
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
memset(updateSql,0x00,sizeof(updateSql));
|
|||
|
|
sprintf(whereCon, "zigbeeShortAddr='%s'", strShortAddr.c_str());
|
|||
|
|
sprintf(updateSql, " StaticTime = StaticTime + 1");
|
|||
|
|
sql_ctl->UpdateTableData(T_SENSOR_INFO(TNAME), updateSql, whereCon);
|
|||
|
|
//string strData = sql_ctl->GetNodeConfigureInfor(whereCon);
|
|||
|
|
//data_publish(strData.c_str(), GlobalConfig::Topic_G.mPubConfig.c_str());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (vecResult[0] == "3.0" || vecResult[0] == "4.0"){
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
long staticIndex = BUILD_UINT32(pRecvData->Data[29], pRecvData->Data[28],pRecvData->Data[27], pRecvData->Data[26]);
|
|||
|
|
|
|||
|
|
print_info("staticIndex = %d\n",staticIndex);
|
|||
|
|
|
|||
|
|
|
|||
|
|
//LOG_INFO("staticIndex = %d\n",staticIndex);
|
|||
|
|
|
|||
|
|
char localtimestamp[32] = { 0 };
|
|||
|
|
GetTimeNet(localtimestamp, 1);
|
|||
|
|
std::string nowTimetamp = std::string(localtimestamp);
|
|||
|
|
strTimetamp = nowTimetamp;
|
|||
|
|
|
|||
|
|
int iTemp = 0;
|
|||
|
|
unsigned char highbit = 0;
|
|||
|
|
unsigned int lowbit = 0;
|
|||
|
|
float n = 0;
|
|||
|
|
|
|||
|
|
DataRecvStatic dataStatic;
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[5], pRecvData->Data[4]);
|
|||
|
|
print_blue("!!!!!!!!!!!!!!!!!!!!!!%s\n",buf);
|
|||
|
|
iTemp = (int)strtol(buf, NULL, 16);
|
|||
|
|
dataStatic.Dip = iTemp;
|
|||
|
|
|
|||
|
|
int fTemp = 0;
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[1], pRecvData->Data[0]);
|
|||
|
|
print_blue("@@@@@@@@@@@@@@@@@%s\n",buf);
|
|||
|
|
iTemp = (int)strtol(buf, NULL, 16);
|
|||
|
|
if (iTemp < 0x8000) {
|
|||
|
|
fTemp = iTemp ;
|
|||
|
|
} else {
|
|||
|
|
fTemp = (((~iTemp)&0xffff) + 1)* (-1);
|
|||
|
|
}
|
|||
|
|
dataStatic.TemBot = fTemp * 0.0625;//设备温度
|
|||
|
|
|
|||
|
|
fTemp = 0;
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[3], pRecvData->Data[2]);
|
|||
|
|
iTemp = (int)strtol(buf, NULL, 16);
|
|||
|
|
if (iTemp < 0x8000) {
|
|||
|
|
fTemp = iTemp ;
|
|||
|
|
} else {
|
|||
|
|
fTemp = (((~iTemp)&0xffff) + 1) * (-1);
|
|||
|
|
}
|
|||
|
|
dataStatic.TemTop = fTemp * 0.0625;//环境温度
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[7], pRecvData->Data[6]);
|
|||
|
|
iTemp = (int)strtol(buf, NULL, 16);
|
|||
|
|
dataStatic.Voltage = iTemp;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[31], pRecvData->Data[30]);
|
|||
|
|
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataStatic.nodeWorkTime = lowbit * n;
|
|||
|
|
|
|||
|
|
print_info("workTime = %f\n",dataStatic.nodeWorkTime);
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[33], pRecvData->Data[32]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataStatic.nodeSendTime = lowbit * n;
|
|||
|
|
print_info("SendTime = %f\n",dataStatic.nodeSendTime );
|
|||
|
|
dataStatic.nodeWorkTime = dataStatic.nodeWorkTime - dataStatic.nodeSendTime;
|
|||
|
|
|
|||
|
|
RecordBattery(strLongAddr,dataStatic,nowTimetamp);
|
|||
|
|
|
|||
|
|
char szTableName[50]={0x00},szTableNameStatic[50]={0x00},szTableNameData[50]={0x00};
|
|||
|
|
sprintf(szTableName,"t_dataStatic_%s",strLongAddr.c_str());
|
|||
|
|
memcpy(szTableNameStatic,szTableName,sizeof(szTableNameStatic));
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
|
|||
|
|
sprintf(whereCon,"StaticIndex = %d",staticIndex);
|
|||
|
|
int count = sql_ctl->GetTableRows(szTableNameStatic, whereCon);//避免重复数据
|
|||
|
|
sprintf(szTableNameData,"t_data_%s",strLongAddr.c_str());
|
|||
|
|
|
|||
|
|
int count2 = sql_ctl->GetTableRows(szTableNameData, whereCon);
|
|||
|
|
if(count > 0 || count2 > 0){
|
|||
|
|
char logInfo[20]={0x00};
|
|||
|
|
sprintf(logInfo,"ShortAddr = %s,staticIndex = %d,staticData = %d, data = %d",strShortAddr.c_str(),staticIndex,count,count2);
|
|||
|
|
LOG_DEBUG(logInfo);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
///////////////////////////////////////////////////////////// for V2.0.3 upgrade to V3.0
|
|||
|
|
std::string strTmp = "";
|
|||
|
|
char sztmp[100]={0x00};
|
|||
|
|
strTmp = "name = '" + string(szTableNameStatic)+ "' and sql LIKE '%nodeResend%' ";
|
|||
|
|
|
|||
|
|
int row = sql_ctl->GetTableRows(" sqlite_master ",strTmp.c_str());
|
|||
|
|
print_info("row1 = %d\n",row);
|
|||
|
|
if(row == 0){
|
|||
|
|
memset(sztmp,0x00,sizeof(sztmp));
|
|||
|
|
sprintf(sztmp,"ALTER TABLE %s ADD COLUMN 'nodeResend'",szTableNameStatic);
|
|||
|
|
sql_ctl->CreateTable(sztmp);
|
|||
|
|
}
|
|||
|
|
// strTmp = "name = '" + string(szTableNameStatic)+ "' and sql LIKE '%zigbeeRSSIType%' ";
|
|||
|
|
// row = sql_ctl->GetTableRows(" sqlite_master ",strTmp.c_str());
|
|||
|
|
// print_info("row2 = %d\n",row);
|
|||
|
|
// if(row == 0){
|
|||
|
|
// memset(sztmp,0x00,sizeof(sztmp));
|
|||
|
|
// sprintf(sztmp,"ALTER TABLE %s ADD COLUMN 'zigbeeRSSIType'",szTableNameStatic);
|
|||
|
|
// sql_ctl->CreateTable(sztmp);
|
|||
|
|
// }
|
|||
|
|
strTmp = "name = '" + string(szTableNameData)+ "' and sql LIKE '%nodeResend%' ";
|
|||
|
|
row = sql_ctl->GetTableRows(" sqlite_master ",strTmp.c_str());
|
|||
|
|
print_info("row2 = %d\n",row);
|
|||
|
|
if(row == 0){
|
|||
|
|
memset(sztmp,0x00,sizeof(sztmp));
|
|||
|
|
sprintf(sztmp,"ALTER TABLE %s ADD COLUMN 'nodeResend'",szTableNameData);
|
|||
|
|
sql_ctl->CreateTable(sztmp);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
////////////////////////////////////////////////////////////更换电池判断
|
|||
|
|
sprintf(whereCon," dataNodeNo = '%s' and StaticIndex > 0 order by StaticIndex desc LIMIT 0 , 1 ",strLongAddr.c_str());
|
|||
|
|
std::string strStaticIndex = sql_ctl->GetData(szTableNameStatic, "StaticIndex", whereCon);
|
|||
|
|
if(atol(strStaticIndex.c_str()) - staticIndex > 100){
|
|||
|
|
sql_ctl->Deletetable(szTableNameStatic);
|
|||
|
|
sql_ctl->Deletetable(szTableNameData);
|
|||
|
|
LOG_INFO("staticIndexNOW = %d,strStaticIndexLast = %s\n",staticIndex,strStaticIndex.c_str());
|
|||
|
|
}
|
|||
|
|
print_info("NowstaticIndex = %d,RecordStaticIndex = %d",staticIndex,atol(strStaticIndex.c_str()));
|
|||
|
|
if(staticIndex != atol(strStaticIndex.c_str() + 1) &&
|
|||
|
|
strStaticIndex != "" &&
|
|||
|
|
staticIndex < atol(strStaticIndex.c_str()))
|
|||
|
|
{
|
|||
|
|
sprintf(whereCon,"StaticIndex = %d order by StaticIndex desc LIMIT 0 , 1",atol(strStaticIndex.c_str()));
|
|||
|
|
vec_t vecResult = sql_ctl->GetDataSingleLine(szTableNameStatic, "timeStamp,StaticIndex", whereCon);
|
|||
|
|
if(vecResult.size() > 0){
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
sprintf(whereCon,"dataNodeNo = '%s'",strLongAddr.c_str());
|
|||
|
|
string staticInterval = sql_ctl->GetData(T_SENSOR_INFO(TNAME), "featureInterval", whereCon);
|
|||
|
|
long nNowTimetamp = atol(vecResult[0].c_str()) - (atol(staticInterval.c_str()) * \
|
|||
|
|
(atol(vecResult[1].c_str()) - staticIndex)) * 60;
|
|||
|
|
char tmp[10]={0x00};
|
|||
|
|
sprintf(tmp,"%ld",nNowTimetamp);
|
|||
|
|
nowTimetamp = string(tmp);
|
|||
|
|
nodeResend = 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
print_info("nowTimetamp = %s",nowTimetamp.c_str());
|
|||
|
|
// save dataStatic of 7 days
|
|||
|
|
char selectCon[128] = { 0 };
|
|||
|
|
sprintf(selectCon, "channelID='%s' ORDER BY timeStamp ASC LIMIT 0,1",(strMeasurementID + "-S").c_str());
|
|||
|
|
std::string strTime = sql_ctl->GetData(szTableName, "timeStamp", selectCon);
|
|||
|
|
sprintf(whereCon,"channelID='%s' ",(strMeasurementID + "-S").c_str());
|
|||
|
|
int Count = sql_ctl->GetTableRows(szTableName, whereCon);
|
|||
|
|
if(Count == -1){
|
|||
|
|
sql_ctl->CreatedataStatictable(szTableName);
|
|||
|
|
}
|
|||
|
|
print_info("strLongAddr = %s,strTime = %s\n",strLongAddr.c_str(),strTime.c_str());
|
|||
|
|
long lTime = atol(nowTimetamp.c_str())-atol(strTime.c_str());
|
|||
|
|
print_info("lTime = %d,OneWeek = %d\n",lTime,OneWeek);
|
|||
|
|
|
|||
|
|
print_info("dataStatic.TemTop : %f dataStatic.TemBot : %f dataStatic.Dip :%d dataStatic.Voltage : %d\n", dataStatic.TemTop\
|
|||
|
|
, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage);
|
|||
|
|
|
|||
|
|
sprintf(updateSql, "temTop='%f',temBot='%f',dip='%d',voltage='%d',timeStamp='%s',StaticIndex = %d, nodeResend = %d,zigbeeSignal = '',zigbeeSignalNode = '',statisticType = '%d',timing = '%d' ",\
|
|||
|
|
dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, nowTimetamp.c_str(),staticIndex,nodeResend,flag,timing);
|
|||
|
|
sprintf(whereCon, "channelID='%s' ", (strMeasurementID + "-S").c_str());
|
|||
|
|
if ( /*0 == sql_ctl->GetTableRows(T_DATASTATIC_INFO(TNAME), whereCon)*/ (Count * 3 < SAVE_COUNT && lTime < OneWeek ) || strTime.size() == 0 ) {
|
|||
|
|
print_info("insert static data to sql\n");
|
|||
|
|
char insertSql[1024] = { 0 };
|
|||
|
|
sprintf(insertSql, "'%s','%s','%f','%f','%d','%d','',%d,'%s','1',%d,'','%d','%d'",
|
|||
|
|
strLongAddr.c_str(), (strMeasurementID + "-S").c_str(), dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, staticIndex,nowTimetamp.c_str(),nodeResend,flag,timing);
|
|||
|
|
sql_ctl->InsertData(szTableName, insertSql);
|
|||
|
|
|
|||
|
|
if(0 == sql_ctl->GetTableRows(T_DATASTATIC_INFO(TNAME), whereCon)){ // First Connect
|
|||
|
|
char insertSql[1024] = { 0 };
|
|||
|
|
sprintf(insertSql, "'%s','%s','%f','%f','%d','%d','',%d,'%s','1',%d",
|
|||
|
|
strLongAddr.c_str(), (strMeasurementID + "-S").c_str(), dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, staticIndex,nowTimetamp.c_str(),nodeResend);
|
|||
|
|
sql_ctl->InsertData(T_DATASTATIC_INFO(TNAME), insertSql);
|
|||
|
|
sql_ctl->CalculateBattery();
|
|||
|
|
}
|
|||
|
|
else{
|
|||
|
|
memset(updateSql,0x00,sizeof(updateSql));
|
|||
|
|
sprintf(updateSql, "temTop='%f',temBot='%f',dip='%d',voltage='%d',timeStamp='%s',StaticIndex = %d ",\
|
|||
|
|
dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, nowTimetamp.c_str(),staticIndex);
|
|||
|
|
sql_ctl->UpdateTableData(T_DATASTATIC_INFO(TNAME), updateSql, whereCon);
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
sprintf(whereCon, "channelID='%s' and timeStamp = '%s'", (strMeasurementID + "-S").c_str(),strTime.c_str());
|
|||
|
|
print_info("update static data to sql\n");
|
|||
|
|
sql_ctl->UpdateTableData(szTableName, updateSql, whereCon);
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
sprintf(whereCon, "channelID='%s' ", (strMeasurementID + "-S").c_str());
|
|||
|
|
memset(updateSql,0x00,sizeof(updateSql));
|
|||
|
|
sprintf(updateSql, "temTop='%f',temBot='%f',dip='%d',voltage='%d',timeStamp='%s',StaticIndex = %d ",\
|
|||
|
|
dataStatic.TemTop, dataStatic.TemBot, dataStatic.Dip, dataStatic.Voltage, nowTimetamp.c_str(),staticIndex);
|
|||
|
|
sql_ctl->UpdateTableData(T_DATASTATIC_INFO(TNAME), updateSql, whereCon);
|
|||
|
|
}
|
|||
|
|
memset(szTableName,0x00,sizeof(szTableName));
|
|||
|
|
sprintf(szTableName,"t_data_%s",strLongAddr.c_str());
|
|||
|
|
if(Count == -1){
|
|||
|
|
sql_ctl->Createtable(szTableName);
|
|||
|
|
}
|
|||
|
|
DataRecvDym dataDymX;
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[9], pRecvData->Data[8]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymX.DiagnosisPk = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[11], pRecvData->Data[10]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymX.RmsValues = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[13], pRecvData->Data[12]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymX.IntegratPk = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[15], pRecvData->Data[14]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymX.IntegratRMS = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[17], pRecvData->Data[16]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymX.Amp1 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[19], pRecvData->Data[18]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymX.Amp2 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[21], pRecvData->Data[20]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymX.Amp3 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[23], pRecvData->Data[22]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymX.Amp4 = lowbit * n;
|
|||
|
|
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[25], pRecvData->Data[24]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymX.Amp5 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
// sprintf(buf, "%02x%02x", pRecvData->Data[27], pRecvData->Data[26]);
|
|||
|
|
// iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
// highbit = iTemp >> 14 & 0x3;
|
|||
|
|
// lowbit = iTemp & 0x3fff;
|
|||
|
|
// switch (highbit)
|
|||
|
|
// {
|
|||
|
|
// case 0:
|
|||
|
|
// n = 0.0001;
|
|||
|
|
// break;
|
|||
|
|
// case 1:
|
|||
|
|
// n = 0.01;
|
|||
|
|
// break;
|
|||
|
|
// case 2:
|
|||
|
|
// n = 1;
|
|||
|
|
// break;
|
|||
|
|
// case 3:
|
|||
|
|
// n = 100;
|
|||
|
|
// break;
|
|||
|
|
// }
|
|||
|
|
// dataDymX.EnvelopEnergy = lowbit * n;
|
|||
|
|
|
|||
|
|
dataDymX.EnvelopEnergy = 0;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
// sprintf(buf, "%02x%02x", pRecvData->Data[29], pRecvData->Data[28]);
|
|||
|
|
// iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
// highbit = iTemp >> 14 & 0x3;
|
|||
|
|
// lowbit = iTemp & 0x3fff;
|
|||
|
|
// switch (highbit)
|
|||
|
|
// {
|
|||
|
|
// case 0:
|
|||
|
|
// n = 0.0001;
|
|||
|
|
// break;
|
|||
|
|
// case 1:
|
|||
|
|
// n = 0.01;
|
|||
|
|
// break;
|
|||
|
|
// case 2:
|
|||
|
|
// n = 1;
|
|||
|
|
// break;
|
|||
|
|
// case 3:
|
|||
|
|
// n = 100;
|
|||
|
|
// break;
|
|||
|
|
// }
|
|||
|
|
// dataDymX.Phase1 = lowbit * n;
|
|||
|
|
|
|||
|
|
dataDymX.Phase1 = 0;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
// sprintf(buf, "%02x%02x", pRecvData->Data[31], pRecvData->Data[30]);
|
|||
|
|
// iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
// highbit = iTemp >> 14 & 0x3;
|
|||
|
|
// lowbit = iTemp & 0x3fff;
|
|||
|
|
// switch (highbit)
|
|||
|
|
// {
|
|||
|
|
// case 0:
|
|||
|
|
// n = 0.0001;
|
|||
|
|
// break;
|
|||
|
|
// case 1:
|
|||
|
|
// n = 0.01;
|
|||
|
|
// break;
|
|||
|
|
// case 2:
|
|||
|
|
// n = 1;
|
|||
|
|
// break;
|
|||
|
|
// case 3:
|
|||
|
|
// n = 100;
|
|||
|
|
// break;
|
|||
|
|
// }
|
|||
|
|
dataDymX.Phase2 = 0;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
|
|||
|
|
memset(buf, 0, 8);
|
|||
|
|
// sprintf(buf, "%02x%02x", pRecvData->Data[33], pRecvData->Data[32]);
|
|||
|
|
// iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
// highbit = iTemp >> 14 & 0x3;
|
|||
|
|
// lowbit = iTemp & 0x3fff;
|
|||
|
|
// switch (highbit)
|
|||
|
|
// {
|
|||
|
|
// case 0:
|
|||
|
|
// n = 0.0001;
|
|||
|
|
// break;
|
|||
|
|
// case 1:
|
|||
|
|
// n = 0.01;
|
|||
|
|
// break;
|
|||
|
|
// case 2:
|
|||
|
|
// n = 1;
|
|||
|
|
// break;
|
|||
|
|
// case 3:
|
|||
|
|
// n = 100;
|
|||
|
|
// break;
|
|||
|
|
// }
|
|||
|
|
dataDymX.Phase3 = 0;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[35], pRecvData->Data[34]);
|
|||
|
|
// iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
// highbit = iTemp >> 14 & 0x3;
|
|||
|
|
// lowbit = iTemp & 0x3fff;
|
|||
|
|
// switch (highbit)
|
|||
|
|
// {
|
|||
|
|
// case 0:
|
|||
|
|
// n = 0.0001;
|
|||
|
|
// break;
|
|||
|
|
// case 1:
|
|||
|
|
// n = 0.01;
|
|||
|
|
// break;
|
|||
|
|
// case 2:
|
|||
|
|
// n = 1;
|
|||
|
|
// break;
|
|||
|
|
// case 3:
|
|||
|
|
// n = 100;
|
|||
|
|
// break;
|
|||
|
|
// }
|
|||
|
|
dataDymX.Phase4 = 0;
|
|||
|
|
|
|||
|
|
memset(whereCon, 0, 1024);
|
|||
|
|
sprintf(whereCon, "channelID='%s' ", (strMeasurementID + "-X").c_str());
|
|||
|
|
memset(updateSql, 0, 1024);
|
|||
|
|
sprintf(updateSql, "diagnosisPk='%f',integratPk='%f',integratRMS='%f',rmsValues='%f',envelopEnergy='%f',\
|
|||
|
|
Amp1='%f',Amp2='%f',Amp3='%f',Amp4='%f',Amp5='%f',Phase1='%f',Phase2='%f',Phase3='%f',Phase4='%f',timeStamp='%s',StaticIndex = %d,nodeResend = %d ",\
|
|||
|
|
dataDymX.DiagnosisPk, dataDymX.IntegratPk, dataDymX.IntegratRMS, dataDymX.RmsValues, dataDymX.EnvelopEnergy,\
|
|||
|
|
dataDymX.Amp1, dataDymX.Amp2, dataDymX.Amp3, dataDymX.Amp4, dataDymX.Amp5,dataDymX.Phase1, dataDymX.Phase2, dataDymX.Phase3, dataDymX.Phase4, nowTimetamp.c_str(),staticIndex,nodeResend);
|
|||
|
|
if ( /*0 == sql_ctl->GetTableRows(T_DATA_INFO(TNAME), whereCon)*/(Count * 3 < SAVE_COUNT && lTime < OneWeek ) || strTime.size() == 0) {//1 week
|
|||
|
|
char insertSql[1024] = { 0 };
|
|||
|
|
memset(insertSql,0x00,sizeof(insertSql));
|
|||
|
|
sprintf(insertSql, "'%s','%s','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f',%d,'%s','1',%d",
|
|||
|
|
strLongAddr.c_str(), (strMeasurementID + "-X").c_str(), dataDymX.DiagnosisPk, dataDymX.IntegratPk, dataDymX.IntegratRMS, dataDymX.RmsValues, dataDymX.EnvelopEnergy,\
|
|||
|
|
dataDymX.Amp1, dataDymX.Amp2, dataDymX.Amp3, dataDymX.Amp4, dataDymX.Amp5,dataDymX.Phase1, dataDymX.Phase2, dataDymX.Phase3, dataDymX.Phase4, staticIndex,nowTimetamp.c_str(),nodeResend);
|
|||
|
|
sql_ctl->InsertData(szTableName, insertSql);
|
|||
|
|
|
|||
|
|
if(0 == sql_ctl->GetTableRows(T_DATA_INFO(TNAME), whereCon))
|
|||
|
|
sql_ctl->InsertData(T_DATA_INFO(TNAME), insertSql);
|
|||
|
|
else
|
|||
|
|
sql_ctl->UpdateTableData(T_DATA_INFO(TNAME), updateSql, whereCon);
|
|||
|
|
} else {
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
sprintf(whereCon, "channelID='%s' and timeStamp = '%s'", (strMeasurementID + "-X").c_str(),strTime.c_str());
|
|||
|
|
// sprintf(whereCon, "channelID='%s' and sendMsg = '1' ", (strLongAddr + "-X").c_str());
|
|||
|
|
sql_ctl->UpdateTableData(szTableName, updateSql, whereCon);
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
sprintf(whereCon, "channelID='%s' ", (strMeasurementID + "-X").c_str());
|
|||
|
|
sql_ctl->UpdateTableData(T_DATA_INFO(TNAME), updateSql, whereCon);
|
|||
|
|
}
|
|||
|
|
print_info("x:%s,%s,diagnosisPk=%f,integratPk=%f,integratRMS=%f,rmsValues=%f,envelopEnergy=%f,Amp1=%f,Amp2=%f,Amp3=%f,Amp4=%f,Amp5=%f,Phase1=%f,Phase2=%f,Phase3=%f,Phase4=%f,timeStamp=%s\n",\
|
|||
|
|
strLongAddr.c_str(), (strMeasurementID + "-X").c_str(), dataDymX.DiagnosisPk, dataDymX.IntegratPk, dataDymX.IntegratRMS, dataDymX.RmsValues, dataDymX.EnvelopEnergy,\
|
|||
|
|
dataDymX.Amp1, dataDymX.Amp2, dataDymX.Amp3, dataDymX.Amp4, dataDymX.Amp5,dataDymX.Phase1, dataDymX.Phase2, dataDymX.Phase3, dataDymX.Phase4, nowTimetamp.c_str());
|
|||
|
|
|
|||
|
|
Json::Value valNodeData;
|
|||
|
|
Json::Value valNodeFeature;
|
|||
|
|
valNodeFeature["dataNodeNo"] = strMeasurementID;
|
|||
|
|
valNodeFeature["ChannelId"] = strMeasurementID + "-X";
|
|||
|
|
valNodeFeature["diagnosisPk"] = dataDymX.DiagnosisPk;
|
|||
|
|
valNodeFeature["integratPk"] = dataDymX.IntegratPk;
|
|||
|
|
valNodeFeature["integratRMS"] = dataDymX.IntegratRMS;
|
|||
|
|
valNodeFeature["rmsValues"] = dataDymX.RmsValues;
|
|||
|
|
valNodeFeature["envelopEnergy"] = dataDymX.EnvelopEnergy;
|
|||
|
|
valNodeFeature["Amp1"] = dataDymX.Amp1;
|
|||
|
|
valNodeFeature["Amp2"] = dataDymX.Amp2;
|
|||
|
|
valNodeFeature["Amp3"] = dataDymX.Amp3;
|
|||
|
|
valNodeFeature["Amp4"] = dataDymX.Amp4;
|
|||
|
|
valNodeFeature["Amp5"] = dataDymX.Amp5;
|
|||
|
|
valNodeFeature["Phase1"] = dataDymX.Phase1;
|
|||
|
|
valNodeFeature["Phase2"] = dataDymX.Phase2;
|
|||
|
|
valNodeFeature["Phase3"] = dataDymX.Phase3;
|
|||
|
|
valNodeFeature["Phase4"] = dataDymX.Phase4;
|
|||
|
|
valNodeFeature["timeStamp"] = nowTimetamp;
|
|||
|
|
valNodeData.append(valNodeFeature);
|
|||
|
|
DataRecvDym dataDymY;
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[37], pRecvData->Data[36]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymY.DiagnosisPk = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[39], pRecvData->Data[38]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymY.RmsValues = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[41], pRecvData->Data[40]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymY.IntegratPk = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[43], pRecvData->Data[42]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymY.IntegratRMS = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[45], pRecvData->Data[44]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymY.Amp1 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[47], pRecvData->Data[46]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymY.Amp2 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[49], pRecvData->Data[48]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymY.Amp3 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[51], pRecvData->Data[50]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymY.Amp4 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[53], pRecvData->Data[52]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymY.Amp5 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
// sprintf(buf, "%02x%02x", pRecvData->Data[55], pRecvData->Data[54]);
|
|||
|
|
// iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
// highbit = iTemp >> 14 & 0x3;
|
|||
|
|
// lowbit = iTemp & 0x3fff;
|
|||
|
|
// switch (highbit)
|
|||
|
|
// {
|
|||
|
|
// case 0:
|
|||
|
|
// n = 0.0001;
|
|||
|
|
// break;
|
|||
|
|
// case 1:
|
|||
|
|
// n = 0.01;
|
|||
|
|
// break;
|
|||
|
|
// case 2:
|
|||
|
|
// n = 1;
|
|||
|
|
// break;
|
|||
|
|
// case 3:
|
|||
|
|
// n = 100;
|
|||
|
|
// break;
|
|||
|
|
// }
|
|||
|
|
// dataDymY.EnvelopEnergy = lowbit * n;
|
|||
|
|
|
|||
|
|
dataDymY.EnvelopEnergy = 0;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
// sprintf(buf, "%02x%02x", pRecvData->Data[57], pRecvData->Data[56]);
|
|||
|
|
// iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
// highbit = iTemp >> 14 & 0x3;
|
|||
|
|
// lowbit = iTemp & 0x3fff;
|
|||
|
|
// switch (highbit)
|
|||
|
|
// {
|
|||
|
|
// case 0:
|
|||
|
|
// n = 0.0001;
|
|||
|
|
// break;
|
|||
|
|
// case 1:
|
|||
|
|
// n = 0.01;
|
|||
|
|
// break;
|
|||
|
|
// case 2:
|
|||
|
|
// n = 1;
|
|||
|
|
// break;
|
|||
|
|
// case 3:
|
|||
|
|
// n = 100;
|
|||
|
|
// break;
|
|||
|
|
// }
|
|||
|
|
dataDymY.Phase1 = 0;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
// sprintf(buf, "%02x%02x", pRecvData->Data[59], pRecvData->Data[58]);
|
|||
|
|
// iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
// highbit = iTemp >> 14 & 0x3;
|
|||
|
|
// lowbit = iTemp & 0x3fff;
|
|||
|
|
// switch (highbit)
|
|||
|
|
// {
|
|||
|
|
// case 0:
|
|||
|
|
// n = 0.0001;
|
|||
|
|
// break;
|
|||
|
|
// case 1:
|
|||
|
|
// n = 0.01;
|
|||
|
|
// break;
|
|||
|
|
// case 2:
|
|||
|
|
// n = 1;
|
|||
|
|
// break;
|
|||
|
|
// case 3:
|
|||
|
|
// n = 100;
|
|||
|
|
// break;
|
|||
|
|
// }
|
|||
|
|
dataDymY.Phase2 = 0;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
// sprintf(buf, "%02x%02x", pRecvData->Data[61], pRecvData->Data[60]);
|
|||
|
|
// iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
// highbit = iTemp >> 14 & 0x3;
|
|||
|
|
// lowbit = iTemp & 0x3fff;
|
|||
|
|
// switch (highbit)
|
|||
|
|
// {
|
|||
|
|
// case 0:
|
|||
|
|
// n = 0.0001;
|
|||
|
|
// break;
|
|||
|
|
// case 1:
|
|||
|
|
// n = 0.01;
|
|||
|
|
// break;
|
|||
|
|
// case 2:
|
|||
|
|
// n = 1;
|
|||
|
|
// break;
|
|||
|
|
// case 3:
|
|||
|
|
// n = 100;
|
|||
|
|
// break;
|
|||
|
|
// }
|
|||
|
|
dataDymY.Phase3 = 0;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
// sprintf(buf, "%02x%02x", pRecvData->Data[63], pRecvData->Data[62]);
|
|||
|
|
// iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
// highbit = iTemp >> 14 & 0x3;
|
|||
|
|
// lowbit = iTemp & 0x3fff;
|
|||
|
|
// switch (highbit)
|
|||
|
|
// {
|
|||
|
|
// case 0:
|
|||
|
|
// n = 0.0001;
|
|||
|
|
// break;
|
|||
|
|
// case 1:
|
|||
|
|
// n = 0.01;
|
|||
|
|
// break;
|
|||
|
|
// case 2:
|
|||
|
|
// n = 1;
|
|||
|
|
// break;
|
|||
|
|
// case 3:
|
|||
|
|
// n = 100;
|
|||
|
|
// break;
|
|||
|
|
// }
|
|||
|
|
dataDymY.Phase4 = 0;
|
|||
|
|
|
|||
|
|
memset(whereCon, 0, 1024);
|
|||
|
|
sprintf(whereCon, "channelID='%s' ", (strMeasurementID + "-Y").c_str());
|
|||
|
|
memset(updateSql, 0, 1024);
|
|||
|
|
sprintf(updateSql, "diagnosisPk='%f',integratPk='%f',integratRMS='%f',rmsValues='%f',envelopEnergy='%f',\
|
|||
|
|
Amp1='%f',Amp2='%f',Amp3='%f',Amp4='%f',Amp5='%f',Phase1='%f',Phase2='%f',Phase3='%f',Phase4='%f',timeStamp='%s',StaticIndex = %d,nodeResend = %d ",\
|
|||
|
|
dataDymY.DiagnosisPk, dataDymY.IntegratPk, dataDymY.IntegratRMS, dataDymY.RmsValues, dataDymY.EnvelopEnergy,\
|
|||
|
|
dataDymY.Amp1, dataDymY.Amp2, dataDymY.Amp3, dataDymY.Amp4, dataDymY.Amp5,dataDymY.Phase1, dataDymY.Phase2, dataDymY.Phase3, dataDymY.Phase4, nowTimetamp.c_str(),staticIndex,nodeResend);
|
|||
|
|
if ( /*0 == sql_ctl->GetTableRows(T_DATA_INFO(TNAME), whereCon)*/ (Count * 3 < SAVE_COUNT && lTime < OneWeek ) || strTime.size() == 0) {
|
|||
|
|
char insertSql[1024] = { 0 };
|
|||
|
|
memset(insertSql,0x00,sizeof(insertSql));
|
|||
|
|
sprintf(insertSql, "'%s','%s','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f',%d,'%s','1',%d",
|
|||
|
|
strLongAddr.c_str(), (strMeasurementID + "-Y").c_str(), dataDymY.DiagnosisPk, dataDymY.IntegratPk, dataDymY.IntegratRMS, dataDymY.RmsValues, dataDymY.EnvelopEnergy,\
|
|||
|
|
dataDymY.Amp1, dataDymY.Amp2, dataDymY.Amp3, dataDymY.Amp4, dataDymY.Amp5,dataDymY.Phase1, dataDymY.Phase2, dataDymY.Phase3, dataDymY.Phase4,staticIndex, nowTimetamp.c_str(),nodeResend);
|
|||
|
|
sql_ctl->InsertData(szTableName, insertSql);
|
|||
|
|
|
|||
|
|
if(0 == sql_ctl->GetTableRows(T_DATA_INFO(TNAME), whereCon))
|
|||
|
|
sql_ctl->InsertData(T_DATA_INFO(TNAME), insertSql);
|
|||
|
|
else
|
|||
|
|
sql_ctl->UpdateTableData(T_DATA_INFO(TNAME), updateSql, whereCon);
|
|||
|
|
} else {
|
|||
|
|
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
sprintf(whereCon, "channelID='%s' and timeStamp = '%s'", (strMeasurementID + "-Y").c_str(),strTime.c_str());
|
|||
|
|
// sprintf(whereCon, "channelID='%s' and sendMsg = '1' ", (strLongAddr + "-Y").c_str());
|
|||
|
|
sql_ctl->UpdateTableData(szTableName, updateSql, whereCon);
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
sprintf(whereCon, "channelID='%s' ", (strMeasurementID + "-Y").c_str());
|
|||
|
|
sql_ctl->UpdateTableData(T_DATA_INFO(TNAME), updateSql, whereCon);
|
|||
|
|
}
|
|||
|
|
print_info("y: %s,%s,diagnosisPk=%f,integratPk=%f,integratRMS=%f,rmsValues=%f,envelopEnergy=%f,Amp1=%f,Amp2=%f,Amp3=%f,Amp4=%f,Amp5=%f,Phase1=%f,Phase2=%f,Phase3=%f,Phase4=%f,timeStamp=%s\n",\
|
|||
|
|
strLongAddr.c_str(), (strMeasurementID + "-Y").c_str(), dataDymY.DiagnosisPk, dataDymY.IntegratPk, dataDymY.IntegratRMS, dataDymY.RmsValues, dataDymY.EnvelopEnergy,\
|
|||
|
|
dataDymY.Amp1, dataDymY.Amp2, dataDymY.Amp3, dataDymY.Amp4, dataDymY.Amp5,dataDymY.Phase1, dataDymY.Phase2, dataDymY.Phase3, dataDymY.Phase4, nowTimetamp.c_str());
|
|||
|
|
|
|||
|
|
|
|||
|
|
valNodeFeature["dataNodeNo"] = strMeasurementID;
|
|||
|
|
valNodeFeature["ChannelId"] = strMeasurementID + "-Y";
|
|||
|
|
valNodeFeature["diagnosisPk"] = dataDymY.DiagnosisPk;
|
|||
|
|
valNodeFeature["integratPk"] = dataDymY.IntegratPk;
|
|||
|
|
valNodeFeature["integratRMS"] = dataDymY.IntegratRMS;
|
|||
|
|
valNodeFeature["rmsValues"] = dataDymY.RmsValues;
|
|||
|
|
valNodeFeature["envelopEnergy"] = dataDymY.EnvelopEnergy;
|
|||
|
|
valNodeFeature["Amp1"] = dataDymY.Amp1;
|
|||
|
|
valNodeFeature["Amp2"] = dataDymY.Amp2;
|
|||
|
|
valNodeFeature["Amp3"] = dataDymY.Amp3;
|
|||
|
|
valNodeFeature["Amp4"] = dataDymY.Amp4;
|
|||
|
|
valNodeFeature["Amp5"] = dataDymY.Amp5;
|
|||
|
|
valNodeFeature["Phase1"] = dataDymY.Phase1;
|
|||
|
|
valNodeFeature["Phase2"] = dataDymY.Phase2;
|
|||
|
|
valNodeFeature["Phase3"] = dataDymY.Phase3;
|
|||
|
|
valNodeFeature["Phase4"] = dataDymY.Phase4;
|
|||
|
|
valNodeFeature["timeStamp"] = nowTimetamp;
|
|||
|
|
valNodeData.append(valNodeFeature);
|
|||
|
|
|
|||
|
|
DataRecvDym dataDymZ;
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[65], pRecvData->Data[64]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymZ.DiagnosisPk = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[67], pRecvData->Data[66]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymZ.RmsValues = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[69], pRecvData->Data[68]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymZ.IntegratPk = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[71], pRecvData->Data[70]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymZ.IntegratRMS = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[73], pRecvData->Data[72]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymZ.Amp1 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[75], pRecvData->Data[74]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymZ.Amp2 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[77], pRecvData->Data[76]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymZ.Amp3 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[79], pRecvData->Data[78]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymZ.Amp4 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[81], pRecvData->Data[80]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymZ.Amp5 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[83], pRecvData->Data[82]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymZ.EnvelopEnergy = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[85], pRecvData->Data[84]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymZ.Phase1 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[87], pRecvData->Data[86]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymZ.Phase2 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(buf, 0, sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[89], pRecvData->Data[88]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymZ.Phase3 = lowbit * n;
|
|||
|
|
|
|||
|
|
sprintf(buf, "%02x%02x", pRecvData->Data[91], pRecvData->Data[90]);
|
|||
|
|
iTemp = (unsigned int)strtol(buf, NULL, 16);
|
|||
|
|
highbit = iTemp >> 14 & 0x3;
|
|||
|
|
lowbit = iTemp & 0x3fff;
|
|||
|
|
switch (highbit)
|
|||
|
|
{
|
|||
|
|
case 0:
|
|||
|
|
n = 0.0001;
|
|||
|
|
break;
|
|||
|
|
case 1:
|
|||
|
|
n = 0.01;
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
n = 1;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
n = 100;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
dataDymZ.Phase4 = lowbit * n;
|
|||
|
|
|
|||
|
|
memset(whereCon, 0, 1024);
|
|||
|
|
sprintf(whereCon, "channelID='%s' ", (strMeasurementID + "-Z").c_str());
|
|||
|
|
memset(updateSql, 0, 1024);
|
|||
|
|
|
|||
|
|
sprintf(updateSql, "diagnosisPk='%f',integratPk='%f',integratRMS='%f',rmsValues='%f',envelopEnergy='%f',\
|
|||
|
|
Amp1='%f',Amp2='%f',Amp3='%f',Amp4='%f',Amp5='%f',Phase1='%f',Phase2='%f',Phase3='%f',Phase4='%f',timeStamp='%s',StaticIndex = %d,nodeResend = %d ",\
|
|||
|
|
dataDymZ.DiagnosisPk, dataDymZ.IntegratPk, dataDymZ.IntegratRMS, dataDymZ.RmsValues, dataDymZ.EnvelopEnergy,\
|
|||
|
|
dataDymZ.Amp1, dataDymZ.Amp2, dataDymZ.Amp3, dataDymZ.Amp4, dataDymZ.Amp5,dataDymZ.Phase1, dataDymZ.Phase2, dataDymZ.Phase3, dataDymZ.Phase4, nowTimetamp.c_str(),staticIndex,nodeResend);
|
|||
|
|
if ( /*0 == sql_ctl->GetTableRows(T_DATA_INFO(TNAME), whereCon)*/ Count *3 < SAVE_COUNT && (lTime < OneWeek || strTime.size() == 0)) {
|
|||
|
|
char insertSql[1024] = { 0 };
|
|||
|
|
memset(insertSql,0x00,sizeof(insertSql));
|
|||
|
|
sprintf(insertSql, "'%s','%s','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f','%f',%d,'%s','1',%d",
|
|||
|
|
strLongAddr.c_str(), (strMeasurementID + "-Z").c_str(), dataDymZ.DiagnosisPk, dataDymZ.IntegratPk, dataDymZ.IntegratRMS, dataDymZ.RmsValues, dataDymZ.EnvelopEnergy,\
|
|||
|
|
dataDymZ.Amp1, dataDymZ.Amp2, dataDymZ.Amp3, dataDymZ.Amp4, dataDymZ.Amp5,dataDymZ.Phase1, dataDymZ.Phase2, dataDymZ.Phase3, dataDymZ.Phase4, staticIndex,nowTimetamp.c_str(),nodeResend);
|
|||
|
|
sql_ctl->InsertData(szTableName, insertSql);
|
|||
|
|
|
|||
|
|
if(0 == sql_ctl->GetTableRows(T_DATA_INFO(TNAME), whereCon))
|
|||
|
|
sql_ctl->InsertData(T_DATA_INFO(TNAME), insertSql);
|
|||
|
|
else
|
|||
|
|
sql_ctl->UpdateTableData(T_DATA_INFO(TNAME), updateSql, whereCon);
|
|||
|
|
} else {
|
|||
|
|
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
sprintf(whereCon, "channelID='%s' and timeStamp = '%s'", (strMeasurementID + "-Z").c_str(),strTime.c_str());
|
|||
|
|
// sprintf(whereCon, "channelID='%s' and sendMsg = '1'", (strLongAddr + "-Z").c_str());
|
|||
|
|
sql_ctl->UpdateTableData(szTableName, updateSql, whereCon);
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
sprintf(whereCon, "channelID='%s' ", (strMeasurementID + "-Z").c_str());
|
|||
|
|
sql_ctl->UpdateTableData(T_DATA_INFO(TNAME), updateSql, whereCon);
|
|||
|
|
}
|
|||
|
|
print_info("Z: %s,%s,diagnosisPk=%f,integratPk=%f,integratRMS=%f,rmsValues=%f,envelopEnergy=%f,Amp1=%f,Amp2=%f,Amp3=%f,Amp4=%f,Amp5=%f,Phase1=%f,Phase2=%f,Phase3=%f,Phase4=%f,timeStamp=%s\n",\
|
|||
|
|
strLongAddr.c_str(), (strMeasurementID + "-Z").c_str(), dataDymZ.DiagnosisPk, dataDymZ.IntegratPk, dataDymZ.IntegratRMS, dataDymZ.RmsValues, dataDymZ.EnvelopEnergy,\
|
|||
|
|
dataDymZ.Amp1, dataDymZ.Amp2, dataDymZ.Amp3, dataDymZ.Amp4, dataDymZ.Amp5,dataDymZ.Phase1, dataDymZ.Phase2, dataDymZ.Phase3, dataDymZ.Phase4, nowTimetamp.c_str());
|
|||
|
|
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
sprintf(whereCon, "dataNodeNo='%s'", strLongAddr.c_str());
|
|||
|
|
sql_ctl->UpdateTableData(T_SENSOR_INFO(TNAME), "status='1'", whereCon);
|
|||
|
|
//string strData = sql_ctl->GetNodeConfigureInfor(whereCon);
|
|||
|
|
//data_publish(strData.c_str(), GlobalConfig::Topic_G.mPubConfig.c_str());
|
|||
|
|
//无线传感器Z信息
|
|||
|
|
valNodeFeature["dataNodeNo"] = strMeasurementID;
|
|||
|
|
valNodeFeature["ChannelId"] = strMeasurementID + "-Z";
|
|||
|
|
valNodeFeature["diagnosisPk"] = dataDymZ.DiagnosisPk;
|
|||
|
|
valNodeFeature["integratPk"] = dataDymZ.IntegratPk;
|
|||
|
|
valNodeFeature["integratRMS"] = dataDymZ.IntegratRMS;
|
|||
|
|
valNodeFeature["rmsValues"] = dataDymZ.RmsValues;
|
|||
|
|
valNodeFeature["envelopEnergy"] = dataDymZ.EnvelopEnergy;
|
|||
|
|
valNodeFeature["Amp1"] = dataDymZ.Amp1;
|
|||
|
|
valNodeFeature["Amp2"] = dataDymZ.Amp2;
|
|||
|
|
valNodeFeature["Amp3"] = dataDymZ.Amp3;
|
|||
|
|
valNodeFeature["Amp4"] = dataDymZ.Amp4;
|
|||
|
|
valNodeFeature["Amp5"] = dataDymZ.Amp5;
|
|||
|
|
valNodeFeature["Phase1"] = dataDymZ.Phase1;
|
|||
|
|
valNodeFeature["Phase2"] = dataDymZ.Phase2;
|
|||
|
|
valNodeFeature["Phase3"] = dataDymZ.Phase3;
|
|||
|
|
valNodeFeature["Phase4"] = dataDymZ.Phase4;
|
|||
|
|
valNodeFeature["timeStamp"] = nowTimetamp;
|
|||
|
|
valNodeData.append(valNodeFeature);
|
|||
|
|
|
|||
|
|
memset(whereCon, 0, 1024);
|
|||
|
|
sprintf(whereCon, "dataNodeNo='%s'", strLongAddr.c_str());
|
|||
|
|
|
|||
|
|
string strBattery = sql_ctl->GetData(T_SENSOR_INFO(TNAME),"batteryPower",whereCon);
|
|||
|
|
vector<string> vBattery;
|
|||
|
|
vBattery.push_back("0");
|
|||
|
|
vBattery.push_back("0");
|
|||
|
|
if(strBattery.length() > 0){
|
|||
|
|
|
|||
|
|
boost::split( vBattery, strBattery, boost::is_any_of( "," ), boost::token_compress_on );
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//无线传感器信息
|
|||
|
|
Json::Value root;
|
|||
|
|
Json::Value valdatastatic;
|
|||
|
|
valdatastatic["TemperatureTop"] = dataStatic.TemTop;
|
|||
|
|
valdatastatic["TemperatureBot"] = dataStatic.TemBot;
|
|||
|
|
valdatastatic["WorkTime"] = dataStatic.nodeWorkTime;
|
|||
|
|
valdatastatic["SendTime"] = dataStatic.nodeSendTime;
|
|||
|
|
valdatastatic["Dip"] = dataStatic.Dip;
|
|||
|
|
valdatastatic["Voltage"] = dataStatic.Voltage;
|
|||
|
|
valdatastatic["ChannelType"] = "STATUS";
|
|||
|
|
valdatastatic["ChannelId"] = strMeasurementID + "-S";
|
|||
|
|
valdatastatic["TimeStamp"] = nowTimetamp;
|
|||
|
|
valdatastatic["bateryProportion"] = atof(vBattery[1].c_str())/atof(vBattery[0].c_str());
|
|||
|
|
valdatastatic["batteryRemainDay"] = atof(vBattery[1].c_str());
|
|||
|
|
valdatastatic["dataNodeNo"] = strMeasurementID;
|
|||
|
|
valNodeData.append(valdatastatic);
|
|||
|
|
|
|||
|
|
root["data"] = valNodeData;
|
|||
|
|
root["TimeStamp"] = nowTimetamp;
|
|||
|
|
root["dataNodeNo"] = strMeasurementID;
|
|||
|
|
root["dataNodeGatewayNo"] = GlobalConfig::MacAddr_G;
|
|||
|
|
Json::FastWriter featureValue;
|
|||
|
|
std::string strstatisticData = featureValue.write(root);
|
|||
|
|
//传感器发来的数据包中的表示设备信息的数据转化为json格式后,通过调用data_publish将数据传给mqttclient : Topic:wireless/cmd/60294D203717
|
|||
|
|
int iRet = data_publish(strstatisticData.c_str(), GlobalConfig::Topic_G.mPubData.c_str());
|
|||
|
|
print_info("dataNodeNo = '%s' and TimeStamp = '%s',MQTT ret = %d\n",strLongAddr.c_str(),nowTimetamp.c_str(),iRet);
|
|||
|
|
if(iRet != 0){
|
|||
|
|
char updateSql[1024] = { 0 };
|
|||
|
|
memset(whereCon, 0, 64);
|
|||
|
|
sprintf(whereCon, "dataNodeNo = '%s' and TimeStamp = '%s'", strLongAddr.c_str(),nowTimetamp.c_str());
|
|||
|
|
memcpy(updateSql, "sendMsg='0'",sizeof(updateSql));
|
|||
|
|
sql_ctl->UpdateTableData(szTableNameStatic, updateSql, whereCon);
|
|||
|
|
sql_ctl->UpdateTableData(szTableNameData, updateSql, whereCon);
|
|||
|
|
}
|
|||
|
|
//综上代码,把静态数据,x y z轴的特征值存放到sql数据库中(如果数据原来不存在,则插入新数据;如果存在,则更新数据)
|
|||
|
|
|
|||
|
|
print_info("Dip : %d TemBot : %f TemBot : %f Voltage : %d\n", dataStatic.Dip, dataStatic.TemBot, dataStatic.TemTop, dataStatic.Voltage);
|
|||
|
|
|
|||
|
|
memset(selectCon,0x00,sizeof(selectCon));
|
|||
|
|
sprintf(selectCon, "zigbeeSignal <> '' ORDER BY timeStamp desc LIMIT 0,1");
|
|||
|
|
strTime = sql_ctl->GetData(szTableNameStatic, "timeStamp", selectCon);
|
|||
|
|
|
|||
|
|
if (flag == 1)
|
|||
|
|
{
|
|||
|
|
LOG_INFO("DealDataNodeFeature end %02x%02x\n",pRecvData->ShortAddr[0], pRecvData->ShortAddr[1]);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::DealDataNodeWave(const char *pData,int comand)
|
|||
|
|
{
|
|||
|
|
//print_info("recv wave\n");
|
|||
|
|
RecvData * pRecvData = (RecvData *)pData;
|
|||
|
|
if (m_waveTrans)
|
|||
|
|
{
|
|||
|
|
if (comand == 3)
|
|||
|
|
{
|
|||
|
|
VecWaveDataX.push_back(*pRecvData);
|
|||
|
|
}else if(comand == 4){
|
|||
|
|
VecWaveDataY.push_back(*pRecvData);
|
|||
|
|
}else if(comand == 5){
|
|||
|
|
VecWaveDataZ.push_back(*pRecvData);
|
|||
|
|
}
|
|||
|
|
}else{
|
|||
|
|
if (comand == 3)
|
|||
|
|
{
|
|||
|
|
g_VecWaveDataX[m_waveCountX] = *pRecvData;
|
|||
|
|
m_waveCountX++;
|
|||
|
|
}else if(comand == 4){
|
|||
|
|
g_VecWaveDataY[m_waveCountY] = *pRecvData;
|
|||
|
|
m_waveCountY++;
|
|||
|
|
}else if(comand == 5){
|
|||
|
|
g_VecWaveDataZ[m_waveCountZ] = *pRecvData;
|
|||
|
|
m_waveCountZ++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//print_blue("wave data size is(m_VecWaveData.size) : %d\n",m_VecWaveData.size());
|
|||
|
|
char localtimestamp[32] = { 0 };
|
|||
|
|
GetTimeNet(localtimestamp, 1);
|
|||
|
|
// 接收到原始数据信息,则更新时间戳,如果三秒种未收到原始数据,则重新从短地址 9999 切换回 短地址 8888
|
|||
|
|
m_TimeStamp = strtol(localtimestamp, NULL, 10);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void Uart::DealWaveThread() //连续三秒没有原始数据,则处理缓存的原始数据
|
|||
|
|
{
|
|||
|
|
unsigned long nowTimeStamp = 0;
|
|||
|
|
unsigned long tmpTimeStamp = 0;
|
|||
|
|
|
|||
|
|
while (1)
|
|||
|
|
{
|
|||
|
|
// // 接收到原始波形,则 m_TimeStamp 不为零
|
|||
|
|
// // 如果当前时间与记录时间超过3秒,要求,m_TimeStamp不变化,而数据在传输,则一定小于3秒
|
|||
|
|
// if (0 == m_TimeStamp) {
|
|||
|
|
// sleep(1);
|
|||
|
|
// continue;
|
|||
|
|
// }
|
|||
|
|
// char localtimestamp[32] = { 0 };
|
|||
|
|
// GetTimeNet(localtimestamp, 1);
|
|||
|
|
// nowTimeStamp = strtol(localtimestamp, NULL, 10);
|
|||
|
|
// // 避免在未同步时钟导致数据错误
|
|||
|
|
// if(nowTimeStamp >= m_TimeStamp) {
|
|||
|
|
// tmpTimeStamp = nowTimeStamp - m_TimeStamp;
|
|||
|
|
// }
|
|||
|
|
// else {
|
|||
|
|
// tmpTimeStamp = m_TimeStamp - nowTimeStamp;
|
|||
|
|
// }
|
|||
|
|
// //if ((nowTimeStamp - m_TimeStamp) > 3) { 时间戳需要修改为绝对值,可能丢失时钟,或工作一会儿,才同步时钟,可能减出异常值
|
|||
|
|
// if (tmpTimeStamp > 3 ) { // TODO: 时间戳需要修改为绝对值,可能丢失时钟,或工作一会儿,才同步时钟,可能减出异常值 print_info("yes!The time difference is more than 3,nowTimeStamp : %ld m_TimeStamp : %ld\n", nowTimeStamp, m_TimeStamp);
|
|||
|
|
// //DealWave();
|
|||
|
|
// m_TimeStamp = 0;
|
|||
|
|
// offSize = 0;
|
|||
|
|
// GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = NO_ENTER_TRANSMITTING_STATUS;
|
|||
|
|
// GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
|||
|
|
// // 准备重新恢复到 8888 PanID,正常接收特征数据
|
|||
|
|
// mPackgeIndex = -1;
|
|||
|
|
// //WriteLocalAddr(0x8888);
|
|||
|
|
// //GlobalConfig::Zigbee_G.MyAddr = 0x8888;
|
|||
|
|
|
|||
|
|
// // WriteShortAddr2Zigbee(0x8888);
|
|||
|
|
// // UpdateZigbeeInfoCtrl();
|
|||
|
|
|
|||
|
|
// } else {
|
|||
|
|
// print_info("NO! The time difference is less than 3,nowTimeStamp : %ld m_TimeStamp : %ld\n", nowTimeStamp, m_TimeStamp);
|
|||
|
|
// }
|
|||
|
|
DealWave();
|
|||
|
|
sleep(1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
std::vector<float> Uart::DealData(int iChannel,float coe,int sampleRate,int ACCSampleTime,string strProduct)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
int waveCount = 0 ;
|
|||
|
|
unsigned char data[1024*100]={0x00};
|
|||
|
|
unsigned char outdata[1024*100]={0x00};
|
|||
|
|
unsigned char dealdata[1024*100]={0x00};
|
|||
|
|
long unsigned int new_len = 0,deallen = 0;
|
|||
|
|
int compress = 0,count = 0;
|
|||
|
|
long iTemp = 0;
|
|||
|
|
char buf[8] = {0x00};
|
|||
|
|
std::vector<float> vecData;
|
|||
|
|
print_info("data1 = %02x\n",g_VecWaveDataX[0].Data[0]);
|
|||
|
|
print_info("data2 = %02x\n",g_VecWaveDataY[0].Data[0]);
|
|||
|
|
print_info("data3 = %02x\n",g_VecWaveDataZ[0].Data[0]);
|
|||
|
|
size_t j = 0;
|
|||
|
|
std::string strShortAddr = "";
|
|||
|
|
if (iChannel == 3)
|
|||
|
|
{
|
|||
|
|
if (VecWaveDataX.size() > 0 )
|
|||
|
|
{
|
|||
|
|
g_VecWaveDataX.assign(VecWaveDataX.begin(), VecWaveDataX.end());
|
|||
|
|
waveCount = VecWaveDataX.size();
|
|||
|
|
}
|
|||
|
|
waveCount = m_waveCountX;
|
|||
|
|
for (; j < waveCount; j++)
|
|||
|
|
{
|
|||
|
|
RecvData recvData = g_VecWaveDataX[j];
|
|||
|
|
memcpy(data + j * 92 ,recvData.Data,92);
|
|||
|
|
}
|
|||
|
|
memset(buf,0x00,sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", g_VecWaveDataX[0].ShortAddr[0], g_VecWaveDataX[0].ShortAddr[1]);
|
|||
|
|
strShortAddr = std::string(buf);
|
|||
|
|
compress = g_mapCompress[strShortAddr].compressChannelX;
|
|||
|
|
count = g_mapCompress[strShortAddr].CountX;
|
|||
|
|
}
|
|||
|
|
if (iChannel == 4)
|
|||
|
|
{
|
|||
|
|
if (VecWaveDataY.size() > 0 )
|
|||
|
|
{
|
|||
|
|
g_VecWaveDataY.assign(VecWaveDataY.begin(), VecWaveDataY.end());
|
|||
|
|
waveCount = VecWaveDataY.size();
|
|||
|
|
}
|
|||
|
|
waveCount = m_waveCountY;
|
|||
|
|
for (; j < waveCount; j++)
|
|||
|
|
{
|
|||
|
|
RecvData recvData = g_VecWaveDataY[j];
|
|||
|
|
memcpy(data + j * 92 ,recvData.Data,92);
|
|||
|
|
}
|
|||
|
|
memset(buf,0x00,sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", g_VecWaveDataY[0].ShortAddr[0], g_VecWaveDataY[0].ShortAddr[1]);
|
|||
|
|
strShortAddr = std::string(buf);
|
|||
|
|
compress = g_mapCompress[strShortAddr].compressChannelY;
|
|||
|
|
count = g_mapCompress[strShortAddr].CountY;
|
|||
|
|
}
|
|||
|
|
if (iChannel == 5)
|
|||
|
|
{
|
|||
|
|
if (VecWaveDataZ.size() > 0 )
|
|||
|
|
{
|
|||
|
|
g_VecWaveDataZ.assign(VecWaveDataZ.begin(), VecWaveDataZ.end());
|
|||
|
|
waveCount = VecWaveDataZ.size();
|
|||
|
|
}
|
|||
|
|
waveCount = m_waveCountZ;
|
|||
|
|
for (; j < waveCount; j++)
|
|||
|
|
{
|
|||
|
|
RecvData recvData = g_VecWaveDataZ[j];
|
|||
|
|
memcpy(data + j * 92 ,recvData.Data,92);
|
|||
|
|
}
|
|||
|
|
memset(buf,0x00,sizeof(buf));
|
|||
|
|
sprintf(buf, "%02x%02x", g_VecWaveDataZ[0].ShortAddr[0], g_VecWaveDataZ[0].ShortAddr[1]);
|
|||
|
|
strShortAddr = std::string(buf);
|
|||
|
|
compress = g_mapCompress[strShortAddr].compressChannelZ;
|
|||
|
|
count = g_mapCompress[strShortAddr].CountZ;
|
|||
|
|
}
|
|||
|
|
if(j * 92 < count)
|
|||
|
|
return vecData;
|
|||
|
|
print_info("len = %d,data = %02x,iChannel = %d,compress = %d,count = %d\n",j,data[0],iChannel,compress,count);
|
|||
|
|
if(compress){
|
|||
|
|
print_info("iChannel = %d,compress = %d\n",iChannel,compress);
|
|||
|
|
int r = lzo1x_decompress(data,count,outdata,&new_len,NULL);
|
|||
|
|
print_info("lzo1x_decompress end\n");
|
|||
|
|
if (r == LZO_E_OK ){
|
|||
|
|
printf("decompressed %lu bytes back into %lu bytes\n",
|
|||
|
|
(unsigned long) j * 92, (unsigned long) new_len);
|
|||
|
|
LOG_INFO("iChannel = %d ,ShortAddr = %s decompressed %lu bytes back into %lu bytes\n",iChannel,strShortAddr.c_str(),
|
|||
|
|
(unsigned long) j * 92, (unsigned long) new_len);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
/* this should NEVER happen */
|
|||
|
|
printf("internal error - decompression failed: %d\n", r);
|
|||
|
|
LOG_ERROR("internal error - decompression failed: %d,channel = %d,ShortAddr = %s\n", r,iChannel,strShortAddr.c_str());
|
|||
|
|
return vecData;
|
|||
|
|
}
|
|||
|
|
memcpy(dealdata,outdata,new_len);
|
|||
|
|
deallen = new_len;
|
|||
|
|
}else{
|
|||
|
|
memcpy(dealdata,data,j * 92);
|
|||
|
|
deallen = j * 92;
|
|||
|
|
}
|
|||
|
|
print_info("len = %d,dealdata = %02x\n",deallen,dealdata[0]);
|
|||
|
|
for (int i = 0; i < deallen; i++) {
|
|||
|
|
float fTemp = 0.0;
|
|||
|
|
memset(buf, 0, 8);
|
|||
|
|
sprintf(buf, "%02x%02x", dealdata[2*i+1],dealdata[i*2]);
|
|||
|
|
iTemp = strtol(buf, NULL, 16);
|
|||
|
|
if (iTemp < 0x8000) {
|
|||
|
|
fTemp = iTemp * coe * 9.8; //convert to m/s2
|
|||
|
|
} else {
|
|||
|
|
fTemp = (((~iTemp)&0xffff) + 1) * - coe * 9.8; //convert to m/s2
|
|||
|
|
}
|
|||
|
|
vecData.push_back(fTemp);
|
|||
|
|
if(strProduct == "01"){
|
|||
|
|
//print_blue("vecData.size() = %d,sampleRate * ACCSampleTime = %d,iChannel = %d\n",vecData.size(),sampleRate * ACCSampleTime,iChannel);
|
|||
|
|
if(vecData.size() == sampleRate * ACCSampleTime && iChannel == 3 ){//过滤数据包结尾空数据
|
|||
|
|
print_blue("%d vecData.size() == %d,sampleRate * ACCSampleTime = %d\n",iChannel,vecData.size(),sampleRate * ACCSampleTime);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if(vecData.size() == sampleRate * ACCSampleTime && iChannel == 4 ){//过滤数据包结尾空数据
|
|||
|
|
print_blue("%d vecData.size() == %d,sampleRate * ACCSampleTime = %d\n",iChannel,vecData.size(),sampleRate * ACCSampleTime);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if(vecData.size() == sampleRate * ACCSampleTime && iChannel == 5 ){//过滤数据包结尾空数据
|
|||
|
|
print_blue("%d vecData.size() == %d,sampleRate * ACCSampleTime = %d\n",iChannel,vecData.size(),sampleRate * ACCSampleTime);
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}else if(strProduct == "02"){
|
|||
|
|
if(vecData.size() == 8192 && iChannel == 3 ){//过滤数据包结尾空数据
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if(vecData.size() == 8192 && iChannel == 4 ){//过滤数据包结尾空数据
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if(vecData.size() == sampleRate * ACCSampleTime && iChannel == 5 ){//过滤数据包结尾空数据
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return vecData;
|
|||
|
|
}
|
|||
|
|
void Uart::DealWave()
|
|||
|
|
{
|
|||
|
|
//LOG_DEBUG("begin deal Wave data !\n");
|
|||
|
|
//print_blue("wave data size is(m_VecWaveData.size) : %d\n",m_VecWaveData.size());
|
|||
|
|
std::string strShortAddr = "";
|
|||
|
|
std::string strShortAddrTemp;
|
|||
|
|
std::string strLongAddr = "";
|
|||
|
|
std::string strMeasurementID= "";
|
|||
|
|
std::string strFileName = "";
|
|||
|
|
std::string strProduct = "";
|
|||
|
|
int iChannel = 0;
|
|||
|
|
int iChannelTemp = 0;
|
|||
|
|
|
|||
|
|
std::vector<float> vecData;
|
|||
|
|
|
|||
|
|
RecvData recvTemp;
|
|||
|
|
if (m_waveTrans) { //对每个传感器的每个通道进行遍历然后处理数据,例如:传感器1x轴的数据处理完后,再去处理y轴的。传感器1的所有数据处理完后,再处理传感器2的
|
|||
|
|
char getLongAddr_sql[32] = { 0 };
|
|||
|
|
sprintf(getLongAddr_sql, "zigbeeShortAddr='%s'", m_strDestShortAddr.c_str());
|
|||
|
|
vec_t res = sql_ctl->GetDataSingleLine(T_SENSOR_INFO(TNAME)," * ",getLongAddr_sql);
|
|||
|
|
strLongAddr = res[0];
|
|||
|
|
strMeasurementID = res[44];
|
|||
|
|
if ( 0 == strLongAddr.length() ) {
|
|||
|
|
sleep(1);
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
std::string ran = "";
|
|||
|
|
int n = 0;
|
|||
|
|
int range = 0;
|
|||
|
|
float coe = 0;
|
|||
|
|
int sampleRate = 0,ACCSampleTime = 0;
|
|||
|
|
char getrange[32] = {0};
|
|||
|
|
std::string str = "range";
|
|||
|
|
sprintf(getrange, "zigbeeShortAddr='%s'", strShortAddr.c_str());
|
|||
|
|
//ran = sql_ctl->GetData(T_SENSOR_INFO(TNAME), T_SENSOR_INFO(RANGE), getrange);
|
|||
|
|
ran = res[25];
|
|||
|
|
sampleRate = atoi(res[23].c_str());
|
|||
|
|
ACCSampleTime = atoi(res[36].c_str());
|
|||
|
|
strProduct = res[17];
|
|||
|
|
memset(getrange, 0, 32);
|
|||
|
|
sprintf(getrange, "%s", ran.c_str());
|
|||
|
|
n = (int)strtol(getrange, NULL, 32);
|
|||
|
|
if (m_waveCountX > 0 || VecWaveDataX.size() > 0)
|
|||
|
|
{
|
|||
|
|
print_info("m_waveCountX = %d,VecWaveData = %d\n",m_waveCountX,VecWaveDataX.size());
|
|||
|
|
coe = Calcoe(n,3,strProduct,range);
|
|||
|
|
vecData = DealData(3,coe,sampleRate,ACCSampleTime,strProduct);
|
|||
|
|
WriteDatFile(sampleRate, strMeasurementID, 3,vecData);
|
|||
|
|
m_waveCountX = 0;
|
|||
|
|
g_VecWaveDataX.clear();
|
|||
|
|
VecWaveDataX.clear();
|
|||
|
|
}
|
|||
|
|
if (m_waveCountY > 0 || VecWaveDataY.size() > 0)
|
|||
|
|
{
|
|||
|
|
print_info("m_waveCountX = %d,VecWaveData = %d\n",m_waveCountY,VecWaveDataY.size());
|
|||
|
|
coe = Calcoe(n,4,strProduct,range);
|
|||
|
|
vecData = DealData(4,coe,sampleRate,ACCSampleTime,strProduct);
|
|||
|
|
WriteDatFile(sampleRate, strMeasurementID, 4,vecData);
|
|||
|
|
m_waveCountY = 0;
|
|||
|
|
g_VecWaveDataY.clear();
|
|||
|
|
VecWaveDataY.clear();
|
|||
|
|
}
|
|||
|
|
if (m_waveCountZ > 0 || VecWaveDataZ.size() > 0)
|
|||
|
|
{
|
|||
|
|
print_info("m_waveCountZ = %d,VecWaveDataZ = %d\n",m_waveCountZ,VecWaveDataZ.size());
|
|||
|
|
coe = Calcoe(n,5,strProduct,range);
|
|||
|
|
vecData = DealData(5,coe,sampleRate,ACCSampleTime,strProduct);
|
|||
|
|
WriteDatFile(sampleRate, strMeasurementID, 5,vecData);
|
|||
|
|
m_waveCountZ = 0;
|
|||
|
|
g_VecWaveDataZ.clear();
|
|||
|
|
VecWaveDataZ.clear();
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
char whereCon[1024] = {0x00};
|
|||
|
|
char updateSql[1024] = {0x00};
|
|||
|
|
sprintf(whereCon, "dataNodeNo='%s'", strLongAddr.c_str());
|
|||
|
|
sprintf(updateSql, "WaveTime = WaveTime + 1");
|
|||
|
|
sql_ctl->UpdateTableData(T_SENSOR_INFO(TNAME), updateSql, whereCon);
|
|||
|
|
m_waveTrans = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
//string strData = sql_ctl->GetNodeConfigureInfor(whereCon);
|
|||
|
|
//data_publish(strData.c_str(), GlobalConfig::Topic_G.mPubConfig.c_str());
|
|||
|
|
// memset(buf, 0, 8);
|
|||
|
|
// sprintf(buf, "%02x%02x", recvTemp.ShortAddr[0], recvTemp.ShortAddr[1]);
|
|||
|
|
// std::string strShortAddr = std::string(buf);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
float Uart::Calcoe(int ran,int iChannel,string& product,int range)
|
|||
|
|
{
|
|||
|
|
float coe = 0.0;
|
|||
|
|
if(product== "01"){
|
|||
|
|
switch (ran)
|
|||
|
|
{
|
|||
|
|
case 0:{
|
|||
|
|
range = 8;
|
|||
|
|
coe = 8*1.0/32767;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 1:{
|
|||
|
|
range = 16;
|
|||
|
|
coe = 16*1.0/32767;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 2:{
|
|||
|
|
range = 32;
|
|||
|
|
coe = 32*1.0/32767;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 3:{
|
|||
|
|
range = 64;
|
|||
|
|
coe = 64*1.0/32767;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}else if(product == "02"){
|
|||
|
|
if(iChannel == 3 || iChannel == 4){
|
|||
|
|
coe = 0.00048828125;
|
|||
|
|
}
|
|||
|
|
if(iChannel == 5){
|
|||
|
|
/*if(res[8] == "0.1"){
|
|||
|
|
coe = 0.0034521484375;//0.03265968810083316;
|
|||
|
|
}else*/
|
|||
|
|
{
|
|||
|
|
coe = 0.00172607421875;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return coe;
|
|||
|
|
}
|
|||
|
|
void Uart::WriteDatFile(int sampleRate,string& strMeasurementID,int iChannel,std::vector<float>& vecData)
|
|||
|
|
{
|
|||
|
|
if(vecData.size() <= 0)
|
|||
|
|
return;
|
|||
|
|
std::string strFileName = "";
|
|||
|
|
char localtimestamp[32] = { 0 };
|
|||
|
|
GetTimeNet(localtimestamp, 1);
|
|||
|
|
std::string nowTimetamp = std::string(localtimestamp);
|
|||
|
|
std::string strChannelID = "";
|
|||
|
|
switch (iChannel)
|
|||
|
|
{
|
|||
|
|
case 3:{
|
|||
|
|
strFileName = "/opt/data/" + strMeasurementID + "-X.dat";
|
|||
|
|
strChannelID = strMeasurementID + "-X";
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 4:{
|
|||
|
|
strFileName = "/opt/data/" + strMeasurementID + "-Y.dat";
|
|||
|
|
strChannelID = strMeasurementID + "-Y";
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 5:{
|
|||
|
|
strFileName = "/opt/data/" + strMeasurementID + "-Z.dat";
|
|||
|
|
strChannelID = strMeasurementID + "-Z";
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if (access(strFileName.c_str(), 0) > 0) { //如果存在原始数据删除原来的,只保留一份
|
|||
|
|
std::string strCmd = "rm " + strFileName;
|
|||
|
|
system(strCmd.c_str());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
FILE *fp = fopen(strFileName.c_str(), "w");
|
|||
|
|
fwrite(localtimestamp,sizeof(localtimestamp),1,fp);
|
|||
|
|
print_info("fopen FIle vecData.size : %d\n", vecData.size());
|
|||
|
|
float mean = pCalculation->mean(vecData);
|
|||
|
|
float frTemp;
|
|||
|
|
char buf[33]={0x00};
|
|||
|
|
std::string strWaveData = "";
|
|||
|
|
for (int i = 0; i < vecData.size(); i++) {
|
|||
|
|
frTemp = vecData[i] - mean;
|
|||
|
|
fwrite(&frTemp,sizeof(float),1,fp);
|
|||
|
|
memset(buf,0x00,sizeof(buf));
|
|||
|
|
sprintf(buf, "%.2f", frTemp);
|
|||
|
|
std::string waveTemp(buf);
|
|||
|
|
if(i == 0)
|
|||
|
|
strWaveData = waveTemp;
|
|||
|
|
else
|
|||
|
|
strWaveData = strWaveData + "," + waveTemp;
|
|||
|
|
|
|||
|
|
if (i % 100 == 0)
|
|||
|
|
{
|
|||
|
|
mssleep(5000);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
fclose(fp);
|
|||
|
|
//
|
|||
|
|
Json::Value valWaveData;
|
|||
|
|
int length = vecData.size();
|
|||
|
|
valWaveData["number"] = sampleRate;
|
|||
|
|
valWaveData["channelId"] = strChannelID;
|
|||
|
|
valWaveData["dataNodeNo"] = strMeasurementID;
|
|||
|
|
valWaveData["dataNodeGatewayNo"] = GlobalConfig::MacAddr_G;
|
|||
|
|
valWaveData["SensorEngineeringUnit"] = "";
|
|||
|
|
valWaveData["timeStamp"] = nowTimetamp;
|
|||
|
|
valWaveData["waveData"] = strWaveData;
|
|||
|
|
valWaveData["mean"] = mean;
|
|||
|
|
Json::FastWriter WaveValue;
|
|||
|
|
std::string WaveData = WaveValue.write(valWaveData);
|
|||
|
|
|
|||
|
|
char selectCon[128] = { 0 };
|
|||
|
|
sprintf(selectCon, "channelID='%s' ORDER BY timeStamp ASC LIMIT 0,1",strChannelID.c_str());
|
|||
|
|
std::string strTime = sql_ctl->GetData("t_data_waveSend", "timeStamp", selectCon);
|
|||
|
|
long lTime = atol(nowTimetamp.c_str())-atol(strTime.c_str());
|
|||
|
|
int Count = sql_ctl->GetTableRows("t_data_waveSend", NULL);
|
|||
|
|
std::string strFileName_Record = strFileName + "_" + nowTimetamp;
|
|||
|
|
if ((Count * 3 < SAVE_COUNT && lTime < OneWeek ) || strTime.size() == 0 ) {
|
|||
|
|
char insertSql[128]={0x00};
|
|||
|
|
sprintf(insertSql,"'%s','%s','%s',1,0",strChannelID.c_str(),strFileName_Record.c_str(),nowTimetamp.c_str());
|
|||
|
|
sql_ctl->InsertData("t_data_waveSend", insertSql);
|
|||
|
|
}else{
|
|||
|
|
char updateSql[128] = { 0 },whereCon[128] = {0};
|
|||
|
|
sprintf(updateSql, "waveName='%s',timeStamp='%s'",strFileName_Record.c_str(),nowTimetamp.c_str());
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
sprintf(whereCon, "channelID='%s' and timeStamp = '%s'", strChannelID.c_str(),strTime.c_str());
|
|||
|
|
print_info("update static data to sql\n");
|
|||
|
|
sql_ctl->UpdateTableData("t_data_waveSend", updateSql, whereCon);
|
|||
|
|
}
|
|||
|
|
//传感器发来的数据包中的表示设备信息的数据转化为json格式后,通过调用data_publish将数据传给mqttclient : Topic:wireless/cmd/60294D203717
|
|||
|
|
|
|||
|
|
int iRet = data_publish(WaveData.c_str(), GlobalConfig::Topic_G.mPubWaveData.c_str());
|
|||
|
|
if(iRet != 0){
|
|||
|
|
char whereCon[1024] = {0x00};
|
|||
|
|
char updateSql[1024] = {0x00};
|
|||
|
|
char tmpWhere[128]={0x00};
|
|||
|
|
sprintf(tmpWhere,"channelID = '%s' and sendMsg = 0 ",strChannelID.c_str());
|
|||
|
|
int count = sql_ctl->GetTableRows("t_data_waveSend", tmpWhere);
|
|||
|
|
LOG_ERROR("save channlID %s dat count = %d\n",strChannelID.c_str(),count);
|
|||
|
|
if(count <= 12)
|
|||
|
|
{
|
|||
|
|
sprintf(whereCon, "channelID='%s' and timeStamp = '%s' ", strChannelID.c_str(),nowTimetamp.c_str());
|
|||
|
|
sprintf(updateSql, "SendMsg = 0 ");
|
|||
|
|
sql_ctl->UpdateTableData("t_data_waveSend", updateSql, whereCon);
|
|||
|
|
LOG_ERROR("send failed,filename %s,iRet = %d\n",strFileName.c_str(),iRet);
|
|||
|
|
string strFileName_failed = strFileName + "_" + nowTimetamp;
|
|||
|
|
char tmpCmd[128]={0x00};
|
|||
|
|
sprintf(tmpCmd,"cp %s %s",strFileName.c_str(),strFileName_failed.c_str());
|
|||
|
|
system(tmpCmd);
|
|||
|
|
}else {
|
|||
|
|
memset(tmpWhere,0x00,sizeof(tmpWhere));
|
|||
|
|
memset(updateSql,0x00,sizeof(updateSql));
|
|||
|
|
sprintf(tmpWhere, " sendMsg = 0 and channelID='%s' ORDER BY timeStamp ASC LIMIT 0,1",strChannelID.c_str());
|
|||
|
|
vec_t vecRet = sql_ctl->GetDataSingleLine("t_data_waveSend","*",tmpWhere);
|
|||
|
|
memset(tmpWhere,0x00,sizeof(tmpWhere));
|
|||
|
|
sprintf(tmpWhere, " sendMsg = 0 and timeStamp = '%s' and channelID = '%s' ",vecRet[2].c_str(),vecRet[0].c_str());
|
|||
|
|
sprintf(updateSql, "sendMsg = 3 ");
|
|||
|
|
int iRet = sql_ctl->UpdateTableData("t_data_waveSend", updateSql, tmpWhere);
|
|||
|
|
memset(tmpWhere,0x00,sizeof(tmpWhere));
|
|||
|
|
memset(updateSql,0x00,sizeof(updateSql));
|
|||
|
|
sprintf(whereCon, "channelID='%s' and timeStamp = '%s' ", strChannelID.c_str(),nowTimetamp.c_str());
|
|||
|
|
sprintf(updateSql, "sendMsg = 0");
|
|||
|
|
int iRet2 = sql_ctl->UpdateTableData("t_data_waveSend", updateSql, whereCon);
|
|||
|
|
|
|||
|
|
string strFileName_failed = strFileName + "_" + nowTimetamp;
|
|||
|
|
char tmpCmd[128]={0x00};
|
|||
|
|
sprintf(tmpCmd,"cp %s %s",strFileName.c_str(),strFileName_failed.c_str());
|
|||
|
|
system(tmpCmd);
|
|||
|
|
LOG_ERROR("cp dat file %s \n",tmpCmd);
|
|||
|
|
|
|||
|
|
memset(tmpWhere,0x00,sizeof(tmpWhere));
|
|||
|
|
sprintf(tmpWhere," channelID = '%s' and sendMsg = 0 ",strChannelID.c_str());
|
|||
|
|
int count = sql_ctl->GetTableRows("t_data_waveSend", tmpWhere);
|
|||
|
|
|
|||
|
|
memset(tmpCmd,0x00,sizeof(tmpCmd));
|
|||
|
|
sprintf(tmpCmd,"rm %s ",vecRet[1].c_str());
|
|||
|
|
system(tmpCmd);
|
|||
|
|
LOG_ERROR("rm dat file %s \n",tmpCmd);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}else{
|
|||
|
|
LOG_DEBUG("send data , filename %s,size = %d\n", strFileName.c_str(),vecData.size());
|
|||
|
|
}
|
|||
|
|
#ifdef G2UL_GATEWAY//存储6条波形数据
|
|||
|
|
char whereCon[1024] = {0x00};
|
|||
|
|
char updateSql[1024] = {0x00};
|
|||
|
|
char tmpWhere[128]={0x00};
|
|||
|
|
sprintf(tmpWhere,"channelID = '%s' and save = 1 ",strChannelID.c_str());
|
|||
|
|
int count = sql_ctl->GetTableRows("t_data_waveSend", tmpWhere);
|
|||
|
|
LOG_INFO("save channlID %s dat count = %d\n",strChannelID.c_str(),count);
|
|||
|
|
if(count <= 5)
|
|||
|
|
{
|
|||
|
|
sprintf(whereCon, "channelID='%s' and timeStamp = '%s' ", strChannelID.c_str(),nowTimetamp.c_str());
|
|||
|
|
sprintf(updateSql, "save = 1 ");
|
|||
|
|
sql_ctl->UpdateTableData("t_data_waveSend", updateSql, whereCon);
|
|||
|
|
string strFileName_save = strFileName + "_" + nowTimetamp + "_save";
|
|||
|
|
char tmpCmd[128]={0x00};
|
|||
|
|
sprintf(tmpCmd,"cp %s %s",strFileName.c_str(),strFileName_save.c_str());
|
|||
|
|
system(tmpCmd);
|
|||
|
|
}else {
|
|||
|
|
memset(tmpWhere,0x00,sizeof(tmpWhere));
|
|||
|
|
memset(updateSql,0x00,sizeof(updateSql));
|
|||
|
|
sprintf(tmpWhere, " save = 1 and channelID='%s' ORDER BY timeStamp ASC LIMIT 0,1",strChannelID.c_str());
|
|||
|
|
vec_t vecRet = sql_ctl->GetDataSingleLine("t_data_waveSend","*",tmpWhere);
|
|||
|
|
memset(tmpWhere,0x00,sizeof(tmpWhere));
|
|||
|
|
sprintf(tmpWhere, " save = 1 and timeStamp = '%s' and channelID = '%s' ",vecRet[2].c_str(),vecRet[0].c_str());
|
|||
|
|
sprintf(updateSql, "save = 0 ");
|
|||
|
|
int iRet = sql_ctl->UpdateTableData("t_data_waveSend", updateSql, tmpWhere);
|
|||
|
|
memset(tmpWhere,0x00,sizeof(tmpWhere));
|
|||
|
|
memset(updateSql,0x00,sizeof(updateSql));
|
|||
|
|
sprintf(whereCon, "channelID='%s' and timeStamp = '%s' ", strChannelID.c_str(),nowTimetamp.c_str());
|
|||
|
|
sprintf(updateSql, "save = 1");
|
|||
|
|
int iRet2 = sql_ctl->UpdateTableData("t_data_waveSend", updateSql, whereCon);
|
|||
|
|
|
|||
|
|
string strFileName_save = strFileName + "_" + nowTimetamp + "_save";
|
|||
|
|
char tmpCmd[128]={0x00};
|
|||
|
|
sprintf(tmpCmd,"cp %s %s",strFileName.c_str(),strFileName_save.c_str());
|
|||
|
|
system(tmpCmd);
|
|||
|
|
|
|||
|
|
memset(tmpWhere,0x00,sizeof(tmpWhere));
|
|||
|
|
sprintf(tmpWhere," channelID = '%s' and save = 1 ",strChannelID.c_str());
|
|||
|
|
int count = sql_ctl->GetTableRows("t_data_waveSend", tmpWhere);
|
|||
|
|
|
|||
|
|
memset(tmpCmd,0x00,sizeof(tmpCmd));
|
|||
|
|
sprintf(tmpCmd,"rm %s ",(vecRet[1]+"_save").c_str());
|
|||
|
|
system(tmpCmd);
|
|||
|
|
LOG_INFO("rm dat file %s \n",tmpCmd);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
print_info("write data to filename %s\n", strFileName.c_str());
|
|||
|
|
std::vector<float>().swap(vecData);
|
|||
|
|
sleep(1);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
void Uart::DealNodeSendTime(unsigned char* shortaddr)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
/*char updateSql[1024]={0x00},whereCon[1024]={0x00},insertSql[1024]={0x00};
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
memset(insertSql,0x00,sizeof(insertSql));
|
|||
|
|
sprintf(whereCon,"dataNodeNo = '%s'",dataNodeInfo.ZigbeeLongAddr.c_str());
|
|||
|
|
int nodegroup = 0;
|
|||
|
|
int staticStartTime = 0;
|
|||
|
|
int nodeindex = 0;
|
|||
|
|
int statictime = 0;
|
|||
|
|
int nodewaveindex = 1;
|
|||
|
|
if(0 == sql_ctl->GetTableRows(T_DATANODE_TIME(TNAME), whereCon)){
|
|||
|
|
|
|||
|
|
sprintf(whereCon,"staticcycle = '%d' and wavecycle = '%d' order by nodeindex desc LIMIT 0 , 1",dataNodeInfo.FeatureInterVal,dataNodeInfo.WaveInterVal);
|
|||
|
|
vec_t vecResult = sql_ctl->GetDataSingleLine(T_DATANODE_TIME(TNAME),"*",whereCon);
|
|||
|
|
if(vecResult.size() == 0){
|
|||
|
|
string strResult = sql_ctl->GetData(T_DATANODE_TIME(TNAME),"nodegroup"," nodegroup > 0 order by nodegroup desc LIMIT 0 , 1");
|
|||
|
|
if(atoi(strResult.c_str()) > 0){
|
|||
|
|
print_info("strResult = %s\n",strResult.c_str());
|
|||
|
|
nodegroup = atoi(strResult.c_str()) + 1;
|
|||
|
|
}else{
|
|||
|
|
nodegroup = 1;
|
|||
|
|
}
|
|||
|
|
staticStartTime = 0;
|
|||
|
|
}else{
|
|||
|
|
nodegroup = atoi(vecResult[4].c_str());
|
|||
|
|
nodewaveindex = atoi(vecResult[6].c_str()) + 1;
|
|||
|
|
statictime = atoi(vecResult[7].c_str()) + atoi(vecResult[2].c_str());
|
|||
|
|
if(statictime > atoi(vecResult[3].c_str())){
|
|||
|
|
staticStartTime = ceil(atof(vecResult[2].c_str()) / 2 );
|
|||
|
|
statictime = staticStartTime;
|
|||
|
|
nodewaveindex = 1;
|
|||
|
|
}else{
|
|||
|
|
staticStartTime = atoi(vecResult[8].c_str());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
std::string strnodeinex = sql_ctl->GetData(T_DATANODE_TIME(TNAME), "nodeindex", "nodeindex > 0 order by nodeindex desc LIMIT 0 , 1");
|
|||
|
|
LOG_INFO("DealNodeSendTime strnodeinex = %s\n",strnodeinex.c_str());
|
|||
|
|
nodeindex = atoi(strnodeinex.c_str())+1;
|
|||
|
|
sprintf(insertSql,"'%s','%s','%d','%d',%d,%d,%d,%d,%d",dataNodeInfo.ZigbeeLongAddr.c_str(),dataNodeInfo.ZigbeeShortAddr.c_str(),\
|
|||
|
|
dataNodeInfo.FeatureInterVal,dataNodeInfo.WaveInterVal,nodegroup,nodeindex,nodewaveindex,statictime,staticStartTime);
|
|||
|
|
sql_ctl->InsertData(T_DATANODE_TIME(TNAME), insertSql);
|
|||
|
|
LOG_INFO("DealNodeSendTime InsertData = %s\n",insertSql);
|
|||
|
|
UpdateWirelessNodeTime(shortaddr,nodewaveindex,staticStartTime,nodeindex);//更新时间戳
|
|||
|
|
}else{
|
|||
|
|
sprintf(whereCon,"staticcycle = '%d' and wavecycle = '%d' order by nodeindex desc LIMIT 0 , 1",
|
|||
|
|
dataNodeInfo.FeatureInterVal,dataNodeInfo.WaveInterVal);
|
|||
|
|
|
|||
|
|
vec_t vecResult = sql_ctl->GetDataSingleLine(T_DATANODE_TIME(TNAME),"*",whereCon);
|
|||
|
|
if(vecResult.size() == 0){
|
|||
|
|
string strResult = sql_ctl->GetData(T_DATANODE_TIME(TNAME),"nodegroup"," nodegroup > 0 order by nodeindex desc LIMIT 0 , 1");
|
|||
|
|
if(atoi(strResult.c_str()) > 0){
|
|||
|
|
nodegroup = atoi(strResult.c_str()) + 1;
|
|||
|
|
}else{
|
|||
|
|
nodegroup = 1;
|
|||
|
|
}
|
|||
|
|
staticStartTime = 0;
|
|||
|
|
statictime = 0;
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
sprintf(whereCon,"dataNodeNo = '%s'",dataNodeInfo.ZigbeeLongAddr.c_str());
|
|||
|
|
sprintf(updateSql," staticcycle = '%d',wavecycle = '%d',nodegroup = %d,nodewaveindex = %d,statictime = %d, staticstarttime = %d",dataNodeInfo.FeatureInterVal,dataNodeInfo.WaveInterVal,\
|
|||
|
|
nodegroup,nodewaveindex,statictime,staticStartTime);
|
|||
|
|
sql_ctl->UpdateTableData(T_DATANODE_TIME(TNAME), updateSql, whereCon);
|
|||
|
|
LOG_INFO("DealNodeSendTime updateSql = %s\n",updateSql);
|
|||
|
|
LOG_DEBUG("DealNodeSendTime1");
|
|||
|
|
UpdateWirelessNodeTime(shortaddr,nodewaveindex,staticStartTime,nodeindex);//更新时间戳
|
|||
|
|
}else{
|
|||
|
|
print_info("=======Send Time======\n");
|
|||
|
|
LOG_DEBUG("DealNodeSendTime2");
|
|||
|
|
UpdateWirelessNodeTime(shortaddr,atoi(vecResult[6].c_str()),atoi(vecResult[8].c_str()),atoi(vecResult[5].c_str()));//更新时间戳
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
memset(whereCon,0x00,sizeof(whereCon));
|
|||
|
|
sprintf(whereCon,"dataNodeNo = '%s' and staticcycle <> '%d' and wavecycle <> '%d'",dataNodeInfo.ZigbeeLongAddr.c_str(),\
|
|||
|
|
dataNodeInfo.FeatureInterVal,dataNodeInfo.WaveInterVal);
|
|||
|
|
sql_ctl->DeleteTableData(T_DATANODE_TIME(TNAME),whereCon);*/
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
bool Uart::CheckCrc(char* pCheckBuff,int No)
|
|||
|
|
{
|
|||
|
|
unsigned char tmp = 0x00;
|
|||
|
|
for(int i = 0 ; i < No;i++){
|
|||
|
|
tmp += (unsigned char)pCheckBuff[i];
|
|||
|
|
// printf("%02x ",pCheckBuff[i]);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if((unsigned char)pCheckBuff[No] != (unsigned char)tmp)
|
|||
|
|
return false;
|
|||
|
|
return true;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
void Uart::modify_distaddr_info(unsigned short id, char * zigbee,unsigned char* distAddr)
|
|||
|
|
{
|
|||
|
|
char command[6] = {0x00};
|
|||
|
|
command[0] = 0xDE;
|
|||
|
|
command[1] = 0xDF;
|
|||
|
|
command[2] = 0xEF;
|
|||
|
|
command[3] = 0xDC;
|
|||
|
|
command[4] = ((char *)&id)[1];
|
|||
|
|
command[5] = ((char *)&id)[0];
|
|||
|
|
WriteToUart(command, 6);
|
|||
|
|
|
|||
|
|
mssleep(10000);
|
|||
|
|
memset(command,0x00,sizeof(command));
|
|||
|
|
command[0] = 0xDE;
|
|||
|
|
command[1] = 0xDF;
|
|||
|
|
command[2] = 0xEF;
|
|||
|
|
command[3] = 0xD2;
|
|||
|
|
command[4] = distAddr[0];
|
|||
|
|
command[5] = distAddr[1];
|
|||
|
|
WriteToUart(command, 6);
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
void Uart::getZigbeeSignal(unsigned char* distAddr)
|
|||
|
|
{
|
|||
|
|
mssleep(10000);
|
|||
|
|
char command[6] = {0x00};
|
|||
|
|
command[0] = 0xDE;
|
|||
|
|
command[1] = 0xDF;
|
|||
|
|
command[2] = 0xEF;
|
|||
|
|
command[3] = 0xDA;
|
|||
|
|
command[4] = distAddr[0];
|
|||
|
|
command[5] = distAddr[1];
|
|||
|
|
WriteToUart(command, 6);
|
|||
|
|
}
|
|||
|
|
void Uart::modify_DistAddr(unsigned char* distAddr)
|
|||
|
|
{
|
|||
|
|
char command[6] = {0x00};
|
|||
|
|
memset(command,0x00,sizeof(command));
|
|||
|
|
command[0] = 0xDE;
|
|||
|
|
command[1] = 0xDF;
|
|||
|
|
command[2] = 0xEF;
|
|||
|
|
command[3] = 0xD2;
|
|||
|
|
command[4] = distAddr[0];
|
|||
|
|
command[5] = distAddr[1];
|
|||
|
|
WriteToUart(command, 6);
|
|||
|
|
}
|
|||
|
|
void Uart::modify_LocalAddr(unsigned short id)
|
|||
|
|
{
|
|||
|
|
char command[6] = {0x00};
|
|||
|
|
|
|||
|
|
|
|||
|
|
command[0] = 0xDE;
|
|||
|
|
command[1] = 0xDF;
|
|||
|
|
command[2] = 0xEF;
|
|||
|
|
command[3] = 0xDC;
|
|||
|
|
command[4] = ((char *)&id)[1];
|
|||
|
|
command[5] = ((char *)&id)[0];
|
|||
|
|
WriteToUart(command, 6);
|
|||
|
|
// ReadFromUart();
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
void Uart::modify_Localchannel(unsigned char pad)
|
|||
|
|
{
|
|||
|
|
char command[6] = {0x00};
|
|||
|
|
command[0] = 0xDE;
|
|||
|
|
command[1] = 0xDF;
|
|||
|
|
command[2] = 0xEF;
|
|||
|
|
command[3] = 0xD1;
|
|||
|
|
command[4] = pad & 0xff;
|
|||
|
|
WriteToUart(command, 5);
|
|||
|
|
// ReadFromUart();
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
void Uart::modify_LocalPanID(unsigned short padID)
|
|||
|
|
{
|
|||
|
|
char command[6] = {0x00};
|
|||
|
|
command[0] = 0xDE;
|
|||
|
|
command[1] = 0xDF;
|
|||
|
|
command[2] = 0xEF;
|
|||
|
|
command[3] = 0xDB;
|
|||
|
|
command[4] = ((char *)&padID)[1];
|
|||
|
|
command[5] = ((char *)&padID)[0];
|
|||
|
|
WriteToUart(command, 6);
|
|||
|
|
// ReadFromUart();
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
void Uart::modify_info(unsigned short id, char * zigbee)
|
|||
|
|
{
|
|||
|
|
int i, j, ret,con;
|
|||
|
|
char command[100];
|
|||
|
|
char command1[20];
|
|||
|
|
char tmp = 0;
|
|||
|
|
command[0] = 0xab;
|
|||
|
|
command[1] = 0xbc;
|
|||
|
|
command[2] = 0xcd;
|
|||
|
|
command[3] = 0xd6;
|
|||
|
|
command[4] = ((char *)&id)[0];
|
|||
|
|
command[5] = ((char *)&id)[1];
|
|||
|
|
command[6] = 0;
|
|||
|
|
if (zigbee != NULL) {
|
|||
|
|
con = 71;
|
|||
|
|
memcpy(&(command[6]), zigbee + 4, 65);
|
|||
|
|
} else {
|
|||
|
|
con = 6;
|
|||
|
|
}
|
|||
|
|
for(i = 0; i < con; i++)
|
|||
|
|
{
|
|||
|
|
tmp += command[i];
|
|||
|
|
}
|
|||
|
|
command[i] = 0xaa;
|
|||
|
|
WriteToUart(command, i+1);
|
|||
|
|
sleep(1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::zigbee_reset(unsigned short pad, unsigned short type)
|
|||
|
|
{
|
|||
|
|
char command[10],tmp = 0,i;
|
|||
|
|
command[0] = 0xab;
|
|||
|
|
command[1] = 0xbc;
|
|||
|
|
command[2] = 0xcd;
|
|||
|
|
command[3] = 0xd9;
|
|||
|
|
command[4] = ((char *)&pad)[1];
|
|||
|
|
command[5] = ((char *)&pad)[0];
|
|||
|
|
command[6] = ((char *)&type)[1];
|
|||
|
|
command[7] = ((char *)&type)[0];
|
|||
|
|
for(i = 0; i<8; i++)
|
|||
|
|
{
|
|||
|
|
tmp += command[i];
|
|||
|
|
}
|
|||
|
|
command[8] = tmp;
|
|||
|
|
WriteToUart(command, 9);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::WriteChanl2Zigbee(unsigned char pad)
|
|||
|
|
{
|
|||
|
|
print_info("WriteChanl2Zigbee : %d\n", pad);
|
|||
|
|
unsigned char pad1 = pad;
|
|||
|
|
unsigned short tmp;
|
|||
|
|
tmp = GlobalConfig::Zigbee_G.MyAddr;
|
|||
|
|
//swap((char *)&pad1);
|
|||
|
|
//swap((char *)&tmp);
|
|||
|
|
GlobalConfig::Zigbee_G.Chan = pad1;
|
|||
|
|
modify_info(tmp, (char *)& GlobalConfig::Zigbee_G);
|
|||
|
|
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigReset,0);
|
|||
|
|
mssleep(10000);
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigReset,1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::WritePanId2Zigbee(unsigned short pad)
|
|||
|
|
{
|
|||
|
|
print_info("WritePanId2Zigbee : %d\n", pad);
|
|||
|
|
unsigned short pad1 = pad,tmp;
|
|||
|
|
tmp = GlobalConfig::Zigbee_G.MyAddr;
|
|||
|
|
print_info("MyAddr : %d\n", GlobalConfig::Zigbee_G.MyAddr);
|
|||
|
|
swap((char *)&pad1);
|
|||
|
|
//swap((char *)&tmp);
|
|||
|
|
GlobalConfig::Zigbee_G.PanID = pad1;
|
|||
|
|
modify_info(tmp, (char *)&GlobalConfig::Zigbee_G);
|
|||
|
|
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigReset,0);
|
|||
|
|
mssleep(10000);
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigReset,1);
|
|||
|
|
}
|
|||
|
|
void Uart::WriteSpeed2Zigbee()
|
|||
|
|
{
|
|||
|
|
GlobalConfig::Zigbee_G.Serial_Rate = 0x07;
|
|||
|
|
GlobalConfig::Zigbee_G.Serial_DataB = 0x08;
|
|||
|
|
GlobalConfig::Zigbee_G.Serial_StopB = 0x01;
|
|||
|
|
unsigned short tmp;
|
|||
|
|
tmp = GlobalConfig::Zigbee_G.MyAddr;
|
|||
|
|
modify_info(tmp, (char *)&GlobalConfig::Zigbee_G);
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigReset,0);
|
|||
|
|
mssleep(10000);
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigReset,1);
|
|||
|
|
}
|
|||
|
|
/*void Uart::WriteLocalAddr(unsigned short id)
|
|||
|
|
{
|
|||
|
|
gpio_set(116,0);
|
|||
|
|
mssleep(10000);
|
|||
|
|
gpio_set(116,1);
|
|||
|
|
sleep(1);
|
|||
|
|
char command[8]={0x00};
|
|||
|
|
command[0] = 0xab;
|
|||
|
|
command[1] = 0xbc;
|
|||
|
|
command[2] = 0xcd;
|
|||
|
|
command[3] = 0xdc;
|
|||
|
|
command[4] = ((char *)&id)[1];
|
|||
|
|
command[5] = ((char *)&id)[0];
|
|||
|
|
command[6] = 0x00;
|
|||
|
|
command[7] = 0xaa;
|
|||
|
|
WriteToUart(command, 8);
|
|||
|
|
mssleep(600000);
|
|||
|
|
gpio_set(116,0);
|
|||
|
|
mssleep(10000);
|
|||
|
|
gpio_set(116,1);
|
|||
|
|
}*/
|
|||
|
|
void Uart::WriteTranTimeout2Zigbee(unsigned char Time)
|
|||
|
|
{
|
|||
|
|
print_info("WriteTranTimeout2Zigbee : %d\n", Time);
|
|||
|
|
|
|||
|
|
unsigned short tmp = GlobalConfig::Zigbee_G.MyAddr;
|
|||
|
|
//print_info("MyAddr : %d\n", GlobalConfig::Zigbee_G.MyAddr);
|
|||
|
|
GlobalConfig::Zigbee_G.PowerLevel = 0x03;
|
|||
|
|
GlobalConfig::Zigbee_G.RetryNum = 0x64;
|
|||
|
|
GlobalConfig::Zigbee_G.TranTimeout = Time;
|
|||
|
|
modify_info(tmp, (char *)&GlobalConfig::Zigbee_G);
|
|||
|
|
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigReset,0);
|
|||
|
|
mssleep(10000);
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigReset,1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::WriteShortAddr2Zigbee(unsigned short pad)
|
|||
|
|
{
|
|||
|
|
print_info("WriteShortAddr2Zigbee : %4x\n", (unsigned short)pad);
|
|||
|
|
unsigned short pad1 = pad,tmp;
|
|||
|
|
tmp = GlobalConfig::Zigbee_G.MyAddr;
|
|||
|
|
//swap((char *)&pad1);
|
|||
|
|
//swap((char *)&tmp);
|
|||
|
|
GlobalConfig::Zigbee_G.MyAddr = pad1;
|
|||
|
|
modify_info(tmp, (char *)& GlobalConfig::Zigbee_G);
|
|||
|
|
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigReset,0);
|
|||
|
|
mssleep(10000);
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigReset,1);
|
|||
|
|
sleep(1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Uart::WriteShortAddr_DistAddr2Zigbee(unsigned short pad,unsigned char* pDestShortAddr)
|
|||
|
|
{
|
|||
|
|
print_info("WriteShortAddr2Zigbee : %4x\n", (unsigned short)pad);
|
|||
|
|
unsigned short pad1 = pad,tmp;
|
|||
|
|
tmp = GlobalConfig::Zigbee_G.MyAddr;
|
|||
|
|
swap((char *)&pad1);
|
|||
|
|
swap((char *)&tmp);
|
|||
|
|
char tmpDest[8]={0x00};
|
|||
|
|
sprintf(tmpDest,"%02x%02x",pDestShortAddr[0],pDestShortAddr[1]);
|
|||
|
|
memcpy(&GlobalConfig::Zigbee_G.DstAddr,pDestShortAddr,2);
|
|||
|
|
GlobalConfig::Zigbee_G.MyAddr = pad1;
|
|||
|
|
// GlobalConfig::Zigbee_G.DstAddr = (short)atoi((char*)tmpDest);
|
|||
|
|
print_info("DstAddr = %x\n",GlobalConfig::Zigbee_G.DstAddr);
|
|||
|
|
GlobalConfig::ZigbeeInfo_G.MyAddr = "9999";
|
|||
|
|
modify_info(tmp, (char *)& GlobalConfig::Zigbee_G);
|
|||
|
|
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigReset,0);
|
|||
|
|
mssleep(10000);
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigReset,1);
|
|||
|
|
}
|
|||
|
|
int Uart::CheckZigbeeACK()
|
|||
|
|
{
|
|||
|
|
if(gpio_read(GlobalConfig::GPIO_G.zigAckrep) == 48)
|
|||
|
|
gpio_set(GlobalConfig::GPIO_G.zigAckreset,1);
|
|||
|
|
int time = 0,value = 0,iRet = -1;
|
|||
|
|
do{
|
|||
|
|
value = gpio_read(GlobalConfig::GPIO_G.zigAckrep);
|
|||
|
|
if(value == 49)
|
|||
|
|
{
|
|||
|
|
iRet = 0;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
mssleep(10000);
|
|||
|
|
}while(time < 150);
|
|||
|
|
return iRet;
|
|||
|
|
}
|
|||
|
|
void Uart::ZigbeeInit()
|
|||
|
|
{
|
|||
|
|
std::string strPanId = sql_ctl->GetData("t_gateway_info","zigbeePanID",NULL);
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
unsigned short shortAddr = 0x8888;
|
|||
|
|
//GlobalConfig::Zigbee_G.MyAddr = shortAddr;
|
|||
|
|
//WriteLocalAddr(shortAddr);
|
|||
|
|
WriteShortAddr2Zigbee(shortAddr);
|
|||
|
|
mssleep(100000);
|
|||
|
|
// 更新GlobalConfig::ZigbeeInfo_G.MyAddr,用于外部显示
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//std::string strPanId = GlobalConfig::MacAddr_G.substr(8);
|
|||
|
|
print_info("strPanId : %s\n", strPanId.c_str());
|
|||
|
|
print_info("MacAddr_G : %s\n", GlobalConfig::MacAddr_G.c_str());
|
|||
|
|
// 新增管理ZigBee代码
|
|||
|
|
std::string strchan = ReadStrByOpt(ZIGBEECONFIG, "Zigbee", "channel");
|
|||
|
|
|
|||
|
|
unsigned short Chan = (unsigned short)strtol(strchan.c_str(), NULL, 10);
|
|||
|
|
print_info("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%the chan = %u\n",Chan);
|
|||
|
|
print_info("ZigbeeInfo_G.Channel=%d\n",GlobalConfig::ZigbeeInfo_G.Channel);
|
|||
|
|
if(Chan > 10 && Chan < 27)
|
|||
|
|
{
|
|||
|
|
//if (Chan != GlobalConfig::ZigbeeInfo_G.Channel)
|
|||
|
|
{
|
|||
|
|
WriteChanl2Zigbee(Chan);
|
|||
|
|
//modify_Localchannel(Chan);
|
|||
|
|
mssleep(100000);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
print_info("PanID1 = %s,strPanId = %s\n",GlobalConfig::ZigbeeInfo_G.PanID.c_str(),strPanId.c_str());
|
|||
|
|
//if (0 != GlobalConfig::ZigbeeInfo_G.PanID.compare(strPanId.c_str()))
|
|||
|
|
{
|
|||
|
|
long lShortAddr = strtol(strPanId.c_str(), NULL, 16);
|
|||
|
|
unsigned short panid = lShortAddr & 0xffff;
|
|||
|
|
//modify_LocalPanID(panid);
|
|||
|
|
|
|||
|
|
WritePanId2Zigbee(panid);
|
|||
|
|
mssleep(100000);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//if (0 != GlobalConfig::ZigbeeInfo_G.MyAddr.compare("8888"))
|
|||
|
|
|
|||
|
|
print_info("ZigbeeInfo_G.MyAddr=%s\n",GlobalConfig::ZigbeeInfo_G.MyAddr.c_str());
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|