From b5dc9115e1e31c37c1d40b88f2e43ea2287e19fd Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E8=83=A1=E4=BC=A0=E5=86=9B?= <1224667075@qq.com> Date: Tue, 24 Sep 2024 09:00:17 +0000 Subject: [PATCH] Merge #1005 into sdk602patch0626 from refs/changes/1005/head MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Code review from 胡传军 * refs/changes/1005/head: (13 commits squashed) - 修复同步实时运动数据存在的BUG - 蓝牙文件取消传输修改 - 电话bug综合修复 - 电话bug综合修复(补) - Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into 0626 - 修复电话死机问题 - 修复蓝牙通话死机问题 - Merge branch 'sdk602patch0626' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into 0626 - 修复天气json数据异常导致的死机问题,更改sos协议,更改语言切换逻辑 - 修复天气json数据异常导致的死机问题(补) - Mp3文件传输重写 - 修复自定义表盘ID不能对应问题 - 修复站立目标设置没生效bug Signed-off-by: aliyun8003852482 <1224667075@qq.com> Reviewed-by: snickersun@163.com Merged-by: snickersun@163.com CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/1005 --- .../nativelauncher/src/NativeLauncher.cpp | 2 +- .../fd230app/nativeui/goal/src/goalmodel.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/phoneservice/src/PhoneAudio.cpp | 10 +- .../nativeui/set_dial/src/SetDialModel.cpp | 21 +- .../nativeui/uiservice/include/ui_service.h | 3 +- .../nativeui/uiservice/src/ui_service.cpp | 13 + .../service/ble_service/blemoder/bletest.cpp | 61 +++- .../service/ble_service/blemoder/bletest.h | 12 + .../service/ble_service/bleservice/bleEvent.c | 295 ++++++++++++++++-- .../msg_center/include/notify/transmitting.h | 14 +- .../msg_center/src/notify/transmitting.cpp | 190 ++++++++++- .../drivers/peripheral/utils/custom_utils.c | 2 + 21 files changed, 782 insertions(+), 68 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/goal/src/goalmodel.cpp b/code/sdk/application/wearable/fd230app/nativeui/goal/src/goalmodel.cpp index 0e9878a94..2ec118812 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/goal/src/goalmodel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/goal/src/goalmodel.cpp @@ -116,7 +116,7 @@ namespace OHOS char standstr[20]; char *GoalModel::getstandgoal() { - int standdata = ConfigModel::GetInstance()->get_configData_int(ConfigModel::CONFIGMODEL_ITEM_SPORTS_GOAL_DURATION); + int standdata = ConfigModel::GetInstance()->get_configData_int(ConfigModel::CONFIGMODEL_ITEM_SPORTS_GOAL_STANDUP_TIMES); memset((void *)standstr, 0, 20); sprintf_s(standstr, 20, "/%d", standdata); return standstr; 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/phoneservice/src/PhoneAudio.cpp b/code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneAudio.cpp index 7d8de1019..fcc491ae7 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneAudio.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/phoneservice/src/PhoneAudio.cpp @@ -15,7 +15,7 @@ #include "audio_errors.h" #include "wearable_log.h" #include "audio_manager_c_wrapper.h" - +#include "CallerLogModel.h" #ifdef __cplusplus extern "C" { #endif @@ -137,8 +137,12 @@ bool PhoneAudioSetMicMute(bool isMute) ret = g_amInstance.SetMicrophoneMute(isMute); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PhoneAudioSetMicMute] end! ret = %d", ret); - AudioStreamOutSetMute(isMute); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[AudioStreamOutSetMute] end! ret = %d", ret); + if(OHOS::CallerLogModel::GetInstance()->GetCallSource() == OHOS::CallerLogModel::CallSourceCat1) + { + AudioStreamOutSetMute(isMute); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[AudioStreamOutSetMute] end! ret = %d", ret); + } + return ret; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialModel.cpp index 0f9c7301d..365c179e1 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialModel.cpp @@ -178,7 +178,12 @@ namespace OHOS { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "currentDialID is %d,name is %s", currentDialID, registeredDials[currentDialID].c_str()); } - return currentDialID; + uint16_t id=currentDialID; + if(currentDialID<=5) + { + id--; + } + return id; } /* 获取所有表盘Id 每个表盘Id 2个字节 拼接为字符串 */ int SetDialModel::GetAllDialIDs(char *allidStr) @@ -202,6 +207,11 @@ namespace OHOS /* 判断表盘是否存在*/ bool SetDialModel::IsDialInstalled(uint16_t ID) { + if(ID<=4) + { + ID++; + } + if (registeredDials.find(ID) != registeredDials.end()) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dial %d is install!", ID); @@ -216,6 +226,10 @@ namespace OHOS /* 删除表盘 */ bool SetDialModel::UninstallDial(uint16_t ID) { + if(ID<=4) + { + ID++; + } if (registeredDials.find(ID) != registeredDials.end()) { // 默认表盘不删除[日志提醒] @@ -255,6 +269,11 @@ namespace OHOS /*更新表盘*/ void SetDialModel::UpdateDialSetting(uint16_t ID) { + if(ID<=4) + { + ID++; + } + if (registeredDials.find(ID) != registeredDials.end()) { std::string dialname = registeredDials[ID]; // 根据ID找到对应的表盘名称 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..7fe6914b1 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..9cf6cdb92 100644 --- a/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h +++ b/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h @@ -38,6 +38,10 @@ extern "C" TRANS_OTA_TRANSMITTING, TRANS_OTA_SUCC, TRANS_OTA_FAIL, + + TRANS_MP3_TRANSMITTING, + TRANS_MP3_SUCC, + TRANS_MP3_FAIL, TRANS_FREE, } transmitting_type; @@ -364,6 +368,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..afa09591c 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); // 判断是否在传输或接收多包数据 @@ -1565,12 +1573,16 @@ static void SetOtherTarget(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *tota uint8_t vibratior = data[6];//振动 uint8_t notify = data[7];//通知 - set_goal_caloriescount(target_kcal); + set_goal_discount(target_km); set_goal_standupcount(target_stand); set_goal_durationcount(target_fattime); + + set_goal_caloriescount(target_kcal); + set_SilentMode(ring); set_vibrationremiander(vibratior); + set_notify_switch(notify); sendBuf[17] = 1; sendBuf[18] = Calculate_CRC(sendBuf,18); @@ -2168,42 +2180,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_humidity= cJSON_GetObjectItem(now_cjson, "humidity"); + if(now_data_humidity) + { + humidity=now_data_humidity->valueint; + } + cJSON *now_data_windScale=cJSON_GetObjectItem(now_cjson, "windScale"); + if(now_data_windScale) + { + windScale=now_data_windScale->valuestring; + } + cJSON *now_data_textNight=cJSON_GetObjectItem(now_cjson, "textNight"); + if(now_data_textNight) + { + textNight=now_data_textNight->valuestring; + } + cJSON *now_data_uvIndex= cJSON_GetObjectItem(now_cjson, "uvIndex"); + if(now_data_uvIndex) + { + uvIndex=now_data_uvIndex->valueint; + } + cJSON *now_data_temp= cJSON_GetObjectItem(now_cjson, "temp"); + if(now_data_temp) + { + temp=now_data_temp->valueint; + } + cJSON *now_data_iconNight= cJSON_GetObjectItem(now_cjson, "iconNight"); + if(now_data_iconNight) + { + iconNight=now_data_iconNight->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; + } + + data_=cJSON_GetObjectItem(data,"fxDate"); + if(data_) + { + fxDate=data_->valueint; + } + + data_=cJSON_GetObjectItem(data,"textDay"); + if(data_) + { + textDay=data_->valuestring; + } + data_=cJSON_GetObjectItem(data,"tempMax"); + if(data_) + { + tempMax=data_->valueint; + } set_weather_one_data(tempMin,iconDay,fxDate,tempMax,textDay,i); } @@ -2679,6 +2779,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 +2857,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 +4849,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) @@ -6525,7 +6727,11 @@ errcode_t decode_mp3_json(ble_read_data *buffer_handle) buffer_handle->file_recv_stat.received_size = 0; buffer_handle->file_recv_stat.lrcvalue = 0; buffer_handle->receive_file_flag = 1; + TRANSMIT_DATA=TRANS_MP3_TRANSMITTING; + CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1); + return ERRCODE_SUCC; + }else{ buffer_handle->receive_file_flag = 0; return ERRCODE_FAIL; @@ -6880,7 +7086,9 @@ void decode_file_checksum(ble_read_data *buffer_handle) break; case 2://mp3 - + TRANSMIT_DATA=TRANS_MP3_SUCC; + CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1); + ble_reply_cmd(DIAL_INSTALL_REPY_CMD,1); ble_mp3_list_update(); @@ -6925,6 +7133,8 @@ void decode_file_checksum(ble_read_data *buffer_handle) CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1); break; case 2://mp3 + TRANSMIT_DATA=TRANS_MP3_FAIL; + CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1); break; case 3://dial @@ -6946,6 +7156,9 @@ void decode_file_checksum(ble_read_data *buffer_handle) CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1); break; case 2://mp3 + TRANSMIT_DATA=TRANS_MP3_FAIL; + CustomEventPublish(TOPIC_EVENT_BLE_TRANSMIT,&TRANSMIT_DATA,1); + break; case 3://dial TRANSMIT_DATA= TRANS_DIAL_FAIL; @@ -7281,6 +7494,29 @@ static errcode_t check_package_same(uint8_t* lastdata,uint8_t *newdata , uint16_ return ERRCODE_FAIL; } } +//MP3文件重命名 +static errcode_t create_mp3_name(char* path,char*dir_path ,char* file_name) +{ + + sprintf_s(path,256,"%s/",dir_path); + uint16_t path_len=strlen(path); + + if(strstr(file_name,".mp3")) + { + int len=strlen(file_name)-strlen(".mp3"); + for(int i=0;ifile_recv_stat.file_name); + create_mp3_name(filepath,musicpath,buffer_handle->file_recv_stat.file_name); + buffer_handle->file_recv_stat.file = fopen(filepath,"w+"); printf("%s\r\n",filepath); } diff --git a/code/sdk/application/wearable/service/msg_center/include/notify/transmitting.h b/code/sdk/application/wearable/service/msg_center/include/notify/transmitting.h index ab79ce3b4..c228a9410 100644 --- a/code/sdk/application/wearable/service/msg_center/include/notify/transmitting.h +++ b/code/sdk/application/wearable/service/msg_center/include/notify/transmitting.h @@ -1,24 +1,12 @@ #ifndef TRANSMITTING_H #define TRANSMITTING_H #include "components/ui_image_animator.h" +#include "bletest.h" namespace OHOS { // UIViewGroup *ChargingStatuShow(void); // UIView *view_ = nullptr; - - typedef enum transmitting_type_t { - TRANS_DIAL_TRANSMITTING, - TRANS_DIAL_SUCC, - TRANS_DIAL_FAIL, - - TRANS_OTA_TRANSMITTING, - TRANS_OTA_SUCC, - TRANS_OTA_FAIL, - - TRANS_FREE, - } transmitting_type_t; - UIViewGroup* transmittingShow(void); void set_transmittingShow_falg(uint8_t falg); void Freetransmitting(void); diff --git a/code/sdk/application/wearable/service/msg_center/src/notify/transmitting.cpp b/code/sdk/application/wearable/service/msg_center/src/notify/transmitting.cpp index 1341d748d..e614e0213 100644 --- a/code/sdk/application/wearable/service/msg_center/src/notify/transmitting.cpp +++ b/code/sdk/application/wearable/service/msg_center/src/notify/transmitting.cpp @@ -427,8 +427,127 @@ namespace OHOS UIViewGroup_transmitting->Add(downImageAnimatorView); } - + void creat_down_MP3() + { + if (Title == nullptr) { + Title = new UILabel(); + } + Title->SetPosition(158, 51); // widget's left position and top position + Title->Resize(800, 88); // widget's width and height + Title->SetViewId("label1");// Set style + Title->SetStyle(STYLE_TEXT_FONT, 30); + + // Set additional property + Title->SetText("音乐传输中"); + Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + Title->SetRollSpeed(0); + Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + + // Add to rootView + UIViewGroup_transmitting->Add(Title); + Title->SetVisible(true); + + + if (label_ == nullptr) { + label_ = new UILabel(); + } + label_->SetPosition(60, 281); // widget's left position and top position + label_->Resize(345, 101); // widget's width and height + label_->SetViewId("label2");// Set style + label_->SetStyle(STYLE_TEXT_FONT, 30); + + // Set additional property + label_->SetText("正在传输音乐,请不要做其他操作或关闭手表"); + label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); + label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff)); + label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + label_->SetRollSpeed(0); + label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + + // Add to rootView + UIViewGroup_transmitting->Add(label_); + label_->SetVisible(true); + + CreatetransmittingAnimator(); + // UIViewGroup_transmitting->Add(updatasider); + + UIViewGroup_transmitting->Add(downImageAnimatorView); + } + + void creat_down_MP3_succ() + { + if (Title == nullptr) { + Title = new UILabel(); + } + Title->SetPosition(173, 51); // widget's left position and top position + Title->Resize(800, 88); // widget's width and height + Title->SetViewId("label1");// Set style + Title->SetStyle(STYLE_TEXT_FONT, 30); + + // Set additional property + Title->SetText("传输成功"); + Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + Title->SetRollSpeed(0); + Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + + // Add to rootView + UIViewGroup_transmitting->Add(Title); + Title->SetVisible(true); + + + if (label_ == nullptr) { + label_ = new UILabel(); + } + label_->SetPosition(60, 281); // widget's left position and top position + label_->Resize(345, 101); // widget's width and height + label_->SetViewId("label2");// Set style + label_->SetStyle(STYLE_TEXT_FONT, 30); + + // Set additional property + label_->SetText("音乐传输成功正在校验,请稍等"); + label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); + label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff)); + label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + label_->SetRollSpeed(0); + label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + + + + if (transmitting_img == nullptr) + { + transmitting_img = new UIImageView(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::KUMILOGOImage new fail!"); + } + transmitting_img->SetPosition(193, 150,80, 80); + const char *imagesPath = TRANSMITTING_SUCC_PATH; + transmitting_img->SetSrc(imagesPath); + UIViewGroup_transmitting->Add(transmitting_img); + + uint32_t tick; + osStatus_t retTimer; + if(transmitting_timer!=NULL) + { + osTimerStop(transmitting_timer); + osTimerDelete(transmitting_timer); + transmitting_timer = NULL; + } + transmitting_timer = osTimerNew((osTimerFunc_t)dialtimerCallBack, osTimerPeriodic, NULL, NULL); + tick =2000;// osMs2Tick(1000); + retTimer = osTimerStart(transmitting_timer, tick); + if (retTimer != osOK && transmitting_timer != NULL) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"StartCallTimer osTimerStart failed, ret = %lx!!", retTimer); + osTimerDelete(transmitting_timer); + transmitting_timer = NULL; + return ; + } + + // Add to rootView + UIViewGroup_transmitting->Add(label_); + label_->SetVisible(true); + } @@ -563,6 +682,63 @@ namespace OHOS } + void creat_down_MP3_fail() + { + if (Title == nullptr) { + Title = new UILabel(); + } + Title->SetPosition(173, 51); // widget's left position and top position + Title->Resize(800, 88); // widget's width and height + Title->SetViewId("label1");// Set style + Title->SetStyle(STYLE_TEXT_FONT, 30); + + // Set additional property + Title->SetText("传输失败"); + Title->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); + Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + Title->SetRollSpeed(0); + Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + + // Add to rootView + UIViewGroup_transmitting->Add(Title); + Title->SetVisible(true); + + + if (label_ == nullptr) { + label_ = new UILabel(); + } + label_->SetPosition(60, 281); // widget's left position and top position + label_->Resize(345, 101); // widget's width and height + label_->SetViewId("label2");// Set style + label_->SetStyle(STYLE_TEXT_FONT, 30); + + // Set additional property + label_->SetText("音乐传输失败,请退出或重新安装"); + label_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); + label_->SetTextColor(Color::GetColorFromRGBA(0xAA, 0xAA, 0xAA, 0xff)); + label_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); + label_->SetRollSpeed(0); + label_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30); + + + + if (transmitting_img == nullptr) + { + transmitting_img = new UIImageView(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::KUMILOGOImage new fail!"); + } + transmitting_img->SetPosition(193, 150,80, 80); + const char *imagesPath = TRANSMITTING_FAIL_PATH; + transmitting_img->SetSrc(imagesPath); + UIViewGroup_transmitting->Add(transmitting_img); + + // Add to rootView + UIViewGroup_transmitting->Add(label_); + label_->SetVisible(true); + + + + } @@ -599,6 +775,16 @@ namespace OHOS case TRANS_OTA_FAIL: creat_down_OTA_FAIL(); break; + case TRANS_MP3_TRANSMITTING: + creat_down_MP3(); + break; + case TRANS_MP3_SUCC: + creat_down_MP3_succ(); + break; + case TRANS_MP3_FAIL: + creat_down_MP3_fail(); + break; + default: break; } @@ -638,7 +824,7 @@ namespace OHOS bool transmittingViewEventListener::OnClick(UIView& view, const ClickEvent& event) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnClick"); - if(Transmitting_falg!=TRANS_DIAL_TRANSMITTING && Transmitting_falg!=TRANS_OTA_TRANSMITTING) + if(Transmitting_falg!=TRANS_DIAL_TRANSMITTING && Transmitting_falg!=TRANS_OTA_TRANSMITTING && Transmitting_falg!=TRANS_MP3_TRANSMITTING) { NotificationManager::GetInstance()->StopNotify(); } diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.c b/code/sdk/drivers/peripheral/utils/custom_utils.c index c2498e05d..2571b9337 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