From 41977a1b76133f4ab099ccb5e594fb5ebfa66fe6 Mon Sep 17 00:00:00 2001 From: hcj <1224667075@qq.com> Date: Tue, 24 Sep 2024 09:53:50 +0800 Subject: [PATCH] =?utf8?q?=E4=BF=AE=E5=A4=8D=E5=A4=A9=E6=B0=94json?= =?utf8?q?=E6=95=B0=E6=8D=AE=E5=BC=82=E5=B8=B8=E5=AF=BC=E8=87=B4=E7=9A=84?= =?utf8?q?=E6=AD=BB=E6=9C=BA=E9=97=AE=E9=A2=98=EF=BC=8C=E6=9B=B4=E6=94=B9s?= =?utf8?q?os=E5=8D=8F=E8=AE=AE=EF=BC=8C=E6=9B=B4=E6=94=B9=E8=AF=AD?= =?utf8?q?=E8=A8=80=E5=88=87=E6=8D=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nativelauncher/src/NativeLauncher.cpp | 2 +- .../nativeui/languagecode/LanguageInit.cpp | 2 +- .../nativeui/languagecode/LanguageInit.h | 2 +- .../include/LanguageSwitchModel.h | 24 ++ .../languagecode/include/LanguageSwitchView.h | 8 +- .../languagecode/src/LanguageSwitchModel.cpp | 30 +++ .../src/LanguageSwitchPresenter.cpp | 21 +- .../languagecode/src/LanguageSwitchView.cpp | 22 +- .../phone/include/phoneaddressmodel.h | 25 +- .../nativeui/phone/src/phoneaddressmodel.cpp | 91 +++++++ .../nativeui/uiservice/include/ui_service.h | 3 +- .../nativeui/uiservice/src/ui_service.cpp | 13 + .../service/ble_service/blemoder/bletest.cpp | 57 +++- .../service/ble_service/blemoder/bletest.h | 8 + .../service/ble_service/bleservice/bleEvent.c | 250 ++++++++++++++++-- .../drivers/peripheral/utils/custom_utils.c | 2 + 16 files changed, 519 insertions(+), 41 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp b/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp index 0d0d0699c..0bdcea9e9 100644 --- a/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp +++ b/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp @@ -530,7 +530,7 @@ namespace OHOS DialModelCharge::GetInstance()->UpdatechargeStatus(1); } /*开机读取天气历史数据*/ - read_jsonHistory_weather(); + C_ScheduleDataReadFromFile(); mmi_sleep_mode_switch_read(); } diff --git a/code/sdk/application/wearable/fd230app/nativeui/languagecode/LanguageInit.cpp b/code/sdk/application/wearable/fd230app/nativeui/languagecode/LanguageInit.cpp index e13c6f533..67e7ca5c4 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/languagecode/LanguageInit.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/languagecode/LanguageInit.cpp @@ -225,7 +225,7 @@ namespace OHOS } // 切换语言功能 - bool language::ChangeLanguage(uint32_t currentLanguageId) + bool language::ChangeLanguage(int32_t currentLanguageId) { if (!FontGlobalManager::GetInstance() || !UIFont::GetInstance()) diff --git a/code/sdk/application/wearable/fd230app/nativeui/languagecode/LanguageInit.h b/code/sdk/application/wearable/fd230app/nativeui/languagecode/LanguageInit.h index 4b87d4784..c64d9e6d4 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/languagecode/LanguageInit.h +++ b/code/sdk/application/wearable/fd230app/nativeui/languagecode/LanguageInit.h @@ -67,7 +67,7 @@ namespace OHOS ~language(); static language *GetInstance(); bool InitLangues(); - bool ChangeLanguage(uint32_t); + bool ChangeLanguage(int32_t); bool ChangeLanguage(std::string language_code); bool fileExists(const char *fileName); }; diff --git a/code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchModel.h b/code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchModel.h index 9181f0c9e..7421211ec 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchModel.h @@ -26,6 +26,28 @@ namespace OHOS void SetisFirstTimeStart(bool value); bool GetisFirstTimeStart(void); + void LanguageSwitchViewupdata(uint32_t); + + void set_hint_flag(bool data) + { + hint_flag=data; + } + + bool get_hint_flag() + { + return hint_flag; + } + + int32_t get_hint_code() + { + return hint_code; + } + + void set_hint_code(int32_t data) + { + hint_code=data; + } + private: LanguageSwitchModel(); ~LanguageSwitchModel(); @@ -33,6 +55,8 @@ namespace OHOS const LanguageSwitchModel &operator=(const LanguageSwitchModel &) = delete; static const uint16_t LANGUAGE_ITEM_MAX = MAX_LANGUAGE; // 语言总数 std::string PreLanguageCode; // 上一次切换的语言 + bool hint_flag{false}; + int32_t hint_code{-1}; }; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchView.h b/code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchView.h index 51d15f376..865bce923 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchView.h @@ -34,12 +34,18 @@ namespace OHOS UIList *GetLanguageList(void); void InithintView(); void show_hint_group(std::string code,bool data); + void show_hint_group(int32_t code, bool data); std::string get_hint_id_code() { return hint_id_code; } + int32_t get_hint_id() + { + return hint_id; + } + UIButton *GetLanguagebutton_cancel(void); @@ -56,7 +62,7 @@ namespace OHOS UIButton *button_ensure{nullptr}; UILabel *LanguageSwitchViewhintLabel{nullptr}; // "语言" std::string hint_id_code; - + int32_t hint_id{-1}; UIScrollView *LanguageSwitchScrollView{nullptr}; UILabelExt *LanguageSwitchViewTitleLabel{nullptr}; // "语言" UIList *LanguageList{nullptr}; // 语言列表 diff --git a/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchModel.cpp index 72e3b28c5..3a7085b9e 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchModel.cpp @@ -9,6 +9,9 @@ #include "wearable_log.h" #include "languagecode/LanguageInit.h" #include "ConfigModel.h" +#include "NativeAbility.h" +#include "languagecode/include/LanguageSwitchView.h" +#include "AppViewIDs.h" namespace OHOS { @@ -22,6 +25,33 @@ namespace OHOS return instance; } + void LanguageSwitchModel::LanguageSwitchViewupdata(uint32_t id) + { + if(is_load_languages(id)) + { + if(LanguageSwitchView::GetInstance()) + { + LanguageSwitchView::GetInstance()->show_hint_group(id,true); + } + else + { + set_hint_code(id); + set_hint_flag(true); + NativeAbility::GetInstance().EnterSlice(VIEW_LANGUAGE_SWITCH); + } + + } + else + { + OHOS::language::GetInstance()->ChangeLanguage(id); + if(LanguageSwitchView::GetInstance()) + { + NativeAbility::GetInstance().EnterSlice(VIEW_LANGUAGE_SWITCH); + } + + } + return; + } /* * @brief: 设置当前语言code */ diff --git a/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchPresenter.cpp index f7c0190f9..7c1274f50 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchPresenter.cpp @@ -108,19 +108,30 @@ namespace OHOS { uint8_t power_buf[2]={0}; power_buf[0]=3; - std::string Hint_ID= LanguageSwitchView::GetInstance()->get_hint_id_code(); + if( LanguageSwitchView::GetInstance()->get_hint_id()!=-1) + { + int32_t Hint_ID= LanguageSwitchView::GetInstance()->get_hint_id(); + + g_planguage->ChangeLanguage(Hint_ID); + + CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,power_buf,2); + } + else + { + std::string Hint_ID= LanguageSwitchView::GetInstance()->get_hint_id_code(); - g_planguage->ChangeLanguage(Hint_ID); + g_planguage->ChangeLanguage(Hint_ID); - CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,power_buf,2); + CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,power_buf,2); + } + + return true; } else if(strcmp(view.GetViewId(), "BUTTON_CHECK_NO")==0) { - LanguageSwitchView::GetInstance()->show_hint_group("",false); - return true; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchView.cpp b/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchView.cpp index de74878b7..b7bb644f1 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchView.cpp @@ -206,6 +206,16 @@ namespace OHOS return; } + void LanguageSwitchView::show_hint_group(int32_t code, bool data) + { + group->SetVisible(data); + RootView::GetInstance()->Invalidate(); + if (data) + { + hint_id = code; + } + return; + } UIButton *LanguageSwitchView::GetLanguagebutton_cancel(void) { return button_cancel; @@ -281,7 +291,15 @@ namespace OHOS button_cancel->SetOnClickListener(presenter_); button_ensure->SetOnClickListener(presenter_); - group->SetVisible(false); + if(LanguageSwitchModel::GetInstance().get_hint_flag()==false) + { + group->SetVisible(false); + } + else + { + group->SetVisible(true); + LanguageSwitchModel::GetInstance().set_hint_flag(false); + } } void LanguageSwitchView::OnStart() @@ -329,6 +347,8 @@ namespace OHOS RootView::GetInstance()->ClearOnKeyActListener(); FocusManager::GetInstance()->ClearFocus(); ClearAll(); + LanguageSwitchModel::GetInstance().set_hint_flag(false); + LanguageSwitchModel::GetInstance().set_hint_code(-1); return; } } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/phone/include/phoneaddressmodel.h b/code/sdk/application/wearable/fd230app/nativeui/phone/include/phoneaddressmodel.h index d569692d6..4bdf238ee 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/phone/include/phoneaddressmodel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/phone/include/phoneaddressmodel.h @@ -34,6 +34,16 @@ struct addressbook uint16_t num=0; struct Contact Contact_t[20]; }; + +typedef struct sos_number +{ + uint8_t sex; + char name[NAME_LEN]; + char number[NUMBER_LEN]; +}sos_number_t; + +extern sos_number_t sos_number_data[3]; + extern struct addressbook addressbook_t; void read_addressbook_to_struct(char *buf); @@ -52,12 +62,23 @@ void free_address(); void add_addressbook_by_AT(char *name,char *phone); +void set_address_number(char *); +char* get_address_number(); +void SOS_number_save(void); -void set_address_number(char *); +void SOS_number_init(void); -char* get_address_number(); +char* get_sos_number(uint8_t id); + +uint8_t get_sos_number_count(void); + +uint8_t get_sos_name_and_sex(uint8_t id,char *name); + +void sos_number_clean(); + +bool add_sos_number(uint8_t sex,char *name,char *number); class phoneaddressbook { diff --git a/code/sdk/application/wearable/fd230app/nativeui/phone/src/phoneaddressmodel.cpp b/code/sdk/application/wearable/fd230app/nativeui/phone/src/phoneaddressmodel.cpp index 4d317e3e2..d8bfb9d25 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/phone/src/phoneaddressmodel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/phone/src/phoneaddressmodel.cpp @@ -356,6 +356,97 @@ namespace OHOS return address_number; } + #define SOS_NUMBER_PATH "user/userdata/sos_number.bin" + + #define SOS_NUMBER_MAX 3 + + sos_number_t sos_number_data[SOS_NUMBER_MAX]; + + static uint8_t sos_num = 0; + + void SOS_number_save(void) + { + FILE *fp=fopen(SOS_NUMBER_PATH,"wb+"); + if(fp) + { + for(int i=0;isos_num) + return 2; + + memcpy_s(name,NAME_LEN,sos_number_data[id].name,osal_strlen(sos_number_data[id].name)+1); + + return sos_number_data[id].sex; + } + + void sos_number_clean() + { + sos_num=0; + } + bool add_sos_number(uint8_t sex,char *name,char *number) + { + if(sos_num>=SOS_NUMBER_MAX) + { + return false; + } + else + { + sos_number_data[sos_num].sex=sex; + memset(sos_number_data[sos_num].name,0,sizeof(sos_number_data[sos_num].name)); + memcpy_s(sos_number_data[sos_num].name,NAME_LEN,name,osal_strlen(name)+1); + + memset(sos_number_data[sos_num].number,0,sizeof(sos_number_data[sos_num].number)); + memcpy_s(sos_number_data[sos_num].number,NUMBER_LEN,number,osal_strlen(number)+1); + sos_num++; + return true; + } + } + + uint8_t get_sos_number_count(void) + { + return sos_num; + } + + + + phoneaddressbook::phoneaddressbook() { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "phoneaddressbook::phoneaddressbook"); diff --git a/code/sdk/application/wearable/fd230app/nativeui/uiservice/include/ui_service.h b/code/sdk/application/wearable/fd230app/nativeui/uiservice/include/ui_service.h index 266e0eae9..31c4003a8 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/uiservice/include/ui_service.h +++ b/code/sdk/application/wearable/fd230app/nativeui/uiservice/include/ui_service.h @@ -87,7 +87,8 @@ typedef enum { UI_HAND_WATCH_FIRST_PAIRED, //手表已配对:给第一次手表启动用配对成功调用 UI_UPDATE_RECORDPROCESS, //更新录音进度条 UI_UPDATE_PLAYERPROCESS, //处理更新音乐进度条 - UI_UPDATE_GOAL, //更新每日目标 + UI_UPDATE_GOAL, //更新每日目标 + UI_UPDATE_LANGUAGE, //更新语言 UI_UPDATE_ALARM_INFO, // set alarm by app UI_UPDATE_OBU_MESSAGE, MAX_NUM_HANDLER, diff --git a/code/sdk/application/wearable/fd230app/nativeui/uiservice/src/ui_service.cpp b/code/sdk/application/wearable/fd230app/nativeui/uiservice/src/ui_service.cpp index 25c158cc9..0fa8049d5 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/uiservice/src/ui_service.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/uiservice/src/ui_service.cpp @@ -55,6 +55,8 @@ #include "ui_serviceC.h" +#include "languagecode/include/LanguageSwitchModel.h" + extern "C" errcode_t uapi_pm_add_sleep_veto(pm_id_t veto_id); extern "C" errcode_t uapi_pm_remove_sleep_veto(pm_id_t veto_id); @@ -132,6 +134,7 @@ extern "C" static void HandleUpdateDialState(Request *request); static void HandleUpdateAlarmInfo(Request *request); static void HandleUpdateGoalInfo(Request *request); + static void HandleUpdateLanguageInfo(Request *request); // 消息处理程序项数组(每个消息类型对应一个处理函数,函数名以 Handle 开头) MsgHandlerEntry msgHandlers[] = { @@ -165,6 +168,8 @@ extern "C" {UI_UPDATE_RECORDPROCESS, HandleUpdateRecordProcess}, {UI_UPDATE_PLAYERPROCESS, HandleUpdatePlayerProcess}, {UI_UPDATE_GOAL, HandleUpdateGoalInfo}, + {UI_UPDATE_LANGUAGE, HandleUpdateLanguageInfo}, + {UI_UPDATE_SLEEP_DATA, HandleUpdateSleep}, {UI_UPDATE_MESSAGE_DATA, HandleUpdateMessage}, {UI_UPDATE_HEARTRATE_DATA, HandleUpdateHeartRate}, @@ -692,6 +697,14 @@ extern "C" std::bind(&OHOS::GoalModel::updata, &OHOS::GoalModel::GetInstance())); } + static void HandleUpdateLanguageInfo(Request *request) + { + uint32_t id = *((uint32_t *)request->data); + GraphicService::GetInstance()->PostGraphicEvent( + std::bind(&OHOS::LanguageSwitchModel::LanguageSwitchViewupdata, &OHOS::LanguageSwitchModel::GetInstance(),id)); + } + + /* -------------------------------------------------------------------------- */ #ifdef __cplusplus } diff --git a/code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp b/code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp index 965b740a6..2e3086efa 100644 --- a/code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp +++ b/code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp @@ -85,6 +85,58 @@ extern "C" { #include "ScheduleData.h" #include "alipay_feature.h" + +uint8_t * ble_get_sos_all_data_malloc(uint32_t *len) +{ + uint8_t count= OHOS ::get_sos_number_count(); + if(count==0) + return NULL; + + uint8_t *data=(uint8_t *)malloc(1+count*(sizeof(OHOS::sos_number_t)+3)); + if(data==NULL) + { + return NULL; + } + data[0]=count; + uint32_t offset=1; + + for(int i=0;iChangeLanguage(id); + languaage_id=id; + SendMsgToUIService(UI_UPDATE_LANGUAGE, 0, &languaage_id, sizeof(uint32_t)); #endif - } char *addressbook(void)//获取通讯录保存文件地址路径 diff --git a/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h b/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h index 2b12901ea..d3097befe 100644 --- a/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h +++ b/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h @@ -364,6 +364,14 @@ bool Ble_Set_ScheduleInfo(uint8_t id,uint32_t timetamp_begin,uint32_t timetamp_e void ble_Alipayunbind(void); + +///////////////////////////////sos//////////////////////////////////////////// +void ble_sos_number_clean(void); + +bool ble_add_sos_number(uint8_t sex,char *name,char *number); + +uint8_t* ble_get_sos_all_data_malloc(uint32_t*); + #ifdef __cplusplus #if __cplusplus } diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c index a8b532301..173362513 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c @@ -390,6 +390,14 @@ void send_big_data(ble_data_type type,char *data, uint16 datalen) buf[17 + datalen] = Calculate_CRC_Big((uint8_t *)data, datalen); // 计算CRC } + printf("data:\r\n"); + + for(int i=0;i<17 + datalen + 1;i++) + { + printf("%x ",buf[i]); + } + printf("end\r\n"); + // 根据标志位选择发送数据的方式 sendDataNow(buf, 17 + datalen + 1); // 判断是否在传输或接收多包数据 @@ -2168,42 +2176,130 @@ uint8_t parse_jsonCheck_weather(uint8_t *buf,uint8_t *check)//json 格式解析 printf("天气 JSON解析错误\n"); return 0; } - int humidity = cJSON_GetObjectItem(now_cjson, "humidity")->valueint; - char * windScale = cJSON_GetObjectItem(now_cjson, "windScale")->valuestring; - char *textNight = cJSON_GetObjectItem(now_cjson, "textNight")->valuestring; - int uvIndex = cJSON_GetObjectItem(now_cjson, "uvIndex")->valueint; - int temp = cJSON_GetObjectItem(now_cjson, "temp")->valueint; - int iconNight = cJSON_GetObjectItem(now_cjson, "iconNight")->valueint; + int humidity=0; + char * windScale=NULL; + char *textNight=NULL; + int uvIndex=0; + int temp=0; + int iconNight=0; + cJSON *now_data= cJSON_GetObjectItem(now_cjson, "humidity"); + if(now_data) + { + humidity=now_data->valueint; + } + now_data=cJSON_GetObjectItem(now_cjson, "windScale"); + if(now_data) + { + windScale=now_data->valuestring; + } + now_data=cJSON_GetObjectItem(now_cjson, "textNight"); + if(now_data) + { + textNight=now_data->valuestring; + } + now_data= cJSON_GetObjectItem(now_cjson, "uvIndex"); + if(now_data) + { + uvIndex=now_data->valueint; + } + now_data= cJSON_GetObjectItem(now_cjson, "temp"); + if(now_data) + { + temp=now_data->valueint; + } + now_data= cJSON_GetObjectItem(now_cjson, "iconNight"); + if(now_data) + { + iconNight=now_data->valueint; + } set_weather_now_data(humidity,windScale,textNight,uvIndex,temp,iconNight); -// "address": -// {"lat":225737664, -// "atm":"1010", -// "city":"深圳", -// "subLocality":"宝安", -// "lon":1138535138}, cJSON *address_cjson = cJSON_GetObjectItem(root, "address"); - char*city = cJSON_GetObjectItem(address_cjson, "city")->valuestring; - char*subLocality = cJSON_GetObjectItem(address_cjson, "subLocality")->valuestring; - char*atm = cJSON_GetObjectItem(address_cjson, "atm")->valuestring; - int lat = cJSON_GetObjectItem(address_cjson, "lat")->valueint; - int lon = cJSON_GetObjectItem(address_cjson, "lon")->valueint; - set_weather_address_data(lat,atm,city,subLocality,lon); + char*city=NULL; + char*subLocality=NULL; + char*atm=NULL; + int lat=0; + int lon=0; + + cJSON *address_cjson_ = cJSON_GetObjectItem(address_cjson, "city"); + if(address_cjson_) + { + city=address_cjson_->valuestring; + } + + + address_cjson_= cJSON_GetObjectItem(address_cjson, "subLocality"); + if(address_cjson_) + { + subLocality=address_cjson_->valuestring; + } + + address_cjson_=cJSON_GetObjectItem(address_cjson, "atm"); + if(address_cjson_) + { + atm=address_cjson_->valuestring; + } + address_cjson_ = cJSON_GetObjectItem(address_cjson, "lat"); + if(address_cjson_) + { + lat=address_cjson_->valueint; + } + + address_cjson_ = cJSON_GetObjectItem(address_cjson, "lon"); + if(address_cjson_) + { + lon=address_cjson_->valueint; + } + set_weather_address_data(lat,atm,city,subLocality,lon); cJSON *daily = cJSON_GetObjectItem(root, "daily"); + if(daily==NULL) + { + return 0; + } int count= cJSON_GetArraySize(daily); for(int i=0;ivalueint; - int iconDay=cJSON_GetObjectItem(data,"iconDay")->valueint; - int fxDate=cJSON_GetObjectItem(data,"fxDate")->valueint; - char * textDay=cJSON_GetObjectItem(data,"textDay")->valuestring; - int tempMax=cJSON_GetObjectItem(data,"tempMax")->valueint; + int tempMin=0; + int iconDay=0; + int fxDate=0; + char * textDay=NULL; + int tempMax=0; + + + cJSON *data_=cJSON_GetObjectItem(data,"tempMin"); + if(data_) + { + tempMin=data_->valueint; + } + + data_=cJSON_GetObjectItem(data,"iconDay"); + if(data_) + { + iconDay=data_->valueint; + } + + cJSON_GetObjectItem(data,"fxDate"); + if(data_) + { + fxDate=data_->valueint; + } + + cJSON_GetObjectItem(data,"textDay"); + if(data_) + { + textDay=data_->valuestring; + } + cJSON_GetObjectItem(data,"tempMax"); + if(data_) + { + tempMax=data_->valueint; + } set_weather_one_data(tempMin,iconDay,fxDate,tempMax,textDay,i); } @@ -2679,6 +2775,64 @@ void APP_send_schedule_Cmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *tota bool bin_Check_sos(uint8_t *data,uint16_t len) { + uint8_t SOS_num=data[0]; + uint32_t offset=1; + char *name=NULL; + char *number=NULL; + ble_sos_number_clean(); + + while (SOS_num) + { + SOS_num--; + uint8_t sex=data[offset]; + offset++; + if(offset>=len) + break; + uint8_t name_len=data[offset]; + offset++; + if(offset>=len) + break; + char *name=(char *)malloc(name_len+1); + if(name==NULL) + break; + memset_s(name,255,0,name_len+1); + memcpy_s(name,255,&data[offset],name_len); + offset+=name_len; + if(offset>=len) + break; + uint8_t number_len=data[offset]; + offset++; + if(offset>=len) + break; + char *number=(char *)malloc(number_len); + if(number==NULL) + break; + memset_s(number,255,0,number_len+1); + memcpy_s(number,255,&data[offset],number_len); + offset+=number_len; + + printf("sex:%d,name:%s,number:%s;\r\n",sex,name,number); + + ble_add_sos_number(sex,name,number); + + free(number); + number==NULL; + free(name); + name==NULL; + + if(offset>=len) + break; + + + } + if(number) + { + free(number); + } + if(name) + { + free(name); + } return true; } @@ -2699,7 +2853,6 @@ void APP_send_sos_Cmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totalData if(Check_CRC(data,len,crcvalue)) { - if(bin_Check_sos(data,len)) { sendBuf[17] = 1; @@ -4692,8 +4845,53 @@ static void GetAiRecordCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *tota static void GetSOSDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue) { - ble_data_type type_={0x01,0x36,0,1,1}; - send_big_data(type_,NULL,0); + uint32_t data_len=0; + uint8_t *bin_data = ble_get_sos_all_data_malloc(&data_len); + if(bin_data==NULL) + { + ble_data_type type_={0x01,0x36,0,1,1}; + send_big_data(type_,NULL,0); + return; + } + uint32_t surplus_len=data_len; + uint32_t offset=0; + + uint32_t pack; + uint16_t pack_size=(ble_nus_max_data_len-18); + if(pack_size>482)pack_size=482; + + if(data_len%pack_size==0) + { + pack=data_len/pack_size; + } + else + { + pack=data_len/pack_size+1; + } + uint32_t pack_id=1; + while (surplus_len!=0) + { + if(surplus_len>=pack_size) + { + surplus_len=surplus_len-pack_size; + + ble_data_type type_={0x01,0x36,data_len,pack,pack_id}; + send_big_data(type_,(char *)bin_data+offset,pack_size); + offset+=pack_size; + } + else + { + + printf("%d %d %d %d\r\n",data_len,surplus_len,pack_id,pack); + ble_data_type type_={0x01,0x36,data_len,pack,pack_id}; + send_big_data(type_,(char *)bin_data+offset,surplus_len); + break; + } + pack_id++; + } + free(bin_data); + + } //AI录音已经就绪 static void AiIsReadyCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue) diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.c b/code/sdk/drivers/peripheral/utils/custom_utils.c index f4edea0cf..8577d8e8a 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils.c +++ b/code/sdk/drivers/peripheral/utils/custom_utils.c @@ -384,6 +384,8 @@ void startup_post_init_task(void) addressbookToRead(NULL); up_report_timer(); + read_jsonHistory_weather(); + if ( cm_poweron_cat1_on_bootup_flag() ) { PRINT("PowerOn Cat1 !\r\n"); -- 2.17.1