From: SnickerSun Date: Fri, 19 Apr 2024 01:04:35 +0000 (+0800) Subject: 1、由于插vbus重启无法检测vbus存在,临时取消关闭充电的步骤。 X-Git-Tag: release_V1.2.70_20241020_135402~1171^2~2^2 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=refs%2Fchanges%2F48%2Fhead;p=mirrors%2FFD230.git 1、由于插vbus重启无法检测vbus存在,临时取消关闭充电的步骤。 2、更新邓工的蓝牙相关提交,alipay和bleService共存。 3、启动常亮时间从25秒改为15秒 --- diff --git a/code/sdk/application/battery/service/battery_service.cpp b/code/sdk/application/battery/service/battery_service.cpp index da743245a..b34d46d4e 100644 --- a/code/sdk/application/battery/service/battery_service.cpp +++ b/code/sdk/application/battery/service/battery_service.cpp @@ -63,6 +63,13 @@ errcode_t uapi_battery_init(void); #include "button_porting.h" #include "battery_service.h" + +/** + * 临时性去除充电禁止能力,待海思更新 充电线静态检测能力再回复。 + * 否则会产生插着充电线重启后,无法继续充电的问题。 +*/ +#define DISABLE_VBUS_CHECK + osTimerId_t g_battery_timer = NULL; // static bool g_bat_timer_is_running = false; @@ -171,8 +178,7 @@ static void battery_check_chargement(void) //获取电池温度 batteryservice_get_battery_temp(&bat_temp); - if(get_charge_stat() == 1){ - + #ifdef DISABLE_VBUS_CHECK PRINT("charging enable charge ! bat-temp %.2f Vs highest temp value %.2f !\n",bat_temp,BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE); /** * 如果充电过程中,电池温度>=BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE,则停止充电 @@ -209,28 +215,70 @@ static void battery_check_chargement(void) } // PRINT("%d\r\n",BATTERY_VOLTAGE_DEBOUNCE); } + #else + if(get_charge_stat() == 1) + { + + PRINT("charging enable charge ! bat-temp %.2f Vs highest temp value %.2f !\n",bat_temp,BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE); + /** + * 如果充电过程中,电池温度>=BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE,则停止充电 + * 否则按正常流程充电 + */ - }else{ - //冗余操作,理论上不必在此关闭充电IC - PRINT("charger not plugged ,disable charge !\r\n"); + if(bat_temp >= BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE) + { + PRINT("battery temp is too high : %.2f >= %.2f, disable charge!\n",bat_temp,BATTERY_DISABLE_CHARGE_HI_TEMP_VALUE); + disable_charge(); + g_chargestatus = 0; + }else{ + + /** + * check and control charge current event + * larger than 90%, use low charge current + * other stat , use high charge current + * pay attention to : debounce + */ + + if(percent >=90) + { + PRINT("%d >= 90 percent , enable low current charge !\r\n",percent); + enable_charge(); + enable_02c(); + g_chargestatus = 1; + } + else + { + PRINT("%d < 90 percent , enable normal current charge !\r\n",percent); + enable_charge(); + disable_02c(); + g_chargestatus = 2; + } + // PRINT("%d\r\n",BATTERY_VOLTAGE_DEBOUNCE); + } - disable_charge(); - g_chargestatus = 0; - /** - * if no in_charge then : - * check and report low power event - * report alarm lowpower event at 15% - * report alarm shutdown event at 5% - * pay attention to : debounce - */ - if (percent >0 && percent <= BATTERY_LOWPOWER_ALARM_POWERLEVEL) - { - low_power_play_toUI(0); - }else if (percent <= BATTERY_LOWPOWER_ALARM_SHUTDOWNLEVEL) - { - low_power_play_toUI(1); + }else{ + //冗余操作,理论上不必在此关闭充电IC + PRINT("charger not plugged ,disable charge !\r\n"); + + disable_charge(); + + g_chargestatus = 0; + /** + * if no in_charge then : + * check and report low power event + * report alarm lowpower event at 15% + * report alarm shutdown event at 5% + * pay attention to : debounce + */ + if (percent >0 && percent <= BATTERY_LOWPOWER_ALARM_POWERLEVEL) + { + low_power_play_toUI(0); + }else if (percent <= BATTERY_LOWPOWER_ALARM_SHUTDOWNLEVEL) + { + low_power_play_toUI(1); + } } - } + #endif } static void battery_check_task(void *arg) @@ -241,6 +289,11 @@ static void battery_check_task(void *arg) uint32_t msgsize = (uint32_t)sizeof(common_notify_mail_t); int sendbuf[2] = {0}; + #ifdef DISABLE_VBUS_CHECK + disable_charge(); + uapi_tcxo_delay_ms(1000); + battery_check_voltage(); + #else /**开机初始化电量及充电状态 Start*/ if(get_charge_stat() == 1) { //如果充电线插入状态,为了获取准确电池数据,需要先停止充电一秒,再继续获取电量。 @@ -250,6 +303,7 @@ static void battery_check_task(void *arg) }else{ battery_check_voltage(); } + #endif battery_check_chargement(); /**开机初始化电量及充电状态 End*/ while (1) { @@ -310,8 +364,9 @@ static void battery_check_task(void *arg) oncharging_status = 0; sendbuf[0] = oncharging_status; do_cywee_service_check_msg(CYWEE_SERVICE_CMD_ONCHARGING_CHANGE,sendbuf); - + #ifndef DISABLE_VBUS_CHECK disable_charge(); + #endif charger_plug_event_ui_sendmsg_toUI(0); } }// while (1) 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 a98cd540a..a2dbe4884 100755 --- a/code/sdk/application/brandy/brandy_standard/thread_pri_init.c +++ b/code/sdk/application/brandy/brandy_standard/thread_pri_init.c @@ -379,6 +379,8 @@ static void thread_main(const void *unused) cat1_server_init(); #endif + start_custom_ble_service(); + startup_post_init(); set_startup_finish_flag(); diff --git a/code/sdk/application/wearable/alipay/service/alipay_bluetooth.c b/code/sdk/application/wearable/alipay/service/alipay_bluetooth.c index ef70ddf96..4656be53a 100644 --- a/code/sdk/application/wearable/alipay/service/alipay_bluetooth.c +++ b/code/sdk/application/wearable/alipay/service/alipay_bluetooth.c @@ -17,26 +17,10 @@ #include "wearable_log.h" #ifdef SUPPORT_ALIPAY_SEC +#include "bleService.h" +#include "alipay_bluetooth.h" -/* Gatt service UUID */ -#define ALIPAYY_SERVICE_ID 0x0238 -/* Gatt Characteristic UUID */ -#define ALIPAYY_CHARACTERISTIC_ID 0x024A -/* Client Characteristic Configuration UUID */ -#define ALIPAYY_BLE_UUID_CLIENT_CHARACTERISTIC_CONF 0x2902 -/* Gatt Characteristic max length */ -#define ALIPAY_CHARACTERISTIC_MAX_LENGTH 256 -#define ALIPAY_BLE_ADV_ID 1 -#define ALIPAY_BLE_ADV_DATA_MAX_LENGTH 31 -#define ALIPAY_BLE_ADV_BLE_NAME_MAX_LENGTH 13 // 31-4-2-3-9 = 13 -#define ALIPAY_BLE_NAME_LENGTH 20 -#define ALIPAY_BLE_ADV_MAC_HEAD_LENTH 4 -#define ALIPAY_BLE_ADV_MAC_LENTH 10 -#define ALIPAY_BLE_ADV_TYPE_LENTH 3 -#define ALIPAY_BLE_ADV_UUID_LENTH 4 -#define ALIPAY_BLE_DEFAULT_NAME "WatchDemo" -#define ALIPAY_BLE_DEFAULT_NAME_LEN 9 - +static uint8_t alipay_scan_data[16] ={0}; // Alipay 蓝牙模块全局变量 static gap_ble_callbacks_t g_alipay_gapble_cbs; static gatts_callbacks_t g_alipay_gatts_cbs; @@ -49,11 +33,11 @@ static bool g_alipay_ble_init_flag = false; static const uint8_t alipay_adv_type[ALIPAY_BLE_ADV_TYPE_LENTH] = {2, 1, 2}; static const uint8_t alipay_adv_uuid[ALIPAY_BLE_ADV_UUID_LENTH] = {0x3, 0x3, 0x02, 0x38}; -static bool svr_alipay_get_adv_start_state(void) +bool svr_alipay_get_adv_start_state(void) { return g_alipay_adv_start_state; } -static void svr_alipay_set_adv_start_state(bool state) +void svr_alipay_set_adv_start_state(bool state) { g_alipay_adv_start_state = state; } @@ -62,38 +46,57 @@ void svr_alipay_ble_adv_stop(void) { gap_ble_stop_adv(ALIPAY_BLE_ADV_ID); } - +void svr_alipay_ble_adv_start_t(void) +{ + gap_ble_start_adv(ALIPAY_BLE_ADV_ID); +} /* adapt ios adv data. */ static void svr_alipay_ble_adv_data_set(int adv_id) { - uint8_t ble_name[ALIPAY_BLE_NAME_LENGTH] = {0}; - uint8_t ble_name_len = ALIPAY_BLE_NAME_LENGTH; - uint8_t adv_data[ALIPAY_BLE_ADV_DATA_MAX_LENGTH] = {0}; + uint8_t ble_name[32] = {0}; + uint8_t ble_name_len = 32; + uint8_t adv_data[31] = {0}; uint8_t adv_data_len = 0; - uint8_t ble_data_name[ALIPAY_BLE_ADV_BLE_NAME_MAX_LENGTH + 1 ] = {0}; // +TYPE LENGTH + uint8_t scan_data_len = 0; + uint8_t ble_data_name[13 + 1 ] = {0}; // +TYPE LENGTH uint8_t ble_data_mac_switch[BD_ADDR_LEN] = {0}; - uint8_t adv_mac_head[ALIPAY_BLE_ADV_MAC_LENTH] = {0x9, 0x16, 0x02, 0x38}; + uint8_t adv_mac_head[10] = {0x9, 0x16, 0x02, 0x38}; gap_ble_config_adv_data_t adv_data_info; memset_s(&adv_data_info, sizeof(gap_ble_config_adv_data_t), 0, sizeof(gap_ble_config_adv_data_t)); + unsigned char addr[6] = {0}; + unsigned int len = 6; + errcode_t ret = 0; - int32_t ret = gap_ble_get_local_name(ble_name, &ble_name_len); - // 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); - ble_name_len = ALIPAY_BLE_DEFAULT_NAME_LEN + 1; - } - ALIPAY_PRINT_DEBUG(0, "gap_ble_get_local_name name:%s,len:%u,ret:%u.", ble_name, ble_name_len, ret); bd_addr_t addr_info; - ret = gap_ble_get_local_addr(&addr_info); - ALIPAY_PRINT_DEBUG(0, "gap_ble_get_local_addr, ret:%u.", ret); + memset(addr,0,6); + bluetooth_get_local_addr(&addr[0],len); + char watchName[32]; + memset_s(watchName, sizeof(watchName), 0, sizeof(watchName)); + (void)sprintf_s(watchName, sizeof(watchName), "%s",ALIPAY_BLE_DEFAULT_NAME); + // (void)sprintf_s(watchName, sizeof(watchName), "%s",BLE_DEFAULT_NAME); + + ret = bluetooth_set_local_name((unsigned char*)watchName, strlen((char*)watchName) + 1); + if (ret == false) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt SetLocalName ret = 0x%x", ret); + } + + + ret = bluetooth_get_local_name(ble_name, &ble_name_len); + if (ret != 0) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_get_local_name fail, name:%s,len:%u,ret:%u.", ble_name, ble_name_len, ret); + memset_s(ble_name, 32, 0, 32); + memcpy_s(ble_name, 32,ALIPAY_BLE_DEFAULT_NAME, 32); + ble_name_len = 32 + 1; + } + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_get_local_name name:%s,len:%u,ret:%u.", ble_name, ble_name_len, ret); + + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_get_local_addr, ret:%u.", ret); memcpy_s(adv_data, sizeof(alipay_adv_type), alipay_adv_type, sizeof(alipay_adv_type)); adv_data_len = sizeof(alipay_adv_type); - if (ble_name_len > ALIPAY_BLE_ADV_BLE_NAME_MAX_LENGTH) { - ble_name_len = ALIPAY_BLE_ADV_BLE_NAME_MAX_LENGTH; + if (ble_name_len > 13) { + ble_name_len = 13; } ble_data_name[0] = ble_name_len; ble_data_name[1] = 0x9; @@ -102,29 +105,44 @@ static void svr_alipay_ble_adv_data_set(int adv_id) memcpy_s(adv_data + adv_data_len, ble_name_len + 1, ble_data_name, ble_name_len + 1); adv_data_len = adv_data_len + ble_name_len + 1; - memcpy_s(adv_data + adv_data_len, sizeof(alipay_adv_uuid), alipay_adv_uuid, sizeof(alipay_adv_uuid)); - adv_data_len = adv_data_len + sizeof(alipay_adv_uuid); + // memcpy_s(adv_data + adv_data_len, sizeof(alipay_adv_uuid), alipay_adv_uuid, sizeof(alipay_adv_uuid));//这是tx power + // adv_data_len = adv_data_len + sizeof(alipay_adv_uuid); + int k = BD_ADDR_LEN; for (int i = 0; i < BD_ADDR_LEN; i++) { - ble_data_mac_switch[--k] = addr_info.addr[i]; + ble_data_mac_switch[--k] = addr[i]; } - ALIPAY_PRINT_ERR(0, "ble_info:%02x:%02x:%02x:%02x:%02x:%02x", ble_data_mac_switch[0], ble_data_mac_switch[1], + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble_info:%02x:%02x:%02x:%02x:%02x:%02x", ble_data_mac_switch[0], ble_data_mac_switch[1], ble_data_mac_switch[2], ble_data_mac_switch[3], ble_data_mac_switch[4], ble_data_mac_switch[5]); - memcpy_s(adv_mac_head + ALIPAY_BLE_ADV_MAC_HEAD_LENTH, BD_ADDR_LEN, ble_data_mac_switch, BD_ADDR_LEN); + memcpy_s(adv_mac_head + 4, BD_ADDR_LEN, ble_data_mac_switch, BD_ADDR_LEN); 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; - 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); - - errcode_t gap_ret = gap_ble_set_adv_data(adv_id, &adv_data_info); - ALIPAY_PRINT_ERR(0, "adv_data_info.adv_length: gap_ret %d.", gap_ret); + memset(alipay_scan_data,0,16); + + alipay_scan_data[0] = 0x09;//长度 + alipay_scan_data[1] = 0xff;//数据类型 manufactory data + alipay_scan_data[2] = 'J'; + alipay_scan_data[3] = 'H'; + alipay_scan_data[4] = ble_data_mac_switch[0]; + alipay_scan_data[5] = ble_data_mac_switch[1]; + alipay_scan_data[6] = ble_data_mac_switch[2]; + alipay_scan_data[7] = ble_data_mac_switch[3]; + alipay_scan_data[8] = ble_data_mac_switch[4]; + alipay_scan_data[9] = ble_data_mac_switch[5]; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "adv_data_info.adv_length.scan_data_len:%d\r\n",scan_data_len); + scan_data_len = 10; + if (scan_data_len > 16){ + scan_data_len = 16; + } + adv_data_info.scan_rsp_data = alipay_scan_data;//扫描数据 + adv_data_info.scan_rsp_length = scan_data_len;//扫描长度 + adv_data_info.adv_data = adv_data;//广播数据 + adv_data_info.adv_length = adv_data_len;//广播长度 + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "adv_data_info.adv_length:%u. scan_data_len:%d\r\n", adv_data_len,scan_data_len); + ret = gap_ble_set_adv_data(adv_id, &adv_data_info); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "alipay avd:%x\r\n", ret); return; } @@ -164,7 +182,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_ble_adv_start(); + // svr_alipay_reset_init(); + gap_ble_start_adv(ALIPAY_BLE_ADV_ID); } else { svr_alipay_set_adv_start_state(false); } @@ -185,14 +205,16 @@ 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 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_PRINT_DEBUG(0, "BtGattsServiceAddCallback 0x%x 0x%x 0x%x 0x%x", status, server_id, srv_handle, *((uint16_t *)uuid->uuid)); int ret; - if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t *)uuid->uuid) == ALIPAYY_SERVICE_ID)) { + // if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t *)uuid->uuid) == ALIPAYY_SERVICE_ID)) + { uint16_t id = ALIPAYY_CHARACTERISTIC_ID; gatts_add_chara_info_t character; uint16_t value = 0; @@ -221,7 +243,8 @@ static void svr_alipay_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid g_alipay_server_handle = result->value_handle; - if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t *)uuid->uuid) == ALIPAYY_CHARACTERISTIC_ID)) { + // if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t *)uuid->uuid) == ALIPAYY_CHARACTERISTIC_ID)) + { uint8_t bas_ccc_val[] = { 0x01, 0x00 @@ -261,7 +284,61 @@ static void svr_alipay_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid } } } - +//添加alipay 特征和描述符 +void svr_alipay_bt_gatts_characteristic_add_dec(uint8_t server_id,uint16_t srv_handle) +{ + int ret = 0; + uint16_t id = ALIPAYY_CHARACTERISTIC_ID; + gatts_add_chara_info_t character; + uint16_t value = 0; + + memset_s(&character, sizeof(gatts_add_chara_info_t), 0, sizeof(gatts_add_chara_info_t)); + character.chara_uuid.uuid_len = sizeof(id); + memcpy_s(character.chara_uuid.uuid, sizeof(character.chara_uuid.uuid), (char *)&id, sizeof(id)); + character.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE; + character.properties = + GATT_CHARACTER_PROPERTY_BIT_READ | GATT_CHARACTER_PROPERTY_BIT_WRITE | GATT_CHARACTER_PROPERTY_BIT_NOTIFY; + character.value_len = ALIPAY_CHARACTERISTIC_MAX_LENGTH; + character.value = g_alipay_character_buf; + + ret = gatts_add_characteristic(server_id, srv_handle, &character); + if (ret != ERRCODE_SUCC) { + ALIPAY_PRINT_ERR(0, "gatts_add_characteristic fail, ret:%u.\r\n", ret); + } + uint8_t bas_ccc_val[] = { + 0x01, + 0x00 + }; + bt_uuid_t ccc_uuid = { 0 }; + bts_data_to_uuid_len2(0x2902, &ccc_uuid); + gatts_add_desc_info_t descriptor; + descriptor.desc_uuid = ccc_uuid; + descriptor.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE; + descriptor.value_len = (uint16_t)sizeof(bas_ccc_val); + descriptor.value = bas_ccc_val; + + ret = gatts_add_descriptor(server_id, srv_handle, &descriptor); + if (ret != ERRCODE_SUCC) { + ALIPAY_PRINT_ERR(0, "gatts_add_descriptor fail, ret:%u.\r\n", ret); + } + bd_addr_t addr_info; + gatts_add_desc_info_t descriptor_ap; + gap_ble_get_local_addr(&addr_info); + bts_data_to_uuid_len2(0x4b02, &ccc_uuid); + descriptor_ap.desc_uuid = ccc_uuid; + descriptor_ap.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE; + descriptor_ap.value_len = BD_ADDR_LEN; + uint8_t ble_data_mac_switch[BD_ADDR_LEN] = {0}; + int k = BD_ADDR_LEN; + for (int i = 0; i < BD_ADDR_LEN; i++) { + ble_data_mac_switch[--k] = addr_info.addr[i]; + } + descriptor_ap.value = ble_data_mac_switch; + ret = gatts_add_descriptor(server_id, srv_handle, &descriptor_ap); + if (ret != ERRCODE_SUCC) { + ALIPAY_PRINT_ERR(0, "gatts_add_descriptor second fail, ret:%u.\r\n", ret); + } +} static void svr_alipay_bt_gatts_descriptor_add_cb(uint8_t server_id, bt_uuid_t *uuid, uint16_t srv_handle, uint16_t desc_handle, errcode_t status) { @@ -305,13 +382,13 @@ static void svr_alipay_bt_gatts_req_write_cb(uint8_t server_id, uint16_t conn_id void svr_alipay_bt_gatts_noyify(uint8_t *data, uint16_t data_len) { gatts_ntf_ind_t data_info; - data_info.attr_handle = g_alipay_server_handle; + data_info.attr_handle = alipay_handle; data_info.value = data; data_info.value_len = data_len; - errcode_t ret = gatts_notify_indicate(g_alipay_server_id, g_alipay_conn_id, &data_info); - 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); + errcode_t ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info); + ALIPAY_PRINT_ERR(0, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.", ret, g_ble_server_id, + g_ble_conn_id, alipay_handle); } static void svr_alipay_btcallback_reg(void) @@ -333,30 +410,37 @@ static void svr_alipay_btcallback_reg(void) g_alipay_gatts_cbs.mtu_changed_cb = NULL; gatts_register_callbacks(&g_alipay_gatts_cbs); } +//gatts_unregister_server -static void svr_alipay_bt_init_gatts(void) +void svr_alipay_bt_init_gatts(void) { - uint16_t service_id = ALIPAYY_SERVICE_ID; - uint8_t server_id = 0; - bt_uuid_t uuid; int ret; - - uuid.uuid_len = sizeof(service_id); - memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&service_id, sizeof(service_id)); - ret = gatts_register_server(&uuid, &server_id); /* 注册gatt server */ + bt_uuid_t alipay_service_uuid = {0}; + bts_data_to_uuid_len2(ALIPAYY_SERVICE_ID, &alipay_service_uuid); + //只有一个服务,永远是1 + ret = gatts_add_service(1, &alipay_service_uuid, true); if (ret != ERRCODE_SUCC) { - ALIPAY_PRINT_ERR(0, "gatts_register_server ret:%u.\r\n", ret); + ALIPAY_PRINT_ERR(0, "svr_alipay_bt_init_gatts 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; - uuid.uuid_len = sizeof(service_id); - 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; + // uint16_t id = ALIPAYY_SERVICE_ID; + // uint16_t srevr_id = ALIPAYY_SERVICE_ID; + // uint16_t ser_id = 0x1fff; + // uint8_t serverId = 0; + // bt_uuid_t uuid; + // errcode_t ret = 0; + // uuid.uuid_len = (uint8_t)sizeof(srevr_id); + // memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&srevr_id, sizeof(srevr_id)); + // ret = gatts_register_server(&uuid, &serverId); /* 注册gatt server */ + // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_register_server ret: 0x%x serverId = 0x%x uuid.uuid_len:%d", ret, serverId,uuid.uuid_len); + // g_alipay_server_id = serverId; + // // svr_alipay_bt_init_gatts(); + // bt_uuid_t ble_service_uuid = {0}; + // bts_data_to_uuid_len2(id, &ble_service_uuid); + // ret = gatts_add_service(serverId, &ble_service_uuid, true); + // return; + } void alipay_unregist_server(void) { @@ -376,11 +460,11 @@ void svr_alipay_bluetooth_init(void) ALIPAY_PRINT_ERR(0, "enable_bt_stack ret:%u.\r\n", ret); } if (g_alipay_ble_init_flag == true) { - return; + // return; } svr_alipay_btcallback_reg(); svr_alipay_bt_init_gatts(); - //svr_alipay_ble_adv_start(); + svr_alipay_ble_adv_start(); g_alipay_ble_init_flag = true; return; } diff --git a/code/sdk/application/wearable/alipay/service/alipay_bluetooth.h b/code/sdk/application/wearable/alipay/service/alipay_bluetooth.h index ec8367a2e..dac57ee4c 100644 --- a/code/sdk/application/wearable/alipay/service/alipay_bluetooth.h +++ b/code/sdk/application/wearable/alipay/service/alipay_bluetooth.h @@ -3,12 +3,12 @@ #include #include #include "stdbool.h" - +#include "bts_def.h" /* Gatt service UUID */ #define ALIPAYY_SERVICE_ID 0x3802 /* Gatt Characteristic UUID */ -#define ALIPAYY_CHARACTERISTIC_ID 0x4a02 +#define ALIPAYY_CHARACTERISTIC_ID 0x4A02 /* Client Characteristic Configuration UUID */ #define ALIPAYY_BLE_UUID_CLIENT_CHARACTERISTIC_CONF 0x2902 /* Gatt Characteristic max length */ @@ -27,6 +27,10 @@ #define ALIPAY_BLE_MAC_MAX_LEN 6 void svr_alipay_bluetooth_init(void); void ble_alipay_add_characters_input_report_cbk(uint16_t srvc_handle); -void alipay_add_chart_decr_cb(uint8_t server_id,uint16_t srv_handle); +void svr_alipay_bt_gatts_characteristic_add_dec(uint8_t server_id,uint16_t srv_handle); +void svr_alipay_set_adv_start_state(bool state); +bool svr_alipay_get_adv_start_state(void); +void svr_alipay_bt_init_gatts(void); +void svr_alipay_ble_adv_start_t(void); #endif diff --git a/code/sdk/application/wearable/alipay/service/alipay_feature.c b/code/sdk/application/wearable/alipay/service/alipay_feature.c index 542527a03..bcc71ae28 100755 --- a/code/sdk/application/wearable/alipay/service/alipay_feature.c +++ b/code/sdk/application/wearable/alipay/service/alipay_feature.c @@ -22,6 +22,8 @@ #include "osal_msgqueue.h" #include "thread_init.h" #include "alipay_transit.h" +#include "bleService.h" +#include "alipay_bluetooth.h" #include "vendor_file.h" #if defined(__FREERTOS__) #include "FreeRTOS.h" @@ -72,12 +74,12 @@ static int32_t svr_alipay_notify_bt(bool value) { if (value) { printf("svr_alipay_notify_bt true:%d",value); - - svr_alipay_ble_adv_start(); + // ble_avd_mode_change(1); + // svr_alipay_ble_adv_start(); } else { printf("svr_alipay_notify_bt false:%d",value); - svr_alipay_ble_adv_stop(); + // svr_alipay_ble_adv_stop(); } return 0; } @@ -607,7 +609,7 @@ errcode_t uapi_alipay_svr_init(void) uapi_gpio_set_dir(ALIPAY_SEC_GPIO, GPIO_DIRECTION_OUTPUT); uapi_gpio_set_val(ALIPAY_SEC_GPIO, GPIO_LEVEL_HIGH); osDelay(30); - svr_alipay_bluetooth_init(); + HS_IIC_Init(); alipay_pre_init(); svr_alipay_enter_lpm(); diff --git a/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp b/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp index e1a3f4596..7115ef357 100644 --- a/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp +++ b/code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp @@ -339,7 +339,7 @@ namespace OHOS #ifdef JS_ENABLE ACELite::ProductAdapter::SetScreenSize(HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); #endif - ConfigModel::GetInstance()->Init(); + // ConfigModel::GetInstance()->Init(); // 初始化语言 GraphicStartUp::InitFontEngine(MEM_POOL_UI_FONT, MEM_POOL_UI_FONT_SIZE, OHOS::VECTOR_FONT_DIR, DEFAULT_VECTOR_FONT_FILENAME); WEARABLE_LOGI(WEARABLE_LOG_MODULE_LAUNCHER_FWK, "NativeLauncher::InitNativeLauncher"); 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 388d10f9f..eccfd3667 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/alipay/src/AlipayPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/alipay/src/AlipayPresenter.cpp @@ -51,7 +51,7 @@ void AlipayPresenter::OnStart() WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlipayPresenter OnStart"); Presenter::OnStart(); /**启动alipay蓝牙服务*/ - start_alipay_ble_service(); + // start_alipay_ble_service(); /* -------------------------------- 设置支付宝界面常亮 ------------------------------- */ alipayMode_->AlipayScreenControl(true); /* -------------------------------------------------------------------------- */ @@ -73,7 +73,7 @@ void AlipayPresenter::OnStop(void) { /**关闭alipay蓝牙服务*/ - stop_alipay_ble_service(); + // stop_alipay_ble_service(); WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlipayPresenter OnStop"); svr_alipay_destroy_task(); 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 411616bd4..1af445392 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp @@ -95,10 +95,10 @@ void BluetoothModel::Init() #endif - /**初始化 经典蓝牙callback 经典蓝牙不改动,因此启动就初始化好 */ - BtInitCallBacks(); + // /**初始化 经典蓝牙callback 经典蓝牙不改动,因此启动就初始化好 */ + // BtInitCallBacks(); - /**启动spp服务 */ + // /**启动spp服务 */ // BtInitSpp(); SetUpListCase(); diff --git a/code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c b/code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c index 3021db89d..01279dd76 100755 --- a/code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c +++ b/code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c @@ -54,7 +54,7 @@ void ohos_startup() #ifdef SUPPORT_POWER_MANAGER const power_display_svr_api_t *display_api = power_display_svr_get_api(); display_api->turn_on_screen(); - display_api->set_screen_set_keepon_timeout(25000); + display_api->set_screen_set_keepon_timeout(15000); #endif 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 26067d983..085f0bb91 100644 --- a/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h +++ b/code/sdk/application/wearable/service/ble_service/blemoder/bletest.h @@ -18,6 +18,16 @@ extern "C" { #include "stdint.h" #include "errcode.h" +struct ancs_data_info_t +{ + int uid;//uid 消息唯一编号 + int appid;//消息类型:1:微信 2:QQ 3:短信 4:其他 + char title[256];//消息发送者 + char msg[300];//消息内容 + char time[20];//时间戳"20240417T102400" 用T分隔日期和时间,显示需要注意 + int hasCode;//消息hash code +}; + enum PAIRING { DEVICEBIND = 0,// 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 c4e7ba1ae..d1bce8cc7 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c @@ -38,14 +38,19 @@ extern "C" { #include "errcode.h" #define PHONE_WATCH_CONFIG_PATH "/user/userdata/phone_watch.json" #define ALARM_DATA_CONFIG_PATH "/user/userdata/alarm_test.json" +#define ANCS_DATA_CONFIG_PATH "/user/userdata/ancs.json" #include "bletest.h" #define DEBUG_TEST (0) +#define CRC_CHECK_ERR 0 //crc校验失败 +#define JSON_CHECK_OK 1 //json解析成功 +#define JSON_CHECK_ERR 2 //json解析失败 uint8_t *bigDataBuf = NULL;//大数据buf uint8_t bigDataBufLen=0; bool sendbigDataBufState = false;//发送大数据表示不要被其他指令打断 bool recvBigDataBufState = false;//接收大数据标志 static bool muiltFlag = 0;//多包数据flag +static bool ANCSBigBufFlag = 0;//ANCS多包数据flag static uint16_t data_len = 0; ble_recv_data_info_t ble_recv_data; ble_recv_msg_callback_t g_recv_msg_toUI = NULL; @@ -4174,6 +4179,169 @@ void bleLongRecvData(uint8_t *data, uint16_t data_size,uint8_t *buf_cmd,uint8_t } } +//安卓消息接收解析数据 //ANCS 2AE1 +uint8_t jscheck_ancs(uint8_t *data) +{ + + uint8_t *json; + json = data; + cJSON* root = cJSON_Parse((const char *)json); + if (root == NULL) { + printf("信息解析 JSON解析\n"); + return 2; + } + + int uid_t = 0; + int appid_t = 0; + char titleBuf[256]; + char msgBuf[300]; + char timeBuf[32]; + int hasCode_t = 0; + cJSON* uid = cJSON_GetObjectItem(root, "uid"); + if (cJSON_IsNumber(uid)) { + printf("uid_t: %d\n", uid->valueint); + } + cJSON* appid = cJSON_GetObjectItem(root, "appid"); + if (cJSON_IsNumber(appid)) { + printf("appid_t: %d\n", appid->valueint); + appid_t = appid->valueint; + } + cJSON* title_c = cJSON_GetObjectItem(root, "title"); + if (cJSON_IsString(title_c)) { + printf("titleBuf: %s\n", title_c->valuestring); + title_c->valuestring[strlen(title_c->valuestring)]='\0'; + memcpy(titleBuf,title_c->valuestring,strlen(title_c->valuestring)); + } + cJSON* msg = cJSON_GetObjectItem(root, "msg"); + if (cJSON_IsString(msg)) { + printf("msgBuf: %s\n", msg->valuestring); + // msgBuf = msg->valuestring; + msg->valuestring[strlen(msg->valuestring)]='\0'; + memcpy(msgBuf,msg->valuestring,strlen(msg->valuestring)); + } + cJSON* time = cJSON_GetObjectItem(root, "time"); + if (cJSON_IsString(time)) { + printf("time: %s\n", time->valuestring); + // timeBuf = time->valueint; + time->valuestring[strlen(time->valuestring)]='\0'; + memcpy(timeBuf,time->valuestring,strlen(time->valuestring)); + + + } + cJSON* hasCode = cJSON_GetObjectItem(root, "hasCode"); + if (cJSON_IsNumber(hasCode)) { + printf("hasCode_t: %d\n", hasCode->valueint); + hasCode_t = hasCode->valueint; + } + cJSON_Delete(root); + uint8_t buf_size = 0; + FILE *jsfile = fopen(ANCS_DATA_CONFIG_PATH, "r"); + cJSON *data_root; + if (jsfile != NULL) { + printf("succes opening file\n"); + fseek(jsfile, 0, SEEK_END); + long fileSize = ftell(jsfile); + fseek(jsfile, 0, SEEK_SET); + + char *jsonData = (char *)malloc(fileSize + 1); + fread(jsonData, 1, fileSize, jsfile); + jsonData[fileSize] = '\0'; + fclose(jsfile); + + // 解析JSON数据 + printf("jsonData %s",jsonData); + data_root= cJSON_Parse(jsonData); + // data_root = cJSON_GetObjectItem(modifiedJson,"infor"); + free(jsonData); + }else{ + data_root = cJSON_Parse("{\ + \"infor\": [\ + ]}"); + } + cJSON *dataJSON = cJSON_CreateObject(); + + cJSON *detialJSON = cJSON_CreateObject(); + + cJSON* itemJSON = cJSON_CreateObject(); + + + + cJSON_AddNumberToObject(itemJSON,"uid",uid_t); + cJSON_AddNumberToObject(itemJSON,"appid_t",appid_t); + cJSON_AddStringToObject(itemJSON,"title",titleBuf); + cJSON_AddStringToObject(itemJSON,"msg",msgBuf); + cJSON_AddStringToObject(itemJSON,"time",timeBuf); + cJSON_AddNumberToObject(itemJSON,"hasCode",hasCode_t); + cJSON *dataList = cJSON_GetObjectItem(data_root, "infor"); + // printf("dataList %s",dataList); + cJSON *array = cJSON_GetObjectItemCaseSensitive(data_root, "infor"); + cJSON_AddItemToArray(array, itemJSON); + + // char *modified_json = cJSON_Print(data_root); + + + char *jsonString = cJSON_Print(data_root); + printf("ancs %s",jsonString); + FILE *file = fopen(ANCS_DATA_CONFIG_PATH, "wb"); + if (file) + { + fwrite(jsonString, 1, strlen(jsonString), file); + fclose(file); + } + free(jsonString); + return 1; +} +void ancsDataShowCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)// +{ + uint8_t value[19]; + memset(value,0,19); + uint32_t tmp = 1; + value[0] =0x72; + value[1] =0x02; + value[2] =0x01; + memcpy(value+3,&tmp,4); + memcpy(value+7,&tmp,4); + memcpy(value+11,&tmp,4); + memcpy(value+15,&tmp,2); + + if(Check_CRC(crcnum,len,crcvalue)) + { + //解析ancs数据并且显示出来 + uint8_t check_ok= 1; + check_ok = jscheck_ancs(crcnum); + value[17] = 1; + value[18] = Calculate_CRC(value,18); + sendBleData(value,19); + }else{ + value[17] = 0; + value[18] = Calculate_CRC(value,18); + sendBleData(value,19); + } +} +void type2AE1Data(uint8_t *buf_cmd,uint8_t *data,uint16_t datalen,uint8_t *totalData,uint8_t crcvalue) +{ + uint16_t typeID = buf_cmd[1]*256+buf_cmd[2]; + printf("type2AE1Data typeID:0x%x",typeID); + switch (typeID) //ID + { + case ANDROID_ANCS_CMD://app下发的获取用户信息 + ancsDataShowCmd(typeID,data,datalen,totalData,crcvalue); + break; + } +} +void bleRecvANCSData(uint8_t *data, uint16_t data_size,uint8_t *buf_cmd,uint8_t *totalData,uint8_t crcvalue)//buf_cmd 指令前17个字节数据 +{ + uint8_t type = buf_cmd[1]; + printf("type:%d %d data_size:%d data:%d crcvalue:%x",buf_cmd[0],type,data_size,data[0],crcvalue); + switch (type) + { + case 0x03://获取手机信息 + type2AE1Data(buf_cmd,data,data_size,totalData,crcvalue); + break; + default: + break; + } +} uint32_t packdataLen = 0; uint32_t totalDataLen = 0; @@ -4293,26 +4461,109 @@ void bleDataRecv(uint8_t *totalData, uint16_t event_size,uint16_t handle) break; } } - if(Bleconnect == false)//断开蓝牙不接收数据 + + } + } + else if(data2ae1Cmd == handle)//安卓消息特征Hhandle + { + + while (1) + { + printf("ancs!!!!!!!!!"); + if(ANCSBigBufFlag == 0) { - totalpack = 0; - muiltFlag = 0; - packdataLen = 0; - totalDataLen = 0; - if(bigDataBuf != NULL){ - free(bigDataBuf); - } - if(recvData != NULL){ - free(recvData); + if(event_size >= 17) + { + packdataLen = event_size;//第一包的数据大小 第二包不走这里 514-17 = 497 + memcpy(&totalDataLen,totalData+7,4);//总的数据大小 + printf("ancs totalDataLen;%d totaldataLen:%d",totalDataLen,packdataLen); + if(totalDataLen > event_size-18)//如果514-18 = 496 497 > 496 + { + printf("ancs totalDataLen;%d packdataLen:%d",totalDataLen,packdataLen); + + recvData = malloc(totalDataLen+18); + if(recvData == NULL)return; + ANCSBigBufFlag = 1;//表示有两包以上的数据 + memcpy(recvData,totalData,event_size);//从第十七个字节开始接收数据data + memset(cmd_data,0,17); + memcpy(cmd_data,totalData,17); + totalpack=1; + break; + }else{//直接发送数据解析 + printf("ancs totalDataLen11;%d packdataLen:%d",totalDataLen,packdataLen); + packdataLen = event_size-17; + memset(cmd_data,0,17); + memcpy(cmd_data,totalData,17); + + // 73 2 10 1 0 0 0 16 0 0 0 1 0 0 0 16 0 + recvData = malloc(packdataLen-1); + if(recvData == NULL)return; + memcpy(recvData,totalData+17,packdataLen-1); + if(totalDataLen == 0){ + crcvalue = 0x00; + }else{ + crcvalue = totalData[event_size-1]; + } + + bleRecvANCSData(recvData,packdataLen-1,cmd_data,totalData,crcvalue); + if(recvData != NULL){ + free(recvData); + } + packdataLen = 0; + break; + } } break; + + }else//这是接收两包以上的数据 + { + totalpack+=1;//包数 + printf("ancs 122222;%d packdataLen:%d",totalDataLen,packdataLen); + memcpy(recvData+packdataLen,totalData,event_size); //先copy再加 + packdataLen = packdataLen+event_size; + printf("ancs 133333;%d packdataLen:%d",totalDataLen,packdataLen); + if(totalDataLen >= (packdataLen-18))//总的数据包 packdataLen-18把前面17个字节的包头和一个字节的校验和去掉得到数据部分和校验和部分 + { + bigDataBuf = malloc(totalDataLen); + crcvalue = totalData[event_size-1]; + memcpy(bigDataBuf,recvData+17,totalDataLen); + bleRecvANCSData(bigDataBuf,totalDataLen,cmd_data,recvData,crcvalue); + totalDataLen = 0; + packdataLen = 0; + ANCSBigBufFlag = 0; + totalpack = 0; + if(bigDataBuf != NULL){ + free(bigDataBuf); + } + if(recvData != NULL){ + free(recvData); + } + break; + }else{ + + break; + } } + + } + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "xhandle %d,%d %d",data2ae3Cmd,data2ae4Cmd,handle); + } + if(Bleconnect == false)//断开蓝牙不接收数据 + { + totalpack = 0; + muiltFlag = 0; + ANCSBigBufFlag = 0; + packdataLen = 0; + totalDataLen = 0; + recvBigDataBufState = false; + sendbigDataBufState = false; + if(bigDataBuf != NULL){ + free(bigDataBuf); + } + if(recvData != NULL){ + free(recvData); } } - // else if(data2ae5Cmd == handle) - // { - // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "xhandle %d,%d %d",data2ae3Cmd,data2ae4Cmd,handle); - // } } void free_ble_data(void)//以防断开蓝牙没有释放数据类型 { @@ -4320,6 +4571,9 @@ void free_ble_data(void)//以防断开蓝牙没有释放数据类型 muiltFlag = 0; packdataLen = 0; totalDataLen = 0; + ANCSBigBufFlag = 0; + recvBigDataBufState = false; + sendbigDataBufState = false; if(bigDataBuf != NULL){ free(bigDataBuf); } diff --git a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h index ed6d2147a..e58123368 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h @@ -470,6 +470,10 @@ typedef struct }msg_get_other_target_info_t;//获取其他目标设置 #pragma pack() +/*********************ANCS********安卓指令********************/ +#define ANDROID_ANCS_CMD 0x0301 + + /***********************长指令>20字节****************************************/ /*******************TYPE+ID**********************/ /* 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 5d9f92435..b08205ec8 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.c @@ -67,7 +67,7 @@ extern "C" { #define BLE_DEFAULT_NAME_LEN 32 #define BLE_MAC_MAX_LEN 6 //蓝牙mac地址最大个数6个 - +static uint8_t exit_alipay_gui = 0; // 蓝牙模块全局变量 static gap_ble_callbacks_t g_ble_gapble_cbs; static gatts_callbacks_t g_ble_gatts_cbs; @@ -79,7 +79,7 @@ uint16_t g_ble_server_id = 1; static uint16_t g_ble_read_handle = 0; uint16_t g_ble_conn_id = 0; -static uint16_t g_ble_server_handle = 0; +uint16_t g_ble_server_handle = 0; static uint8_t g_ble_character_buf[BLE_CHARACTERISTIC_MAX_LENGTH] = {0}; static bool g_ble_init_flag = false; static const uint8_t ble_adv_type[BLE_ADV_TYPE_LENTH] = {2, 1, 2}; @@ -99,9 +99,10 @@ uint16_t ble_nus_max_data_len = SDK_BLE_MTU_MIN - 3; #define A2DP_STREAM_ACCEPT_TIMER_PERIOD 500 static osal_timer g_a2dp_stream_accept_timer = {NULL, NULL, 0, 0}; -uint8_t data2ae3Cmd = 0;//2ae3短指令特征值 -uint8_t data2ae4Cmd = 0; -uint8_t data2ae5Cmd = 0; +uint16_t data2ae3Cmd = 0;//2ae3短指令特征值 +uint16_t data2ae4Cmd = 0; +uint16_t data2ae5Cmd = 0; +uint16_t data2ae1Cmd = 0;//安卓消息来电 #if 1//def SUPPORT_BLE_SERVICE static void set_phone_info(bd_addr_t *addr)//保存手机信息 包含手机mac地址 { @@ -245,9 +246,9 @@ static void svr_ble_adv_data_set(int adv_id) void svr_ble_adv_start_param(void) { int adv_id = BLE_ADV_ID; - if (AdverFlag == false) { //已经开始广播了,不需要重复开启广播 + if (AdverFlag == true) { //已经开始广播了,不需要重复开启广播 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BleAdvStart already started1"); - return; + // return; } gap_ble_adv_params_t adv_para; @@ -280,10 +281,22 @@ static void svr_ble_connstate_change_cb(unsigned short conn_id, bd_addr_t *addr, g_ble_conn_id = conn_id; if (GAP_BLE_STATE_DISCONNECTED == conn_state) { // restart ble adv when disconnected Bleconnect = GAP_BLE_STATE_DISCONNECTED;//蓝牙已断开 - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GAP_BLE_STATE_DISCONNECTED!!! 0x%x ret:%d\r\n",pair_state,AdverFlag); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GAP_BLE_STATE_DISCONNECTED!!! 0x%x exit_alipay_gui:%d\r\n",pair_state,exit_alipay_gui); // if(AdverFlag == true){ - svr_ble_adv_start(); - free_ble_data(); + + if(exit_alipay_gui==0) + { + if(svr_alipay_get_adv_start_state()) + { + svr_alipay_set_adv_start_state(0); + svr_alipay_ble_adv_stop(); + svr_ble_adv_start_param(); + + } + svr_ble_adv_start(); + } + + free_ble_data(); // } } else { devpair_state = 0;// @@ -530,16 +543,16 @@ static void srv_ble_add_chart_decr_recv_cmd(uint8_t server_id,uint16_t srv_handl // ALIPAY_PRINT_ERR(0, "gatts_add_descriptor fail, ret:%u.\r\n", ret); } } -static uint16_t ble_server_handle = 0; + static uint8_t g_alipay_character_buf[256] = {0}; -void alipay_add_chart_decr_cb(uint8_t server_id,uint16_t srv_handle) +static void alipay_add_chart_decr_recv_cmd1(uint8_t server_id,uint16_t srv_handle) { errcode_t ret = 0; // uint16_t id = ALIPAYY_CHARACTERISTIC_ID; gatts_add_chara_info_t character; uint16_t value = 0; bt_uuid_t alipay_service_uuid = {0}; - bts_data_to_uuid_len2(0x4a02, &alipay_service_uuid); + bts_data_to_uuid_len2(ALIPAYY_CHARACTERISTIC_ID, &alipay_service_uuid); memset_s(&character, sizeof(gatts_add_chara_info_t), 0, sizeof(gatts_add_chara_info_t)); // character.chara_uuid.uuid_len = sizeof(id); // memcpy_s(character.chara_uuid.uuid, sizeof (character.chara_uuid.uuid), (char *)&id, sizeof(id)); @@ -589,6 +602,92 @@ void alipay_add_chart_decr_cb(uint8_t server_id,uint16_t srv_handle) if (ret != ERRCODE_SUCC) { ALIPAY_PRINT_ERR(0, "gatts_add_descriptor second fail, ret:%u.\r\n", ret); } +} + + + +static uint16_t ble_server_handle = 0; + +void alipay_add_chart_decr_cb(uint8_t server_id,uint16_t srv_handle) +{ + errcode_t ret = 0; + static uint8_t ota_point_val[] = {0x00, 0x00}; + gatts_add_chara_info_t character; + gatts_add_desc_info_t descriptor; + bts_data_to_uuid_len2(0x4a02, &character.chara_uuid); + character.permissions = GATT_ATTRIBUTE_PERMISSION_READ; + character.properties = BLE_CHARACTERISTIC_SNED_OTA_ID_PROPERTIES; + character.value_len = (uint16_t)sizeof(ota_point_val); + character.value = ota_point_val; + + ret = gatts_add_characteristic(server_id, srv_handle, &character); + if (ret != ERRCODE_SUCC) { + // ALIPAY_PRINT_ERR(0, "gatts_add_characteristic fail, ret:%u.\r\n", ret); + } + bts_data_to_uuid_len2(0x2902, &descriptor.desc_uuid); + descriptor.permissions = GATT_ATTRIBUTE_PERMISSION_WRITE|GATT_ATTRIBUTE_PERMISSION_READ; + descriptor.value_len = (uint16_t)sizeof(ota_point_val); + descriptor.value = ota_point_val; + + ret = gatts_add_descriptor(server_id, srv_handle, &descriptor); + if (ret != ERRCODE_SUCC) { + // ALIPAY_PRINT_ERR(0, "gatts_add_descriptor fail, ret:%u.\r\n", ret); + } + // errcode_t ret = 0; + // // uint16_t id = ALIPAYY_CHARACTERISTIC_ID; + // gatts_add_chara_info_t character; + // uint16_t value = 0; + // bt_uuid_t alipay_service_uuid = {0}; + // bts_data_to_uuid_len2(0x4a02, &alipay_service_uuid); + // memset_s(&character, sizeof(gatts_add_chara_info_t), 0, sizeof(gatts_add_chara_info_t)); + // // character.chara_uuid.uuid_len = sizeof(id); + // // memcpy_s(character.chara_uuid.uuid, sizeof (character.chara_uuid.uuid), (char *)&id, sizeof(id)); + // character.chara_uuid = alipay_service_uuid; + // character.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE; + // character.properties = + // GATT_CHARACTER_PROPERTY_BIT_READ | GATT_CHARACTER_PROPERTY_BIT_WRITE | GATT_CHARACTER_PROPERTY_BIT_NOTIFY; + // character.value_len = 256; + // character.value = g_alipay_character_buf; + + // ret = gatts_add_characteristic(server_id, srv_handle, &character); + // if (ret != ERRCODE_SUCC) { + // ALIPAY_PRINT_ERR(0, "gatts_add_characteristic fail, ret:%u.\r\n", ret); + // } + + // uint8_t bas_ccc_val[] = { + // 0x01, + // 0x00 + // }; + // bt_uuid_t ccc_uuid = { 0 }; + // bts_data_to_uuid_len2(0x2902, &ccc_uuid); + // // bts_data_to_uuid_len2(0x2902, &ccc_uuid); + // gatts_add_desc_info_t descriptor; + // descriptor.desc_uuid = ccc_uuid; + // descriptor.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE; + // descriptor.value_len = (uint16_t)sizeof(bas_ccc_val); + // descriptor.value = bas_ccc_val; + + // ret = gatts_add_descriptor(server_id, srv_handle, &descriptor); + // if (ret != ERRCODE_SUCC) { + // ALIPAY_PRINT_ERR(0, "gatts_add_descriptor fail, ret:%u.\r\n", ret); + // } + // bd_addr_t addr_info; + // gatts_add_desc_info_t descriptor_ap; + // gap_ble_get_local_addr(&addr_info); + // bts_data_to_uuid_len2(0x4b02, &ccc_uuid); + // descriptor_ap.desc_uuid = ccc_uuid; + // descriptor_ap.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE; + // descriptor_ap.value_len = BD_ADDR_LEN; + // uint8_t ble_data_mac_switch[BD_ADDR_LEN] = {0}; + // int k = BD_ADDR_LEN; + // for (int i = 0; i < BD_ADDR_LEN; i++) { + // ble_data_mac_switch[--k] = addr_info.addr[i]; + // } + // descriptor_ap.value = ble_data_mac_switch; + // ret = gatts_add_descriptor(server_id, srv_handle, &descriptor_ap); + // if (ret != ERRCODE_SUCC) { + // ALIPAY_PRINT_ERR(0, "gatts_add_descriptor second fail, ret:%u.\r\n", ret); + // } } @@ -610,8 +709,10 @@ static void svr_ble_bt_gatts_service_add_cb(uint8_t server_id, bt_uuid_t *uuid, bt_uuid_t hid_service_uuid = {0}; bts_data_to_uuid_len2(BLE_UUID_HUMAN_INTERFACE_DEVICE, &hid_service_uuid); - - bt_uuid_t factory_service_uuid = {0}; + bt_uuid_t alipay_service_uuid = {0}; + bts_data_to_uuid_len2(0x3802, &alipay_service_uuid); + + bt_uuid_t factory_service_uuid = {0}; bts_data_to_uuid_len2(BLE_UUID_ATE_FACTORYTEST_SERVICE, &factory_service_uuid); errcode_t ret = 0; @@ -635,12 +736,19 @@ static void svr_ble_bt_gatts_service_add_cb(uint8_t server_id, bt_uuid_t *uuid, ret = gatts_start_service(server_id, srv_handle); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "factorytest service svr_ble_bt_gatts_service_add_cb ret:%d\r\n",ret); } + if (ble_gatts_cmp_uuid(uuid, &alipay_service_uuid) == true){ + alipay_add_chart_decr_recv_cmd1(server_id,srv_handle); + ret = gatts_start_service(server_id, srv_handle); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "alipay_service_uuid service svr_ble_bt_gatts_service_add_cb ret:%d\r\n",ret); + } + } +uint16_t alipay_handle = 0; uint16_t g_hid_server_handle = 0; static void svr_ble_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid_t *uuid, uint16_t srv_handle, gatts_add_character_result_t *result, errcode_t status) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt_gatts_characteristic_add_cb uuid:0x%x%x 0x%x 0x%x 0x%x\r\n",uuid->uuid[0],uuid->uuid[1],srv_handle,result->handle,result->value_handle); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt_gatts_characteristic_add_cb uuid:0x%02x%02x 0x%x %d %d\r\n",uuid->uuid[0],uuid->uuid[1],srv_handle,result->handle,result->value_handle); bt_uuid_t chara_uuid_data4 = {0}; bts_data_to_uuid_len2(BLE_CHARACTERISTIC_SNED_OTA_ID, &chara_uuid_data4); @@ -661,40 +769,47 @@ static void svr_ble_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid_t bt_uuid_t hid_report_uuid = {0}; bts_data_to_uuid_len2(BLE_UUID_REPORT, &hid_report_uuid); - + bt_uuid_t alipay_report_uuid = {0}; + bts_data_to_uuid_len2(ALIPAYY_CHARACTERISTIC_ID, &alipay_report_uuid); + + if(ble_gatts_cmp_uuid(uuid, &alipay_report_uuid)) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " alipay_handle %d\r\n",result->value_handle); + alipay_handle = result->value_handle; + } if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data1)) { g_ble_server_handle = result->value_handle; data2ae5Cmd = result->value_handle; - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->value_handle1 %d\r\n",result->value_handle); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " 2ae5 result->value_handle1 %d\r\n",result->value_handle); } if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data2)) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->value_handle2 %d\r\n",result->value_handle); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "2ae3 result->value_handle2 %d\r\n",result->value_handle); data2ae3Cmd = result->value_handle; } if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data4)) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->value_handle4 %d\r\n",result->value_handle); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "2ae0 result->value_handle4 %d\r\n",result->value_handle); // shortCmdChara = result->value_handle; } if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data5)) { - - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->value_handle5 %d\r\n",result->value_handle); + data2ae1Cmd = result->value_handle; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "2ae1 result->value_handle5 %d\r\n",result->value_handle); // shortCmdChara = result->value_handle; } if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data6)) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->value_handle6 %d\r\n",result->value_handle); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "2ae2 result->value_handle6 %d\r\n",result->value_handle); // shortCmdChara = result->value_handle; } if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data3)) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->value_handle3 %d\r\n",result->value_handle); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "2ae4 result->value_handle3 %d\r\n",result->value_handle); data2ae4Cmd = result->value_handle; } if (ble_gatts_cmp_uuid(uuid, &hid_report_uuid) == true) { @@ -763,7 +878,7 @@ static void svr_ble_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid_t static void svr_ble_bt_gatts_descriptor_add_cb(uint8_t server_id, bt_uuid_t *uuid, uint16_t srv_handle, uint16_t desc_handle, errcode_t status) { - + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "desc_handle_uuid 0x%02x%02x desc_handle %d\r\n",uuid->uuid[0],uuid->uuid[1],desc_handle); } static void svr_ble_bt_gatts_service_start_cb(uint8_t server_id, uint16_t srv_handle, errcode_t status) @@ -804,8 +919,9 @@ static uint8_t falg = 0; static void svr_ble_bt_gatts_req_write_cb(uint8_t server_id, uint16_t conn_id, gatts_req_write_cb_t *write_cb_para, errcode_t status) { - 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); + 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); + printf("alipay_handle%d",alipay_handle); for(uint16_t i = 0;ilength;i++) { printf("%x ",write_cb_para->value[i]); @@ -819,6 +935,12 @@ static void svr_ble_bt_gatts_req_write_cb(uint8_t server_id, uint16_t conn_id, g else if (write_cb_para->handle == get_factory_ota_write_handl()) { factory_recv_ota_data(write_cb_para->value,write_cb_para->length,write_cb_para->handle); + }else if(write_cb_para->handle == alipay_handle) + { + printf("alipay wirte!!!!!"); + // svr_alipay_bt_gatts_noyify(buf,5); + errcode_t ret = svr_alipay_msg_write(ALIPAY_MSG_BT, write_cb_para->value, write_cb_para->length, false); + }else{ revBleOldData(write_cb_para->value,write_cb_para->length,write_cb_para->handle); } @@ -1180,12 +1302,13 @@ static uint8_t g_server_id = 0; static void svr_ble_bt_init_gatts(void) { uint16_t id = BLE_SERVICE_UUID; + uint16_t srevr_id = BLE_SERVICE_UUID; uint16_t ser_id = 0x1fff; uint8_t serverId = 0; bt_uuid_t uuid; errcode_t ret = 0; - uuid.uuid_len = (uint8_t)sizeof(id); - memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&id, sizeof(id)); + uuid.uuid_len = (uint8_t)sizeof(srevr_id); + memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&srevr_id, sizeof(srevr_id)); ret = gatts_register_server(&uuid, &serverId); /* 注册gatt server */ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_register_server ret: 0x%x serverId = 0x%x uuid.uuid_len:%d", ret, serverId,uuid.uuid_len); g_ble_server_id = serverId; @@ -1217,7 +1340,7 @@ bool ble_gatts_cmp_uuid(const bt_uuid_t *tgt_uuid, const bt_uuid_t *src_uuid)// bt_os_free(tgt); return result; } -extern void alipay_unregist_server(void); +// extern void alipay_unregist_server(void); void ble_unregist_server(void) { svr_ble_adv_stop(); @@ -1236,8 +1359,10 @@ void ble_unregist_server(void) // svr_ble_adv_start_param(); // } -static void svr_bluetooth_init(void) +void svr_bluetooth_init(void) { + + AdverFlag = true; bool ret = enable_bt_stack(); // bool ret = enable_ble(); if (ret != ERRCODE_SUCC) { @@ -1245,13 +1370,17 @@ static void svr_bluetooth_init(void) } // osDelay(100); svr_ble_btcallback_reg(); + #ifdef SUPPORT_BLE_SERVICE + //add server and ble service svr_ble_bt_init_gatts(); #endif #ifdef SUPPORT_HID_SERVICE // ble_hid_server_init(); #endif + svr_alipay_bt_init_gatts(); ble_factory_server_init(); + svr_ble_adv_start_param(); ble_recv_register_msg_callback(ble_recv_msg_callback);//注册驱动回调 return; @@ -1291,6 +1420,7 @@ void openBle(void) printf("%d %s\n",__LINE__,__FUNCTION__); if(AdverFlag == false)//在连接的状态下不需要 { + WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AdverFlag true need openBle again\r\n"); AdverFlag = true; svr_bluetooth_init(); }else{ @@ -1298,6 +1428,41 @@ void openBle(void) } } +#define MODE_BLE_ADV_SRV (0) +#define MODE_ALIPAY_ADV_SRV (1) +void ble_avd_mode_change(uint8_t mode) +{ + switch(mode) + { + case MODE_BLE_ADV_SRV: + if(AdverFlag != true) + { + exit_alipay_gui = 0; + printf("ble_advd_start!!!!!!!!!"); + svr_alipay_ble_adv_stop(); + svr_alipay_set_adv_start_state(0); + errcode_t ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&phone_addr); + svr_ble_adv_start_param(); + } + + break; + case MODE_ALIPAY_ADV_SRV: + if(svr_alipay_get_adv_start_state() != true) + { + exit_alipay_gui = 1; + printf("alipay_advd_start!!!!!!!!!"); + AdverFlag = false; + svr_ble_adv_stop(); + errcode_t ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&phone_addr); + svr_alipay_set_adv_start_state(1); + svr_alipay_ble_adv_start(); + } + + break; + default: + break; + } +} #endif #ifdef __cplusplus } 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 c0a877cbe..5dd5eaaf7 100644 --- a/code/sdk/application/wearable/service/ble_service/bleservice/bleService.h +++ b/code/sdk/application/wearable/service/ble_service/bleservice/bleService.h @@ -17,10 +17,15 @@ extern uint8_t bond_flag; extern uint8_t phone_mac_data[6]; extern uint8_t Bleconnect;//蓝牙默认是断开 0 1 为连接 extern uint8_t devpair_state; -extern uint8_t data2ae3Cmd;//2ae3短指令特征值 -extern uint8_t data2ae4Cmd;//长指令特征值 大于20个字节的数据app下发的 +extern uint16_t data2ae3Cmd;//2ae3短指令特征值 +extern uint16_t data2ae4Cmd; +extern uint16_t data2ae5Cmd; +extern uint16_t data2ae1Cmd;//安卓消息来电 extern uint16_t ble_nus_max_data_len; -// void svr_bluetooth_init(void);//蓝牙服务初始化 +extern uint16_t alipay_handle; +extern uint16_t g_ble_conn_id; +extern uint16_t g_ble_server_handle; +void svr_bluetooth_init(void);//蓝牙服务初始化 void closeBle(void);//主动关闭蓝牙 void openBle(void);//主动开启蓝牙 void svr_ble_adv_start_param(void);//开始蓝牙广播 @@ -31,6 +36,7 @@ void srv_ble_server_register_gatt_callbacks(void); errcode_t svr_ble_bt_gatts_noyify(uint8_t *data, uint16_t data_len); void svr_ble_adv_start(void); void svr_ble_adv_stop(void); +void ble_avd_mode_change(uint8_t mode); #ifdef __cplusplus } #endif diff --git a/code/sdk/drivers/boards/brandy_evb/board_config/board_evb.h b/code/sdk/drivers/boards/brandy_evb/board_config/board_evb.h index 822ed8685..14902396b 100755 --- a/code/sdk/drivers/boards/brandy_evb/board_config/board_evb.h +++ b/code/sdk/drivers/boards/brandy_evb/board_config/board_evb.h @@ -268,11 +268,16 @@ const hal_gpio_config_t g_gpio_function_config[PIN_MAX_NUMBER] = { //S_AGPIO_L21 NTC_VDD_ON 给低打开 NTC上拉电源 ,默认关闭 { S_AGPIO_L21, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, - -// #define GPIO_PIN_ENABLE_CHARGE S_AGPIO_R9 -// #define GPIO_PIN_ENABLE_CHARGE_0_2C S_AGPIO_L20 //低电流充电 +#if 1 //默认正常充电 +// #define GPIO_PIN_ENABLE_CHARGE S_AGPIO_R9 //low enable +// #define GPIO_PIN_ENABLE_CHARGE_0_2C S_AGPIO_L20 //low 0.2c 低电流充电 + { S_AGPIO_R9, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, + { S_AGPIO_L20, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, +#else { S_AGPIO_R9, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, { S_AGPIO_L20, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL }, +#endif + //默认关闭马达 { S_AGPIO_R2, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, //默认开启 EXT LDO V3.0 V1.8 diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.c b/code/sdk/drivers/peripheral/utils/custom_utils.c index 322bcc6e0..73486935d 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils.c +++ b/code/sdk/drivers/peripheral/utils/custom_utils.c @@ -171,7 +171,7 @@ bool stop_custom_ble_service(void) { #ifdef SUPPORT_BLE_SERVICE PRINT("start custom protocol classic bt ble service !\r\n"); - ble_unregist_server(); + // ble_unregist_server(); closeBle(); // bool ret = disable_bt_stack(); #endif @@ -180,28 +180,29 @@ bool stop_custom_ble_service(void) bool start_alipay_ble_service(void) { - if(get_ble_status()) - { - PRINT("stop custom protocol classic bt ble service first !\r\n"); - stop_custom_ble_service(); - uapi_systick_delay_ms(20); - } - PRINT("start_alipay_ble_service !\r\n"); - svr_alipay_bluetooth_init(); + ble_avd_mode_change(1); + // if(get_ble_status()) + // { + // PRINT("stop custom protocol classic bt ble service first !\r\n"); + // stop_custom_ble_service(); + // uapi_systick_delay_ms(20); + // } + // PRINT("start_alipay_ble_service !\r\n"); + // svr_alipay_bluetooth_init(); return true; } bool stop_alipay_ble_service(void) { - - PRINT("stop_alipay_ble_service !\r\n"); - alipay_unregist_server(); - disable_bt_stack(); - if(custom_ble_service_on_flag()) - { - PRINT("start_custom_ble_service !\r\n"); - uapi_systick_delay_ms(20); - start_custom_ble_service(); - } + ble_avd_mode_change(0); + // PRINT("stop_alipay_ble_service !\r\n"); + // alipay_unregist_server(); + // disable_bt_stack(); + // if(custom_ble_service_on_flag()) + // { + // PRINT("start_custom_ble_service !\r\n"); + // uapi_systick_delay_ms(20); + // start_custom_ble_service(); + // } return true; } void startup_post_init_task(void) @@ -210,9 +211,9 @@ void startup_post_init_task(void) PRINT("startup_post_init_task !\r\n"); uapi_calendar_recover_date(); - if(custom_ble_service_on_flag()) + if(!custom_ble_service_on_flag()) { - start_custom_ble_service(); + stop_custom_ble_service(); } initScreenBrightness();