修改了装置重启方式,去除了外部调用的校验流程,现在直接在内部自动完成。

新增了装置升级的正式流程。
This commit is contained in:
2026-03-09 19:06:56 +08:00
parent 93def18fbd
commit f727f9ee9c
5 changed files with 556 additions and 11 deletions

View File

@@ -681,6 +681,80 @@ std::vector<unsigned char> generate_preupgrade_message()
return GetMsg(DataBuf, static_cast<unsigned char>(MsgRequestType::Request_Read_RunningInformation));
}
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
* @param data <20><>ǰ֡<C7B0><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param updateCount <20><>ǰ֡<C7B0><D6A1><EFBFBD><EFBFBD>
* @param updateSize <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ܴ<EFBFBD>С
* @param count <20><>֡<EFBFBD><D6A1>
* @param crc CRCУ<43><D0A3>ֵ
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
*/
std::vector<unsigned char> generate_upgrade_start_message(const std::vector<unsigned char>& data,
std::uint32_t updateCount,
std::uint32_t updateSize,
std::uint32_t count,
std::uint32_t crc)
{
// <20><><EFBFBD><EFBFBD>44<34>ֽ<EFBFBD>ͷ<EFBFBD><CDB7> + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ϊ0
std::vector<unsigned char> DataBuf(44 + data.size(), 0x00);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嵽44<34>ֽ<EFBFBD>ͷ<EFBFBD><CDB7>֮<EFBFBD><D6AE>
std::copy(data.begin(), data.end(), DataBuf.begin() + 44);
DataBuf[0] = 0x00; // У<>ʽ 0-crcУ<63><D0A3> 1-md5У<35><D0A3>
DataBuf[1] = 0x00; // <20><><EFBFBD><EFBFBD>
DataBuf[2] = 0x00; // <20><><EFBFBD><EFBFBD>
// 4<>ֽڵ<D6BD>ǰ֡<C7B0><D6A1><EFBFBD><EFBFBD>
DataBuf[3] = static_cast<unsigned char>(((updateCount + 1) >> 24) & 0xFF);
DataBuf[4] = static_cast<unsigned char>(((updateCount + 1) >> 16) & 0xFF);
DataBuf[5] = static_cast<unsigned char>(((updateCount + 1) >> 8) & 0xFF);
DataBuf[6] = static_cast<unsigned char>((updateCount + 1) & 0xFF);
// 4<>ֽ<EFBFBD><D6BD><EFBFBD>֡<EFBFBD><D6A1>
DataBuf[7] = static_cast<unsigned char>((count >> 24) & 0xFF);
DataBuf[8] = static_cast<unsigned char>((count >> 16) & 0xFF);
DataBuf[9] = static_cast<unsigned char>((count >> 8) & 0xFF);
DataBuf[10] = static_cast<unsigned char>(count & 0xFF);
// 4<>ֽ<EFBFBD><D6BD>ܴ<EFBFBD>С
DataBuf[11] = static_cast<unsigned char>((updateSize >> 24) & 0xFF);
DataBuf[12] = static_cast<unsigned char>((updateSize >> 16) & 0xFF);
DataBuf[13] = static_cast<unsigned char>((updateSize >> 8) & 0xFF);
DataBuf[14] = static_cast<unsigned char>(updateSize & 0xFF);
// 4<>ֽ<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>
DataBuf[15] = static_cast<unsigned char>((crc >> 24) & 0xFF);
DataBuf[16] = static_cast<unsigned char>((crc >> 16) & 0xFF);
DataBuf[17] = static_cast<unsigned char>((crc >> 8) & 0xFF);
DataBuf[18] = static_cast<unsigned char>(crc & 0xFF);
DataBuf[19] = 0x00; // ѹ<><D1B9><EFBFBD><EFBFBD>ʽ <20><><EFBFBD><EFBFBD>
// DataBuf[20]~DataBuf[27] Ϊ0<CEAA><30>ѹǰ<D1B9><C7B0>С/ѹǰУ<C7B0><EFBFBD><E9B1B8>
// DataBuf[28]~DataBuf[43] Ϊ0<CEAA><30>16<31>ֽ<EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// vector <20><>ʼ<EFBFBD><CABC>ʱ<EFBFBD>Ѿ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>ֵ
// <20><><EFBFBD><EFBFBD>ͨ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>38<33><38>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>
return GetMsg(DataBuf, static_cast<unsigned char>(MsgRequestType::Request_Upgrade));
}
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
*/
std::vector<unsigned char> generate_upgrade_end_message()
{
// <20><><EFBFBD><EFBFBD>3<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ϊ0
std::vector<unsigned char> DataBuf(3, 0x00);
DataBuf[0] = 0x55;//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
// <20><><EFBFBD><EFBFBD>ͨ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>38<33><38>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>
return GetMsg(DataBuf, static_cast<unsigned char>(MsgRequestType::Request_Upgrade));
}
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD>ö<EFBFBD>ʱ<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
* @param time <20>·<EFBFBD><C2B7>Ķ<EFBFBD>ʱʱ<CAB1><CAB1> (tmֵ)