add upgrade and config
This commit is contained in:
parent
b80656106f
commit
7cc1a2326e
@ -14,7 +14,7 @@
|
||||
</extensions>
|
||||
</storageModule>
|
||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GCCErrorParser" id="cdt.managedbuild.config.gnu.cross.exe.debug.534720554" name="Debug" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=" parent="cdt.managedbuild.config.gnu.cross.exe.debug" postannouncebuildStep="" postbuildStep="" preannouncebuildStep="" prebuildStep="">
|
||||
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.core.GCCErrorParser" id="cdt.managedbuild.config.gnu.cross.exe.debug.534720554" name="Debug" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=" parent="cdt.managedbuild.config.gnu.cross.exe.debug" postannouncebuildStep="" postbuildStep="cp WirelessGateway Cidn-SH;arm-linux-gnueabihf-strip Cidn-SH" preannouncebuildStep="" prebuildStep="">
|
||||
<folderInfo id="cdt.managedbuild.config.gnu.cross.exe.debug.534720554." name="/" resourcePath="">
|
||||
<toolChain errorParsers="" id="cdt.managedbuild.toolchain.gnu.cross.exe.debug.414193457" name="Cross GCC" superClass="cdt.managedbuild.toolchain.gnu.cross.exe.debug">
|
||||
<option id="cdt.managedbuild.option.gnu.cross.prefix.1212588849" name="Prefix" superClass="cdt.managedbuild.option.gnu.cross.prefix" useByScannerDiscovery="false" value="arm-linux-gnueabihf-" valueType="string"/>
|
||||
@ -46,6 +46,9 @@
|
||||
<tool command="g++" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" errorParsers="org.eclipse.cdt.core.GLDErrorParser" id="cdt.managedbuild.tool.gnu.cross.cpp.linker.1049583485" name="Cross G++ Linker" superClass="cdt.managedbuild.tool.gnu.cross.cpp.linker">
|
||||
<option id="gnu.cpp.link.option.paths.1174701783" name="Library search path (-L)" superClass="gnu.cpp.link.option.paths" useByScannerDiscovery="false" valueType="libPaths">
|
||||
<listOptionValue builtIn="false" value="/home/chaos/WorkSpace/Tools/GatewayThirdParty/boost/lib"/>
|
||||
<listOptionValue builtIn="false" value="/home/chaos/WorkSpace/Tools/GatewayThirdParty/zlog/lib"/>
|
||||
<listOptionValue builtIn="false" value="/home/chaos/WorkSpace/NewWLG/WLG"/>
|
||||
<listOptionValue builtIn="false" value="/home/chaos/WorkSpace/Tools/GatewayThirdParty/zlog/include"/>
|
||||
<listOptionValue builtIn="false" value="/home/chaos/WorkSpace/Tools/GatewayThirdParty/ssl/lib"/>
|
||||
<listOptionValue builtIn="false" value="/home/chaos/WorkSpace/Tools/GatewayThirdParty/fftw/lib"/>
|
||||
<listOptionValue builtIn="false" value="/home/chaos/WorkSpace/Tools/GatewayThirdParty/jsoncpp"/>
|
||||
@ -55,6 +58,8 @@
|
||||
</option>
|
||||
<option id="gnu.cpp.link.option.libs.1027000140" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs">
|
||||
<listOptionValue builtIn="false" value="sqlite3"/>
|
||||
<listOptionValue builtIn="false" value="zlog"/>
|
||||
<listOptionValue builtIn="false" value="boost_filesystem"/>
|
||||
<listOptionValue builtIn="false" value="boost_system"/>
|
||||
<listOptionValue builtIn="false" value="pthread"/>
|
||||
<listOptionValue builtIn="false" value="boost_thread"/>
|
||||
|
||||
@ -385,7 +385,6 @@ std::string JsonData::JsonCmd_Cgi_20(Param_20 ¶m) {
|
||||
WriteStr2Config(SYSTEMINFOFILE, "SystemInfo", "dataNodeGatewayAddedDate", nowTimetamp);
|
||||
}
|
||||
|
||||
std::string boardtype = GetFileContent(BOARDTYPE, 1);
|
||||
std::string ip = IpAddrInit();
|
||||
std::string sn = GetFileContent(SN, 1);
|
||||
jsonVal[JSON_FIELD_CMD] = "20";
|
||||
@ -402,7 +401,6 @@ std::string JsonData::JsonCmd_Cgi_20(Param_20 ¶m) {
|
||||
jsSystemInfo[JSON_FIELD_ASSETID] = ReadStrByOpt(SYSTEMINFOFILE, "SystemInfo", "dataNodeGatewayAssetId");
|
||||
jsSystemInfo[JSON_FIELD_ADDEDBY] = ReadStrByOpt(SYSTEMINFOFILE, "SystemInfo", "dataNodeGatewayAddedBy");
|
||||
jsSystemInfo[JSON_FIELD_ADDEDDATE] = ReadStrByOpt(SYSTEMINFOFILE, "SystemInfo", "dataNodeGatewayAddedDate");
|
||||
jsSystemInfo[JSON_FIELD_DEVICETYPE] = boardtype;
|
||||
jsSystemInfo[JSON_FIELD_IPADDRESS] = ip;
|
||||
jsSystemInfo[JSON_FIELD_SN] = sn;
|
||||
jsSystemInfo[JSON_FIELD_VERSION] = GlobalConfig::Version;
|
||||
|
||||
@ -690,7 +690,7 @@ std::string JsonData::JsonCmd_Cgi_60(Param_60 ¶m){
|
||||
return show_value_.write(jsonVal);
|
||||
}
|
||||
|
||||
sprintf(insertSql, " '%s','%s','','','','','%d.%d','%s',1",param.dataNodeNo[i].c_str(),localtimestamp,sf_ver_m,sf_ver_s,vecResult[1].c_str());
|
||||
sprintf(insertSql, " '%s','%s','','','','','%d.%d','%s',1,'%s'",vecResult[3].c_str(),localtimestamp,sf_ver_m,sf_ver_s,vecResult[1].c_str(),param.fileName.c_str());
|
||||
sqlite_db_ctrl::instance().InsertData(" firmware_upgrade ", insertSql);
|
||||
scheduler::instance().UpgradeSensor(atoi(vecResult[3].c_str()),std::string(sensor_type),atoi(vecResult[0].c_str()),vecResult[1],std::string(sf_version));
|
||||
}
|
||||
@ -702,7 +702,7 @@ std::string JsonData::JsonCmd_Cgi_61(Param_61 ¶m){
|
||||
Json::Value jsonVal;
|
||||
jsonVal.clear();
|
||||
|
||||
jsonVal[JSON_FIELD_CMD] = "10";
|
||||
jsonVal[JSON_FIELD_CMD] = "61";
|
||||
jsonVal["success"] = true;
|
||||
jsonVal["message"] = " ";
|
||||
vec_t vetRes = sqlite_db_ctrl::instance().GetDataMultiLineOfOneColumn(T_SENSOR_INFO(TNAME), T_SENSOR_INFO(DATANODENO), NULL);
|
||||
|
||||
@ -420,8 +420,11 @@ std::string LocalServer::HandleCgi_cmd(std::string &pData) {
|
||||
case kWaveRecords:{
|
||||
JsonData jd;
|
||||
Param_61 param;
|
||||
|
||||
param.straxis = recvBody["Raxis"].asString();
|
||||
param.mPackageFlag = recvBody["package"].asInt();
|
||||
param.timeStart = recvBody["timeStart"].asString();
|
||||
param.timeEnd = recvBody["timeEnd"].asString();
|
||||
param.MeasurementID = recvBody["MeasurementID"].asString();
|
||||
std::string data = jd.JsonCmd_Cgi_61(param);
|
||||
return data;
|
||||
}break;
|
||||
|
||||
@ -219,7 +219,6 @@ int data_publish(const char *str, const char *topic) {
|
||||
memset(base64_aes, 0, pData.length() * 2);
|
||||
secure::instance().Base64Encode((unsigned char *)pData.c_str(), base64_aes, pData.length());
|
||||
ret = mosquitto_publish(mosq, &mid_sent, topic, strlen(base64_aes), base64_aes, ud.topic_qos, false);
|
||||
|
||||
if (base64_aes != NULL) delete[] base64_aes;
|
||||
if (ret != MOSQ_ERR_SUCCESS) {
|
||||
zlog_error(zct, "fail to send mqtt msg, ret: [%s], topic: %s, str: %s", mosquitto_strerror(ret), topic, str);
|
||||
@ -230,10 +229,13 @@ int data_publish(const char *str, const char *topic) {
|
||||
zlog_error(zct, "fail to send mqtt msg, ret: [%s], topic: %s, str: %s", mosquitto_strerror(ret), topic, str);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ret != 0) {
|
||||
disconnect();
|
||||
}
|
||||
}else{
|
||||
zlog_warn(zct,"mosq == NULL");
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -356,6 +358,7 @@ int start_client(const char *boardname, const char *gwid, const char *gwip, cons
|
||||
free(ud.topics);
|
||||
mosquitto_destroy(mosq);
|
||||
mosquitto_lib_cleanup();
|
||||
mosq = NULL;
|
||||
zlog_error(zct, "Error: No free space 1");
|
||||
return -1;
|
||||
}
|
||||
@ -366,6 +369,7 @@ int start_client(const char *boardname, const char *gwid, const char *gwip, cons
|
||||
free(ud.topics);
|
||||
mosquitto_destroy(mosq);
|
||||
mosquitto_lib_cleanup();
|
||||
mosq = NULL;
|
||||
zlog_error(zct, "Error: No free space 2");
|
||||
free(psk);
|
||||
return -1;
|
||||
@ -403,6 +407,7 @@ int start_client(const char *boardname, const char *gwid, const char *gwip, cons
|
||||
mosq_free:
|
||||
mosquitto_destroy(mosq);
|
||||
mosquitto_lib_cleanup();
|
||||
mosq = NULL;
|
||||
if (ud.topics != NULL) {
|
||||
free(ud.topics);
|
||||
}
|
||||
|
||||
@ -32,38 +32,10 @@ void CheckThread() {
|
||||
int commSignal = 0;
|
||||
int loose_check = 0;
|
||||
int mqttresend = 0;
|
||||
int ModifyAddr = 0;
|
||||
|
||||
while (GlobalConfig::QuitFlag_G) {
|
||||
GlobalConfig::threadStatus = 1;
|
||||
sleep(1);
|
||||
if (GlobalConfig::EnterZigBeeWaveTransmittingFlag_G == ENTER_TRANSMITTING_STATUS) {
|
||||
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G++;
|
||||
if (GlobalConfig::EnterZigBeeWaveTransmittingCnt_G >= 180) {
|
||||
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = NO_ENTER_TRANSMITTING_STATUS;
|
||||
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
||||
zlog_error(zct, "[---- ZigBee error--!] ZigBee PanID is 9999 over time for 3 minutes !");
|
||||
// 重新写入 0x8888
|
||||
uart_inst::instance().modify_LocalAddr(0x8888);
|
||||
GlobalConfig::Zigbee_G.MyAddr = 0x8888;
|
||||
// 延时1秒
|
||||
sleep(1);
|
||||
// 重新读回 GlobalConfig::ZigbeeInfo_G.PanID
|
||||
uart_inst::instance().UpdateZigbeeInfoCtrl();
|
||||
uart_inst::instance().bUpdateconfig = false;
|
||||
uart_inst::instance().bUpdate = false;
|
||||
uart_inst::instance().bSendTimeStamp = false;
|
||||
// 延时1秒
|
||||
sleep(1);
|
||||
std::string str("8888");
|
||||
if (GlobalConfig::ZigbeeInfo_G.MyAddr.compare(str) == 0) {
|
||||
zlog_warn(zct, "[---- ZigBee INFO ----!] ZigBee PanID come back to be 8888 !");
|
||||
} else {
|
||||
zlog_error(zct, "[---- ZigBee error--!] ZigBee PanID cannot come back to be 8888 !");
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (10 == heart_count) {
|
||||
if (GlobalConfig::LinkCount > 30) {
|
||||
zlog_error(zct, "MQTT connect failed ");
|
||||
@ -237,14 +209,6 @@ void CheckThread() {
|
||||
loose_check = 0;
|
||||
sqlite_db_ctrl::instance().CalculateDip();
|
||||
}
|
||||
if (ModifyAddr == 3600) {
|
||||
zlog_info(zct, "ModifyAddr check");
|
||||
ModifyAddr = 0;
|
||||
if (uart_inst::instance().bModifyAddr) {
|
||||
zlog_error(zct, "ModifyAddr failed ");
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
if (18000 == commSignal) { // 5h
|
||||
Json::Value jsBody, jsonVal;
|
||||
@ -341,7 +305,6 @@ void CheckThread() {
|
||||
HardStatus++;
|
||||
logClean++;
|
||||
loose_check++;
|
||||
ModifyAddr++;
|
||||
mqttresend++;
|
||||
#ifdef WIFI_MODULE
|
||||
wifi_reconnect_count++;
|
||||
|
||||
@ -63,17 +63,7 @@ int Uart::UartRecv(int fd, char srcshow, char *buffer) {
|
||||
mssleep(10000);
|
||||
} else if (ret > 0) {
|
||||
maxSize += ret;
|
||||
|
||||
timeoutflag = 0;
|
||||
|
||||
if ((bUpdatePre || bUpdateconfig)) {
|
||||
for (int i = 0; i < ret; i++) {
|
||||
printf("%02x ", buff[i] & 0xff);
|
||||
}
|
||||
|
||||
FindRecvPackage(ret, buff, head);
|
||||
|
||||
} else {
|
||||
m_TimeStamp = 0;
|
||||
memcpy(mUartRecvTmpBuf + offSize, buff, ret);
|
||||
offSize = offSize + ret;
|
||||
@ -85,7 +75,7 @@ int Uart::UartRecv(int fd, char srcshow, char *buffer) {
|
||||
maxSize = 0;
|
||||
tcflush(fd, TCIOFLUSH);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
@ -152,9 +142,6 @@ Uart::Uart() : mUart(mIoSev), mStrand(mIoSev) {
|
||||
DataNodeUpdateFile = "";
|
||||
strTimetamp = "";
|
||||
bZigbeeSinal = false;
|
||||
bModifyAddr = false;
|
||||
bUpdatePre = false;
|
||||
bSendTimeStamp = false;
|
||||
m_waveCountX = 0;
|
||||
m_waveCountY = 0;
|
||||
m_waveCountZ = 0;
|
||||
@ -372,7 +359,7 @@ int Uart::DealAskTask(uint16_t ushortAdd){
|
||||
int next_duration = 0;
|
||||
int taskID = scheduler::instance().StartSchedule(ushortAdd,next_duration);
|
||||
ScheduleTask scheduleTask;
|
||||
taskID = 5;
|
||||
taskID = 2;
|
||||
zlog_info(zct, "taskID = %d ", taskID);
|
||||
if (taskID == kScheduleEigenValue) //1.特征值
|
||||
{
|
||||
@ -394,13 +381,15 @@ int Uart::DealAskTask(uint16_t ushortAdd){
|
||||
}
|
||||
else if (taskID == kScheduleUpgrade) //3.升级
|
||||
{
|
||||
zlog_info(zct, "taskID123 = %d ", taskID);
|
||||
UpdateWirelessNode(ushortAdd);
|
||||
}else if (taskID == kScheduleConfigSensor) //4.更新配置
|
||||
{
|
||||
scheduleTask.cmd = CONFIG;
|
||||
scheduleTask.shortAddr = ushortAdd;
|
||||
mssleep(50000);
|
||||
TaskResp(scheduleTask);
|
||||
mssleep(50000);
|
||||
UpdateConfig(ushortAdd);
|
||||
}else if (taskID == kScheduleWrongTime) //5.异常连接
|
||||
{
|
||||
scheduleTask.cmd = REVIVE_DURATION;
|
||||
@ -408,12 +397,6 @@ int Uart::DealAskTask(uint16_t ushortAdd){
|
||||
scheduleTask.duration = next_duration;
|
||||
zlog_info(zct, "next_duration = %d ", next_duration);
|
||||
TaskResp(scheduleTask);
|
||||
}else if (taskID == kScheduleConfigSensor) //6.更新配置
|
||||
{
|
||||
scheduleTask.cmd = CONFIG;
|
||||
scheduleTask.shortAddr = ushortAdd;
|
||||
TaskResp(scheduleTask);
|
||||
UpdateConfig(ushortAdd);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -467,7 +450,38 @@ int Uart::DealWaveCompress(const char *pData,uint16_t ushortAdd){
|
||||
zlog_info(zct, "compress X = %d,Y = %d,Z = %d ", tempchannel.compressChannelX, tempchannel.compressChannelY, tempchannel.compressChannelZ);
|
||||
return 0;
|
||||
}
|
||||
int Uart::DealSensorRSSI(const char *pData,uint16_t ushortAdd){
|
||||
char localtimestamp[32] = {0};
|
||||
GetTimeNet(localtimestamp, 1);
|
||||
char sensor_rssi[10] = {0x00};
|
||||
sprintf(sensor_rssi, "%02d", pData[7] & 0xFF);
|
||||
if (!strcmp(sensor_rssi, "00") || !strcmp(sensor_rssi, "0")) {
|
||||
char errorInfo[100] = {0x00};
|
||||
sprintf(errorInfo, "未检测到信号!%s", sensor_rssi);
|
||||
zlog_error(zct, errorInfo);
|
||||
} else {
|
||||
char insertSql[1024] = {0};
|
||||
char tableName[100] = {0x00};
|
||||
char whereCon[100] = {0};
|
||||
char updateSql[100] = {0};
|
||||
sprintf(whereCon, "zigbeeShortAddr='%02x%02x'", UINT16_HIGH(ushortAdd),UINT16_LOW(ushortAdd));
|
||||
vec_t vecDataNodeNo = sqlite_db_ctrl::instance().GetDataSingleLine(T_SENSOR_INFO(TNAME), " MeasurementID,RSSI ", whereCon);
|
||||
|
||||
sprintf(insertSql, "'%s','%s-S','','','','', '%02d','','%s','','','','','' ", vecDataNodeNo[0].c_str(),vecDataNodeNo[0].c_str(),atoi(sensor_rssi),localtimestamp); // zigbeeRSSIType = 0 传感器获取网关信号强度
|
||||
|
||||
sprintf(tableName, "t_dataStatic_%s", (char *)vecDataNodeNo[0].c_str());
|
||||
sqlite_db_ctrl::instance().InsertData(tableName, insertSql);
|
||||
|
||||
std::vector<std::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(), pData[7] & 0xFF);
|
||||
sprintf(whereCon, "dataNodeNo='%s'", (char *)vecDataNodeNo[0].c_str());
|
||||
sqlite_db_ctrl::instance().UpdateTableData(T_SENSOR_INFO(TNAME), updateSql, whereCon);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
void Uart::DealRecvData(const char *pData) {
|
||||
|
||||
uint16_t ushortAdd = BUILD_UINT16(pData[3] & 0xFF, pData[4] & 0xFF);
|
||||
@ -492,7 +506,7 @@ void Uart::DealRecvData(const char *pData) {
|
||||
DealDataNodeFeature(pData, 0);
|
||||
DealReviveDuration(ushortAdd);
|
||||
break;
|
||||
case UPGRADE_FIRMWARE:
|
||||
case UPGRADE:
|
||||
if (recvcode == 0)
|
||||
{
|
||||
scheduler::instance().UpgradeResult(ushortAdd,0);
|
||||
@ -500,7 +514,7 @@ void Uart::DealRecvData(const char *pData) {
|
||||
zlog_error(zct, "shortAdd = %02x%02x,command = %d,recvcode = %d ",UINT16_HIGH(ushortAdd),UINT16_LOW(ushortAdd),command,recvcode);
|
||||
}
|
||||
break;
|
||||
case CONFIG_INF2:
|
||||
case CONFIG:
|
||||
if (recvcode == 0)
|
||||
{
|
||||
DealReviveDuration(ushortAdd);
|
||||
@ -513,12 +527,14 @@ void Uart::DealRecvData(const char *pData) {
|
||||
case WAVE_COMPRESS:
|
||||
DealWaveCompress(pData,ushortAdd);
|
||||
break;
|
||||
case SIGNAL_STRENGTH:
|
||||
DealSensorRSSI(pData,ushortAdd);
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
void Uart::DealDataNodeName(const char *pData) {
|
||||
bSendTimeStamp = false;
|
||||
zlog_info(zct, "DealDataNodeName ");
|
||||
std::string strTime = GetLocalTimeWithMs();
|
||||
char szShortAdd[8] = {0x00};
|
||||
@ -965,13 +981,13 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) {
|
||||
sprintf(buf, "%02d", UartRecvBuf[i + 5]);
|
||||
int command = atoi(buf);
|
||||
//zlog_info(zct, "command = %d ShortAddr :%s", command, strShortAddr.c_str());
|
||||
if ((mPackgeIndex == -1 || (unsigned int)UartRecvBuf[i + 6] == 0) && (!bUpdatePre && !bUpdateconfig)) {
|
||||
if ((mPackgeIndex == -1 || (unsigned int)UartRecvBuf[i + 6] == 0) ) {
|
||||
mPackgeIndex = UartRecvBuf[i + 6] & 0xFF;
|
||||
} else if ((unsigned int)mPackgeIndex == (unsigned int)UartRecvBuf[i + 6] && mPackgeIndex != -1 && (!bUpdatePre && !bUpdateconfig) && command != 2) {
|
||||
} else if ((unsigned int)mPackgeIndex == (unsigned int)UartRecvBuf[i + 6] && mPackgeIndex != -1 && command != 2) {
|
||||
zlog_warn(zct, "mPackgeIndex same index1:%d,index2:%02d ShortAddr :%s ", 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) {
|
||||
} else if ((unsigned int)mPackgeIndex + 1 != (unsigned int)UartRecvBuf[i + 6] && mPackgeIndex != -1 && command != 2) {
|
||||
m_TimeStamp = 0;
|
||||
|
||||
zlog_error(zct, "mPackgeIndex error index1:%d,index2:%02d ShortAddr :%s ", mPackgeIndex, UartRecvBuf[i + 6] & 0xff, strShortAddr.c_str());
|
||||
@ -1001,15 +1017,6 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) {
|
||||
strcat(tmp2, tmp);
|
||||
}
|
||||
zlog_error(zct, "error str = %s", tmp2);
|
||||
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;
|
||||
@ -1038,7 +1045,7 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (command == CONFIG || command == CONFIG_INF2 || command == UPGRADE_FIRMWARE || command == SIGNAL_STRENGTH || command == DEVICE_EXCEPTION || command == WAVE_COMPRESS)
|
||||
if (command == CONFIG || command == CONFIG_INF2 || command == UPGRADE || command == SIGNAL_STRENGTH || command == DEVICE_EXCEPTION || command == WAVE_COMPRESS)
|
||||
{
|
||||
memcpy(RecvBuf, &UartRecvBuf[i], 9);
|
||||
if (!CheckCrc(RecvBuf, 8)) {
|
||||
@ -1115,7 +1122,6 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) {
|
||||
if (command == 209) {
|
||||
UpdateZigbeeInfo(&UartRecvBuf[i]);
|
||||
} else if (command == 220) { // DC
|
||||
bModifyAddr = false;
|
||||
zlog_info(zct, "zigbeeShortAddr = %s , ret = %02d", m_strDestShortAddr.c_str(), UartRecvBuf[i + 6] & 0xFF);
|
||||
if ((UartRecvBuf[i + 6] & 0xFF) != 0) {
|
||||
modify_LocalAddr(0x8888);
|
||||
@ -1136,7 +1142,6 @@ int Uart::FindRecvPackage(int bytesRead, char *mUartRecvBuf, char *head) {
|
||||
} else if (command == 219) { // DB
|
||||
pTestRecv(command);
|
||||
} else if (command == 220) { // DC
|
||||
bModifyAddr = false;
|
||||
zlog_info(zct, "%02x,%02x,%02x,%02x,%02x ", UartRecvBuf[i], UartRecvBuf[i + 1], UartRecvBuf[i + 2], UartRecvBuf[i + 3], UartRecvBuf[i + 4]);
|
||||
zlog_info(zct, "zigbeeShortAddr = %s , ret = %02d", m_strDestShortAddr.c_str(), UartRecvBuf[i + 4] & 0xFF);
|
||||
|
||||
|
||||
@ -171,6 +171,7 @@ public:
|
||||
int DealReviveDuration(uint16_t ushortAdd);
|
||||
int DealConfig(uint16_t ushortAdd);
|
||||
int DealWaveCompress(const char *pData,uint16_t ushortAdd);
|
||||
int DealSensorRSSI(const char *pData,uint16_t ushortAdd);
|
||||
|
||||
// feature parse
|
||||
void DealDataNodeFeature(const char* pData, int flag);
|
||||
@ -216,8 +217,6 @@ public:
|
||||
public:
|
||||
int fd, TestFd;
|
||||
bool bUpdate;
|
||||
bool bUpdatePre;
|
||||
bool bUpdateconfig;
|
||||
bool bTest;
|
||||
bool bZigbeeSinal;
|
||||
bool bModifyAddr;
|
||||
|
||||
@ -165,6 +165,31 @@ bool Uart::ReadUpdatePackge(unsigned short shortAdd) {
|
||||
|
||||
void Uart::UpdateWirelessNode(uint16_t shortAdd) {
|
||||
|
||||
int upgrade_status = 2;
|
||||
char localtimestamp[32] = {0};
|
||||
GetTimeNet(localtimestamp, 1);
|
||||
char insertSql[100] = {0};
|
||||
char wherecon[50] = {0};
|
||||
sprintf(wherecon," shortAddr = '%02x%02x' order by start_timestamp DESC",UINT16_HIGH(shortAdd), UINT16_LOW(shortAdd));
|
||||
std::string spend_count = sqlite_db_ctrl::instance().GetData(" firmware_upgrade ","spend_count",wherecon);
|
||||
if (atoi(spend_count.c_str()) >= 10){
|
||||
zlog_warn(zbt, "UpdateWirelessNode spend_count %d,shortAddr = %02x%02x", atoi(spend_count.c_str()), UINT16_HIGH(shortAdd), UINT16_LOW(shortAdd));
|
||||
return ;
|
||||
}
|
||||
if (spend_count == "")spend_count = "0";
|
||||
|
||||
memset(wherecon,0,sizeof(wherecon));
|
||||
sprintf(wherecon," shortAddr = '%02x%02x' order by submit_timestamp DESC",UINT16_HIGH(shortAdd), UINT16_LOW(shortAdd));
|
||||
std::string firmware_name = sqlite_db_ctrl::instance().GetData(" firmware_upgrade ","firmware_name",wherecon);
|
||||
memset(wherecon,0,sizeof(wherecon));
|
||||
sprintf(wherecon," zigbeeShortAddr = '%02x%02x' ",UINT16_HIGH(shortAdd), UINT16_LOW(shortAdd));
|
||||
vec_t vecResult = sqlite_db_ctrl::instance().GetDataSingleLine(T_SENSOR_INFO(TNAME), " hardVersion,softVersion,ProductNo,upgradeStatus ", wherecon);
|
||||
if (vecResult[3] == "2")
|
||||
{
|
||||
zlog_warn(zbt, "UpdateWirelessNode already ,shortAddr = %02x%02x", UINT16_HIGH(shortAdd), UINT16_LOW(shortAdd));
|
||||
return;
|
||||
}
|
||||
|
||||
std::string strTime = GetLocalTimeWithMs();
|
||||
zlog_info(zct, "UpdateWirelessNode start = %s UpdateWirelessNode id = %02x %02x", strTime.c_str(), UINT16_HIGH(shortAdd), UINT16_LOW(shortAdd));
|
||||
bUpdate = true;
|
||||
@ -175,7 +200,7 @@ void Uart::UpdateWirelessNode(uint16_t shortAdd) {
|
||||
int compress = 0;
|
||||
memset(fw_outdata,0,sizeof(fw_outdata));
|
||||
memset(fw_senddata,0,sizeof(fw_senddata));
|
||||
DataNodeUpdateFile = "/opt/DataNode/Time_Trigger_CubeMX.bin.new";
|
||||
DataNodeUpdateFile = "/opt/DataNode/" + firmware_name;
|
||||
zlog_info(zct, "strFileName = %s", DataNodeUpdateFile.c_str());
|
||||
pFile = fopen(DataNodeUpdateFile.c_str(), "rb");
|
||||
if (pFile != NULL) {
|
||||
@ -187,28 +212,55 @@ void Uart::UpdateWirelessNode(uint16_t shortAdd) {
|
||||
fread(buffer, sizeof(unsigned char), thisSize, pFile);
|
||||
fclose(pFile);
|
||||
|
||||
int r = lzo1x_1_compress(buffer, thisSize, fw_outdata, &out_len, wrkmem);
|
||||
if (r == LZO_E_OK){
|
||||
printf("compressed %lu bytes into %lu bytes\n",
|
||||
(unsigned long) thisSize, (unsigned long) out_len);
|
||||
if (out_len < thisSize){
|
||||
zlog_warn(zct, "compressed %lu bytes into %lu bytes", (unsigned long)thisSize, (unsigned long)out_len);
|
||||
memcpy(fw_senddata,fw_outdata,out_len);
|
||||
thisSize = out_len;
|
||||
compress = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* this should NEVER happen */
|
||||
zlog_error(zct,"internal error - compression failed: %d", r);
|
||||
}
|
||||
/* check for an incompressible block */
|
||||
if (out_len >= thisSize)
|
||||
{
|
||||
zlog_warn(zct,"This block contains incompressible data.out_len = %lu,thisSize = %lu",out_len,thisSize);
|
||||
char sensor_type[6] = {0};
|
||||
char sf_version[10] = {0};
|
||||
memcpy(sensor_type, buffer, 5);
|
||||
printf("model:%s\n", sensor_type);
|
||||
char c[2] = {0};
|
||||
c[0] = buffer[5];
|
||||
uint8_t hw_ver = atoi(c);
|
||||
c[0] = buffer[6];
|
||||
uint8_t sf_ver_m = atoi(c);
|
||||
c[0] = buffer[7];
|
||||
uint8_t sf_ver_s = atoi(c);
|
||||
sprintf(sf_version,"%d.%d",sf_ver_m,sf_ver_s);
|
||||
unsigned char ch_crc = 0x00;
|
||||
int packgeSize = 0;
|
||||
ch_crc = buffer[12];
|
||||
packgeSize = BUILD_UINT32(buffer[8],buffer[9],buffer[10],buffer[11]);
|
||||
zlog_info(zct,"sf_ver_m = %d\n",sf_ver_m);
|
||||
zlog_info(zct,"sf_ver_s = %d\n",sf_ver_s);
|
||||
zlog_info(zct,"hw_ver = %d\n",hw_ver);
|
||||
zlog_info(zct,"sensor_type = %s\n",sensor_type);
|
||||
zlog_info(zct,"packgeSize = %d\n",packgeSize);
|
||||
zlog_info(zct,"ch_crc = %02x\n",ch_crc);
|
||||
|
||||
sprintf(insertSql, " '%02x%02x','','%s','','','%d','%d.%d','%s',1,''",UINT16_HIGH(shortAdd), UINT16_LOW(shortAdd),localtimestamp,atoi(spend_count.c_str()) + 1,sf_ver_m,sf_ver_s,vecResult[1].c_str());
|
||||
sqlite_db_ctrl::instance().InsertData(" firmware_upgrade ", insertSql);
|
||||
|
||||
// int r = lzo1x_1_compress(buffer, thisSize, fw_outdata, &out_len, wrkmem);
|
||||
// if (r == LZO_E_OK){
|
||||
// printf("compressed %lu bytes into %lu bytes\n",
|
||||
// (unsigned long) thisSize, (unsigned long) out_len);
|
||||
// if (out_len < thisSize){
|
||||
// zlog_warn(zct, "compressed %lu bytes into %lu bytes", (unsigned long)thisSize, (unsigned long)out_len);
|
||||
// memcpy(fw_senddata,fw_outdata,out_len);
|
||||
// thisSize = out_len;
|
||||
// compress = 1;
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// /* this should NEVER happen */
|
||||
// zlog_error(zct,"internal error - compression failed: %d", r);
|
||||
// }
|
||||
// /* check for an incompressible block */
|
||||
// if (out_len >= thisSize)
|
||||
// {
|
||||
// zlog_warn(zct,"This block contains incompressible data.out_len = %lu,thisSize = %lu",out_len,thisSize);
|
||||
// memcpy(fw_senddata,buffer,thisSize);
|
||||
// }
|
||||
memcpy(fw_senddata,buffer,thisSize);
|
||||
}
|
||||
unsigned char Data[100] = {0x00};
|
||||
unsigned char size[4] = {0x00};
|
||||
zlog_info(zct, "thisSize = %d", (int)thisSize);
|
||||
@ -245,12 +297,11 @@ void Uart::UpdateWirelessNode(uint16_t shortAdd) {
|
||||
zlog_error(zct, "Packge ACK send failed,shortAddr = %02x%02x", UINT16_HIGH(shortAdd), UINT16_LOW(shortAdd));
|
||||
}
|
||||
mssleep(10000);
|
||||
zlog_info(zct,"senddata size = %d",strlen((char*)fw_senddata));
|
||||
int Count = thisSize / 92;
|
||||
int lastSize = thisSize % 92;
|
||||
unsigned char UpdateData[100] = {0x00};
|
||||
//帧头[3byte] 节点地址[2byte] 数据类型[1byte] 序号[1byte] 数据包[92byte] CRC校验[1byte]
|
||||
zlog_warn(zct, "Start Update!!! file Size = %d,Count = %d,lastSize = %d", (int)thisSize,Count,lastSize);
|
||||
zlog_info(zbt, "Start Update!!! file Size = %d,fileName = %s,Count = %d,lastSize = %d,shortAddr = %02x%02x", (int)thisSize,DataNodeUpdateFile.c_str(),Count,lastSize,UINT16_HIGH(shortAdd), UINT16_LOW(shortAdd));
|
||||
tmp = 0x00;
|
||||
gpio_set(GlobalConfig::GPIO_G.zigAckreset, 0);
|
||||
mssleep(1000);
|
||||
@ -285,6 +336,7 @@ void Uart::UpdateWirelessNode(uint16_t shortAdd) {
|
||||
zlog_error(zct, "gpio_read failed shortAdd %02x %02x,index = %d", UINT16_HIGH(shortAdd), UINT16_LOW(shortAdd),j);
|
||||
zlog_error(zct, "gpio_read failed \n");
|
||||
bUpdate = false;
|
||||
upgrade_status = 3;
|
||||
goto endUpdate;
|
||||
}
|
||||
gpio_set(GlobalConfig::GPIO_G.zigAckreset,0);
|
||||
@ -328,6 +380,7 @@ void Uart::UpdateWirelessNode(uint16_t shortAdd) {
|
||||
zlog_error(zct, "gpio_read failed shortAdd %02x %02x", UINT16_HIGH(shortAdd), UINT16_LOW(shortAdd));
|
||||
zlog_error(zct, "gpio_read failed \n");
|
||||
bUpdate = false;
|
||||
upgrade_status = 3;
|
||||
goto endUpdate;
|
||||
}
|
||||
memset(UpdateData, 0x00, sizeof(UpdateData));
|
||||
@ -337,13 +390,27 @@ void Uart::UpdateWirelessNode(uint16_t shortAdd) {
|
||||
zlog_error(zct, "open file failed ");
|
||||
}
|
||||
endUpdate:
|
||||
char localtimestamp_end[32] = {0};
|
||||
GetTimeNet(localtimestamp_end, 1);
|
||||
char updateSql[1024] = { 0 };
|
||||
memset(wherecon,0,sizeof(wherecon));
|
||||
sprintf(wherecon," start_timestamp = '%s' and short_addr = '%02x%02x'",localtimestamp,UINT16_HIGH(shortAdd), UINT16_LOW(shortAdd));
|
||||
sprintf(updateSql, " end_timestamp = '%s',spend_time = %ld,status = %d",localtimestamp_end,atol(localtimestamp_end)-atol(localtimestamp), upgrade_status);
|
||||
sqlite_db_ctrl::instance().UpdateTableData(" firmware_upgrade ", updateSql,wherecon);
|
||||
|
||||
memset(wherecon,0,sizeof(wherecon));
|
||||
memset(updateSql,0,sizeof(updateSql));
|
||||
sprintf(wherecon," zigbeeShortAddr = '%02x%02x'",UINT16_HIGH(shortAdd), UINT16_LOW(shortAdd));
|
||||
sprintf(updateSql, " upgradeStatus = %d", upgrade_status);
|
||||
sqlite_db_ctrl::instance().UpdateTableData(T_SENSOR_INFO(TNAME), updateSql,wherecon);
|
||||
|
||||
free(buffer);
|
||||
tcflush(fd, TCIFLUSH);
|
||||
sleep(1);
|
||||
bUpdate = false;
|
||||
bSendTimeStamp = false;
|
||||
DataNodeUpdateFile = "";
|
||||
zlog_warn(zct, "UpdateWirelessNode end");
|
||||
zlog_info(zbt, "UpdateWirelessNode end,shortAddr = %02x%02x",UINT16_HIGH(shortAdd), UINT16_LOW(shortAdd));
|
||||
}
|
||||
|
||||
int Uart::UpdateConfig(uint16_t ushortAdd) {
|
||||
@ -355,7 +422,6 @@ int Uart::UpdateConfig(uint16_t ushortAdd) {
|
||||
if (vecResultNode.size() <= 0) return -1;
|
||||
|
||||
zlog_info(zct, "UpdateConfig");
|
||||
bUpdateconfig = true;
|
||||
GlobalConfig::EnterZigBeeWaveTransmittingFlag_G = ENTER_TRANSMITTING_STATUS;
|
||||
GlobalConfig::EnterZigBeeWaveTransmittingCnt_G = 0;
|
||||
|
||||
@ -363,7 +429,6 @@ int Uart::UpdateConfig(uint16_t ushortAdd) {
|
||||
sprintf(tmpbuf, "%02x%02x", UINT16_HIGH(ushortAdd),UINT16_LOW(ushortAdd));
|
||||
m_strDestShortAddr = std::string(tmpbuf);
|
||||
|
||||
GlobalConfig::Zigbee_G.MyAddr = 0x9999;
|
||||
mssleep(500);
|
||||
vec_t vecResult;
|
||||
sprintf(selCon, "featureInterVal,waveInterVal,range,samplingRate,ACCSampleTime,startBrands,stopBrands,\
|
||||
@ -380,7 +445,7 @@ int Uart::UpdateConfig(uint16_t ushortAdd) {
|
||||
UpdateData[2] = 0xAA;
|
||||
UpdateData[3] = UINT16_HIGH(ushortAdd);
|
||||
UpdateData[4] = UINT16_LOW(ushortAdd);
|
||||
UpdateData[5] = 0x10;
|
||||
UpdateData[5] = 0x0A;
|
||||
UpdateData[6] = 0x00;
|
||||
UpdateData[7] = 0x01;
|
||||
UpdateData[8] = UINT16_LOW(atoi(vecResult[0].c_str()));
|
||||
@ -524,7 +589,7 @@ int Uart::UpdateConfig(uint16_t ushortAdd) {
|
||||
zlog_error(zct, "updataconfig ACK send failed,shortAddr = %02x%02x", UINT16_HIGH(ushortAdd),UINT16_LOW(ushortAdd));
|
||||
}
|
||||
|
||||
mssleep(10000);
|
||||
mssleep(50000);
|
||||
std::string strName = sqlite_db_ctrl::instance().GetData(T_SENSOR_INFO(TNAME), " dataNodeName ", whereCon);
|
||||
|
||||
memset(UpdateData,0x00,sizeof(UpdateData));
|
||||
@ -534,10 +599,10 @@ int Uart::UpdateConfig(uint16_t ushortAdd) {
|
||||
UpdateData[2] = 0xAA;
|
||||
UpdateData[3] = UINT16_HIGH(ushortAdd);
|
||||
UpdateData[4] = UINT16_LOW(ushortAdd);
|
||||
UpdateData[5] = 0x10;
|
||||
UpdateData[6] = 0x00;
|
||||
UpdateData[5] = 0x0A;
|
||||
UpdateData[6] = 0x01;
|
||||
UpdateData[7] = 0x02;
|
||||
char hex[200] = {0X00};
|
||||
char hex[200] = {0x00};
|
||||
stringToHex(strName.c_str(), hex);
|
||||
bytesSize = strlen(hex) / 2;
|
||||
bytes = (unsigned char*)malloc(bytesSize);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user