From: SnickerSun Date: Wed, 17 Apr 2024 01:30:02 +0000 (+0800) Subject: 优化蓝牙bleservice和alipay service之间切换逻辑、支付宝启动屏幕常亮 X-Git-Tag: release_V1.2.70_20241020_135402~1181 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=50897bc44150690e07ca1cf6c2e26a7cd62d064a;p=mirrors%2FFD230.git 优化蓝牙bleservice和alipay service之间切换逻辑、支付宝启动屏幕常亮 --- diff --git a/code/sdk/application/brandy/brandy_standard/thread_pri_init.c b/code/sdk/application/brandy/brandy_standard/thread_pri_init.c index 4b14ac0c8..fec0bbc7b 100755 --- a/code/sdk/application/brandy/brandy_standard/thread_pri_init.c +++ b/code/sdk/application/brandy/brandy_standard/thread_pri_init.c @@ -369,15 +369,6 @@ static void thread_main(const void *unused) uapi_cywee_service_init(); #endif -#ifdef SUPPORT_BLE_SERVICE - if(start_ble_service_on_bootup_flag()) - { - PRINT("start custom protocol classic bt ble service !\r\n"); - openBle(); - - } -#endif - #ifdef SUPPORT_ALIPAY_SEC uapi_alipay_svr_init(); #endif diff --git a/code/sdk/application/wearable/alipay/driver_adapt/vendor_product.c b/code/sdk/application/wearable/alipay/driver_adapt/vendor_product.c index 14528886e..6f74fe914 100755 --- a/code/sdk/application/wearable/alipay/driver_adapt/vendor_product.c +++ b/code/sdk/application/wearable/alipay/driver_adapt/vendor_product.c @@ -101,6 +101,7 @@ csi_error_t csi_get_sn(uint8_t *buf_sn, uint32_t *len_sn) return CSI_ERROR; } +#if 1 bd_addr_t addr_info; gap_ble_get_local_addr(&addr_info); char str[18] = {0}; @@ -111,7 +112,11 @@ csi_error_t csi_get_sn(uint8_t *buf_sn, uint32_t *len_sn) #endif *len_sn = strlen(str); memcpy(buf_sn, str, strlen(str)); - +#else + const char *mock_sn = ""; + *len_sn = strlen(mock_sn); + memcpy(buf_sn, mock_sn, strlen(mock_sn)); +#endif return CSI_OK; } diff --git a/code/sdk/application/wearable/alipay/service/alipay_bluetooth.c b/code/sdk/application/wearable/alipay/service/alipay_bluetooth.c index 101e021db..1653ff279 100644 --- a/code/sdk/application/wearable/alipay/service/alipay_bluetooth.c +++ b/code/sdk/application/wearable/alipay/service/alipay_bluetooth.c @@ -61,7 +61,8 @@ static void svr_alipay_ble_adv_data_set(int adv_id) memset_s(&adv_data_info, sizeof(gap_ble_config_adv_data_t), 0, sizeof(gap_ble_config_adv_data_t)); int32_t ret = gap_ble_get_local_name(ble_name, &ble_name_len); - if (ret != 0) { + if (ret != 0) + { ALIPAY_PRINT_ERR(0, "gap_ble_get_local_name fail, name:%s,len:%u,ret:%u.", ble_name, ble_name_len, ret); memset_s(ble_name, ALIPAY_BLE_NAME_LENGTH, 0, ALIPAY_BLE_NAME_LENGTH); memcpy_s(ble_name, ALIPAY_BLE_NAME_LENGTH, ALIPAY_BLE_DEFAULT_NAME, ALIPAY_BLE_DEFAULT_NAME_LEN); @@ -98,10 +99,10 @@ static void svr_alipay_ble_adv_data_set(int adv_id) memcpy_s(adv_data + adv_data_len, sizeof(adv_mac_head), adv_mac_head, sizeof(adv_mac_head)); adv_data_len = adv_data_len + sizeof(adv_mac_head); - uint8_t scan_data[20]; - memset(scan_data,0,20); - adv_data_info.scan_rsp_data = scan_data; - adv_data_info.scan_rsp_length = 0; +// uint8_t scan_data[20]; +// memset(scan_data,0,20); +// adv_data_info.scan_rsp_data = scan_data; +// adv_data_info.scan_rsp_length = 0; adv_data_info.adv_data = adv_data; adv_data_info.adv_length = adv_data_len; ALIPAY_PRINT_ERR(0, "adv_data_info.adv_length:%u.", adv_data_len); @@ -138,7 +139,7 @@ void svr_alipay_ble_adv_start(void) } ALIPAY_PRINT_ERR(0, "svr_alipay_ble_adv_start bt gap_ble_start_adv ret = 0x%x", ret); } -extern void svr_alipay_reset_init(void); +// extern void svr_alipay_reset_init(void); static void svr_alipay_ble_connstate_change_cb(unsigned short conn_id, bd_addr_t *addr, gap_ble_conn_state_t conn_state, gap_ble_pair_state_t pair_state, gap_ble_disc_reason_t disc_reason) @@ -147,9 +148,9 @@ static void svr_alipay_ble_connstate_change_cb(unsigned short conn_id, bd_addr_t conn_state, pair_state); g_alipay_conn_id = conn_id; if (GAP_BLE_STATE_DISCONNECTED == conn_state) { // restart ble adv when disconnected - // svr_alipay_ble_adv_start(); - svr_alipay_reset_init(); - // gap_ble_start_adv(ALIPAY_BLE_ADV_ID); + svr_alipay_ble_adv_start(); + // svr_alipay_reset_init(); + //gap_ble_start_adv(ALIPAY_BLE_ADV_ID); } else { svr_alipay_set_adv_start_state(false); } @@ -170,11 +171,11 @@ static void svr_alipay_ble_adv_stop_cb(uint8_t adv_id, adv_status_t status) { ALIPAY_PRINT_DEBUG(0, "BleAdvStopCallback adv_id: %d, status:%d\n", adv_id, status); } -static uint16_t alipay_server_handle = 0; +// static uint16_t alipay_server_handle = 0; static void svr_alipay_bt_gatts_service_add_cb(uint8_t server_id, bt_uuid_t *uuid, uint16_t srv_handle, errcode_t status) { - alipay_server_handle = srv_handle; + // alipay_server_handle = srv_handle; ALIPAY_PRINT_DEBUG(0, "BtGattsServiceAddCallback 0x%x 0x%x 0x%x 0x%x", status, server_id, srv_handle, *((uint16_t *)uuid->uuid)); int ret; @@ -299,7 +300,7 @@ void svr_alipay_bt_gatts_noyify(uint8_t *data, uint16_t data_len) ALIPAY_PRINT_ERR(0, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.", ret, g_alipay_server_id, g_alipay_conn_id, g_alipay_server_handle); } -extern void srv_ble_gap_register_cb(void); + static void svr_alipay_btcallback_reg(void) { g_alipay_gapble_cbs.conn_state_change_cb = svr_alipay_ble_connstate_change_cb; @@ -332,7 +333,7 @@ static void svr_alipay_bt_init_gatts(void) memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&service_id, sizeof(service_id)); ret = gatts_register_server(&uuid, &server_id); /* 注册gatt server */ if (ret != ERRCODE_SUCC) { - // ALIPAY_PRINT_ERR(0, "gatts_register_server err ret:%u.\r\n", ret); + ALIPAY_PRINT_ERR(0, "gatts_register_server ret:%u.\r\n", ret); } ALIPAY_PRINT_ERR(0, "gatts_register_server ret: 0x%x server_id = 0x%x", ret, server_id); g_alipay_server_id = server_id; @@ -340,51 +341,35 @@ static void svr_alipay_bt_init_gatts(void) memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&service_id, sizeof(service_id)); ret = gatts_add_service(server_id, &uuid, true); if (ret != ERRCODE_SUCC) { - + //ALIPAY_PRINT_ERR(0, "gatts_add_service ret:%u.\r\n", ret); } ALIPAY_PRINT_ERR(0, "gatts_add_service ret:%u.\r\n", ret); return; } void alipay_unregist_server(void) { + svr_alipay_ble_adv_stop(); gatts_delete_all_services(g_alipay_server_id); gatts_unregister_server(g_alipay_server_id); - svr_alipay_ble_adv_stop(); + g_alipay_ble_init_flag = false; + g_alipay_server_id = 1; + g_alipay_server_handle = 0; + g_alipay_conn_id = 0; } -#ifdef SUPPORT_BLE_SERVICE -extern void ble_unregist_server(void); -#endif void svr_alipay_bluetooth_init(void) { - #ifdef SUPPORT_BLE_SERVICE - ble_unregist_server(); - #endif - disable_bt_stack(); - svr_alipay_ble_adv_stop(); - osDelay(100); bool ret = enable_bt_stack(); if (ret != ERRCODE_SUCC) { ALIPAY_PRINT_ERR(0, "enable_bt_stack ret:%u.\r\n", ret); } - // if (g_alipay_ble_init_flag == true) { - // return; - // } + if (g_alipay_ble_init_flag == true) { + return; + } svr_alipay_btcallback_reg(); svr_alipay_bt_init_gatts(); svr_alipay_ble_adv_start(); g_alipay_ble_init_flag = true; return; } -void svr_alipay_reset_init(void)//重新启动alipa的服务 -{ - #ifdef SUPPORT_BLE_SERVICE - ble_unregist_server(); - #endif - osDelay(100); - svr_alipay_btcallback_reg(); - svr_alipay_bt_init_gatts(); - svr_alipay_ble_adv_start(); - return; -} #endif \ No newline at end of file diff --git a/code/sdk/application/wearable/alipay/service/alipay_feature.c b/code/sdk/application/wearable/alipay/service/alipay_feature.c index f22d366a9..d4d435d02 100755 --- a/code/sdk/application/wearable/alipay/service/alipay_feature.c +++ b/code/sdk/application/wearable/alipay/service/alipay_feature.c @@ -69,18 +69,17 @@ static mc_payment_state_t svr_alipay_get_paystate(void) { return PAYMENT_UNSUPPORTED; } -extern void svr_alipay_reset_init(void); +// extern void svr_alipay_reset_init(void); static int32_t svr_alipay_notify_bt(bool value) { if (value) { printf("svr_alipay_notify_bt true:%d",value); - svr_alipay_bluetooth_init(); + + svr_alipay_ble_adv_start(); } else { printf("svr_alipay_notify_bt false:%d",value); - #ifdef SUPPORT_BLE_SERVICE - svr_bluetooth_init(); - #endif - // svr_alipay_ble_adv_stop(); + + svr_alipay_ble_adv_stop(); } return 0; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/alipay/src/AlipayModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/alipay/src/AlipayModel.cpp index b169557ac..3b83d609d 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/alipay/src/AlipayModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/alipay/src/AlipayModel.cpp @@ -585,10 +585,12 @@ void AlipayModel::AlipayScreenControl(bool turnOnFlag) if(turnOnFlag) { const power_display_svr_api_t *display_api = power_display_svr_get_api(); + display_api->set_screen_set_keepon_timeout(0); if (display_api->get_screen_state() != SCREEN_ON) { display_api->turn_on_screen(); } + LOS_Msleep(50); //当设置的值是-1 的时候,设置屏幕常亮 display_api->set_screen_set_keepon_timeout(-1); } diff --git a/code/sdk/application/wearable/fd230app/nativeui/alipay/src/AlipayPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/alipay/src/AlipayPresenter.cpp index 4e6faae58..388d10f9f 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/alipay/src/AlipayPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/alipay/src/AlipayPresenter.cpp @@ -18,7 +18,8 @@ #include "AlipayListItemView.h" #include "AlipayTransListItemView.h" #include "AlipayTransListView.h" - +#include "custom_utils.h" +#include "common/key_code.h" namespace OHOS { static AlipayPresenter *g_alipayPresenter = nullptr; @@ -49,7 +50,8 @@ void AlipayPresenter::OnStart() { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlipayPresenter OnStart"); Presenter::OnStart(); - + /**启动alipay蓝牙服务*/ + start_alipay_ble_service(); /* -------------------------------- 设置支付宝界面常亮 ------------------------------- */ alipayMode_->AlipayScreenControl(true); /* -------------------------------------------------------------------------- */ @@ -69,6 +71,10 @@ void AlipayPresenter::OnResume(void) {} void AlipayPresenter::OnStop(void) { + + /**关闭alipay蓝牙服务*/ + stop_alipay_ble_service(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlipayPresenter OnStop"); svr_alipay_destroy_task(); alipayMode_->AlipayDeinitModel(); @@ -421,8 +427,9 @@ bool AlipayPresenter::OnKeyAct(UIView &view, const KeyEvent &event) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlipayPresenter::OnKeyAct"); uint16 keyID = event.GetKeyId(); + uint16_t keyState = event.GetState(); // 如果是power键就返回上一级 - if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER)) + if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0) { uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId(); NativeAbility::GetInstance().ChangeSlice(preSlice); diff --git a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp index 9ec56c47a..411616bd4 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp @@ -77,17 +77,29 @@ BluetoothModel *BluetoothModel::GetInstance(void) void BluetoothModel::Init() { - // bool ret = enable_bt_stack(); - // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt enable_bt_stack ret = %d", ret); - BtInitCallBacks(); +/** + * 由于 是否开启蓝牙,并不确认,需要根据客户选择来执行, + * 因此此处只做 基本数据的初始化,以及某些不会变动的 callback函数注册 + */ +#if 0 + bool ret = enable_bt_stack(); + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt enable_bt_stack ret = %d", ret); + //gatt ble 信息在 支付宝和私有 ble协议中都会用到,因此在对应的应用里进行初始化。 #ifdef SUPPORT_ALIPAY_SEC - // svr_alipay_bluetooth_init(); + svr_alipay_bluetooth_init(); #else BtInitCallBacksEx(); BtInitGatts(); #endif - BtInitSpp(); + +#endif + + /**初始化 经典蓝牙callback 经典蓝牙不改动,因此启动就初始化好 */ + BtInitCallBacks(); + + /**启动spp服务 */ + // BtInitSpp(); SetUpListCase(); SetUpConnedDevicesList(); @@ -1164,7 +1176,6 @@ static a2dp_snk_callbacks_t g_a2dp_snk_callbacks = { void BtInitCallBacks() { - #if 0 g_btGapCallBacks.discovery_result_callback = BtGapDiscoveryResultCallback; g_btGapCallBacks.discovery_state_changed_callback = BtGapDiscoveryStateChangedCallback; g_btGapCallBacks.acl_state_changed_callbak = GapAclStateChangedCallback; @@ -1180,15 +1191,12 @@ void BtInitCallBacks() g_a2dpSrcCallbacks.configuration_changed_cb = A2dpSrcConfigureChanged; g_a2dpSrcCallbacks.playing_state_changed_cb = A2dpSrcPlayingStateChanged; a2dp_src_register_callbacks(&g_a2dpSrcCallbacks); - #endif - /* a2dp sink */ - // a2dp_snk_register_callbacks(&g_a2dp_snk_callbacks); + a2dp_snk_register_callbacks(&g_a2dp_snk_callbacks); } void BtInitCallBacksEx() { - #if 0 g_gapBleCallbacks.conn_state_change_cb = BleConnStateChangeCallback; g_gapBleCallbacks.start_adv_cb = BleAdvStartCallback; g_gapBleCallbacks.stop_adv_cb = BleAdvStopCallback; @@ -1204,12 +1212,10 @@ void BtInitCallBacksEx() g_btGattsCallbacks.write_request_cb = BtGattsRequestWriteCallback; g_btGattsCallbacks.mtu_changed_cb = NULL; gatts_register_callbacks(&g_btGattsCallbacks); - #endif } void BtInitGatts(void) { - #if 0 uint16_t id = BLE_SERVICE_UUID; uint16_t ser_id = 0x1FFF; uint8_t serverId = 0; @@ -1225,7 +1231,6 @@ void BtInitGatts(void) memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&id, sizeof(id)); ret = gatts_add_service(serverId, &uuid, true); WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_add_service ret: 0x%x", ret); - #endif } static uint8_t Char2Num(int8_t c) diff --git a/code/sdk/application/wearable/fd230app/nativeui/classicbluetooth/src/ClassicBlueToothPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/classicbluetooth/src/ClassicBlueToothPresenter.cpp index 75bcee212..a10e505cc 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/classicbluetooth/src/ClassicBlueToothPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/classicbluetooth/src/ClassicBlueToothPresenter.cpp @@ -124,17 +124,13 @@ namespace OHOS ConfigModel::GetInstance()->set_condigData_Bool(ConfigModel::ConfigItem::CONFIGMODEL_ITEM_CLASSIC_BT_SERVICE_ON,true); - #ifdef SUPPORT_BLE_SERVICE - openBle();//主动开启蓝牙 - #endif + start_custom_ble_service();//主动开启蓝牙 break; case UICheckBox::UNSELECTED: WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BlueTooth Capability Is Disabled"); ConfigModel::GetInstance()->set_condigData_Bool(ConfigModel::ConfigItem::CONFIGMODEL_ITEM_CLASSIC_BT_SERVICE_ON,false); - #ifdef SUPPORT_BLE_SERVICE - closeBle(); - #endif + stop_custom_ble_service(); break; default: break; diff --git a/code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModelC.h b/code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModelC.h index 202183bb1..845fb9e82 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModelC.h +++ b/code/sdk/application/wearable/fd230app/nativeui/config/include/ConfigModelC.h @@ -16,7 +16,7 @@ uint32_t ConfigModelInit(void); /*** * 蓝牙服务是否开启 */ -bool start_ble_service_on_bootup_flag(void); +bool custom_ble_service_on_flag(void); /*** * Cat1服务是否开启 */ diff --git a/code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp index 06ae02741..cf522e3ea 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/config/src/ConfigModel.cpp @@ -712,7 +712,7 @@ uint32_t ConfigModelInit(void) /*** * 蓝牙服务是否开启 */ -bool start_ble_service_on_bootup_flag(void) +bool custom_ble_service_on_flag(void) { return OHOS::ConfigModel::GetInstance()->GetClassicBlueToothState(); } diff --git a/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemView.cpp b/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemView.cpp index 6bae1589d..c52e0c9fe 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemView.cpp @@ -4,7 +4,6 @@ #include "bleService.h" #include "battery_hal.h" extern uint8_t battery_get_voltage(float *voltage); -extern void openBle(void); namespace OHOS { diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c index af60f704f..5d9f92435 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c @@ -85,7 +85,7 @@ static bool g_ble_init_flag = false; static const uint8_t ble_adv_type[BLE_ADV_TYPE_LENTH] = {2, 1, 2}; static const uint8_t ble_adv_uuid[BLE_ADV_UUID_LENTH] = {0x3, 0x3, 0xe0, 0x18}; static const uint8_t ble_adv_tx[4] = {0x03,0x03,0xe0,0x18}; -static bool AdverFlag = true; +static bool AdverFlag = false; static uint8_t scan_data[BLE_SCAN_MAC_LENTH] = {0}; @@ -806,7 +806,11 @@ static void svr_ble_bt_gatts_req_write_cb(uint8_t server_id, uint16_t conn_id, g { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_ble_server_handle %d conn_id :%d write_cb_para->length:%d write_cb_para->handle %d write_cb_para->request_id:%d",g_ble_server_handle,conn_id,write_cb_para->length, write_cb_para->handle,write_cb_para->request_id); - + for(uint16_t i = 0;ilength;i++) + { + printf("%x ",write_cb_para->value[i]); + + } //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"handle :%d %d %d".write_cb_para->handle,get_factory_ate_write_handl(),get_factory_ota_write_handl()); if (write_cb_para->handle == get_factory_ate_write_handl()) { @@ -816,11 +820,6 @@ static void svr_ble_bt_gatts_req_write_cb(uint8_t server_id, uint16_t conn_id, g { factory_recv_ota_data(write_cb_para->value,write_cb_para->length,write_cb_para->handle); }else{ - for(uint16_t i = 0;ilength;i++) - { - printf("%02x ",write_cb_para->value[i]); - - } revBleOldData(write_cb_para->value,write_cb_para->length,write_cb_para->handle); } } @@ -1221,23 +1220,23 @@ bool ble_gatts_cmp_uuid(const bt_uuid_t *tgt_uuid, const bt_uuid_t *src_uuid)// extern void alipay_unregist_server(void); void ble_unregist_server(void) { + svr_ble_adv_stop(); gatts_delete_all_services(g_ble_server_id); gatts_unregister_server(g_ble_server_id); - svr_ble_adv_stop(); } -void svr_ble_reset_init(void)//重新启ble服务 -{ - alipay_unregist_server(); - osDelay(100); - svr_ble_btcallback_reg(); - svr_ble_bt_init_gatts(); - ble_hid_server_init(); - ble_factory_server_init(); - svr_ble_adv_start_param(); -} - -void svr_bluetooth_init(void) +// void svr_ble_reset_init(void)//重新启ble服务 +// { +// alipay_unregist_server(); +// osDelay(100); +// svr_ble_btcallback_reg(); +// svr_ble_bt_init_gatts(); +// ble_hid_server_init(); +// ble_factory_server_init(); +// svr_ble_adv_start_param(); +// } + +static void svr_bluetooth_init(void) { bool ret = enable_bt_stack(); // bool ret = enable_ble(); @@ -1276,9 +1275,14 @@ void closeBle(void) // ret = gap_ble_remove_all_pairs();//删除和所有配对的手机app // gap_remove_all_pairs(); svr_ble_adv_stop();//停止广播 不发送广播数据 就是app搜索不到该设备了 - // ret = disable_bt_stack();//关闭ble 直接断开和当前连接的手机app - ret = disable_ble();//关闭ble 直接断开和当前连接的手机app + + ble_recv_register_msg_callback(NULL); + ret = disable_bt_stack();//关闭ble 直接断开和当前连接的手机app + // ret = disable_ble();//关闭ble 直接断开和当前连接的手机app WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "closeBle ret%d 0x%x-0x%x-0x%x-0x%x-0x%x-0x%x\r\n",ret,bd_addr.addr[0],bd_addr.addr[1],bd_addr.addr[2],bd_addr.addr[3],bd_addr.addr[4],bd_addr.addr[5]); + }else{ + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AdverFlag false no need closeBle\r\n"); + } } //开启蓝牙 @@ -1289,6 +1293,9 @@ void openBle(void) { AdverFlag = true; svr_bluetooth_init(); + }else{ + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AdverFlag true no need openBle again\r\n"); + } } #endif diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.h b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.h index 742b767ea..c0a877cbe 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.h +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.h @@ -20,7 +20,7 @@ extern uint8_t devpair_state; extern uint8_t data2ae3Cmd;//2ae3短指令特征值 extern uint8_t data2ae4Cmd;//长指令特征值 大于20个字节的数据app下发的 extern uint16_t ble_nus_max_data_len; -void svr_bluetooth_init(void);//蓝牙服务初始化 +// void svr_bluetooth_init(void);//蓝牙服务初始化 void closeBle(void);//主动关闭蓝牙 void openBle(void);//主动开启蓝牙 void svr_ble_adv_start_param(void);//开始蓝牙广播 diff --git a/code/sdk/drivers/chips/brandy/porting/uart/uart_porting.c b/code/sdk/drivers/chips/brandy/porting/uart/uart_porting.c index b0905ba5c..d2203a1b0 100755 --- a/code/sdk/drivers/chips/brandy/porting/uart/uart_porting.c +++ b/code/sdk/drivers/chips/brandy/porting/uart/uart_porting.c @@ -56,6 +56,12 @@ #define UARTRESET (M_CTL_RB_BASE + 0x0168) #define UARTBUS0 0x1 #define UARTBUS1 0x0 + +/** + * CUSTOM_UART_RATE = 500000 可以看蓝牙日志 + * 2000000 可以加快下载文件速度 +*/ +#define CUSTOM_UART_RATE 2000000 typedef struct { pin_mode_t tx_pin_mode; pin_mode_t rx_pin_mode; @@ -184,7 +190,7 @@ static uart_config_t g_uart_config[UART_BUS_MAX_NUMBER] = { #ifdef ENABLE_SLIP .baud_rate = 921600, #else - .baud_rate = 2000000, + .baud_rate = CUSTOM_UART_RATE, #endif .data_bits = UART_DATA_BIT_8, .parity = UART_PARITY_NONE, @@ -225,7 +231,7 @@ static uart_config_t g_uart_config[UART_BUS_MAX_NUMBER] = { log_factory_at_callback, #endif { - .baud_rate = 2000000, + .baud_rate = CUSTOM_UART_RATE, .data_bits = UART_DATA_BIT_8, .parity = UART_PARITY_NONE, .stop_bits = UART_STOP_BIT_1, diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.c b/code/sdk/drivers/peripheral/utils/custom_utils.c index cce9b2285..b55ff2a00 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils.c +++ b/code/sdk/drivers/peripheral/utils/custom_utils.c @@ -123,6 +123,12 @@ void uapi_reboot_device(void) { mcu_os_sys_reset(NULL,NULL); } + +void shutdown_reboot_prejobs_task(void) +{ + uapi_calendar_store_date(); + sync_all_config_to_disk(); +} static bool doing_shutdown_or_reboot = false; void shutdown_reboot_prejobs(void) { @@ -132,7 +138,7 @@ void shutdown_reboot_prejobs(void) taskcfg.attr.name="shutdown_reboot_prejobs"; taskcfg.attr.priority = osPriorityNormal; taskcfg.attr.stack_size = 0x1000; - taskcfg.func = sync_all_config_to_disk; + taskcfg.func = shutdown_reboot_prejobs_task; taskcfg.use_mem = USE_EXTEND_MEM; errcode_t ret=uapi_create_osThread_custom(&taskcfg); @@ -202,6 +208,8 @@ void startup_post_init_task(void) { PRINT("startup_post_init_task !\r\n"); + uapi_calendar_recover_date(); + if(custom_ble_service_on_flag()) { start_custom_ble_service(); @@ -293,7 +301,7 @@ errcode_t uapi_get_timestampe_ms(uint64_t *tm) static uint32_t get_sec_time_from_cat1time(char* time , uint32_t *second , uint8_t *zone) { - struct tm tm = { 0 }; + struct tm _tm = { 0 }; char* ptr = time; char* tmp; @@ -311,8 +319,8 @@ static uint32_t get_sec_time_from_cat1time(char* time , uint32_t *second , uint8 if (tmp == NULL) { return 1; } *tmp = '\0'; // 年的计算需要减去1900 - tm.tm_year = strtol(ptr, NULL, DECIMAL) - 1900; - if (tm.tm_year < TIME_YEAR_OFFSET) { + _tm.tm_year = strtol(ptr, NULL, DECIMAL) - 1900; + if (_tm.tm_year < TIME_YEAR_OFFSET) { printf("ERR!year num must bigger than 1970!"); return 3; } @@ -325,7 +333,7 @@ static uint32_t get_sec_time_from_cat1time(char* time , uint32_t *second , uint8 if (tmp == NULL) { return 1; } *tmp = '\0'; // 月的计算需要减1 - tm.tm_mon = strtol(ptr, NULL, DECIMAL) - 1; + _tm.tm_mon = strtol(ptr, NULL, DECIMAL) - 1; ptr = tmp + 1; // 日 @@ -333,7 +341,7 @@ static uint32_t get_sec_time_from_cat1time(char* time , uint32_t *second , uint8 tmp = strchr(ptr, ','); if (tmp == NULL) { return 1; } *tmp = '\0'; - tm.tm_mday = strtol(ptr, NULL, DECIMAL); + _tm.tm_mday = strtol(ptr, NULL, DECIMAL); ptr = tmp + 1; // 时 @@ -341,7 +349,7 @@ static uint32_t get_sec_time_from_cat1time(char* time , uint32_t *second , uint8 tmp = strchr(ptr, ','); if (tmp == NULL) { return 1; } *tmp = '\0'; - tm.tm_hour = strtol(ptr, NULL, DECIMAL); + _tm.tm_hour = strtol(ptr, NULL, DECIMAL); ptr = tmp + 1; // 分 @@ -349,7 +357,7 @@ static uint32_t get_sec_time_from_cat1time(char* time , uint32_t *second , uint8 tmp = strchr(ptr, ','); if (tmp == NULL) { return 1; } *tmp = '\0'; - tm.tm_min = strtol(ptr, NULL, DECIMAL); + _tm.tm_min = strtol(ptr, NULL, DECIMAL); ptr = tmp + 1; // 秒 @@ -357,7 +365,7 @@ static uint32_t get_sec_time_from_cat1time(char* time , uint32_t *second , uint8 tmp = strchr(ptr, ','); if (tmp == NULL) { return 1; } *tmp = '\0'; - tm.tm_sec = strtol(ptr, NULL, DECIMAL); + _tm.tm_sec = strtol(ptr, NULL, DECIMAL); ptr = tmp + 1; //毫秒 @@ -372,10 +380,10 @@ static uint32_t get_sec_time_from_cat1time(char* time , uint32_t *second , uint8 //时区 if ( *ptr == ' ') { ptr = ptr + 1; } *zone = strtol(ptr, NULL, DECIMAL); - *second = (uint32_t)__tm_to_secs(&tm); + *second = (uint32_t)__tm_to_secs(&_tm); *second -= *zone * 3600; //cat1获得的时间时当下时间,实际上要减去zone的时间 - // printf("%04d-%02d-%02d %02d:%02d:%02d %d\n",tm.tm_year,tm.tm_mon,tm.tm_mday,tm.tm_hour,tm.tm_min,tm.tm_sec,*zone); + // printf("%04d-%02d-%02d %02d:%02d:%02d %d\n",_tm.tm_year,_tm.tm_mon,_tm.tm_mday,_tm.tm_hour,_tm.tm_min,_tm.tm_sec,*zone); return 0; } errcode_t uapi_set_time_from_cat1(char* cat1time) @@ -1283,5 +1291,61 @@ int enter_recovery(void) //upg_reboot(); } +#include "driver/calendar.h" + +uint32_t uapi_calendar_store_date(void) +{ + + calendar_t date; + + time_t rawtime; + struct tm* timeinfo; + time(&rawtime); + timeinfo = localtime(&rawtime); + date.year = timeinfo->tm_year + 1900; + date.mon = timeinfo->tm_mon + 1; + date.day = timeinfo->tm_mday; + date.hour = timeinfo->tm_hour; + date.min = timeinfo->tm_min; + date.sec = timeinfo->tm_sec; + + errcode_t ret = uapi_calendar_set_datetime(&date); + if (ret == ERRCODE_SUCC) { + printf("store datetime success: %d-%d-%d %d:%d:%d\r\n", date.year, date.mon, date.day, date.hour, date.min, + date.sec); + return ERRCODE_SUCC; + } + printf("Set datetime failed, error code = %d \r\n", ret); + return ret; +} + +uint32_t uapi_calendar_recover_date(void) +{ + calendar_t date; + errcode_t ret = uapi_calendar_get_datetime(&date); + if (ret == ERRCODE_SUCC) { + printf("Get datetime success: %d-%d-%d %d:%d:%d\r\n", date.year, date.mon, date.day, date.hour, date.min, + date.sec); + + {//设置时间 + struct timeval tv = { 0 }; + struct tm _tm={0}; + _tm.tm_year = date.year -1900; + _tm.tm_mon = date.mon -1; + _tm.tm_mday = date.day; + _tm.tm_hour = date.hour; + _tm.tm_min = date.min; + _tm.tm_sec = date.sec; + uint32_t sec = (uint32_t)__tm_to_secs(&_tm); + tv.tv_sec = sec; + tv.tv_usec = 0; + settimeofday(&tv, NULL); + } + + return ERRCODE_SUCC; + } + printf("Get datetime failed, error code = %d \r\n", ret); + return ret; +} diff --git a/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c b/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c index 16b87408e..0d31d7ab5 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c +++ b/code/sdk/drivers/peripheral/utils/custom_utils_at_cmd.c @@ -145,30 +145,45 @@ static uint32_t custom_start_ota_download(uint8_t *para, uint32_t paraLen, char return ERRCODE_SUCC; } -// static uint32_t custom_vibrator_swtich(uint8_t *para, uint32_t paraLen, char *strCommonCmd) -// { -// UNUSED(strCommonCmd); +static uint32_t custom_dsp_power_test(uint8_t *para, uint32_t paraLen, char *strCommonCmd) +{ + UNUSED(strCommonCmd); + + uint8_t argv[CUSTOM_UTILS_MAX_ARGC][CUSTOM_UTILS_MAX_ARGV_LEN] = { 0 }; + uint32_t argc = 0; -// uint8_t argv[CUSTOM_UTILS_MAX_ARGC][CUSTOM_UTILS_MAX_ARGV_LEN] = { 0 }; -// uint32_t argc = 0; + int ret = ConvertCmdToParam(para, paraLen, argv, &argc); + if (ret != CUSTOM_UTILS_SUCCESS) { + PRINT("CUSTOM_UTILSTEST ATCMD Convert Command Failed\n"); + return ERRCODE_FAIL; + } -// int ret = ConvertCmdToParam(para, paraLen, argv, &argc); -// if (ret != CUSTOM_UTILS_SUCCESS) { -// PRINT("CUSTOM_UTILSTEST ATCMD Convert Command Failed\n"); -// return ERRCODE_FAIL; -// } + if (argc != 1) { + PRINT("CUSTOM_UTILSTEST power_test ATCMD Set Parameter Failed argc %d\r\nPM_DSP_POWER_UP_AND_RUN=2 PM_DSP_POWER_OFF=3\r\n",argc); + return ERRCODE_FAIL; + } -// if (argc != 1) { -// PRINT("CUSTOM_UTILSTEST ATCMD Set Parameter Failed argc %d\n",argc); -// return ERRCODE_FAIL; -// } -// uint8_t cmd = atoi((char*)argv[0]); + uint8_t cmd = atoi((char*)argv[0]); -// Vibrator_swtich(cmd); + if (cmd == 2 ) + { + PRINT("PM_DSP_POWER_UP_AND_RUN=2\r\n",argc); + uapi_pm_control(PM_DSP_POWER_UP_AND_RUN); + + }else if (cmd ==3 ){ + PRINT("PM_DSP_POWER_OFF=3\r\n",argc); + uapi_pm_control(PM_DSP_POWER_OFF); + }else if (cmd ==0 ){ + errcode_t ret = gap_ble_stop_scan(); + PRINT("gap_ble_stop_scan ret %x\r\n",ret); + }else{ + PRINT("arguments only support PM_DSP_POWER_UP_AND_RUN: 2 or PM_DSP_POWER_OFF: 3\r\n"); + } + -// return ERRCODE_SUCC; -// } + return ERRCODE_SUCC; +} static uint32_t custom_lcd_getid(uint8_t *para, uint32_t paraLen, char *strCommonCmd) { @@ -349,11 +364,10 @@ static uint32_t custom_bleservice_test(uint8_t *para, uint32_t paraLen, char *st if (_switch == 1) { - openBle(); + start_custom_ble_service(); }else{ - ble_unregist_server(); - closeBle(); - } + stop_custom_ble_service(); + } return ERRCODE_SUCC; } @@ -392,6 +406,7 @@ static const at_cmd_table_t g_custom_utils_cmd[] = { { (char *)"AT^GETTP", custom_get_tpinfo, (char *)" " }, { (char *)"AT^BLESERVICE", custom_bleservice_test, (char *)" " }, + { (char *)"AT^DSPPWR", custom_dsp_power_test, (char *)" " }, };