#include "tcxo.h"
#include "cat1_server.h"
#include "linux/delay.h"
+
+#define HTTP_JSON_SERVER_NAME "test.iot.api.thisiot.com"//"test.app.api.thisiot.com"
+#define HTTP_FWPGK_SERVER_NAME "r-oss.thisiot.com"//"
+#define PORT (80)//(443)
+#define UPDATAJSONPATH "/update/ota_start_.json"
+
+#define UPDATAREPORT "/update/ota_start_reported_.json"
+
+#define UPDATAFWPKGPATH "/update/update.fwpkg"
+
+//https://test.app.api.thisiot.com/ota/task?deviceId=deviceId&sourceVersion=sourceVersion
+
+//http://test.iot.api.thisiot.com/ota/task?deviceId=deviceId&sourceVersion=sourceVersion
namespace OHOS
{
+
static SystemupgradeView *g_pSystemFactoryResetView{nullptr};
static osThreadId_t g_alipay_task_handle = NULL;
// osThreadAttr_t g_alipay_attr = {
// "alipay_task", 0, NULL, 0, NULL, ALIPAT_MSG_STACK_SIZE, TASK_PRIORITY_ALIPAY_APP, 0, 0
// };
- static char *Path= "/update/ota_start_3.json";
+ static char *Path=UPDATAJSONPATH;
static httpc_connection_t settings = {0};
static uint8_t uri[256] ={0};// (uint8_t*)
//"http://icfota.snicker.com.cn:8089/fd230ota.jsp?product=FD230&pkgver=V1.1_20240316_115535&imei=864430010001091";
- static char *Path_ota_package= "/update/update.fwpkg";
- static uint8_t uri_ota_package[124] ={0};
+ static char *Path_ota_package= UPDATAFWPKGPATH;
+ static uint8_t uri_ota_package[256] ={0};
+
+ void upgrade_reported_data(void)
+ {
+ FILE * fp = fopen(UPDATAREPORT,"rb+");
+ if(fp==NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "open_UPDATAREPORT_fail");
+ fclose(fp);
+ return;
+ }
+
+ char *buf=(char *)malloc(512);
+ memset((void*)buf,0,512);
+ int ret =fread(buf,1,512,fp);
+ int offset=512;
+ while (ret==512)
+ {
+ buf=(char *)realloc(buf,offset+512);
+ ret=fread(buf+offset,1,512,fp);
+ offset+=512;
+ }
+ if(ret==0)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fread %d",ret);
+ fclose(fp);
+ free(buf);
+ return;
+ }
+ cJSON *data = cJSON_Parse(buf);
+
+ if(data!=NULL)
+ {
+ char *targetVersion=cJSON_GetObjectItem(data, "targetVersion")->valuestring;
+ char version_buf[128]={0};
+ uint32_t version_len=128;
+ uapi_get_buildversion((uint8_t*)version_buf,version_len);
+ if(strcmp(targetVersion,version_buf)==0)
+ {
+ //HTTP_send_data
+ }
+ }
+ cJSON_Delete(data);
+ }
+
//#define UP_TEST
static void upgrade_task(void *arg)
{
msleep(3000);
//uapi_tcxo_delay_ms(3000);
- char buf[1024]={0};
- FILE * fp = fopen(Path,"rb");
+
+
+ FILE * fp = fopen(Path,"rb+");
if(fp==NULL)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "open fail");
SystemupgradeView::GetInstance()->set_string_value(NULL,false);
return;
}
- int ret =fread(buf,1,1024,fp);
+ char *buf=(char *)malloc(512);
+ memset((void*)buf,0,512);
+ int ret =fread(buf,1,512,fp);
+ int offset=512;
+ while (ret==512)
+ {
+ buf=(char *)realloc(buf,offset+512);
+ ret=fread(buf+offset,1,512,fp);
+ offset+=512;
+ }
if(ret==0)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fread %d",ret);
fclose(fp);
+ free(buf);
SystemupgradeView::GetInstance()->set_string_value(NULL,false);
return;
}
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui %d",ret);
// std::string jsonDataString((std::istreambuf_iterator<char>(inFile)), std::istreambuf_iterator<char>());
// const char *jsonData = jsonDataString.c_str();
- cJSON *root = cJSON_Parse(buf);
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui");
- if(root!=NULL)
+ char *new_buf=NULL;
+ new_buf=strstr(buf,"{\"success\":");//移到json的头的位置
+ cJSON *root = cJSON_Parse(new_buf);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " %s",new_buf);
+ free(buf);
+ if(root==NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui JSON_parse_fail");
+ }
+ else if(root!=NULL)
{
- int falg=cJSON_GetObjectItem(root, "UptoDate")->valueint;
- char *uri = cJSON_GetObjectItem(root, "url")->valuestring;
- sprintf((char *)uri_ota_package,"%s",uri);
- char *OtaPackageVersion = cJSON_GetObjectItem(root, "OtaPackageVersion")->valuestring;
- char *description = cJSON_GetObjectItem(root, "description")->valuestring;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s,%s",uri,OtaPackageVersion);
- //SystemupgradeView::GetInstance()->newVersion->SetText(OtaPackageVersion);
- cJSON_Delete(root);
- char buf[1024]={0};
- sprintf(buf,"%s\n%s",OtaPackageVersion,description);
- #ifdef UP_TEST
- SystemupgradeView::GetInstance()->set_string_value(buf,true);
- #else
- if(falg==0)
+ int code=cJSON_GetObjectItem(root, "code")->valueint;
+
+ //char *uri = cJSON_GetObjectItem(root, "url")->valuestring;
+ //
+ //char *OtaPackageVersion = cJSON_GetObjectItem(root, "OtaPackageVersion")->valuestring;
+ char *msg = cJSON_GetObjectItem(root, "msg")->valuestring;
+ // if(msg==NULL)
+ // {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "msg????????????????");
+ // }
+ // else
+ // //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s",msg);
+ int success=cJSON_GetObjectItem(root, "success")->valueint;
+
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s,%s",uri,OtaPackageVersion);
+ // //SystemupgradeView::GetInstance()->newVersion->SetText(OtaPackageVersion);
+ // cJSON_Delete(root);
+ char msg_buf[256]={0};
+ bool falg=false;
+
+ if(code==IOT_CODE_SUCCESS)
{
- SystemupgradeView::GetInstance()->set_string_value(buf,true);
+ falg=true;
+ cJSON *data=cJSON_GetObjectItem(root, "data");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "");
+
+ char *jsonString = cJSON_PrintUnformatted(data);
+ uint32_t data_len=strlen(jsonString);
+ FILE *FP_= fopen(UPDATAREPORT,"w+");
+ fwrite(jsonString,1,data_len,FP_);
+ fclose(FP_);
+ printf("data%d %s\r\n",data_len,jsonString);
+
+ if(data!=NULL)
+ {
+ cJSON *downloadFileVo=cJSON_GetObjectItem(data, "downloadFileVo");
+
+ if(downloadFileVo!=NULL)
+ {
+
+ //"https://r-oss.thisiot.com/device-ota/2024_04_22/1782329689464958978.fwpkg?Expires=1713780167&OSSAccessKeyId=LTAI5tJa2arDBmqSUsSTQJ1T&Signature=OlbdNsfnz9Zje6ypFgXINQPXVE0%3D"
+ char *uri = cJSON_GetObjectItem(downloadFileVo, "url")->valuestring;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uri %s",uri);
+ sprintf((char *)uri_ota_package,"%s",uri);
+ }
+ }
}
else
{
- SystemupgradeView::GetInstance()->set_string_value(NULL,false);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "code!=IOT_CODE_SUCCESS");
}
- #endif
+
+ sprintf(msg_buf,"%s",msg);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s",msg);
+
+ SystemupgradeView::GetInstance()->set_string_value(msg_buf,falg);
+
//RootView::GetInstance()->Invalidate();
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui");
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui");
+ cJSON_Delete(root);
}
fclose(fp);
if(ret!=ERRCODE_SUCC)
{
SystemupgradeView::GetInstance()->init_fail(0);
-
}
//开始升级
taskcfg.create_queue_handle = NULL;
taskcfg.attr.name="upgrade_service";
taskcfg.attr.priority = TASK_PRIORITY_APP;
- taskcfg.attr.stack_size = 1024*8;
+ taskcfg.attr.stack_size = 1024*10;
taskcfg.func = upgrade_task;
taskcfg.use_mem = USE_EXTEND_MEM;
return 0;
}
-
- static uint32_t custom_start_ota_download_ui_1( uint8_t *uri_str,uint8_t *Path,bool falg)
+ static uint32_t custom_start_ota_download_ui_1( uint8_t *uri_str,uint8_t *Path,bool falg,const char *server_name)
{
//(uint8_t*)argv[0];
{
settings.result_fn=httpc_download_result_ui_packpage;
}
+
FILE * fp= fopen((char *)Path,"rb");
if(fp!=NULL)
{
}
settings.headers_done_fn=httpc_download_headers_done_ui;
+ settings.use_post=0;
httpc_state_t* connection=NULL;
err_t rett = httpc_get_file_dns_to_disk(
- (const char*) "icfota.snicker.com.cn",
- 8089,
+ server_name,
+ PORT,
(const char*) uri_str,
(const httpc_connection_t *)&settings,
NULL,
}
void SystemupgradeView::statr_down_fwpkg(void)
{
- if(is_new_cat1_version)
- {
- char *imei_str= const_cast<char*>(ConfigModel::GetInstance()->Getimei().c_str());
- char * version_buf=const_cast<char*>(ConfigModel::GetInstance()->GetmoderVer().c_str());
- sprintf((char *)uri,"http://icfota.snicker.com.cn:8089/fd230ota.jsp?product=FD230&pkgver=%s&imei=%s",version_buf,imei_str);
- cat1_ota_update((char *)"0");
- container_updating->SetVisible(true);
- scrollView->SetTouchable(false);
- scrollView->SetDraggable(false);
- }
- else if(is_new_version)
+ // if(is_new_cat1_version)
+ // {
+ // char *imei_str= const_cast<char*>(ConfigModel::GetInstance()->Getimei().c_str());
+ // char * version_buf=const_cast<char*>(ConfigModel::GetInstance()->GetmoderVer().c_str());
+ // sprintf((char *)uri,"http://test.iot.api.thisiot.com/ota/task?deviceId=%s&sourceVersion=%s",imei_str,version_buf);
+ // cat1_ota_update((char *)"0");
+ // container_updating->SetVisible(true);
+ // scrollView->SetTouchable(false);
+ // scrollView->SetDraggable(false);
+ // }
+ // else
+ if(is_new_version)
{
//下载差分包
//**********
scrollView->SetTouchable(false);
scrollView->SetDraggable(false);
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "custom_start_ota_download_ui_1");
- custom_start_ota_download_ui_1(uri_ota_package,(uint8_t*)Path_ota_package,false);
+ custom_start_ota_download_ui_1(uri_ota_package,(uint8_t*)Path_ota_package,false,HTTP_FWPGK_SERVER_NAME);
}
}
{
if(falg)
{
- newVersion->SetText(str);
+ if(str!=NULL)
+ {
+ newVersion->SetText(str);
+ }
newVersionTitle->SetText("有最新固件版本");
newVersion->SetVisible(true);
}
else
{
- newVersionTitle->SetText("已是最新固件版本");
+ if(str!=NULL)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "str %s",str);
+ newVersion->SetText(str);
+ newVersion->SetVisible(true);
+ }
+
+
+ newVersionTitle->SetText("获取升级失败");
newVersionTitle->SetVisible(true);
is_new_version=false;
}
- char *imei_str= const_cast<char*>(ConfigModel::GetInstance()->Getimei().c_str());
- char * version_buf=const_cast<char*>(ConfigModel::GetInstance()->GetmoderVer().c_str());
- sprintf((char *)uri,
- "http://icfota.snicker.com.cn:8089/fd230ota.jsp?product=FD230&pkgver=%s&imei=%s",
- version_buf,imei_str);
- custom_start_ota_download_ui_1(uri,(uint8_t*)Path,true);
- falg_dwon_json++;
+ // char *imei_str= const_cast<char*>(ConfigModel::GetInstance()->Getimei().c_str());
+ // char * version_buf=const_cast<char*>(ConfigModel::GetInstance()->GetmoderVer().c_str());
+ // sprintf((char *)uri,"https://test.app.api.thisiot.com/ota/task?deviceId=%s&sourceVersion=%s",imei_str,version_buf);
+ // custom_start_ota_download_ui_1(uri,(uint8_t*)Path,true);
+ // falg_dwon_json++;
}
else if (falg_dwon_json==1)
{
display_api->set_screen_set_keepon_timeout(-1);
memset(uri,0,256);
char *imei_str= const_cast<char*>(ConfigModel::GetInstance()->Getimei().c_str());
- sprintf((char *)uri,"http://icfota.snicker.com.cn:8089/fd230ota.jsp?product=FD230&pkgver=%s&imei=%s",version_buf,imei_str);
- custom_start_ota_download_ui_1(uri,(uint8_t*)Path,true);
+ //https://test.app.api.thisiot.com/ota/task?deviceId=deviceId&sourceVersion=sourceVersion
+ // 860132060347507
+ // v1.1_20240419_152549
+ sprintf((char *)uri,"http://test.iot.api.thisiot.com/ota/task?deviceId=%s&sourceVersion=%s",imei_str,"V1.1_20240422_161728");//version_buf);
+ custom_start_ota_download_ui_1(uri,(uint8_t*)Path,true,HTTP_JSON_SERVER_NAME);
falg_dwon_json=0;
//uograde_service_service_init();
memcpy(buf+15,&datalen,2);\r
if(data==NULL)\r
{\r
+ data="\0";\r
buf[17+datalen] = Calculate_CRC_Big((uint8_t *)data,datalen);\r
if(flag)\r
sendDataNow(buf,17+datalen+1);\r
}\r
\r
}\r
-\r
+static training_ble training_ble_data;\r
static uint8_t jsonCheck_targetparam(uint8_t *buf)//训练目标参数\r
{\r
\r
cJSON* ty = cJSON_GetObjectItem(root, "ty");//目标类型\r
if (cJSON_IsNumber(ty)) {\r
printf("ty: %d\n", ty->valueint);\r
- \r
+ training_ble_data.sportTagType=ty->valueint;\r
+ training_ble_data.controlmd=SETGOAL;\r
+ //CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\r
}\r
+\r
cJSON* di = cJSON_GetObjectItem(root, "di");//目标距离\r
if (cJSON_IsNumber(di)) {\r
printf("di: %d\n", di->valueint);\r
+ training_ble_data.sportTag=di->valueint;\r
+\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\r
+ \r
\r
}\r
cJSON* ca = cJSON_GetObjectItem(root, "ca");//目标卡路里\r
if (cJSON_IsNumber(di)) {\r
printf("ca: %d\n", ca->valueint);\r
+ training_ble_data.sportTag=ca->valueint;\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\r
\r
}\r
cJSON* tm = cJSON_GetObjectItem(root, "tm");//目标时间\r
if (cJSON_IsNumber(tm)) {\r
printf("tm: %d\n", tm->valueint);\r
+ training_ble_data.sportTag=tm->valueint;\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\r
\r
}\r
cJSON* st = cJSON_GetObjectItem(root, "st");//目标步数\r
if (cJSON_IsNumber(st)) {\r
printf("st: %d\n", st->valueint);\r
+ training_ble_data.sportTag=st->valueint;\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\r
}\r
cJSON_Delete(root);\r
return 1;\r
}\r
\r
\r
-void GetSpo2SetParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取app下发的声音与振动参数\r
+void GetSpo2SetParamCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)\r
{\r
uint32_t tmp = 1;\r
uint16_t tmp_data = 1;\r
uint8_t vibration=crcnum[6];\r
uint8_t notify=crcnum[7];\r
printf("设置步数:%d\r\n",targetStep);\r
+ \r
set_goal_stepcount(targetStep);\r
\r
set_vibrationremiander(vibration);\r
}\r
}\r
//开启指定运动模式\r
-static training_ble training_ble_data;\r
+\r
static void OpenSportModeCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
uint8_t value[19];\r
training_ble_data.sportType= crcnum[0];//运动类型 0 健走 1跑步 2骑行 3\r
training_ble_data.controlmd= START;\r
printf("开启指定运动%d\r\n",crcnum[0]);\r
- CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,2);\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\r
value[17] = 1; //1 操作成功 2 操作失败\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
training_ble_data.controlmd= END;\r
printf("结束运动\r\n");\r
\r
- CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,2);\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\r
value[17] = 1; //1 操作成功 2 操作失败\r
value[18] = Calculate_CRC(value,18);\r
sendBleData(value,19);\r
training_ble_data.controlmd= STOP;\r
printf("运动暂停\r\n");\r
\r
- CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,2);\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\r
}\r
else\r
{\r
training_ble_data.controlmd= RECOVER;\r
printf("运动恢复\r\n");\r
\r
- CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,2);\r
+ CustomEventPublish(TOPIC_EVENT_BLE_TRAINING,(uint8_t*)&training_ble_data,sizeof(training_ble));\r
\r
}\r
value[17] = 1;\r
return 0;\r
// }\r
}\r
-//同步心率历史数据\r
-static void heartDataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
-{\r
- uint8_t value[43];\r
- memset(value,0,43);\r
- uint32_t tmp = 1;\r
- uint32_t tmpToall = 25;\r
- uint16_t tmp_data = 25;\r
- value[0] = 0x72;\r
- value[1] = 0x01;\r
- value[2] = 0x40;\r
- memcpy(value+3,&tmp,4);\r
- memcpy(value+7,&tmpToall,4);\r
- memcpy(value+11,&tmp,4);\r
- memcpy(value+15,&tmp_data,2);\r
- if(Check_CRC(crcnum,len,crcvalue))\r
- {\r
- read_hart_jsondata(crcnum[17]);\r
- \r
- // uint32_t data_len = 0;\r
- // for(uint16_t i = 0;i<5;i++)\r
- // {\r
- // uint32_t time = 1710484844+i*3600;\r
- // uint8_t hr = 70+i*5;//1 \r
- // memcpy(value+17+data_len,&time,4);\r
- // data_len=data_len+4;//4 6\r
- // memcpy(value+17+data_len,&hr,1);//1 3 5 7 9\r
- // data_len=data_len+1;//6 \r
- // }\r
- // printf("data_len:%d",data_len);\r
- // memcpy(&value[17],data_buf,30);\r
- // value[17] = 1;// \r
- value[17+data_len] = Calculate_CRC(value,data_len+17);\r
- sendBleData(value,data_len+17+1);\r
- }else\r
- {\r
- value[17] = 0;\r
- value[18] = Calculate_CRC(value,18);\r
- sendBleData(value,19);\r
- }\r
-}\r
+\r
//同步血氧历史数据\r
static void spo2DataCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
{\r
}\r
if(path==NULL)\r
{\r
- send_big_data(1,NULL,0,0,1,1,id);\r
+ send_big_data(1,NULL,1,1,1,1,id);\r
sendbigDataBufState = false;//分包同步数据不允许打断\r
return;\r
}\r
FILE *fp= fopen(path,"r+");\r
if(fp==NULL)\r
{\r
- send_big_data(1,NULL,0,0,1,1,id);\r
+ send_big_data(1,NULL,1,1,1,1,id);\r
printf("打开文件失败%s\r\n",path);\r
sendbigDataBufState = false;//分包同步数据不允许打断\r
return;\r
printf("同步血氧数据\r\n");\r
EACH_DATA_LEN = SPO2_DATA_LEN;\r
num=(ble_nus_max_data_len-18)/EACH_DATA_LEN;\r
- Read_file_buf_send_bin_Data(num,0x41,EACH_DATA_LEN,"heart_data_list");\r
+ Read_file_buf_send_bin_Data(num,0x41,EACH_DATA_LEN,"heart_data_list");\r
break;\r
case 0x43: //同步步数历史数据\r
EACH_DATA_LEN = STEP_DATA_LEN;\r