diff --git a/uart/uart.hpp b/uart/uart.hpp index e5fff94..498e971 100644 --- a/uart/uart.hpp +++ b/uart/uart.hpp @@ -182,6 +182,7 @@ public: float Calcoe(int ran, int iChannel, std::string& product, int range); void WriteDatFile(int sampleRate, std::string& strMeasurementID, int iChannel, std::vector& vecData); float ScaleConvert(int highbit); + void DataExtract(RecvData *p, int id, unsigned int &lowbit, float &n); // command category void modify_info(unsigned short id, char* zigbee); diff --git a/uart/uart_feature_parse.cpp b/uart/uart_feature_parse.cpp index ea2f418..a9eaf85 100644 --- a/uart/uart_feature_parse.cpp +++ b/uart/uart_feature_parse.cpp @@ -31,6 +31,15 @@ void Uart::RecordBattery(std::string &strLongAddr, DataRecvStatic &dataStatic, s sqlite_db_ctrl::instance().InsertData(T_BATTERY_INFO(TNAME), insertSql); } +void Uart::DataExtract(RecvData *p, int id, unsigned int &lowbit, float &n) { + char buf[20] = {0}; + sprintf(buf, "%02x%02x", p->Data[id+1], p->Data[id]); + int temp = (unsigned int)strtol(buf, NULL, 16); + unsigned char highbit = temp >> 14 & 0x3; + lowbit = temp & 0x3fff; + n = ScaleConvert(highbit); +} + void Uart::DealDataNodeFeature(const char *pData, int flag) { RecvData *pRecvData = (RecvData *)pData; char whereCon[1024] = {0}; @@ -104,7 +113,7 @@ void Uart::DealDataNodeFeature(const char *pData, int flag) { strTimetamp = nowTimetamp; int iTemp = 0; - unsigned char highbit = 0; +// unsigned char highbit = 0; unsigned int lowbit = 0; float n = 0; @@ -141,21 +150,10 @@ void Uart::DealDataNodeFeature(const char *pData, int flag) { 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 30, lowbit, n); dataStatic.nodeWorkTime = lowbit * n; - 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 32, lowbit, n); dataStatic.nodeSendTime = lowbit * n; dataStatic.nodeWorkTime = dataStatic.nodeWorkTime - dataStatic.nodeSendTime; @@ -276,76 +274,32 @@ void Uart::DealDataNodeFeature(const char *pData, int flag) { sprintf(szTableName, "t_data_%s", strLongAddr.c_str()); 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; - n = ScaleConvert(highbit); + + DataExtract(pRecvData, 8, lowbit, n); 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; - n = ScaleConvert(highbit); + + DataExtract(pRecvData, 10, lowbit, n); 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; - n = ScaleConvert(highbit); + + DataExtract(pRecvData, 12, lowbit, n); 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; - n = ScaleConvert(highbit); + + DataExtract(pRecvData, 14, lowbit, n); 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; - n = ScaleConvert(highbit); + + DataExtract(pRecvData, 16, lowbit, n); 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; - n = ScaleConvert(highbit); + + DataExtract(pRecvData, 18, lowbit, n); 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; - n = ScaleConvert(highbit); + + DataExtract(pRecvData, 20, lowbit, n); 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; - n = ScaleConvert(highbit); + + DataExtract(pRecvData, 22, lowbit, n); 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; - n = ScaleConvert(highbit); + + DataExtract(pRecvData, 24, lowbit, n); dataDymX.Amp5 = lowbit * n; memset(buf, 0, sizeof(buf)); @@ -413,76 +367,32 @@ void Uart::DealDataNodeFeature(const char *pData, int flag) { valNodeFeature["timeStamp"] = nowTimetamp; valNodeData.append(valNodeFeature); DataRecvDym dataDymY; - 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; - n = ScaleConvert(highbit); + + DataExtract(pRecvData, 34, lowbit, n); dataDymY.DiagnosisPk = lowbit * n; - 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 36, lowbit, n); dataDymY.RmsValues = 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 38, lowbit, n); dataDymY.IntegratPk = 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 40, lowbit, n); dataDymY.IntegratRMS = 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 42, lowbit, n); dataDymY.Amp1 = 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 44, lowbit, n); dataDymY.Amp2 = 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 46, lowbit, n); dataDymY.Amp3 = 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 48, lowbit, n); dataDymY.Amp4 = 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 50, lowbit, n); dataDymY.Amp5 = lowbit * n; memset(buf, 0, sizeof(buf)); @@ -545,115 +455,46 @@ void Uart::DealDataNodeFeature(const char *pData, int flag) { valNodeData.append(valNodeFeature); DataRecvDym dataDymZ; - 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 52, lowbit, n); dataDymZ.DiagnosisPk = 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 54, lowbit, n); dataDymZ.RmsValues = lowbit * n; - 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 56, lowbit, n); dataDymZ.IntegratPk = lowbit * n; - 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 58, lowbit, n); dataDymZ.IntegratRMS = lowbit * n; - 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 60, lowbit, n); dataDymZ.Amp1 = lowbit * n; - 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 62, lowbit, n); dataDymZ.Amp2 = lowbit * n; - 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 64, lowbit, n); dataDymZ.Amp3 = 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 66, lowbit, n); dataDymZ.Amp4 = 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 68, lowbit, n); dataDymZ.Amp5 = 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 70, lowbit, n); dataDymZ.EnvelopEnergy = 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 72, lowbit, n); dataDymZ.Phase1 = 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 74, lowbit, n); dataDymZ.Phase2 = 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; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 76, lowbit, n); dataDymZ.Phase3 = lowbit * n; - sprintf(buf, "%02x%02x", pRecvData->Data[79], pRecvData->Data[78]); - iTemp = (unsigned int)strtol(buf, NULL, 16); - highbit = iTemp >> 14 & 0x3; - lowbit = iTemp & 0x3fff; - n = ScaleConvert(highbit); + DataExtract(pRecvData, 78, lowbit, n); dataDymZ.Phase4 = lowbit * n; memset(whereCon, 0, 1024); @@ -887,14 +728,14 @@ std::vector Uart::DealData(int iChannel, float coe, unsigned int sampleRa deallen = j * 92; } for (size_t i = 0; i < deallen; i++) { - float fTemp = 0.0; + float fTemp = 0.0f; 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 + fTemp = iTemp * coe * 9.8f; // convert to m/s2 } else { - fTemp = (((~iTemp) & 0xffff) + 1) * -coe * 9.8; // convert to m/s2 + fTemp = (((~iTemp) & 0xffff) + 1) * -coe * 9.8f; // convert to m/s2 } vecData.push_back(fTemp); if (strProduct == "01") { @@ -997,32 +838,32 @@ void Uart::DealWave() { } float Uart::Calcoe(int ran, int iChannel, std::string &product, int range) { - float coe = 0.0; + float coe = 0.0f; if (product == "01") { switch (ran) { case 0: { range = 8; - coe = 8 * 1.0 / 32767; + coe = 8 * 1.0f / 32767; } break; case 1: { range = 16; - coe = 16 * 1.0 / 32767; + coe = 16 * 1.0f / 32767; } break; case 2: { range = 32; - coe = 32 * 1.0 / 32767; + coe = 32 * 1.0f / 32767; } break; case 3: { range = 64; - coe = 64 * 1.0 / 32767; + coe = 64 * 1.0f / 32767; } break; } } else if (product == "02") { if (iChannel == WAVE_X || iChannel == WAVE_Y) { - coe = 0.00048828125; + coe = 0.00048828125f; } if (iChannel == WAVE_Z) { - coe = 0.00172607421875; + coe = 0.00172607421875f; } } return coe;