From bc915d6618d1cd142c6b019d0087abcced06bd62 Mon Sep 17 00:00:00 2001 From: yyds Date: Sun, 21 Aug 2022 21:27:19 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=94=AF=E6=8C=81=E5=9B=BA=E4=BB=B6=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E7=9A=84=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BabyOS_Protocol/BabyOS_Protocol.pro.user | 2 +- BabyOS_Protocol/mainwindow.cpp | 44 +++++++++++++++++++-- BabyOS_Protocol/mainwindow.h | 2 + BearPi.bin | Bin 0 -> 57952 bytes README.md | 48 ++++++++++++++++------- exe/BabyOS_Protocol.exe | Bin 49664 -> 50688 bytes 6 files changed, 78 insertions(+), 18 deletions(-) create mode 100644 BearPi.bin diff --git a/BabyOS_Protocol/BabyOS_Protocol.pro.user b/BabyOS_Protocol/BabyOS_Protocol.pro.user index 0156a29..5776fe5 100644 --- a/BabyOS_Protocol/BabyOS_Protocol.pro.user +++ b/BabyOS_Protocol/BabyOS_Protocol.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/BabyOS_Protocol/mainwindow.cpp b/BabyOS_Protocol/mainwindow.cpp index 7c74736..fd6b92c 100644 --- a/BabyOS_Protocol/mainwindow.cpp +++ b/BabyOS_Protocol/mainwindow.cpp @@ -18,7 +18,7 @@ extern "C" int Dispatch(bProtoID_t id, uint8_t cmd, uint8_t *param, bProtoLen_t */ #define CMD_TEST (0x1) #define CMD_SET_TIME (0x2) -#define CMD_UPGRADE_START (0x3) +#define CMD_FW_INFO (0x3) #define CMD_UPGRADE_DATA (0x4) #define CMD_UPGRADE_RESULT (0x5) @@ -109,7 +109,7 @@ void MainWindow::on_refreshButton_clicked() void MainWindow::TimerTimeout() { uint32_t len; - uint8_t tmp_buf[1024]; + uint8_t tmp_buf[10240]; len = uartModule.uartReadBuff(tmp_buf); tmp_buf[len] = '\0'; if (len > 0) @@ -195,6 +195,7 @@ int MainWindow::TransData(uint16_t num) ((bin_file_len - index) >= 512) ? 512 : (bin_file_len - index)); len = bProtocolPack(protocol_n, 0xFFFFFFFF, CMD_UPGRADE_DATA, (uint8_t *)&dat, sizeof(bUpgradeTransData_t), table); + ui->recTEXT->append(hexToString(table, len)); if (ui->encryptBox->isChecked() == true) { _bProtocolEncrypt(table, len); @@ -213,6 +214,38 @@ int MainWindow::AckResult(uint8_t result) return 0; } +/** + * \brief 返回固件信息 + */ +int MainWindow::AckFwInfo() +{ + bUpgradeStart_t info; + uint8_t table[128]; + int len = 0; + char *pfwname; + memset(&info, 0, sizeof(bUpgradeStart_t)); + if (ui->filenameLable->text().isEmpty()) + { + return -1; + } + if (ui->FwnamelineEdit->text().isEmpty()) + { + return -1; + } + pfwname = ui->FwnamelineEdit->text().toLatin1().data(); + info.file_size = bin_file_len; + info.file_crc = bin_file_crc; + memcpy(info.file_name, pfwname, (strlen(pfwname) > 63) ? 63 : strlen(pfwname)); + len = bProtocolPack(protocol_n, 0xFFFFFFFF, CMD_FW_INFO, (uint8_t *)&info, + sizeof(bUpgradeStart_t), table); + if (ui->encryptBox->isChecked() == true) + { + _bProtocolEncrypt(table, len); + } + uartModule.uartSendBuff(table, len); + return 0; +} + /** * \brief 协议解析的分发函数,在此函数,根据指令执行对应的操作 */ @@ -243,6 +276,11 @@ int Dispatch(bProtoID_t id, uint8_t cmd, uint8_t *param, bProtoLen_t param_len) tmpClass->AckResult(result); } break; + case CMD_FW_INFO: + { + tmpClass->AckFwInfo(); + } + break; } return 0; } @@ -342,7 +380,7 @@ void MainWindow::on_upgradeBUTTON_clicked() info.file_size = bin_file_len; info.file_crc = bin_file_crc; memcpy(info.file_name, pfwname, (strlen(pfwname) > 63) ? 63 : strlen(pfwname)); - len = bProtocolPack(protocol_n, 0xFFFFFFFF, CMD_UPGRADE_START, (uint8_t *)&info, + len = bProtocolPack(protocol_n, 0xFFFFFFFF, CMD_FW_INFO, (uint8_t *)&info, sizeof(bUpgradeStart_t), table); if (ui->encryptBox->isChecked() == true) { diff --git a/BabyOS_Protocol/mainwindow.h b/BabyOS_Protocol/mainwindow.h index 3e2cbf9..e269d20 100644 --- a/BabyOS_Protocol/mainwindow.h +++ b/BabyOS_Protocol/mainwindow.h @@ -22,6 +22,8 @@ public: int ShowLog(bProtoID_t id, uint8_t cmd, uint8_t *param, bProtoLen_t param_len); int TransData(uint16_t num); int AckResult(uint8_t result); + int AckFwInfo(void); + ~MainWindow(); private slots: diff --git a/BearPi.bin b/BearPi.bin new file mode 100644 index 0000000000000000000000000000000000000000..602c312e51707063fb13ab22c93b2f9db84064c8 GIT binary patch literal 57952 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 6d49c32..6f7f126 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,9 @@ | ----- | ------ | ------ | ----- | -------- | ----- | | 1Byte | 4Bytes | 2Bytes | 1Byte | 0~nBytes | 1Byte | - +`上位机的设备ID为 0x1314` + +--- @@ -17,6 +19,8 @@ | ---- | ------------ | | 0x1 | "BabyOS" | +--- + ### 设置时间指令 @@ -25,63 +29,79 @@ | ---- | ------------ | | 0x2 | UTC | +--- + +### 查询新固件信息 + +`(设备==>上位机)` + +| 指令 | 参数(0Bytes) | +| ---- | ------------ | +| 0x3 | 无参数 | -### 开始升级指令 - +### 新固件信息 + +`(上位机==>设备)` | 指令 | 参数(72Bytes) | | ---- | ------------ | | 0x3 | 文件大小(4Bytes) CRC32校验值(4Bytes) 固件名(64Bytes)| - +`固件名长度不足64字节时,补0` + +--- ### 请求分包数据指令 - +`(设备==>上位机)` | 指令 | 参数(2Bytes) | | ---- | ------------ | | 0x4 | 分包序号(2Bytes)| - +`分包序号从0开始` ### 回复分包数据指令 - +`(上位机==>设备)` | 指令 | 参数(514Bytes) | | ---- | ------------ | | 0x4 | 分包序号(2Bytes) 数据长度(512Bytes)| - +`剩余长度不足512字节时,补0` + +--- ### 上报升级结果指令 - +`(设备==>上位机)` | 指令 | 参数(1Bytes) | | ---- | ------------ | | 0x5 | 升级结果(1Bytes)| - - - - +`校验成功:0` +`校验失败:1` +`固件名不匹配:2` +`文件长度不合理:3` ### 确认升级结果指令 - +`(上位机==>设备)` | 指令 | 参数(0Bytes) | | ---- | ------------ | | 0x5 | 无参数| +--- + diff --git a/exe/BabyOS_Protocol.exe b/exe/BabyOS_Protocol.exe index 3ac124db3172434376cfe83d7b24cb6d4185895f..2299bf4066994715c66b78b79d7704367884d8b7 100644 GIT binary patch delta 4796 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 delta 4026 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