适配了逗猫棒的配网指令

This commit is contained in:
2026-07-27 17:16:30 +08:00
parent df37ff1b23
commit d8021154f2
17 changed files with 900 additions and 832 deletions
+8 -8
View File
@@ -132164,7 +132164,7 @@
"app_main.h"
"tone_player.h"
1784803197 d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\earphone\include\app_main.h
1785135433 d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\earphone\include\app_main.h
"bleproto.h"
"bleproto_api.h"
@@ -134230,7 +134230,7 @@
"rcsp_adv_bluetooth.h"
"bt_tws.h"
1784867308 source:d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\common\third_party_profile\jieli\jl_rcsp\bt_trans_data\le_rcsp_adv_module.c
1785142510 source:d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\common\third_party_profile\jieli\jl_rcsp\bt_trans_data\le_rcsp_adv_module.c
"system/app_core.h"
"system/includes.h"
"app_config.h"
@@ -134919,7 +134919,7 @@
"bt_tws.h"
"icsd_adt_app.h"
1784878086 source:d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\earphone\app_main.c
1785135433 source:d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\earphone\app_main.c
"system/includes.h"
"btstack/btstack_task.h"
"app_config.h"
@@ -135271,7 +135271,7 @@
"icsd_adt_app.h"
"debug.h"
1784804410 source:d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\earphone\default_event_handler.c
1785135433 source:d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\earphone\default_event_handler.c
"default_event_handler.h"
"app_action.h"
"bt_background.h"
@@ -135308,7 +135308,7 @@
"debug.h"
"update_tws_new.h"
1784804410 source:d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\earphone\earphone.c
1785135433 source:d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\earphone\earphone.c
"system/includes.h"
"media/includes.h"
"tone_player.h"
@@ -136062,7 +136062,7 @@
<math.h>
"mjson.h"
1784878066 source:d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\usr_le_code\usr_le_adv.c
1785135433 source:d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\usr_le_code\usr_le_adv.c
"system/includes.h"
"app_config.h"
"app_main.h"
@@ -136074,7 +136074,7 @@
"usr_usb_jb.h"
"debug.h"
1784867441 source:d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\usr_le_code\usr_le_recieve.c
1785142543 source:d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\usr_le_code\usr_le_recieve.c
"app_config.h"
"asm/pwm_led.h"
"tone_player.h"
@@ -137193,7 +137193,7 @@
1784880583 d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\usr_le_code\usr_usb_jb.h
<stdint.h>
1784882217 source:d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\usr_le_code\usr_usb_jb.c
1785135673 source:d:\jianbao\project\À¶ÑÀת½Ó°å-¶ºÃ¨°ô\sdk\apps\usr_le_code\usr_usb_jb.c
"system/includes.h"
"app_config.h"
"vm.h"
+417 -349
View File
@@ -18,8 +18,8 @@
#if TCFG_USB_SLAVE_CDC_ENABLE
#include "usb/device/cdc.h"
#endif
#define LOG_TAG_CONST APP
#define LOG_TAG "[APP]"
#define LOG_TAG_CONST APP
#define LOG_TAG "[APP]"
#define LOG_ERROR_ENABLE
#define LOG_DEBUG_ENABLE
#define LOG_INFO_ENABLE
@@ -27,20 +27,19 @@
#define LOG_CLI_ENABLE
#include "debug.h"
#define FIRM_PACK_LEN 2048//128
static u8 start_data[10]={0x55,0xAA,0xFE,0x61,0x06,0x00,0x00,0x00,0x00,0x00};
static u8 end_data[2]={0xaa,0x55};
static int encode_len=0x00;
static u8 txbuf[384]={0};
static u8 rxbuf[FIRM_PACK_LEN+1024]={0};
static u8 ota_source_data[FIRM_PACK_LEN*2]={0};
#define FIRM_PACK_LEN 2048 // 128
static u8 start_data[10] = {0x55, 0xAA, 0xFE, 0x61, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00};
static u8 end_data[2] = {0xaa, 0x55};
static int encode_len = 0x00;
static u8 txbuf[384] = {0};
static u8 rxbuf[FIRM_PACK_LEN + 1024] = {0};
static u8 ota_source_data[FIRM_PACK_LEN * 2] = {0};
extern u16 usr_get_conn_service();
extern void ble_multi_trans_disconnect(void);
extern void usr_ble_adv_updata_OTA();
extern void usr_ble_send_data(u8* data,u16 len);
extern void usr_ble_send_data(u8 *data, u16 len);
extern void usr_write_pair_info();
extern void usr_clear_pair_info();
extern void usr_set_device_default();
@@ -52,15 +51,17 @@ void usr_data_ana(bleproto_appdata_desc_t *desc);
void usr_do_action_code(int flag);
void usr_app_ota_init();
void usr_test_protocol(void);
void usr_run_cmd_code(bleproto_runcmd_req_t *runcmd_par, u8 usr_msg_id);
bleproto_authsetup_req_t usr_auth_data;
usr_module_cfg _usr_module_cfg;
usr_module_cfg_cache _usr_module_cfg_cache;
usr_module_cfg _usr_module_cfg;
usr_module_cfg_cache _usr_module_cfg_cache;
void usr_read_device_sta()
{
int ret = syscfg_read(CFG_USER_DEVICE_STA, (u8 *)&_usr_module_cfg, sizeof(_usr_module_cfg));
if (ret <= 0) {
if (ret <= 0)
{
memset(&_usr_module_cfg, 0, sizeof(_usr_module_cfg));
_usr_module_cfg.power_on_flag = 1;
syscfg_write(CFG_USER_DEVICE_STA, (u8 *)&_usr_module_cfg, sizeof(_usr_module_cfg));
@@ -88,29 +89,29 @@ void usr_write_device_sta()
usr_write_device_sta_vm();
}
void usr_le_data_recieve(u8* data,u16 len)///BLE数据接收
void usr_le_data_recieve(u8 *data, u16 len) /// BLE数据接收
{
log_info("le recieve: %s",&data[2]);
log_info("le recieve: %s", &data[2]);
printf_buf(data, len);
static u16 usr_len=0;
static u16 usr_len = 0;
bleproto_appdata_desc_t desc;
int rc_result=0;
int rc_result = 0;
memcpy(&rxbuf[usr_len],data,len);
usr_len+=len;
memcpy(&rxbuf[usr_len], data, len);
usr_len += len;
rc_result = bleproto_appdata_decode(rxbuf, usr_len, &desc);
if(rc_result < 0)
if (rc_result < 0)
{
usr_len=0;
usr_len = 0;
}
else if(rc_result == 0)
else if (rc_result == 0)
{
/* incomplete frame */
}
else
{
usr_len=0;
usr_len = 0;
usr_data_ana(&desc);
}
}
@@ -127,397 +128,462 @@ void usr_set_device_default()
void usr_data_ana(bleproto_appdata_desc_t *desc)
{
bleproto_appdata_desc_t encode_desc = { 0 };
if(desc->header.msgtype/*desc.header.msgtype*/ == BLEPROTO_APPDATA_MSGTYPE_REQ) {
switch(desc->header.serviceid){
bleproto_appdata_desc_t encode_desc = {0};
if (desc->header.msgtype /*desc.header.msgtype*/ == BLEPROTO_APPDATA_MSGTYPE_REQ)
{
switch (desc->header.serviceid)
{
case E_BLEPROTO_SERVICE_ID_DEVICEINFO:
case E_BLEPROTO_SERVICE_ID_DEVICEINFO:
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_RSP;
encode_desc.header.msgid = desc->header.msgid;//这里的msg_id为上面解析到的包的msg_id;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_DEVICEINFO;
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_RSP;
encode_desc.header.msgid = desc->header.msgid; // 这里的msg_id为上面解析到的包的msg_id;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_DEVICEINFO;
/* deviceinfo 时间字段忽略:桥接板无 RTC/计划业务 */
(void)desc->datast.deviceinfo_req.t;
(void)desc->datast.deviceinfo_req.gmtoff;
//deviceinfo rsp序列化
bleproto_deviceinfo_rsp_t *rsp = &encode_desc.datast.deviceinfo_rsp;
{
// 填写设备相关信息
rsp->hbcycle=1000;
strcpy(rsp->swv, "V1.0.0.19");
strcpy(rsp->hwv, "V1.0.0.01");
rsp->longcon=1;
rsp->prototype=4;
}
encode_len = bleproto_appdata_encode(txbuf, sizeof(txbuf), sizeof(txbuf), &encode_desc);
if(encode_len > 0) {
printf("encode_len = %d\n",encode_len);
// 调用蓝牙协议栈发送数据接口,将数据一包一包的发送出去
// 第一包:packetlen
// 第包:packetlen
// ......
// 第N包: totallen - (packetlen * (N -1))
usr_ble_send_data(txbuf,encode_len);
}
else
{
printf("2encode_len = %d\n",encode_len);
}
//printf("E_BLEPROTO_SERVICE_ID_DEVICEINFO\n");
break;
case E_BLEPROTO_SERVICE_ID_AUTHSETUP:
// 设备处理,回复响应
printf("E_BLEPROTO_SERVICE_ID_AUTHSETUP\n");
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_RSP;
encode_desc.header.msgid = desc->header.msgid;//这里的msg_id为上面解析到的包的msg_id;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_AUTHSETUP;
/* deviceinfo 时间字段忽略:桥接板无 RTC/计划业务 */
(void)desc->datast.deviceinfo_req.t;
(void)desc->datast.deviceinfo_req.gmtoff;
// deviceinfo rsp序列化
bleproto_deviceinfo_rsp_t *rsp = &encode_desc.datast.deviceinfo_rsp;
{
// 填写设备相关信息
rsp->hbcycle = 1000;
strcpy(rsp->swv, "V1.0.0.19");
strcpy(rsp->hwv, "V1.0.0.01");
rsp->longcon = 1;
rsp->prototype = 4;
}
encode_len = bleproto_appdata_encode(txbuf, sizeof(txbuf), sizeof(txbuf), &encode_desc);
if (encode_len > 0)
{
printf("encode_len = %d\n", encode_len);
// 调用蓝牙协议栈发送数据接口,将数据一包一包的发送出去
// 第包:packetlen
// 第二包:packetlen
// ......
// 第N包: totallen - (packetlen * (N -1))
usr_ble_send_data(txbuf, encode_len);
}
else
{
printf("2encode_len = %d\n", encode_len);
}
// printf("E_BLEPROTO_SERVICE_ID_DEVICEINFO\n");
break;
case E_BLEPROTO_SERVICE_ID_AUTHSETUP:
// 设备处理,回复响应
printf("E_BLEPROTO_SERVICE_ID_AUTHSETUP\n");
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_RSP;
encode_desc.header.msgid = desc->header.msgid; // 这里的msg_id为上面解析到的包的msg_id;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_AUTHSETUP;
bleproto_authsetup_rsp_t *au_rsp = &encode_desc.datast.authsetup_rsp;
au_rsp->errcode=0;
bleproto_authsetup_rsp_t *au_rsp = &encode_desc.datast.authsetup_rsp;
au_rsp->errcode = 0;
memcpy(&usr_auth_data,&desc->datast.authsetup_req,sizeof(usr_auth_data));
{
// 保存三元组
if(usr_auth_data.paired_flag==0)
{
usr_write_pair_info();
printf("usr_auth_data %s %s ",usr_auth_data.authcode,usr_auth_data.devid);
printf_buf(usr_auth_data.gwmac,6);
}
}
encode_len = bleproto_appdata_encode(txbuf, sizeof(txbuf), sizeof(txbuf), &encode_desc);
if(encode_len > 0) {
printf("encode_len = %d\n",encode_len);
usr_ble_send_data(txbuf,encode_len);
}
else
{
printf("2encode_len = %d\n",encode_len);
}
break;
case E_BLEPROTO_SERVICE_ID_AUTHDELETE:
// 设备处理,回复响应
printf("E_BLEPROTO_SERVICE_ID_AUTHDELETE\n");
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_RSP;
encode_desc.header.msgid = desc->header.msgid;//这里的msg_id为上面解析到的包的msg_id;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_AUTHSETUP;
bleproto_authdelete_rsp_t *aude_rsp = &encode_desc.datast.authdelete_rsp;
memcpy(aude_rsp->gwmac,usr_auth_data.gwmac,6);
if(!memcmp(usr_auth_data.authcode,desc->datast.authdelete_req.authcode,32))
{
aude_rsp->errcode=0;
usr_set_device_default();
usr_clear_pair_info();
}
else
{
aude_rsp->errcode=501;
}
encode_len = bleproto_appdata_encode(txbuf, sizeof(txbuf), sizeof(txbuf), &encode_desc);
if(encode_len > 0) {
printf("encode_len = %d\n",encode_len);
usr_ble_send_data(txbuf,encode_len);
}
else
{
printf("2encode_len = %d\n",encode_len);
}
break;
case E_BLEPROTO_SERVICE_ID_DOACTION:
printf("E_BLEPROTO_SERVICE_ID_DOACTION\n");
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_RSP;
encode_desc.header.msgid = desc->header.msgid;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_DOACTION;
encode_desc.datast.doaction_rsp.errcode = 0;
{
bleproto_doaction_rsp_t *action_rsp = &encode_desc.datast.doaction_rsp;
action_rsp->errcode = 0;
printf("action_run %d \n", desc->datast.doaction_req.action);
}
encode_len = bleproto_appdata_encode(txbuf, sizeof(txbuf), sizeof(txbuf), &encode_desc);
if (encode_len > 0) {
usr_ble_send_data(txbuf, encode_len);
usr_do_action_code(desc->datast.doaction_req.action);
}
break;
case E_BLEPROTO_SERVICE_ID_OTANOTIFY:
printf("E_BLEPROTO_SERVICE_ID_OTANOTIFY\n");
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_RSP;
encode_desc.header.msgid = desc->header.msgid;//这里的msg_id为上面解析到的包的msg_id;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_OTANOTIFY;
encode_desc.datast.doaction_rsp.errcode = 0;
bleproto_otanotify_rsp_t *in_ota_rsp = &encode_desc.datast.otanotify_rsp;
bleproto_otanotify_req_t *in_ota_data2= &desc->datast.otanotify_req;
printf("in_ota_data id = %d\n",in_ota_data2->id);
printf("in_ota_data ver = %s\n",in_ota_data2->version);
printf("in_ota_data size= %d\n",in_ota_data2->size);
printf("in_ota_data md5 = %s\n",in_ota_data2->md5);
{
in_ota_rsp->errcode=0;
// 执行命令
}
usr_var.usr_ota_data_id = in_ota_data2->id;//int
usr_var.usr_ota_data_size = in_ota_data2->size;
encode_len = bleproto_appdata_encode(txbuf, sizeof(txbuf), sizeof(txbuf), &encode_desc);
if(encode_len > 0) {
printf("encode_len = %d\n",encode_len);
usr_ble_send_data(txbuf,encode_len);
}
else
{
printf("2encode_len = %d\n",encode_len);
}
usr_var.usr_allow_to_flash=0;
usr_var.usr_data_index=0;
start_data[2]=usr_var.usr_ota_data_size&0x000000ff;
start_data[3]=(usr_var.usr_ota_data_size>>8)&0x000000ff;
start_data[4]=(usr_var.usr_ota_data_size>>16)&0x000000ff;
start_data[5]=(usr_var.usr_ota_data_size>>24)&0x000000ff;
dual_ota_app_data_deal(0,start_data,10);
printf("#### buf total size = %d\n",usr_var.usr_ota_data_size);
printf_buf(start_data,10);
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_REQ;
encode_desc.header.msgid = 0;//desc->header.msgid;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_OTADATA;
encode_desc.datast.doaction_rsp.errcode = 0;
encode_desc.datast.otadata_req.id=usr_var.usr_ota_data_id;
encode_desc.datast.otadata_req.offset=usr_var.usr_data_index;
encode_desc.datast.otadata_req.maxsize=FIRM_PACK_LEN;
encode_len = bleproto_appdata_encode(txbuf, sizeof(txbuf), sizeof(txbuf), &encode_desc);
if(encode_len > 0) {
usr_ble_send_data(txbuf,encode_len);
}
else
{
printf("2encode_len err = %d\n",encode_len);
}
if(usr_var.usr_double_ota_timer_id==0)
{
clk_set("sys", 48 * 1000000L);
usr_var.usr_double_ota_timer_id=1;
//clk_set("sys", 120 * 1000000L);
os_task_create(usr_ota_deal_task, NULL, 31, FIRM_PACK_LEN, 0, "usr_ota");
}
break;
case E_BLEPROTO_SERVICE_ID_OTADATA:
printf("E_BLEPROTO_SERVICE_ID_OTADATA\n");
break;
case E_BLEPROTO_SERVICE_ID_RUNCMD_V2:
memcpy(&usr_auth_data, &desc->datast.authsetup_req, sizeof(usr_auth_data));
{
// 保存三元组
if (usr_auth_data.paired_flag == 0)
{
ble_proto_packet_t *pkt = &desc->datast.runcmd_v2_req;
printf("E_BLEPROTO_SERVICE_ID_RUNCMD_V2 cmd=%d bytes_len=%d\n",
pkt->cmd, pkt->device_bytes_len);
usr_write_pair_info();
printf("usr_auth_data %s %s ", usr_auth_data.authcode, usr_auth_data.devid);
printf_buf(usr_auth_data.gwmac, 6);
}
}
encode_len = bleproto_appdata_encode(txbuf, sizeof(txbuf), sizeof(txbuf), &encode_desc);
if (encode_len > 0)
{
printf("encode_len = %d\n", encode_len);
usr_ble_send_data(txbuf, encode_len);
}
else
{
printf("2encode_len = %d\n", encode_len);
}
break;
case E_BLEPROTO_SERVICE_ID_AUTHDELETE:
// 设备处理,回复响应
printf("E_BLEPROTO_SERVICE_ID_AUTHDELETE\n");
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_RSP;
encode_desc.header.msgid = desc->header.msgid; // 这里的msg_id为上面解析到的包的msg_id;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_AUTHSETUP;
bleproto_authdelete_rsp_t *aude_rsp = &encode_desc.datast.authdelete_rsp;
memcpy(aude_rsp->gwmac, usr_auth_data.gwmac, 6);
if (!memcmp(usr_auth_data.authcode, desc->datast.authdelete_req.authcode, 32))
{
aude_rsp->errcode = 0;
usr_set_device_default();
usr_clear_pair_info();
}
else
{
aude_rsp->errcode = 501;
}
encode_len = bleproto_appdata_encode(txbuf, sizeof(txbuf), sizeof(txbuf), &encode_desc);
if (encode_len > 0)
{
printf("encode_len = %d\n", encode_len);
usr_ble_send_data(txbuf, encode_len);
}
else
{
printf("2encode_len = %d\n", encode_len);
}
break;
case E_BLEPROTO_SERVICE_ID_RUNCMD:
printf("E_BLEPROTO_SERVICE_ID_RUNCMD\n");
usr_run_cmd_code(&desc->datast.runcmd_req, desc->header.msgid);
break;
case E_BLEPROTO_SERVICE_ID_REPORTCMD:
printf("E_BLEPROTO_SERVICE_ID_REPORTCMD\n");
break;
case E_BLEPROTO_SERVICE_ID_DOACTION:
printf("E_BLEPROTO_SERVICE_ID_DOACTION\n");
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_RSP;
encode_desc.header.msgid = desc->header.msgid;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_DOACTION;
encode_desc.datast.doaction_rsp.errcode = 0;
{
bleproto_doaction_rsp_t *action_rsp = &encode_desc.datast.doaction_rsp;
action_rsp->errcode = 0;
printf("action_run %d \n", desc->datast.doaction_req.action);
}
encode_len = bleproto_appdata_encode(txbuf, sizeof(txbuf), sizeof(txbuf), &encode_desc);
if (encode_len > 0)
{
usr_ble_send_data(txbuf, encode_len);
usr_do_action_code(desc->datast.doaction_req.action);
}
break;
case E_BLEPROTO_SERVICE_ID_OTANOTIFY:
printf("E_BLEPROTO_SERVICE_ID_OTANOTIFY\n");
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_RSP;
encode_desc.header.msgid = desc->header.msgid; // 这里的msg_id为上面解析到的包的msg_id;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_OTANOTIFY;
encode_desc.datast.doaction_rsp.errcode = 0;
bleproto_otanotify_rsp_t *in_ota_rsp = &encode_desc.datast.otanotify_rsp;
bleproto_otanotify_req_t *in_ota_data2 = &desc->datast.otanotify_req;
printf("in_ota_data id = %d\n", in_ota_data2->id);
printf("in_ota_data ver = %s\n", in_ota_data2->version);
printf("in_ota_data size= %d\n", in_ota_data2->size);
printf("in_ota_data md5 = %s\n", in_ota_data2->md5);
{
in_ota_rsp->errcode = 0;
// 执行命令
}
usr_var.usr_ota_data_id = in_ota_data2->id; // int
usr_var.usr_ota_data_size = in_ota_data2->size;
encode_len = bleproto_appdata_encode(txbuf, sizeof(txbuf), sizeof(txbuf), &encode_desc);
if (encode_len > 0)
{
printf("encode_len = %d\n", encode_len);
usr_ble_send_data(txbuf, encode_len);
}
else
{
printf("2encode_len = %d\n", encode_len);
}
usr_var.usr_allow_to_flash = 0;
usr_var.usr_data_index = 0;
start_data[2] = usr_var.usr_ota_data_size & 0x000000ff;
start_data[3] = (usr_var.usr_ota_data_size >> 8) & 0x000000ff;
start_data[4] = (usr_var.usr_ota_data_size >> 16) & 0x000000ff;
start_data[5] = (usr_var.usr_ota_data_size >> 24) & 0x000000ff;
dual_ota_app_data_deal(0, start_data, 10);
printf("#### buf total size = %d\n", usr_var.usr_ota_data_size);
printf_buf(start_data, 10);
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_REQ;
encode_desc.header.msgid = 0; // desc->header.msgid;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_OTADATA;
encode_desc.datast.doaction_rsp.errcode = 0;
encode_desc.datast.otadata_req.id = usr_var.usr_ota_data_id;
encode_desc.datast.otadata_req.offset = usr_var.usr_data_index;
encode_desc.datast.otadata_req.maxsize = FIRM_PACK_LEN;
encode_len = bleproto_appdata_encode(txbuf, sizeof(txbuf), sizeof(txbuf), &encode_desc);
if (encode_len > 0)
{
usr_ble_send_data(txbuf, encode_len);
}
else
{
printf("2encode_len err = %d\n", encode_len);
}
if (usr_var.usr_double_ota_timer_id == 0)
{
clk_set("sys", 48 * 1000000L);
usr_var.usr_double_ota_timer_id = 1;
// clk_set("sys", 120 * 1000000L);
os_task_create(usr_ota_deal_task, NULL, 31, FIRM_PACK_LEN, 0, "usr_ota");
}
break;
case E_BLEPROTO_SERVICE_ID_OTADATA:
printf("E_BLEPROTO_SERVICE_ID_OTADATA\n");
break;
case E_BLEPROTO_SERVICE_ID_RUNCMD_V2:
{
ble_proto_packet_t *pkt = &desc->datast.runcmd_v2_req;
printf("E_BLEPROTO_SERVICE_ID_RUNCMD_V2 cmd=%d bytes_len=%d\n",
pkt->cmd, pkt->device_bytes_len);
#if TCFG_USB_SLAVE_CDC_ENABLE
/* 透传 device bytes 到 USB CDC(串口助手可见) */
if (pkt->bytes_data && pkt->device_bytes_len > 0) {
u32 wlen = cdc_write_data(0, (u8 *)pkt->bytes_data, pkt->device_bytes_len);
printf("cdc_write_data %u/%u\n", wlen, (u32)pkt->device_bytes_len);
if (wlen == 0) {
printf("cdc write fail: USB not ready(DTR) or CDC not started\n");
}
} else {
printf("runcmd_v2 no bytes payload\n");
}
/* 透传 device bytes 到 USB CDC(串口助手可见) */
if (pkt->bytes_data && pkt->device_bytes_len > 0)
{
u32 wlen = cdc_write_data(0, (u8 *)pkt->bytes_data, pkt->device_bytes_len);
printf("cdc_write_data %u/%u\n", wlen, (u32)pkt->device_bytes_len);
if (wlen == 0)
{
printf("cdc write fail: USB not ready(DTR) or CDC not started\n");
}
}
else
{
printf("runcmd_v2 no bytes payload\n");
}
#else
printf("TCFG_USB_SLAVE_CDC_ENABLE not enable\n");
printf("TCFG_USB_SLAVE_CDC_ENABLE not enable\n");
#endif
break;
}
default:
break;
}
}
else if (desc->header.msgtype == BLEPROTO_APPDATA_MSGTYPE_RSP)
{
switch (desc->header.serviceid)
{
case E_BLEPROTO_SERVICE_ID_REPORTCMD:
// 主控回复的响应,设备处理
printf("E_BLEPROTO_SERVICE_ID_REPORTCMD\n");
printf("cmd id = %d", desc->datast.reportcmd_rsp.errcode);
break;
case E_BLEPROTO_SERVICE_ID_OTADATA:
bleproto_otadata_rsp_t *ota_data_rsp = &desc->datast.otadata_rsp;
// printf("errcode = %d offset = %d len = %d\n",ota_data_rsp->errcode,ota_data_rsp->offset,ota_data_rsp->len);
uart_tr_send_data(ota_data_rsp->data, ota_data_rsp->len);
memcpy(&ota_source_data[usr_var.usr_allow_to_flash], ota_data_rsp->data, ota_data_rsp->len);
usr_var.usr_allow_to_flash += ota_data_rsp->len;
usr_var.usr_start_write_flash = 0;
if (usr_var.usr_allow_to_flash >= (FIRM_PACK_LEN * 2)) // 0 - 1024
// 1024 - 2048
// 2048 - 3072
// 3072 - 4096
{
usr_var.usr_start_write_flash = 1;
}
else
{
usr_var.usr_data_index += FIRM_PACK_LEN;
if (usr_var.usr_data_index >= usr_var.usr_ota_data_size)
{
usr_var.usr_start_write_flash = 2;
break;
}
default:
break;
}
}else if(desc->header.msgtype == BLEPROTO_APPDATA_MSGTYPE_RSP) {
switch(desc->header.serviceid) {
case E_BLEPROTO_SERVICE_ID_REPORTCMD:
// 主控回复的响应,设备处理
printf("E_BLEPROTO_SERVICE_ID_REPORTCMD\n");
printf("cmd id = %d",desc->datast.reportcmd_rsp.errcode);
// bleproto_appdata_desc_t encode_desc = { 0 };
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_REQ;
encode_desc.header.msgid = 0; // desc->header.msgid;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_OTADATA;
encode_desc.datast.doaction_rsp.errcode = 0;
break;
case E_BLEPROTO_SERVICE_ID_OTADATA:
bleproto_otadata_rsp_t *ota_data_rsp = &desc->datast.otadata_rsp;
//printf("errcode = %d offset = %d len = %d\n",ota_data_rsp->errcode,ota_data_rsp->offset,ota_data_rsp->len);
uart_tr_send_data(ota_data_rsp->data,ota_data_rsp->len);
memcpy(&ota_source_data[usr_var.usr_allow_to_flash],ota_data_rsp->data,ota_data_rsp->len);
usr_var.usr_allow_to_flash+=ota_data_rsp->len;
usr_var.usr_start_write_flash=0;
if(usr_var.usr_allow_to_flash>=(FIRM_PACK_LEN*2))//0 - 1024
//1024 - 2048
//2048 - 3072
//3072 - 4096
{
usr_var.usr_start_write_flash=1;
}
else
{
usr_var.usr_data_index+=FIRM_PACK_LEN;
if(usr_var.usr_data_index>=usr_var.usr_ota_data_size)
{
usr_var.usr_start_write_flash=2;
break;
}
//bleproto_appdata_desc_t encode_desc = { 0 };
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_REQ;
encode_desc.header.msgid = 0;//desc->header.msgid;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_OTADATA;
encode_desc.datast.doaction_rsp.errcode = 0;
encode_desc.datast.otadata_req.id=usr_var.usr_ota_data_id;
encode_desc.datast.otadata_req.offset=usr_var.usr_data_index;
encode_desc.datast.otadata_req.maxsize=FIRM_PACK_LEN;
encode_len = bleproto_appdata_encode(txbuf, sizeof(txbuf), sizeof(txbuf), &encode_desc);
if(encode_len > 0) {
usr_ble_send_data(txbuf,encode_len);
}
else
{
printf("2encode_len err = %d\n",encode_len);
}
}
break;
encode_desc.datast.otadata_req.id = usr_var.usr_ota_data_id;
encode_desc.datast.otadata_req.offset = usr_var.usr_data_index;
encode_desc.datast.otadata_req.maxsize = FIRM_PACK_LEN;
encode_len = bleproto_appdata_encode(txbuf, sizeof(txbuf), sizeof(txbuf), &encode_desc);
if (encode_len > 0)
{
usr_ble_send_data(txbuf, encode_len);
}
else
{
printf("2encode_len err = %d\n", encode_len);
}
}
break;
}
}
}
void usr_run_cmd_code(bleproto_runcmd_req_t *runcmd_par, u8 usr_msg_id)
{
printf("runcmd_par id = %d\n", runcmd_par->ycmd.cmd_id);
bleproto_appdata_desc_t encode_desc = {0};
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_RSP;
encode_desc.header.msgid = usr_msg_id;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_RUNCMD;
bleproto_runcmd_rsp_t *rsp = &encode_desc.datast.runcmd_rsp;
switch (runcmd_par->ycmd.cmd_id)
{
case 600:
/*
| 索引 | 类型 | 描述 | 取值 |
| ---- | ----- | ---------------- | ------------------------------------------------- |
| 0 | int32 | cmdid | 600 |
| 1 | int32 | 返回值 | 0: 设备接受命令成功; 非零: 参见具体的命令错误代码 |
*/
rsp->ycmd.cmd_id = 110;
rsp->ycmd.arg_int32_count = 9;
rsp->ycmd.arg_string_count = 0;
rsp->ycmd.arg_bytes_count = 0;
rsp->ycmd.arg_int32[0] = 600;
rsp->ycmd.arg_int32[1] = 0; // 0:命令接收成功
memcpy(rsp->ycmd.arg_int32 + 2, 0, 7);
rsp->ycmd.t = usr_var.usr_cureent_utc; // UTC时间戳;
break;
default:
break;
}
int encode_len = bleproto_appdata_encode(
/* txbuf */ txbuf,
/* size */ sizeof(txbuf),
/* packetlen */ sizeof(txbuf),
/* desc */ &encode_desc);
printf("encode_len = %d\n", encode_len);
if (encode_len > 0)
{
usr_ble_send_data(txbuf, encode_len);
}
}
extern void nvram_set_boot_state(u32 state);
extern void hw_mmu_disable(void);
extern void ram_protect_close(void);
AT(.volatile_ram_code)
void usr_update_init()
{
//local_irq_disable();
ram_protect_close();
//hw_mmu_disable();
//nvram_set_boot_state(2);
//JL_CLOCK->PWR_CON |= (1 << 4);
/* chip_reset(); */
/* cpu_reset(); */
//while (1);
}
void usr_ota_deal_task()
{
usr_update_init();
os_time_dly(5);
bleproto_appdata_desc_t encode_desc = { 0 };
while(1)
bleproto_appdata_desc_t encode_desc = {0};
while (1)
{
if(usr_var.usr_ota_succ_flag==0)
if (usr_var.usr_ota_succ_flag == 0)
{
if(usr_var.usr_start_write_flash==1)
if (usr_var.usr_start_write_flash == 1)
{
//OS_ENTER_CRITICAL();
usr_var.usr_data_index+=FIRM_PACK_LEN;
usr_var.usr_start_write_flash=0;
dual_ota_app_data_deal(0,ota_source_data,usr_var.usr_allow_to_flash);
// OS_ENTER_CRITICAL();
usr_var.usr_data_index += FIRM_PACK_LEN;
usr_var.usr_start_write_flash = 0;
dual_ota_app_data_deal(0, ota_source_data, usr_var.usr_allow_to_flash);
os_time_dly(1);
//OS_EXIT_CRITICAL();
//printf("usr_var.usr_allow_to_flash = %d\n",usr_var.usr_allow_to_flash);
usr_var.usr_allow_to_flash=0;
// OS_EXIT_CRITICAL();
// printf("usr_var.usr_allow_to_flash = %d\n",usr_var.usr_allow_to_flash);
usr_var.usr_allow_to_flash = 0;
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_REQ;
encode_desc.header.msgid = 0;//desc->header.msgid;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_OTADATA;
encode_desc.datast.doaction_rsp.errcode = 0;
encode_desc.header.version = 0;
encode_desc.header.datafmt = BLEPROTO_APPDATA_DATAFMT_JSON;
encode_desc.header.msgtype = BLEPROTO_APPDATA_MSGTYPE_REQ;
encode_desc.header.msgid = 0; // desc->header.msgid;
encode_desc.header.encrypt = 0;
encode_desc.header.serviceid = E_BLEPROTO_SERVICE_ID_OTADATA;
encode_desc.datast.doaction_rsp.errcode = 0;
encode_desc.datast.otadata_req.id=usr_var.usr_ota_data_id;
encode_desc.datast.otadata_req.offset=usr_var.usr_data_index;
encode_desc.datast.otadata_req.maxsize=FIRM_PACK_LEN;
encode_desc.datast.otadata_req.id = usr_var.usr_ota_data_id;
encode_desc.datast.otadata_req.offset = usr_var.usr_data_index;
encode_desc.datast.otadata_req.maxsize = FIRM_PACK_LEN;
encode_len = bleproto_appdata_encode(txbuf, sizeof(txbuf), sizeof(txbuf), &encode_desc);
if(encode_len > 0) {
usr_ble_send_data(txbuf,encode_len);
if (encode_len > 0)
{
usr_ble_send_data(txbuf, encode_len);
}
else
{
printf("2encode_len err = %d\n",encode_len);
printf("2encode_len err = %d\n", encode_len);
}
}
else if(usr_var.usr_start_write_flash==2)
else if (usr_var.usr_start_write_flash == 2)
{
printf("usr_start_write_flash = %d\n",usr_var.usr_start_write_flash);
usr_var.usr_start_write_flash=0;
//OS_ENTER_CRITICAL();
dual_ota_app_data_deal(0,ota_source_data,usr_var.usr_allow_to_flash);
//OS_EXIT_CRITICAL();
printf("usr_var.usr_allow_to_flash = %d\n",usr_var.usr_allow_to_flash);
usr_var.usr_allow_to_flash=0;
printf("usr_start_write_flash = %d\n", usr_var.usr_start_write_flash);
usr_var.usr_start_write_flash = 0;
// OS_ENTER_CRITICAL();
dual_ota_app_data_deal(0, ota_source_data, usr_var.usr_allow_to_flash);
// OS_EXIT_CRITICAL();
printf("usr_var.usr_allow_to_flash = %d\n", usr_var.usr_allow_to_flash);
usr_var.usr_allow_to_flash = 0;
os_time_dly(30);
dual_ota_app_data_deal(0,end_data,2);
dual_ota_app_data_deal(0, end_data, 2);
}
}
os_time_dly(10);
// putchar('6');
// putchar('6');
}
}
#endif // 0
void usr_ota_process()
{
static u8 cnt = 0;
if (cnt == 0) {
if (cnt == 0)
{
ble_multi_trans_disconnect();
}
if (usr_get_conn_service() == 0) {
if (usr_get_conn_service() == 0)
{
cnt++;
if (cnt == 2) {
if (cnt == 2)
{
usr_ble_adv_updata_OTA();
}
if (cnt >= 60) {
if (cnt >= 60)
{
cnt = 0;
cpu_reset();
}
} else {
}
else
{
cnt = 1;
}
}
void usr_do_action_code(int flag)
{
switch (flag) {
switch (flag)
{
case 0: /* reboot */
cpu_reset();
break;
@@ -539,7 +605,8 @@ void usr_do_action_code(int flag)
void usr_app_ota_init()
{
usr_var.usr_goto_updata = 1;
if (usr_var.ota_timer == 0) {
if (usr_var.ota_timer == 0)
{
usr_var.ota_timer = sys_timer_add(NULL, usr_ota_process, 1000);
}
}
@@ -566,7 +633,8 @@ void usr_test_protocol(void)
int elen = bleproto_appdata_encode(txbuf, sizeof(txbuf), sizeof(txbuf), &encode_desc);
printf("encode_len = %d\n", elen);
if (elen > 0) {
if (elen > 0)
{
usr_ble_send_data(txbuf, elen);
printf_buf(txbuf, elen);
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
View File
@@ -3338,6 +3338,7 @@ obj/Release/apps/usr_le_code/usr_le_recieve.o
-r=obj/Release/apps/usr_le_code/usr_le_recieve.o,usr_write_pair_info,l
-r=obj/Release/apps/usr_le_code/usr_le_recieve.o,memcmp,l
-r=obj/Release/apps/usr_le_code/usr_le_recieve.o,usr_clear_pair_info,l
-r=obj/Release/apps/usr_le_code/usr_le_recieve.o,usr_run_cmd_code,pl
-r=obj/Release/apps/usr_le_code/usr_le_recieve.o,usr_do_action_code,pl
-r=obj/Release/apps/usr_le_code/usr_le_recieve.o,dual_ota_app_data_deal,l
-r=obj/Release/apps/usr_le_code/usr_le_recieve.o,clk_set,l
+474 -475
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.