修复天气json数据异常导致的死机问题,更改sos协议,更改语言切换逻辑 1005/2
authorhcj <1224667075@qq.com>
Tue, 24 Sep 2024 01:53:50 +0000 (09:53 +0800)
committerhcj <1224667075@qq.com>
Tue, 24 Sep 2024 01:53:50 +0000 (09:53 +0800)
16 files changed:
code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/fd230app/nativeui/languagecode/LanguageInit.cpp
code/sdk/application/wearable/fd230app/nativeui/languagecode/LanguageInit.h
code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchModel.h
code/sdk/application/wearable/fd230app/nativeui/languagecode/include/LanguageSwitchView.h
code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchModel.cpp
code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/languagecode/src/LanguageSwitchView.cpp
code/sdk/application/wearable/fd230app/nativeui/phone/include/phoneaddressmodel.h
code/sdk/application/wearable/fd230app/nativeui/phone/src/phoneaddressmodel.cpp
code/sdk/application/wearable/fd230app/nativeui/uiservice/include/ui_service.h
code/sdk/application/wearable/fd230app/nativeui/uiservice/src/ui_service.cpp
code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp
code/sdk/application/wearable/service/ble_service/blemoder/bletest.h
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c
code/sdk/drivers/peripheral/utils/custom_utils.c

index 0d0d069..0bdcea9 100644 (file)
@@ -530,7 +530,7 @@ namespace OHOS
                 DialModelCharge::GetInstance()->UpdatechargeStatus(1);
             }
             /*开机读取天气历史数据*/
-            read_jsonHistory_weather();
+          
             C_ScheduleDataReadFromFile();
             mmi_sleep_mode_switch_read();
         }
index e13c6f5..67e7ca5 100644 (file)
@@ -225,7 +225,7 @@ namespace OHOS
     }
 
     // 切换语言功能
-    bool language::ChangeLanguage(uint32_t currentLanguageId)
+    bool language::ChangeLanguage(int32_t currentLanguageId)
     {
 
         if (!FontGlobalManager::GetInstance() || !UIFont::GetInstance())
index 4b87d47..c64d9e6 100644 (file)
@@ -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);
     };
index 9181f0c..7421211 100644 (file)
@@ -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};
     };
 
 }
index 51d15f3..865bce9 100644 (file)
@@ -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};                                   // 语言列表
index 72e3b28..3a7085b 100644 (file)
@@ -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
      */
index f7c0190..7c1274f 100644 (file)
@@ -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;
         }
 
index de74878..b7bb644 100644 (file)
@@ -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
index d569692..4bdf238 100644 (file)
@@ -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
     {
index 4d317e3..d8bfb9d 100644 (file)
@@ -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;i<sos_num;i++)
+            {
+                // char W_buf[20]={0};
+                // memcpy_s(W_buf,20,sos_dail_buf[i],osal_strlen((const char*)sos_dail_buf[i]));
+                fwrite(&sos_number_data[i],1,sizeof(sos_number_t),fp);
+            }
+            fclose(fp);
+        }
+    }
+
+    void SOS_number_init(void)
+    {
+        FILE *fp=fopen(SOS_NUMBER_PATH,"rb+");
+        if(fp)
+        {
+            int ret=0;
+            int i=0;
+            do
+            {
+                ret=fread(&sos_number_data[i],1,sizeof(sos_number_t),fp);
+                if(ret==sizeof(sos_number_t))
+                {
+                    sos_num++;
+                }
+                i++;
+
+            } while (ret==sizeof(sos_number_t));
+
+            fclose(fp);
+        }
+    }
+
+    char* get_sos_number(uint8_t id)
+    {
+        return sos_number_data[id%sos_num].number;
+    }
+
+    uint8_t get_sos_name_and_sex(uint8_t id,char *name)
+    {
+        if(id>sos_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");
index 266e0ea..31c4003 100644 (file)
@@ -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, 
index 25c158c..0fa8049 100644 (file)
@@ -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
 }
index 965b740..2e3086e 100644 (file)
@@ -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;i<count;i++)
+    {
+        char name[NAME_LEN]={0};
+        uint8_t sex= OHOS::get_sos_name_and_sex(i,name);
+        char number[NUMBER_LEN]={0};
+        memcpy_s((void *)number,NUMBER_LEN,(void *)OHOS::get_sos_number(i),NUMBER_LEN);
+        data[offset]=sex;
+        offset++;
+        data[offset]=osal_strlen(name);
+        offset++;
+        memcpy_s((void *)&data[offset],NAME_LEN,name,osal_strlen(name));
+        offset+=osal_strlen(name);
+
+        data[offset]=osal_strlen(number);
+        offset++;
+        memcpy_s((void *)&data[offset],NUMBER_LEN,number,osal_strlen(number));
+        offset+=osal_strlen(number);
+
+        printf("sex:%d,name:%d,%s,number:%d,%s\r\n",sex,osal_strlen(name),name,osal_strlen(number),number);
+    }
+    *len=offset;
+
+    return data;
+}
+
+//sos 
+void ble_sos_number_clean(void)
+{
+    OHOS::sos_number_clean();
+}
+
+bool ble_add_sos_number(uint8_t sex,char *name,char *number)
+{
+    return OHOS::add_sos_number(sex,name,number);
+}
+
+
 #define before_file_day 30
 
 
@@ -1683,12 +1735,13 @@ void add_addressbookToRead(char *data)
     return;
 }
 
+static uint32_t languaage_id=0;
 void set_languaage(uint32_t id)
 {//OHOS:: language language;
 #ifdef FD230
-    OHOS::language::GetInstance()->ChangeLanguage(id);
+    languaage_id=id;
+    SendMsgToUIService(UI_UPDATE_LANGUAGE, 0, &languaage_id, sizeof(uint32_t));
 #endif
-
 }
 
 char *addressbook(void)//获取通讯录保存文件地址路径
index 2b12901..d3097be 100644 (file)
@@ -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
 }
index a8b5323..1733625 100644 (file)
@@ -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\r
     }\r
 \r
+    printf("data:\r\n");\r
+    \r
+    for(int i=0;i<17 + datalen + 1;i++)\r
+    {\r
+        printf("%x ",buf[i]);\r
+    }\r
+    printf("end\r\n");\r
+\r
     // 根据标志位选择发送数据的方式\r
   \r
     sendDataNow(buf, 17 + datalen + 1); // 判断是否在传输或接收多包数据\r
@@ -2168,42 +2176,130 @@ uint8_t parse_jsonCheck_weather(uint8_t *buf,uint8_t *check)//json 格式解析
         printf("天气 JSON解析错误\n");\r
         return 0;\r
     }\r
-    int humidity = cJSON_GetObjectItem(now_cjson, "humidity")->valueint;\r
-    char * windScale = cJSON_GetObjectItem(now_cjson, "windScale")->valuestring;\r
-    char *textNight = cJSON_GetObjectItem(now_cjson, "textNight")->valuestring;\r
-    int uvIndex = cJSON_GetObjectItem(now_cjson, "uvIndex")->valueint;\r
-    int temp = cJSON_GetObjectItem(now_cjson, "temp")->valueint;\r
-    int iconNight = cJSON_GetObjectItem(now_cjson, "iconNight")->valueint;\r
+    int humidity=0;\r
+    char * windScale=NULL;\r
+    char *textNight=NULL;\r
+    int uvIndex=0;\r
+    int temp=0;\r
+    int iconNight=0;\r
 \r
+    cJSON *now_data= cJSON_GetObjectItem(now_cjson, "humidity");\r
+    if(now_data)\r
+    {\r
+        humidity=now_data->valueint;\r
+    }\r
+    now_data=cJSON_GetObjectItem(now_cjson, "windScale");\r
+    if(now_data)\r
+    {\r
+        windScale=now_data->valuestring;\r
+    }\r
+    now_data=cJSON_GetObjectItem(now_cjson, "textNight");\r
+    if(now_data)\r
+    {\r
+        textNight=now_data->valuestring;\r
+    }\r
+    now_data= cJSON_GetObjectItem(now_cjson, "uvIndex");\r
+    if(now_data)\r
+    {\r
+        uvIndex=now_data->valueint;\r
+    }\r
+    now_data= cJSON_GetObjectItem(now_cjson, "temp");\r
+    if(now_data)\r
+    {\r
+        temp=now_data->valueint;\r
+    }\r
+    now_data= cJSON_GetObjectItem(now_cjson, "iconNight");\r
+    if(now_data)\r
+    {\r
+        iconNight=now_data->valueint;\r
+    }\r
     set_weather_now_data(humidity,windScale,textNight,uvIndex,temp,iconNight);\r
 \r
-//     "address":\r
-// {"lat":225737664,\r
-// "atm":"1010",\r
-// "city":"深圳",\r
-// "subLocality":"宝安",\r
-// "lon":1138535138},\r
 \r
     cJSON *address_cjson = cJSON_GetObjectItem(root, "address");\r
-    char*city = cJSON_GetObjectItem(address_cjson, "city")->valuestring;\r
-    char*subLocality = cJSON_GetObjectItem(address_cjson, "subLocality")->valuestring;\r
-    char*atm = cJSON_GetObjectItem(address_cjson, "atm")->valuestring;\r
-    int lat = cJSON_GetObjectItem(address_cjson, "lat")->valueint;\r
-    int lon = cJSON_GetObjectItem(address_cjson, "lon")->valueint;\r
-    set_weather_address_data(lat,atm,city,subLocality,lon);\r
 \r
+    char*city=NULL;\r
+    char*subLocality=NULL;\r
+    char*atm=NULL;\r
+     int lat=0;\r
+     int lon=0;\r
+\r
+    cJSON *address_cjson_ = cJSON_GetObjectItem(address_cjson, "city");\r
+    if(address_cjson_)\r
+    {\r
+        city=address_cjson_->valuestring;\r
+    }\r
+    \r
+    \r
+     address_cjson_= cJSON_GetObjectItem(address_cjson, "subLocality");\r
+    if(address_cjson_)\r
+    {\r
+        subLocality=address_cjson_->valuestring;\r
+    } \r
+\r
+    address_cjson_=cJSON_GetObjectItem(address_cjson, "atm");\r
+    if(address_cjson_)\r
+    {\r
+        atm=address_cjson_->valuestring;\r
+    } \r
+    address_cjson_ = cJSON_GetObjectItem(address_cjson, "lat");\r
+    if(address_cjson_)\r
+    {\r
+        lat=address_cjson_->valueint;\r
+    } \r
+\r
+    address_cjson_ = cJSON_GetObjectItem(address_cjson, "lon");\r
+    if(address_cjson_)\r
+    {\r
+        lon=address_cjson_->valueint;\r
+    } \r
+    set_weather_address_data(lat,atm,city,subLocality,lon);\r
     cJSON *daily = cJSON_GetObjectItem(root, "daily");\r
+    if(daily==NULL)\r
+    {\r
+        return 0;\r
+    }\r
     int count= cJSON_GetArraySize(daily);\r
     for(int i=0;i<count;i++)\r
     {   \r
         //{"tempMin":22,"iconDay":6,"fxDate":1712505600,"textDay":"阵雨","tempMax":29},\r
         cJSON *data=cJSON_GetArrayItem(daily,i);\r
-        int  tempMin=cJSON_GetObjectItem(data,"tempMin")->valueint;\r
-        int  iconDay=cJSON_GetObjectItem(data,"iconDay")->valueint;\r
-        int  fxDate=cJSON_GetObjectItem(data,"fxDate")->valueint;\r
-        char *  textDay=cJSON_GetObjectItem(data,"textDay")->valuestring;\r
-        int  tempMax=cJSON_GetObjectItem(data,"tempMax")->valueint;\r
 \r
+        int  tempMin=0;\r
+        int  iconDay=0;\r
+        int  fxDate=0;\r
+        char *  textDay=NULL;\r
+        int  tempMax=0;\r
+\r
+\r
+        cJSON *data_=cJSON_GetObjectItem(data,"tempMin");\r
+        if(data_)\r
+        {\r
+           tempMin=data_->valueint;\r
+        }\r
+        \r
+        data_=cJSON_GetObjectItem(data,"iconDay");\r
+        if(data_)\r
+        {\r
+           iconDay=data_->valueint;\r
+        }\r
+        \r
+        cJSON_GetObjectItem(data,"fxDate");\r
+        if(data_)\r
+        {\r
+           fxDate=data_->valueint;\r
+        }\r
+        \r
+        cJSON_GetObjectItem(data,"textDay");\r
+        if(data_)\r
+        {\r
+           textDay=data_->valuestring;\r
+        }\r
+        cJSON_GetObjectItem(data,"tempMax");\r
+        if(data_)\r
+        {\r
+           tempMax=data_->valueint;\r
+        }\r
         set_weather_one_data(tempMin,iconDay,fxDate,tempMax,textDay,i);\r
 \r
     }\r
@@ -2679,6 +2775,64 @@ void APP_send_schedule_Cmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *tota
 \r
 bool bin_Check_sos(uint8_t *data,uint16_t len)\r
 {\r
+    uint8_t SOS_num=data[0];\r
+    uint32_t offset=1;\r
+    char *name=NULL;\r
+    char *number=NULL;\r
+    ble_sos_number_clean();\r
+\r
+    while (SOS_num)\r
+    {\r
+        SOS_num--;\r
+        uint8_t sex=data[offset];\r
+        offset++;\r
+        if(offset>=len)\r
+        break;\r
+        uint8_t name_len=data[offset];\r
+        offset++;\r
+        if(offset>=len)\r
+        break;\r
+        char *name=(char *)malloc(name_len+1);\r
+        if(name==NULL)\r
+        break;\r
+        memset_s(name,255,0,name_len+1);\r
+        memcpy_s(name,255,&data[offset],name_len);\r
+        offset+=name_len;\r
+        if(offset>=len)\r
+        break;\r
+        uint8_t number_len=data[offset];\r
+        offset++;\r
+        if(offset>=len)\r
+        break;\r
+        char *number=(char *)malloc(number_len);\r
+        if(number==NULL)\r
+        break;\r
+        memset_s(number,255,0,number_len+1);\r
+        memcpy_s(number,255,&data[offset],number_len);\r
+        offset+=number_len;\r
+        \r
+        printf("sex:%d,name:%s,number:%s;\r\n",sex,name,number);\r
+\r
+        ble_add_sos_number(sex,name,number);\r
+\r
+        free(number);\r
+        number==NULL;\r
+        free(name);\r
+        name==NULL;\r
+\r
+        if(offset>=len)\r
+        break;\r
+\r
+\r
+    }\r
+    if(number)\r
+    {\r
+        free(number);\r
+    }\r
+    if(name)\r
+    {\r
+        free(name);\r
+    }\r
     return true;\r
 }\r
 \r
@@ -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))\r
        {\r
         \r
-        \r
         if(bin_Check_sos(data,len))\r
         {\r
             sendBuf[17] = 1;\r
@@ -4692,8 +4845,53 @@ static void GetAiRecordCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *tota
 \r
 static void GetSOSDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
 {\r
-    ble_data_type type_={0x01,0x36,0,1,1};\r
-    send_big_data(type_,NULL,0);\r
+    uint32_t data_len=0;\r
+    uint8_t *bin_data = ble_get_sos_all_data_malloc(&data_len);\r
+    if(bin_data==NULL)\r
+    {\r
+        ble_data_type type_={0x01,0x36,0,1,1};\r
+        send_big_data(type_,NULL,0);\r
+        return;\r
+    }\r
+    uint32_t surplus_len=data_len;\r
+    uint32_t offset=0;\r
+\r
+    uint32_t pack;\r
+    uint16_t pack_size=(ble_nus_max_data_len-18);\r
+    if(pack_size>482)pack_size=482;\r
+\r
+    if(data_len%pack_size==0)\r
+    {\r
+        pack=data_len/pack_size;\r
+    }\r
+    else\r
+    {   \r
+        pack=data_len/pack_size+1;\r
+    }\r
+    uint32_t pack_id=1;\r
+    while (surplus_len!=0)\r
+    {\r
+        if(surplus_len>=pack_size)\r
+        {\r
+            surplus_len=surplus_len-pack_size;\r
+\r
+            ble_data_type type_={0x01,0x36,data_len,pack,pack_id};\r
+            send_big_data(type_,(char *)bin_data+offset,pack_size);\r
+            offset+=pack_size;\r
+        }\r
+        else\r
+        {\r
+            \r
+            printf("%d %d %d %d\r\n",data_len,surplus_len,pack_id,pack);\r
+            ble_data_type type_={0x01,0x36,data_len,pack,pack_id};\r
+            send_big_data(type_,(char *)bin_data+offset,surplus_len);\r
+            break;\r
+        }\r
+        pack_id++;\r
+    }\r
+    free(bin_data);\r
+    \r
+  \r
 }\r
 //AI录音已经就绪\r
 static void AiIsReadyCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue)\r
index f4edea0..8577d8e 100644 (file)
@@ -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");