fix wave save bugs

This commit is contained in:
zhangsheng 2024-11-08 16:55:14 +08:00
parent 7de8c71652
commit 634b54f435
11 changed files with 128 additions and 67 deletions

View File

@ -917,37 +917,37 @@ std::string IpAddrInit() {
std::string strip = ""; std::string strip = "";
strip = GetGwIp_(WLAN0); strip = GetGwIp_(WLAN0);
if (strip.compare("0.0.0.0") != 0) { if (strip.compare("0.0.0.0") != 0) {
zlog_info(zct, "[IpAddrInit] wlan0: %s", strip.c_str()); //zlog_info(zct, "[IpAddrInit] wlan0: %s", strip.c_str());
return strip; return strip;
} }
strip = GetGwIp_(WLAN2); strip = GetGwIp_(WLAN2);
if (strip.compare("0.0.0.0") != 0) { if (strip.compare("0.0.0.0") != 0) {
zlog_info(zct, "[IpAddrInit] wlan2: %s", strip.c_str()); //zlog_info(zct, "[IpAddrInit] wlan2: %s", strip.c_str());
return strip; return strip;
} }
strip = GetGwIp_(ETH1); strip = GetGwIp_(ETH1);
if (strip.compare("0.0.0.0") != 0 && strip.compare("192.168.188.188") != 0) { if (strip.compare("0.0.0.0") != 0 && strip.compare("192.168.188.188") != 0) {
zlog_info(zct, "[IpAddrInit] eth1: %s", strip.c_str()); //zlog_info(zct, "[IpAddrInit] eth1: %s", strip.c_str());
return strip; return strip;
} }
strip = GetGwIp_(ETH2); strip = GetGwIp_(ETH2);
if (strip.compare("0.0.0.0") != 0 && strip.compare("192.168.188.188") != 0) { if (strip.compare("0.0.0.0") != 0 && strip.compare("192.168.188.188") != 0) {
zlog_info(zct, "[IpAddrInit] eth2: %s", strip.c_str()); //zlog_info(zct, "[IpAddrInit] eth2: %s", strip.c_str());
return strip; return strip;
} }
strip = GetGwIp_(ETH0); strip = GetGwIp_(ETH0);
if (strip.compare("0.0.0.0") != 0) { if (strip.compare("0.0.0.0") != 0) {
zlog_info(zct, "[IpAddrInit] eth0: %s", strip.c_str()); //zlog_info(zct, "[IpAddrInit] eth0: %s", strip.c_str());
return strip; return strip;
} }
strip = GetGwIp_(USB0); strip = GetGwIp_(USB0);
if (strip.compare("0.0.0.0") != 0) { if (strip.compare("0.0.0.0") != 0) {
zlog_info(zct, "[IpAddrInit] usb0: %s", strip.c_str()); //zlog_info(zct, "[IpAddrInit] usb0: %s", strip.c_str());
return strip; return strip;
} }
strip = GetGwIp_(WWAN0); strip = GetGwIp_(WWAN0);
if (strip.compare("0.0.0.0") != 0) { if (strip.compare("0.0.0.0") != 0) {
zlog_info(zct, "[IpAddrInit] wwan0: %s", strip.c_str()); //zlog_info(zct, "[IpAddrInit] wwan0: %s", strip.c_str());
return strip; return strip;
} }
zlog_warn(zct, "[IpAddrInit] ip: %s", strip.c_str()); zlog_warn(zct, "[IpAddrInit] ip: %s", strip.c_str());

View File

@ -72,7 +72,17 @@ struct compressWaveChannel {
CountZ = 0; CountZ = 0;
} }
}; };
struct WaveChannel {
std::vector<float> WaveChannelX;
std::vector<float> WaveChannelY;
std::vector<float> WaveChannelZ;
std::string wave_timestamp;
WaveChannel() {
WaveChannelX.reserve(25600);
WaveChannelY.reserve(25600);
WaveChannelZ.reserve(48000);
}
};
struct DevDataOfGwid { struct DevDataOfGwid {
std::string mDevdata; std::string mDevdata;
std::string mDevid; std::string mDevid;

View File

@ -101,8 +101,10 @@ struct Param_27 {
int mMode; int mMode;
std::string mCmdSerial; std::string mCmdSerial;
std::string mDataNodeNo; std::string mDataNodeNo;
std::string mShortAddr;
std::string mMeasurementID;
std::string mType; std::string mType;
Param_27() : mMode(0), mCmdSerial(""), mDataNodeNo(""), mType(""){}; Param_27() : mMode(0), mCmdSerial(""), mDataNodeNo(""),mShortAddr(""),mMeasurementID(""), mType(""){};
}; };
struct Param_28 { struct Param_28 {

View File

@ -7,6 +7,7 @@
#include "platform/platform_init.hpp" #include "platform/platform_init.hpp"
#include "utility/md5.h" #include "utility/md5.h"
#include "utility/calculation.hpp" #include "utility/calculation.hpp"
#include "scheduler/schedule.hpp"
extern zlog_category_t *zct; extern zlog_category_t *zct;
@ -271,16 +272,25 @@ std::string JsonData::JsonCmd_Cgi_27(Param_27 &param) {
if (param.mDataNodeNo.length() > 0 && param.mType == "DELETE") { if (param.mDataNodeNo.length() > 0 && param.mType == "DELETE") {
sprintf(whereCon, "%s= '%s'", T_SENSOR_INFO(DATANODENO), param.mDataNodeNo.c_str()); sprintf(whereCon, "%s= '%s'", T_SENSOR_INFO(DATANODENO), param.mDataNodeNo.c_str());
sqlite_db_ctrl::instance().DeleteTableData(T_SENSOR_INFO(TNAME), whereCon); sqlite_db_ctrl::instance().DeleteTableData(T_SENSOR_INFO(TNAME), whereCon);
memset(whereCon,0,sizeof(whereCon));
sprintf(whereCon, "%s= '%s'", T_SENSOR_INFO(DATANODENO), param.mMeasurementID.c_str());
sqlite_db_ctrl::instance().DeleteTableData(T_DATA_INFO(TNAME), whereCon); sqlite_db_ctrl::instance().DeleteTableData(T_DATA_INFO(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(T_DATASTATIC_INFO(TNAME), whereCon); sqlite_db_ctrl::instance().DeleteTableData(T_DATASTATIC_INFO(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(T_DATANODE_TIME(TNAME), whereCon); sqlite_db_ctrl::instance().DeleteTableData(T_DATANODE_TIME(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(T_BATTERY_INFO(TNAME), whereCon); sqlite_db_ctrl::instance().DeleteTableData(T_BATTERY_INFO(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(" t_battery_history ", whereCon);
memset(whereCon,0,sizeof(whereCon));
sprintf(whereCon, "channelID like'%s'", param.mDataNodeNo.c_str());
sqlite_db_ctrl::instance().DeleteTableData(" t_data_waveSend ", whereCon);
char szTableName[50] = {0x00}; char szTableName[50] = {0x00};
sprintf(szTableName, "DROP TABLE t_data_%s", param.mDataNodeNo.c_str()); sprintf(szTableName, "DROP TABLE t_data_%s", param.mDataNodeNo.c_str());
sqlite_db_ctrl::instance().CreateTable(szTableName); sqlite_db_ctrl::instance().CreateTable(szTableName);
memset(szTableName, 0x00, sizeof(szTableName)); memset(szTableName, 0x00, sizeof(szTableName));
sprintf(szTableName, "DROP TABLE t_dataStatic_%s", param.mDataNodeNo.c_str()); sprintf(szTableName, "DROP TABLE t_dataStatic_%s", param.mDataNodeNo.c_str());
sqlite_db_ctrl::instance().CreateTable(szTableName); sqlite_db_ctrl::instance().CreateTable(szTableName);
scheduler::instance().ClearScheduleCfg(atoi(param.mShortAddr.c_str()));
} else if (param.mDataNodeNo.length() > 0 && param.mType == "CORRECT") { } else if (param.mDataNodeNo.length() > 0 && param.mType == "CORRECT") {
char updateSql[1024] = {0}; char updateSql[1024] = {0};
sprintf(whereCon, "%s= '%s'", T_SENSOR_INFO(DATANODENO), param.mDataNodeNo.c_str()); sprintf(whereCon, "%s= '%s'", T_SENSOR_INFO(DATANODENO), param.mDataNodeNo.c_str());

View File

@ -620,7 +620,7 @@ std::string JsonData::JsonCmd_Cgi_60(Param_60 &param){
char cmd[64]={0}; char cmd[64]={0};
sprintf(cmd, "mv /opt/%s /opt/DataNode/",param.fileName.c_str()); sprintf(cmd, "mv /opt/%s /opt/DataNode/",param.fileName.c_str());
system(cmd); system(cmd);
sprintf(file_path,"/opt/DataNodeNo/%s",file_path); sprintf(file_path, "/opt/DataNodeNo/%s",param.fileName.c_str());
FILE * pFile=NULL; FILE * pFile=NULL;
size_t thisSize = 0; size_t thisSize = 0;
char *buffer=NULL; char *buffer=NULL;

View File

@ -14,7 +14,7 @@ int GlobalConfig::LinkStatus_G = 0;
int GlobalConfig::LinkCount = 0; int GlobalConfig::LinkCount = 0;
int GlobalConfig::net0Status = 1; int GlobalConfig::net0Status = 1;
std::string GlobalConfig::Version = "3.2.5"; std::string GlobalConfig::Version = "5.0";
std::string GlobalConfig::MacAddr_G = ""; std::string GlobalConfig::MacAddr_G = "";
std::string GlobalConfig::MacAddr_G2 = ""; std::string GlobalConfig::MacAddr_G2 = "";
std::string GlobalConfig::IpAddr_G = ""; std::string GlobalConfig::IpAddr_G = "";
@ -29,6 +29,7 @@ int GlobalConfig::threadStatus = 1;
int GlobalConfig::day = 0; int GlobalConfig::day = 0;
extern std::map<std::string, compressWaveChannel> g_mapCompress; extern std::map<std::string, compressWaveChannel> g_mapCompress;
extern std::map<std::string, WaveChannel> g_mapWaveChannel;
TopicList GlobalConfig::Topic_G; TopicList GlobalConfig::Topic_G;
ZigbeeInfo GlobalConfig::ZigbeeInfo_G; ZigbeeInfo GlobalConfig::ZigbeeInfo_G;
@ -98,10 +99,12 @@ void PlatformInit::Init() {
zlog_error(zbt, "PlatFormInit exception happend."); zlog_error(zbt, "PlatFormInit exception happend.");
std::string errorinfo = "系统初始化异常"; std::string errorinfo = "系统初始化异常";
} }
vec_t vecResult = sqlite_db_ctrl::instance().GetDataMultiLineOfOneColumn(T_SENSOR_INFO(TNAME), " zigbeeShortAddr ", NULL); array_t arrResult = sqlite_db_ctrl::instance().GetDataMultiLineTransaction(T_SENSOR_INFO(TNAME), " MeasurementID,zigbeeShortAddr ", NULL);
for (size_t i = 0; i < vecResult.size(); i++) { for (size_t i = 0; i < arrResult.size(); i++) {
compressWaveChannel tempchannel; compressWaveChannel tempchannel;
g_mapCompress.insert(std::make_pair(vecResult[0], tempchannel)); WaveChannel tempwavechannel;
g_mapCompress.insert(std::make_pair(arrResult[i][1], tempchannel));
g_mapWaveChannel.insert(std::make_pair(arrResult[i][0], tempwavechannel));
} }
} }

View File

@ -75,7 +75,7 @@ void HeartRep() {
GlobalConfig::serverStatus = 0; GlobalConfig::serverStatus = 0;
gpio_set(GlobalConfig::GPIO_G.errorLed, 0); gpio_set(GlobalConfig::GPIO_G.errorLed, 0);
} }
sleep(10); sleep(30);
} }
} }

View File

@ -540,18 +540,27 @@ void Uart::DealDataNodeName(const char *pData) {
if (vecRes.size() > 1) { if (vecRes.size() > 1) {
for (size_t i = 0; i < vecRes.size(); i++) { for (size_t i = 0; i < vecRes.size(); i++) {
if (vecRes[i][1] != "") { if (vecRes[i][1] != "") {
char whereCon1[64] = {0}; memset(whereCon,0,sizeof(whereCon));
sprintf(whereCon1, " dataNodeNo='%s' ", vecRes[i][0].c_str()); sprintf(whereCon, "%s= '%s'", T_SENSOR_INFO(DATANODENO), vecRes[i][0].c_str());
sqlite_db_ctrl::instance().DeleteTableData(T_SENSOR_INFO(TNAME), whereCon1); sqlite_db_ctrl::instance().DeleteTableData(T_SENSOR_INFO(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(T_DATA_INFO(TNAME), whereCon1); memset(whereCon,0,sizeof(whereCon));
sqlite_db_ctrl::instance().DeleteTableData(T_DATASTATIC_INFO(TNAME), whereCon1); sprintf(whereCon, "%s= '%s'", T_SENSOR_INFO(DATANODENO), vecRes[i][1].c_str());
sqlite_db_ctrl::instance().DeleteTableData(T_DATANODE_TIME(TNAME), whereCon1); sqlite_db_ctrl::instance().DeleteTableData(T_DATA_INFO(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(T_DATASTATIC_INFO(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(T_DATANODE_TIME(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(T_BATTERY_INFO(TNAME), whereCon);
sqlite_db_ctrl::instance().DeleteTableData(" t_battery_history ", whereCon);
memset(whereCon,0,sizeof(whereCon));
sprintf(whereCon, "channelID like'%s'", vecRes[i][1].c_str());
sqlite_db_ctrl::instance().DeleteTableData(" t_data_waveSend ", whereCon);
char szTableName[50] = {0x00}; char szTableName[50] = {0x00};
sprintf(szTableName, "DROP TABLE t_data_%s", vecRes[i][0].c_str()); sprintf(szTableName, "DROP TABLE t_data_%s", vecRes[i][1].c_str());
sqlite_db_ctrl::instance().CreateTable(szTableName); sqlite_db_ctrl::instance().CreateTable(szTableName);
memset(szTableName, 0x00, sizeof(szTableName)); memset(szTableName, 0x00, sizeof(szTableName));
sprintf(szTableName, "DROP TABLE t_dataStatic_%s", vecRes[i][0].c_str()); sprintf(szTableName, "DROP TABLE t_dataStatic_%s", vecRes[i][1].c_str());
sqlite_db_ctrl::instance().CreateTable(szTableName); sqlite_db_ctrl::instance().CreateTable(szTableName);
scheduler::instance().ClearScheduleCfg(atoi(szShortAdd));
} }
} }
} }

View File

@ -31,6 +31,16 @@ enum InteractiveCommand {
WAVE_COMPRESS = 15, // 波形数据压缩 WAVE_COMPRESS = 15, // 波形数据压缩
UPGRADE_FIRMWARE = 16 //固件升级内容 UPGRADE_FIRMWARE = 16 //固件升级内容
}; };
typedef enum {
kUpgradeSuccess = 0, // 成功
kUpgradeIndexError = 1, //包接收序号错误,要重试
kProductTypeMismatch = 2, // 包有问题,不再重试
kZigbeeHWMismatch = 3, // 包有问题,不再重试
kTransmitFileCrcError = 4, // 此返回值时,要重试
kRecvDataLenError = 5, // 此返回值时,要重试
kUpgradeDoneBefore = 6 // 当前就是这个版本,不需要升级了
} FirmFileCheckResult;
// 无线传感器请求任务 // 无线传感器请求任务
typedef struct { typedef struct {
uint8_t cmd; // kAskTask uint8_t cmd; // kAskTask
@ -138,6 +148,7 @@ typedef struct {
uint8_t cmd; uint8_t cmd;
uint8_t success; // 0:成功, 1其它失败需要重发 uint8_t success; // 0:成功, 1其它失败需要重发
} NormalResp; } NormalResp;
class Uart { class Uart {
public: public:
Uart(); Uart();

View File

@ -18,6 +18,12 @@ std::vector<RecvData> g_VecWaveDataX;
std::vector<RecvData> g_VecWaveDataY; std::vector<RecvData> g_VecWaveDataY;
std::vector<RecvData> g_VecWaveDataZ; std::vector<RecvData> g_VecWaveDataZ;
std::map<std::string, compressWaveChannel> g_mapCompress; std::map<std::string, compressWaveChannel> g_mapCompress;
std::map<std::string, WaveChannel> g_mapWaveChannel;
unsigned char data[1024 * 30] = {0x00};
unsigned char outdata[1024 * 50] = {0x00};
unsigned char dealdata[1024 * 30] = {0x00};
char mqttData[512000] = {0};
void Uart::RecordBattery(std::string &strLongAddr, DataRecvStatic &dataStatic, std::string &nowTimetamp) { void Uart::RecordBattery(std::string &strLongAddr, DataRecvStatic &dataStatic, std::string &nowTimetamp) {
char insertSql[1024] = {0}; char insertSql[1024] = {0};
@ -60,7 +66,6 @@ void Uart::DealDataNodeFeature(const char *pData, int flag) {
if (!bSendTimeStamp) { if (!bSendTimeStamp) {
bSendTimeStamp = true; bSendTimeStamp = true;
//modify_distaddr_info(0x9999, (char*)"", pRecvData->ShortAddr); //临时参数配置
mssleep(10000); mssleep(10000);
zlog_info(zct, "Zigbee Signal !\n"); zlog_info(zct, "Zigbee Signal !\n");
@ -76,10 +81,6 @@ void Uart::DealDataNodeFeature(const char *pData, int flag) {
return; return;
} }
// GlobalConfig::ZigbeeInfo_G.MyAddr = "9999";
// GlobalConfig::Zigbee_G.MyAddr = 0x9999;
// std::string strTime = GetLocalTimeWithMs();
m_strDestShortAddr = std::string(buf); m_strDestShortAddr = std::string(buf);
@ -805,10 +806,11 @@ void Uart::DealWaveThread() {
} }
} }
std::vector<float> Uart::DealData(int iChannel, float coe, unsigned int sampleRate, int ACCSampleTime, std::string strProduct) { std::vector<float> Uart::DealData(int iChannel, float coe, unsigned int sampleRate, int ACCSampleTime, std::string strProduct) {
memset(data,0,sizeof(data));
memset(dealdata,0,sizeof(dealdata));
memset(outdata,0,sizeof(outdata));
size_t waveCount = 0; size_t 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; long unsigned int new_len = 0, deallen = 0;
int compress = 0; int compress = 0;
size_t count = 0; size_t count = 0;
@ -1033,51 +1035,61 @@ void Uart::WriteDatFile(int sampleRate, std::string &strMeasurementID, int iChan
GetTimeNet(localtimestamp, 1); GetTimeNet(localtimestamp, 1);
std::string nowTimetamp = std::string(localtimestamp); std::string nowTimetamp = std::string(localtimestamp);
std::string strChannelID = ""; std::string strChannelID = "";
switch (iChannel) {
case WAVE_X: {
strFileName = "/opt/data/" + strMeasurementID + "-X.dat";
strChannelID = strMeasurementID + "-X";
} break;
case WAVE_Y: {
strFileName = "/opt/data/" + strMeasurementID + "-Y.dat";
strChannelID = strMeasurementID + "-Y";
} break;
case WAVE_Z: {
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);
zlog_info(zct, "fopen FIle vecData.size : %d", vecData.size());
float mean = Calculation::mean(vecData); float mean = Calculation::mean(vecData);
float frTemp; float frTemp;
char buf[33] = {0x00}; char buf[33] = {0x00};
std::string strWaveData = ""; std::string strWaveData = "";
WaveChannel wave_channel;
memset(mqttData,0,sizeof(mqttData));
switch (iChannel) {
case WAVE_X: {
strFileName = "/opt/data/" + strMeasurementID + "-X.dat";
strChannelID = strMeasurementID + "-X";
} break;
case WAVE_Y: {
strFileName = "/opt/data/" + strMeasurementID + "-Y.dat";
strChannelID = strMeasurementID + "-Y";
} break;
case WAVE_Z: {
strFileName = "/opt/data/" + strMeasurementID + "-Z.dat";
strChannelID = strMeasurementID + "-Z";
} break;
default: break;
}
FILE *fp = fopen(strFileName.c_str(), "w");
fwrite(localtimestamp,sizeof(localtimestamp),1,fp);
zlog_info(zct, " vecData.size : %d,start ", vecData.size());
int id = 0;
for (size_t i = 0; i < vecData.size(); i++) { for (size_t i = 0; i < vecData.size(); i++) {
frTemp = vecData[i] - mean; frTemp = vecData[i] - mean;
fwrite(&frTemp, sizeof(float), 1, fp);
memset(buf, 0x00, sizeof(buf)); memset(buf, 0x00, sizeof(buf));
sprintf(buf, "%.2f", frTemp); sprintf(buf, "%.2f", frTemp);
std::string waveTemp(buf); fwrite(&frTemp,sizeof(float),1,fp);
if (i == 0) if (iChannel == WAVE_X){
strWaveData = waveTemp; wave_channel.WaveChannelX[i] = frTemp;
else }else if (iChannel == WAVE_Y){
strWaveData = strWaveData + "," + waveTemp; wave_channel.WaveChannelY[i] = frTemp;
}else if (iChannel == WAVE_Z){
if (i % 100 == 0) { wave_channel.WaveChannelZ[i] = frTemp;
mssleep(5000); }
if (i != vecData.size() -1){
strncpy(mqttData + id ,buf,strlen(buf));
id = id + strlen(buf);
strncpy(mqttData + id,",",1);
id = id + 1;
}
else{
strncpy(mqttData + id ,buf,strlen(buf));
} }
} }
fclose(fp); fclose(fp);
zlog_info(zct, "fopen FIle vecData.size : %d end ", vecData.size());
wave_channel.wave_timestamp = nowTimetamp;
g_mapWaveChannel[strMeasurementID] = wave_channel;
Json::Value valWaveData; Json::Value valWaveData;
valWaveData["number"] = sampleRate; valWaveData["number"] = sampleRate;
valWaveData["channelId"] = strChannelID; valWaveData["channelId"] = strChannelID;
@ -1085,7 +1097,7 @@ void Uart::WriteDatFile(int sampleRate, std::string &strMeasurementID, int iChan
valWaveData["dataNodeGatewayNo"] = GlobalConfig::MacAddr_G; valWaveData["dataNodeGatewayNo"] = GlobalConfig::MacAddr_G;
valWaveData["SensorEngineeringUnit"] = ""; valWaveData["SensorEngineeringUnit"] = "";
valWaveData["timeStamp"] = nowTimetamp; valWaveData["timeStamp"] = nowTimetamp;
valWaveData["waveData"] = strWaveData; valWaveData["waveData"] = mqttData;
valWaveData["mean"] = mean; valWaveData["mean"] = mean;
Json::FastWriter WaveValue; Json::FastWriter WaveValue;
std::string WaveData = WaveValue.write(valWaveData); std::string WaveData = WaveValue.write(valWaveData);

View File

@ -67,6 +67,7 @@ bool Uart::ReadUpdatePackge(unsigned short shortAdd) {
zlog_info(zct, "thisindex = %d", thisindex); zlog_info(zct, "thisindex = %d", thisindex);
FILE* pFile = NULL; FILE* pFile = NULL;
char* buffer = NULL;
int thisSize = 0; int thisSize = 0;
DataNodeUpdateFile = "/opt/DataNode/" + strFileName; DataNodeUpdateFile = "/opt/DataNode/" + strFileName;
zlog_info(zct, "strFileName = %s", DataNodeUpdateFile.c_str()); zlog_info(zct, "strFileName = %s", DataNodeUpdateFile.c_str());
@ -77,6 +78,9 @@ bool Uart::ReadUpdatePackge(unsigned short shortAdd) {
while (fgetc(pFile) != EOF) { while (fgetc(pFile) != EOF) {
++thisSize; ++thisSize;
} }
rewind(pFile);
buffer = (char*)malloc(thisSize);
fread(buffer, sizeof(char), thisSize, pFile);
fclose(pFile); fclose(pFile);
} }