1、由于插vbus重启无法检测vbus存在,临时取消关闭充电的步骤。 48/1 48/head 49/target/1
authorSnickerSun <snickersun@163.com>
Fri, 19 Apr 2024 01:04:35 +0000 (09:04 +0800)
committerSnickerSun <snickersun@163.com>
Fri, 19 Apr 2024 01:04:35 +0000 (09:04 +0800)
2、更新邓工的蓝牙相关提交,alipay和bleService共存。
3、启动常亮时间从25秒改为15秒

16 files changed:
code/sdk/application/battery/service/battery_service.cpp
code/sdk/application/brandy/brandy_standard/thread_pri_init.c
code/sdk/application/wearable/alipay/service/alipay_bluetooth.c
code/sdk/application/wearable/alipay/service/alipay_bluetooth.h
code/sdk/application/wearable/alipay/service/alipay_feature.c
code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/fd230app/nativeui/alipay/src/AlipayPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp
code/sdk/application/wearable/ohos_startup/ohosfwk_startup.c
code/sdk/application/wearable/service/ble_service/blemoder/bletest.h
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.c
code/sdk/application/wearable/service/ble_service/bleservice/bleEvent.h
code/sdk/application/wearable/service/ble_service/bleservice/bleService.c
code/sdk/application/wearable/service/ble_service/bleservice/bleService.h
code/sdk/drivers/boards/brandy_evb/board_config/board_evb.h
code/sdk/drivers/peripheral/utils/custom_utils.c

index da74324..b34d46d 100644 (file)
@@ -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) 
index a98cd54..a2dbe48 100755 (executable)
@@ -379,6 +379,8 @@ static void thread_main(const void *unused)
     cat1_server_init();\r
 #endif\r
 \r
+    start_custom_ble_service();\r
+\r
     startup_post_init();\r
 \r
     set_startup_finish_flag();\r
index ef70ddf..4656be5 100644 (file)
 \r
 #include "wearable_log.h"\r
 #ifdef SUPPORT_ALIPAY_SEC\r
+#include "bleService.h"\r
+#include "alipay_bluetooth.h"\r
 \r
-/* Gatt service UUID */\r
-#define ALIPAYY_SERVICE_ID 0x0238\r
-/* Gatt Characteristic UUID */\r
-#define ALIPAYY_CHARACTERISTIC_ID 0x024A\r
-/* Client Characteristic Configuration UUID */\r
-#define ALIPAYY_BLE_UUID_CLIENT_CHARACTERISTIC_CONF 0x2902\r
-/* Gatt Characteristic max length */\r
-#define ALIPAY_CHARACTERISTIC_MAX_LENGTH 256\r
-#define ALIPAY_BLE_ADV_ID 1\r
-#define ALIPAY_BLE_ADV_DATA_MAX_LENGTH 31\r
-#define ALIPAY_BLE_ADV_BLE_NAME_MAX_LENGTH 13 // 31-4-2-3-9 = 13\r
-#define ALIPAY_BLE_NAME_LENGTH 20\r
-#define ALIPAY_BLE_ADV_MAC_HEAD_LENTH 4\r
-#define ALIPAY_BLE_ADV_MAC_LENTH 10\r
-#define ALIPAY_BLE_ADV_TYPE_LENTH 3\r
-#define ALIPAY_BLE_ADV_UUID_LENTH 4\r
-#define ALIPAY_BLE_DEFAULT_NAME  "WatchDemo"\r
-#define ALIPAY_BLE_DEFAULT_NAME_LEN 9 \r
-\r
+static uint8_t alipay_scan_data[16] ={0};\r
 // Alipay 蓝牙模块全局变量\r
 static gap_ble_callbacks_t g_alipay_gapble_cbs;\r
 static gatts_callbacks_t g_alipay_gatts_cbs;\r
@@ -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};\r
 static const uint8_t alipay_adv_uuid[ALIPAY_BLE_ADV_UUID_LENTH] = {0x3, 0x3, 0x02, 0x38};\r
 \r
-static bool svr_alipay_get_adv_start_state(void)\r
+bool svr_alipay_get_adv_start_state(void)\r
 {\r
     return g_alipay_adv_start_state;\r
 }\r
-static void svr_alipay_set_adv_start_state(bool state)\r
+void svr_alipay_set_adv_start_state(bool state)\r
 {\r
     g_alipay_adv_start_state = state;\r
 }\r
@@ -62,38 +46,57 @@ void svr_alipay_ble_adv_stop(void)
 {\r
     gap_ble_stop_adv(ALIPAY_BLE_ADV_ID);\r
 }\r
-\r
+void svr_alipay_ble_adv_start_t(void)\r
+{\r
+    gap_ble_start_adv(ALIPAY_BLE_ADV_ID);\r
+}\r
 /* adapt ios adv data. */\r
 static void svr_alipay_ble_adv_data_set(int adv_id)\r
 {\r
-    uint8_t ble_name[ALIPAY_BLE_NAME_LENGTH] = {0};\r
-    uint8_t ble_name_len = ALIPAY_BLE_NAME_LENGTH;\r
-    uint8_t adv_data[ALIPAY_BLE_ADV_DATA_MAX_LENGTH] = {0};\r
+     uint8_t ble_name[32] = {0};\r
+    uint8_t ble_name_len = 32;\r
+    uint8_t adv_data[31] = {0};\r
     uint8_t adv_data_len = 0;\r
-    uint8_t ble_data_name[ALIPAY_BLE_ADV_BLE_NAME_MAX_LENGTH + 1 ] = {0}; // +TYPE LENGTH\r
+    uint8_t scan_data_len = 0;\r
+    uint8_t ble_data_name[13 + 1 ] = {0}; // +TYPE LENGTH\r
     uint8_t ble_data_mac_switch[BD_ADDR_LEN] = {0};\r
-    uint8_t adv_mac_head[ALIPAY_BLE_ADV_MAC_LENTH] = {0x9, 0x16, 0x02, 0x38};\r
+    uint8_t adv_mac_head[10] = {0x9, 0x16, 0x02, 0x38};\r
     gap_ble_config_adv_data_t adv_data_info;\r
     memset_s(&adv_data_info, sizeof(gap_ble_config_adv_data_t), 0, sizeof(gap_ble_config_adv_data_t));\r
+    unsigned char addr[6] = {0};\r
+    unsigned int len = 6;\r
+    errcode_t ret = 0;\r
 \r
-    int32_t ret = gap_ble_get_local_name(ble_name, &ble_name_len);\r
-    // if (ret != 0) \r
-    {\r
-        ALIPAY_PRINT_ERR(0, "gap_ble_get_local_name fail, name:%s,len:%u,ret:%u.", ble_name, ble_name_len, ret);\r
-        memset_s(ble_name, ALIPAY_BLE_NAME_LENGTH, 0, ALIPAY_BLE_NAME_LENGTH);\r
-        memcpy_s(ble_name, ALIPAY_BLE_NAME_LENGTH, ALIPAY_BLE_DEFAULT_NAME, ALIPAY_BLE_DEFAULT_NAME_LEN);\r
-        ble_name_len = ALIPAY_BLE_DEFAULT_NAME_LEN + 1;        \r
-    }\r
-    ALIPAY_PRINT_DEBUG(0, "gap_ble_get_local_name name:%s,len:%u,ret:%u.", ble_name, ble_name_len, ret);\r
 \r
     bd_addr_t addr_info;\r
-    ret = gap_ble_get_local_addr(&addr_info);\r
-    ALIPAY_PRINT_DEBUG(0, "gap_ble_get_local_addr, ret:%u.", ret);\r
+    memset(addr,0,6);\r
+    bluetooth_get_local_addr(&addr[0],len);\r
+    char watchName[32];\r
+    memset_s(watchName, sizeof(watchName), 0, sizeof(watchName));\r
+    (void)sprintf_s(watchName, sizeof(watchName), "%s",ALIPAY_BLE_DEFAULT_NAME);\r
+    // (void)sprintf_s(watchName, sizeof(watchName), "%s",BLE_DEFAULT_NAME);\r
+\r
+    ret = bluetooth_set_local_name((unsigned char*)watchName, strlen((char*)watchName) + 1);\r
+    if (ret == false) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt SetLocalName ret = 0x%x", ret);\r
+    }\r
+\r
+   \r
+    ret = bluetooth_get_local_name(ble_name, &ble_name_len);\r
+    if (ret != 0) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_get_local_name fail, name:%s,len:%u,ret:%u.", ble_name, ble_name_len, ret);\r
+        memset_s(ble_name, 32, 0, 32);\r
+        memcpy_s(ble_name, 32,ALIPAY_BLE_DEFAULT_NAME, 32);\r
+        ble_name_len = 32 + 1;        \r
+    }\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_get_local_name name:%s,len:%u,ret:%u.", ble_name, ble_name_len, ret);\r
+\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_get_local_addr, ret:%u.", ret);\r
     memcpy_s(adv_data, sizeof(alipay_adv_type), alipay_adv_type, sizeof(alipay_adv_type));\r
     adv_data_len = sizeof(alipay_adv_type);\r
 \r
-    if (ble_name_len > ALIPAY_BLE_ADV_BLE_NAME_MAX_LENGTH) {\r
-        ble_name_len = ALIPAY_BLE_ADV_BLE_NAME_MAX_LENGTH;\r
+    if (ble_name_len > 13) {\r
+        ble_name_len = 13;\r
     }\r
     ble_data_name[0] = ble_name_len;\r
     ble_data_name[1] = 0x9;\r
@@ -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);\r
 \r
     adv_data_len = adv_data_len + ble_name_len + 1;\r
-    memcpy_s(adv_data + adv_data_len, sizeof(alipay_adv_uuid), alipay_adv_uuid, sizeof(alipay_adv_uuid));\r
-    adv_data_len = adv_data_len + sizeof(alipay_adv_uuid);\r
+    // memcpy_s(adv_data + adv_data_len, sizeof(alipay_adv_uuid), alipay_adv_uuid, sizeof(alipay_adv_uuid));//这是tx power\r
+    // adv_data_len = adv_data_len + sizeof(alipay_adv_uuid);\r
+\r
     int k = BD_ADDR_LEN;\r
     for (int i = 0; i < BD_ADDR_LEN; i++) {\r
-        ble_data_mac_switch[--k] = addr_info.addr[i];\r
+        ble_data_mac_switch[--k] = addr[i];\r
     }\r
-    ALIPAY_PRINT_ERR(0, "ble_info:%02x:%02x:%02x:%02x:%02x:%02x", ble_data_mac_switch[0], ble_data_mac_switch[1],\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble_info:%02x:%02x:%02x:%02x:%02x:%02x", ble_data_mac_switch[0], ble_data_mac_switch[1],\r
         ble_data_mac_switch[2], ble_data_mac_switch[3], ble_data_mac_switch[4], ble_data_mac_switch[5]);\r
-    memcpy_s(adv_mac_head + ALIPAY_BLE_ADV_MAC_HEAD_LENTH, BD_ADDR_LEN, ble_data_mac_switch, BD_ADDR_LEN);\r
+    memcpy_s(adv_mac_head + 4, BD_ADDR_LEN, ble_data_mac_switch, BD_ADDR_LEN);\r
 \r
     memcpy_s(adv_data + adv_data_len, sizeof(adv_mac_head), adv_mac_head, sizeof(adv_mac_head));\r
     adv_data_len = adv_data_len + sizeof(adv_mac_head);\r
 \r
-//    uint8_t scan_data[20];\r
-//    memset(scan_data,0,20);\r
-//    adv_data_info.scan_rsp_data = scan_data;\r
-//    adv_data_info.scan_rsp_length = 0;\r
-    adv_data_info.adv_data = adv_data;\r
-    adv_data_info.adv_length = adv_data_len;\r
-    ALIPAY_PRINT_ERR(0, "adv_data_info.adv_length:%u.", adv_data_len);\r
-\r
-    errcode_t gap_ret = gap_ble_set_adv_data(adv_id, &adv_data_info);\r
-    ALIPAY_PRINT_ERR(0, "adv_data_info.adv_length: gap_ret %d.", gap_ret);\r
+    memset(alipay_scan_data,0,16);\r
+    \r
+    alipay_scan_data[0] = 0x09;//长度\r
+    alipay_scan_data[1] = 0xff;//数据类型 manufactory data\r
+    alipay_scan_data[2] = 'J';\r
+    alipay_scan_data[3] = 'H';\r
+    alipay_scan_data[4] = ble_data_mac_switch[0];\r
+    alipay_scan_data[5] = ble_data_mac_switch[1];\r
+    alipay_scan_data[6] = ble_data_mac_switch[2];\r
+    alipay_scan_data[7] = ble_data_mac_switch[3];\r
+    alipay_scan_data[8] = ble_data_mac_switch[4];\r
+    alipay_scan_data[9] = ble_data_mac_switch[5];\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "adv_data_info.adv_length.scan_data_len:%d\r\n",scan_data_len);\r
+    scan_data_len = 10;\r
+    if (scan_data_len > 16){\r
+        scan_data_len = 16;\r
+    }\r
+    adv_data_info.scan_rsp_data = alipay_scan_data;//扫描数据\r
+    adv_data_info.scan_rsp_length = scan_data_len;//扫描长度\r
+    adv_data_info.adv_data = adv_data;//广播数据 \r
+    adv_data_info.adv_length = adv_data_len;//广播长度\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "adv_data_info.adv_length:%u. scan_data_len:%d\r\n", adv_data_len,scan_data_len);\r
+    ret =  gap_ble_set_adv_data(adv_id, &adv_data_info);\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "alipay avd:%x\r\n", ret);\r
     return;\r
 }\r
 \r
@@ -164,7 +182,9 @@ static void svr_alipay_ble_connstate_change_cb(unsigned short conn_id, bd_addr_t
         conn_state, pair_state);\r
     g_alipay_conn_id = conn_id;\r
     if (GAP_BLE_STATE_DISCONNECTED == conn_state) { // restart ble adv when disconnected\r
-        svr_alipay_ble_adv_start();\r
+        // svr_alipay_ble_adv_start();\r
+        // svr_alipay_reset_init();\r
+        gap_ble_start_adv(ALIPAY_BLE_ADV_ID);\r
     } else {\r
         svr_alipay_set_adv_start_state(false);\r
     }\r
@@ -185,14 +205,16 @@ static void svr_alipay_ble_adv_stop_cb(uint8_t adv_id, adv_status_t status)
 {\r
     ALIPAY_PRINT_DEBUG(0, "BleAdvStopCallback adv_id: %d, status:%d\n", adv_id, status);\r
 }\r
-\r
+// static uint16_t alipay_server_handle = 0;\r
 static void svr_alipay_bt_gatts_service_add_cb(uint8_t server_id, bt_uuid_t *uuid, uint16_t srv_handle,\r
     errcode_t status)\r
 {\r
+    // alipay_server_handle = srv_handle;\r
     ALIPAY_PRINT_DEBUG(0, "BtGattsServiceAddCallback 0x%x 0x%x 0x%x 0x%x", status, server_id, srv_handle,\r
         *((uint16_t *)uuid->uuid));\r
     int ret;\r
-    if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t *)uuid->uuid) == ALIPAYY_SERVICE_ID)) {\r
+    // if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t *)uuid->uuid) == ALIPAYY_SERVICE_ID)) \r
+    {\r
         uint16_t id = ALIPAYY_CHARACTERISTIC_ID;\r
         gatts_add_chara_info_t character;\r
         uint16_t value = 0;\r
@@ -221,7 +243,8 @@ static void svr_alipay_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid
 \r
     g_alipay_server_handle = result->value_handle;\r
 \r
-    if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t *)uuid->uuid) == ALIPAYY_CHARACTERISTIC_ID)) {\r
+    // if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t *)uuid->uuid) == ALIPAYY_CHARACTERISTIC_ID)) \r
+    {\r
         uint8_t bas_ccc_val[] = {\r
             0x01,\r
             0x00\r
@@ -261,7 +284,61 @@ static void svr_alipay_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid
         }\r
     }\r
 }\r
-\r
+//添加alipay 特征和描述符\r
+void svr_alipay_bt_gatts_characteristic_add_dec(uint8_t server_id,uint16_t srv_handle)\r
+{\r
+    int ret = 0;\r
+    uint16_t id = ALIPAYY_CHARACTERISTIC_ID;\r
+    gatts_add_chara_info_t character;\r
+    uint16_t value = 0;\r
+\r
+    memset_s(&character, sizeof(gatts_add_chara_info_t), 0, sizeof(gatts_add_chara_info_t));\r
+    character.chara_uuid.uuid_len = sizeof(id);\r
+    memcpy_s(character.chara_uuid.uuid, sizeof(character.chara_uuid.uuid), (char *)&id, sizeof(id));\r
+    character.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE;\r
+    character.properties =\r
+        GATT_CHARACTER_PROPERTY_BIT_READ | GATT_CHARACTER_PROPERTY_BIT_WRITE | GATT_CHARACTER_PROPERTY_BIT_NOTIFY;\r
+    character.value_len = ALIPAY_CHARACTERISTIC_MAX_LENGTH;\r
+    character.value = g_alipay_character_buf;\r
+\r
+    ret = gatts_add_characteristic(server_id, srv_handle, &character);\r
+    if (ret != ERRCODE_SUCC) {\r
+        ALIPAY_PRINT_ERR(0, "gatts_add_characteristic fail, ret:%u.\r\n", ret);\r
+    }\r
+    uint8_t bas_ccc_val[] = {\r
+        0x01,\r
+        0x00\r
+    };\r
+    bt_uuid_t ccc_uuid = { 0 };\r
+    bts_data_to_uuid_len2(0x2902, &ccc_uuid);\r
+    gatts_add_desc_info_t descriptor;\r
+    descriptor.desc_uuid = ccc_uuid;\r
+    descriptor.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE;\r
+    descriptor.value_len = (uint16_t)sizeof(bas_ccc_val);\r
+    descriptor.value = bas_ccc_val;\r
+\r
+    ret = gatts_add_descriptor(server_id, srv_handle, &descriptor);\r
+    if (ret != ERRCODE_SUCC) {\r
+        ALIPAY_PRINT_ERR(0, "gatts_add_descriptor fail, ret:%u.\r\n", ret);\r
+    }\r
+    bd_addr_t addr_info;\r
+    gatts_add_desc_info_t descriptor_ap;\r
+    gap_ble_get_local_addr(&addr_info);\r
+    bts_data_to_uuid_len2(0x4b02, &ccc_uuid);\r
+    descriptor_ap.desc_uuid = ccc_uuid;\r
+    descriptor_ap.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE;\r
+    descriptor_ap.value_len = BD_ADDR_LEN;\r
+    uint8_t ble_data_mac_switch[BD_ADDR_LEN] = {0};\r
+    int k = BD_ADDR_LEN;\r
+    for (int i = 0; i < BD_ADDR_LEN; i++) {\r
+        ble_data_mac_switch[--k] = addr_info.addr[i];\r
+    }\r
+    descriptor_ap.value = ble_data_mac_switch;\r
+    ret = gatts_add_descriptor(server_id, srv_handle, &descriptor_ap);\r
+    if (ret != ERRCODE_SUCC) {\r
+        ALIPAY_PRINT_ERR(0, "gatts_add_descriptor second fail, ret:%u.\r\n", ret);\r
+    }\r
+}\r
 static void svr_alipay_bt_gatts_descriptor_add_cb(uint8_t server_id, bt_uuid_t *uuid, uint16_t srv_handle,\r
     uint16_t desc_handle, errcode_t status)\r
 {\r
@@ -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)\r
 {\r
     gatts_ntf_ind_t data_info;\r
-    data_info.attr_handle = g_alipay_server_handle;\r
+    data_info.attr_handle = alipay_handle;\r
     data_info.value = data;\r
     data_info.value_len = data_len;\r
 \r
-    errcode_t ret = gatts_notify_indicate(g_alipay_server_id, g_alipay_conn_id, &data_info);\r
-    ALIPAY_PRINT_ERR(0, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.", ret, g_alipay_server_id,\r
-        g_alipay_conn_id, g_alipay_server_handle);\r
+    errcode_t ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &data_info);\r
+    ALIPAY_PRINT_ERR(0, "gatts_notify_indicate ret:0x%x. serverid:%u,conn_id:%u,handle:%u.", ret, g_ble_server_id,\r
+        g_ble_conn_id, alipay_handle);\r
 }\r
 \r
 static void svr_alipay_btcallback_reg(void)\r
@@ -333,30 +410,37 @@ static void svr_alipay_btcallback_reg(void)
     g_alipay_gatts_cbs.mtu_changed_cb = NULL;\r
     gatts_register_callbacks(&g_alipay_gatts_cbs);\r
 }\r
+//gatts_unregister_server\r
 \r
-static void svr_alipay_bt_init_gatts(void)\r
+void svr_alipay_bt_init_gatts(void)\r
 {\r
-    uint16_t service_id = ALIPAYY_SERVICE_ID;\r
-    uint8_t server_id = 0;\r
-    bt_uuid_t uuid;\r
     int ret;\r
-\r
-    uuid.uuid_len = sizeof(service_id);\r
-    memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&service_id, sizeof(service_id));\r
-    ret = gatts_register_server(&uuid, &server_id); /* 注册gatt server */\r
+    bt_uuid_t alipay_service_uuid = {0};\r
+    bts_data_to_uuid_len2(ALIPAYY_SERVICE_ID, &alipay_service_uuid);\r
+    //只有一个服务,永远是1\r
+    ret = gatts_add_service(1, &alipay_service_uuid, true);\r
     if (ret != ERRCODE_SUCC) {\r
-        ALIPAY_PRINT_ERR(0, "gatts_register_server ret:%u.\r\n", ret);\r
+         ALIPAY_PRINT_ERR(0, "svr_alipay_bt_init_gatts ret:%u.\r\n", ret);\r
     }\r
-    ALIPAY_PRINT_ERR(0, "gatts_register_server ret: 0x%x server_id = 0x%x", ret, server_id);\r
-    g_alipay_server_id = server_id;\r
-    uuid.uuid_len = sizeof(service_id);\r
-    memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&service_id, sizeof(service_id));\r
-    ret = gatts_add_service(server_id, &uuid, true);\r
-    if (ret != ERRCODE_SUCC) {\r
-         //ALIPAY_PRINT_ERR(0, "gatts_add_service ret:%u.\r\n", ret);\r
-    }\r
-    ALIPAY_PRINT_ERR(0, "gatts_add_service ret:%u.\r\n", ret);\r
+\r
     return;\r
+    // uint16_t id = ALIPAYY_SERVICE_ID;\r
+    // uint16_t srevr_id = ALIPAYY_SERVICE_ID;\r
+    // uint16_t ser_id = 0x1fff;\r
+    // uint8_t serverId = 0;\r
+    // bt_uuid_t uuid;\r
+    // errcode_t ret = 0;\r
+    // uuid.uuid_len = (uint8_t)sizeof(srevr_id);\r
+    // memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&srevr_id, sizeof(srevr_id));\r
+    // ret = gatts_register_server(&uuid, &serverId); /* 注册gatt server */\r
+    // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_register_server ret: 0x%x serverId = 0x%x uuid.uuid_len:%d", ret, serverId,uuid.uuid_len);\r
+    // g_alipay_server_id = serverId;\r
+    // // svr_alipay_bt_init_gatts();\r
+    // bt_uuid_t ble_service_uuid = {0};\r
+    // bts_data_to_uuid_len2(id, &ble_service_uuid);\r
+    // ret = gatts_add_service(serverId, &ble_service_uuid, true);\r
+    // return;\r
+\r
 }\r
 void alipay_unregist_server(void)\r
 {\r
@@ -376,11 +460,11 @@ void svr_alipay_bluetooth_init(void)
         ALIPAY_PRINT_ERR(0, "enable_bt_stack ret:%u.\r\n", ret);\r
     }\r
     if (g_alipay_ble_init_flag == true) {\r
-        return;\r
+        // return;\r
     }\r
     svr_alipay_btcallback_reg();\r
     svr_alipay_bt_init_gatts();\r
-    //svr_alipay_ble_adv_start();\r
+    svr_alipay_ble_adv_start();\r
     g_alipay_ble_init_flag = true;\r
     return;\r
 }\r
index ec8367a..dac57ee 100644 (file)
@@ -3,12 +3,12 @@
 #include <stdint.h>
 #include <stdio.h>
 #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 */
 #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
 
index 542527a..bcc71ae 100755 (executable)
@@ -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();
index e1a3f45..7115ef3 100644 (file)
@@ -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");
index 388d10f..eccfd36 100644 (file)
@@ -51,7 +51,7 @@ void AlipayPresenter::OnStart()
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlipayPresenter OnStart");\r
     Presenter<AlipayMainView>::OnStart();\r
     /**启动alipay蓝牙服务*/\r
-    start_alipay_ble_service();\r
+    // start_alipay_ble_service();\r
     /* -------------------------------- 设置支付宝界面常亮 ------------------------------- */\r
     alipayMode_->AlipayScreenControl(true);\r
     /* -------------------------------------------------------------------------- */\r
@@ -73,7 +73,7 @@ void AlipayPresenter::OnStop(void)
 {\r
 \r
     /**关闭alipay蓝牙服务*/\r
-    stop_alipay_ble_service();\r
+    // stop_alipay_ble_service();\r
 \r
     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlipayPresenter OnStop");\r
     svr_alipay_destroy_task();\r
index 411616b..1af4453 100644 (file)
@@ -95,10 +95,10 @@ void BluetoothModel::Init()
 \r
 #endif\r
 \r
-    /**初始化 经典蓝牙callback  经典蓝牙不改动,因此启动就初始化好 */\r
-    BtInitCallBacks();\r
+    // /**初始化 经典蓝牙callback  经典蓝牙不改动,因此启动就初始化好 */\r
+    // BtInitCallBacks();\r
 \r
-    /**启动spp服务 */\r
+    // /**启动spp服务 */\r
     // BtInitSpp();\r
 \r
     SetUpListCase();\r
index 3021db8..01279dd 100755 (executable)
@@ -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
 
     
index 26067d9..085f0bb 100644 (file)
@@ -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,//
index c4e7ba1..d1bce8c 100644 (file)
@@ -38,14 +38,19 @@ extern "C" {
 #include "errcode.h"\r
 #define PHONE_WATCH_CONFIG_PATH "/user/userdata/phone_watch.json"\r
 #define ALARM_DATA_CONFIG_PATH "/user/userdata/alarm_test.json"\r
+#define ANCS_DATA_CONFIG_PATH "/user/userdata/ancs.json"\r
 #include "bletest.h"\r
 #define DEBUG_TEST (0)\r
+#define CRC_CHECK_ERR 0 //crc校验失败\r
+#define JSON_CHECK_OK 1 //json解析成功\r
+#define JSON_CHECK_ERR 2 //json解析失败\r
 \r
 uint8_t *bigDataBuf = NULL;//大数据buf\r
 uint8_t bigDataBufLen=0;\r
 bool sendbigDataBufState = false;//发送大数据表示不要被其他指令打断\r
 bool recvBigDataBufState = false;//接收大数据标志\r
 static bool muiltFlag = 0;//多包数据flag\r
+static bool ANCSBigBufFlag = 0;//ANCS多包数据flag\r
 static uint16_t data_len = 0;\r
 ble_recv_data_info_t ble_recv_data;\r
 ble_recv_msg_callback_t g_recv_msg_toUI = NULL;\r
@@ -4174,6 +4179,169 @@ void bleLongRecvData(uint8_t *data, uint16_t data_size,uint8_t *buf_cmd,uint8_t
     }\r
 }\r
 \r
+//安卓消息接收解析数据 //ANCS 2AE1\r
+uint8_t jscheck_ancs(uint8_t *data)\r
+{\r
+    \r
+    uint8_t *json;\r
+    json = data;\r
+    cJSON* root = cJSON_Parse((const char *)json);\r
+    if (root == NULL) {\r
+        printf("信息解析 JSON解析\n");\r
+        return 2;\r
+    }\r
+\r
+    int uid_t = 0;\r
+    int appid_t = 0;\r
+    char titleBuf[256];\r
+    char msgBuf[300];\r
+    char timeBuf[32];\r
+    int hasCode_t = 0;\r
+    cJSON* uid = cJSON_GetObjectItem(root, "uid");\r
+    if (cJSON_IsNumber(uid)) {\r
+        printf("uid_t: %d\n", uid->valueint);\r
+    }\r
+    cJSON* appid = cJSON_GetObjectItem(root, "appid");\r
+    if (cJSON_IsNumber(appid)) {\r
+        printf("appid_t: %d\n", appid->valueint);\r
+        appid_t = appid->valueint;\r
+    }\r
+    cJSON* title_c = cJSON_GetObjectItem(root, "title");\r
+    if (cJSON_IsString(title_c)) {\r
+        printf("titleBuf: %s\n", title_c->valuestring);\r
+        title_c->valuestring[strlen(title_c->valuestring)]='\0';\r
+        memcpy(titleBuf,title_c->valuestring,strlen(title_c->valuestring));\r
+    }\r
+    cJSON* msg = cJSON_GetObjectItem(root, "msg");\r
+    if (cJSON_IsString(msg)) {\r
+        printf("msgBuf: %s\n", msg->valuestring);\r
+        // msgBuf = msg->valuestring;\r
+        msg->valuestring[strlen(msg->valuestring)]='\0';\r
+        memcpy(msgBuf,msg->valuestring,strlen(msg->valuestring));\r
+    }\r
+    cJSON* time = cJSON_GetObjectItem(root, "time");\r
+    if (cJSON_IsString(time)) {\r
+        printf("time: %s\n", time->valuestring);\r
+        // timeBuf = time->valueint;\r
+        time->valuestring[strlen(time->valuestring)]='\0';\r
+        memcpy(timeBuf,time->valuestring,strlen(time->valuestring));\r
+\r
+       \r
+    }\r
+    cJSON* hasCode = cJSON_GetObjectItem(root, "hasCode");\r
+    if (cJSON_IsNumber(hasCode)) {\r
+        printf("hasCode_t: %d\n", hasCode->valueint);\r
+        hasCode_t = hasCode->valueint;\r
+    }\r
+    cJSON_Delete(root);\r
+    uint8_t buf_size = 0;\r
+    FILE *jsfile = fopen(ANCS_DATA_CONFIG_PATH, "r");\r
+    cJSON *data_root;\r
+    if (jsfile != NULL) {\r
+        printf("succes opening file\n");\r
+        fseek(jsfile, 0, SEEK_END);\r
+        long fileSize = ftell(jsfile);\r
+        fseek(jsfile, 0, SEEK_SET);\r
+\r
+        char *jsonData = (char *)malloc(fileSize + 1);\r
+        fread(jsonData, 1, fileSize, jsfile);\r
+        jsonData[fileSize] = '\0';\r
+        fclose(jsfile);\r
+\r
+        // 解析JSON数据\r
+        printf("jsonData %s",jsonData);\r
+        data_root= cJSON_Parse(jsonData);\r
+        // data_root = cJSON_GetObjectItem(modifiedJson,"infor");\r
+        free(jsonData);\r
+    }else{\r
+        data_root = cJSON_Parse("{\\r
+        \"infor\": [\\r
+        ]}");\r
+    }\r
+    cJSON *dataJSON = cJSON_CreateObject();\r
+\r
+    cJSON *detialJSON = cJSON_CreateObject();\r
+\r
+    cJSON* itemJSON = cJSON_CreateObject();\r
+\r
+    \r
+    \r
+    cJSON_AddNumberToObject(itemJSON,"uid",uid_t);\r
+    cJSON_AddNumberToObject(itemJSON,"appid_t",appid_t);\r
+    cJSON_AddStringToObject(itemJSON,"title",titleBuf);\r
+    cJSON_AddStringToObject(itemJSON,"msg",msgBuf);\r
+    cJSON_AddStringToObject(itemJSON,"time",timeBuf);\r
+    cJSON_AddNumberToObject(itemJSON,"hasCode",hasCode_t);\r
+    cJSON *dataList = cJSON_GetObjectItem(data_root, "infor");\r
+    // printf("dataList %s",dataList);\r
+    cJSON *array = cJSON_GetObjectItemCaseSensitive(data_root, "infor");\r
+    cJSON_AddItemToArray(array, itemJSON);\r
+\r
+    // char *modified_json = cJSON_Print(data_root);\r
+\r
+\r
+    char *jsonString = cJSON_Print(data_root);\r
+    printf("ancs %s",jsonString);\r
+    FILE *file = fopen(ANCS_DATA_CONFIG_PATH, "wb");\r
+    if (file)\r
+    {\r
+        fwrite(jsonString, 1, strlen(jsonString), file);\r
+        fclose(file);\r
+    }\r
+    free(jsonString);\r
+    return 1;\r
+}\r
+void ancsDataShowCmd(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//\r
+{\r
+    uint8_t value[19];\r
+    memset(value,0,19);\r
+    uint32_t tmp = 1;\r
+    value[0] =0x72;\r
+    value[1] =0x02;\r
+    value[2] =0x01;\r
+    memcpy(value+3,&tmp,4);\r
+    memcpy(value+7,&tmp,4);\r
+    memcpy(value+11,&tmp,4);\r
+    memcpy(value+15,&tmp,2);\r
+    \r
+    if(Check_CRC(crcnum,len,crcvalue))\r
+    {\r
+        //解析ancs数据并且显示出来\r
+        uint8_t check_ok= 1;\r
+        check_ok = jscheck_ancs(crcnum);\r
+        value[17] = 1;\r
+        value[18] = Calculate_CRC(value,18);\r
+        sendBleData(value,19);\r
+    }else{\r
+        value[17] = 0;\r
+        value[18] = Calculate_CRC(value,18);\r
+        sendBleData(value,19);\r
+    }\r
+}\r
+void type2AE1Data(uint8_t *buf_cmd,uint8_t *data,uint16_t datalen,uint8_t *totalData,uint8_t crcvalue)\r
+{\r
+    uint16_t typeID = buf_cmd[1]*256+buf_cmd[2];\r
+    printf("type2AE1Data typeID:0x%x",typeID);\r
+    switch (typeID) //ID\r
+    {\r
+        case ANDROID_ANCS_CMD://app下发的获取用户信息\r
+            ancsDataShowCmd(typeID,data,datalen,totalData,crcvalue);\r
+            break;\r
+    }\r
+}\r
+void bleRecvANCSData(uint8_t *data, uint16_t data_size,uint8_t *buf_cmd,uint8_t *totalData,uint8_t crcvalue)//buf_cmd 指令前17个字节数据\r
+{\r
+    uint8_t type = buf_cmd[1];\r
+    printf("type:%d %d data_size:%d data:%d crcvalue:%x",buf_cmd[0],type,data_size,data[0],crcvalue);\r
+    switch (type)\r
+    {\r
+        case 0x03://获取手机信息\r
+            type2AE1Data(buf_cmd,data,data_size,totalData,crcvalue);\r
+            break;\r
+        default:\r
+            break;\r
+    }\r
+}\r
 \r
 uint32_t packdataLen = 0;\r
 uint32_t totalDataLen = 0;\r
@@ -4293,26 +4461,109 @@ void bleDataRecv(uint8_t *totalData, uint16_t event_size,uint16_t handle)
                     break;\r
                 }\r
             }\r
-            if(Bleconnect == false)//断开蓝牙不接收数据\r
+            \r
+        }\r
+    }\r
+    else if(data2ae1Cmd == handle)//安卓消息特征Hhandle\r
+    {\r
+        \r
+        while (1)\r
+        {\r
+            printf("ancs!!!!!!!!!");\r
+            if(ANCSBigBufFlag == 0)\r
             {\r
-                totalpack = 0;\r
-                muiltFlag = 0; \r
-                packdataLen = 0;\r
-                totalDataLen = 0;\r
-                if(bigDataBuf != NULL){\r
-                    free(bigDataBuf);\r
-                }\r
-                if(recvData != NULL){\r
-                    free(recvData);\r
+                if(event_size >= 17)\r
+                {\r
+                    packdataLen = event_size;//第一包的数据大小 第二包不走这里 514-17 = 497\r
+                    memcpy(&totalDataLen,totalData+7,4);//总的数据大小\r
+                    printf("ancs totalDataLen;%d totaldataLen:%d",totalDataLen,packdataLen);\r
+                    if(totalDataLen > event_size-18)//如果514-18 = 496 497 > 496 \r
+                    {\r
+                        printf("ancs totalDataLen;%d packdataLen:%d",totalDataLen,packdataLen);\r
+\r
+                        recvData = malloc(totalDataLen+18);\r
+                        if(recvData == NULL)return;\r
+                        ANCSBigBufFlag = 1;//表示有两包以上的数据\r
+                        memcpy(recvData,totalData,event_size);//从第十七个字节开始接收数据data\r
+                        memset(cmd_data,0,17);\r
+                        memcpy(cmd_data,totalData,17);\r
+                        totalpack=1;\r
+                        break;\r
+                    }else{//直接发送数据解析\r
+                        printf("ancs totalDataLen11;%d packdataLen:%d",totalDataLen,packdataLen);\r
+                        packdataLen = event_size-17;\r
+                        memset(cmd_data,0,17);\r
+                        memcpy(cmd_data,totalData,17);\r
+\r
+                        // 73 2 10 1 0 0 0 16 0 0 0 1 0 0 0 16 0\r
+                        recvData = malloc(packdataLen-1);\r
+                        if(recvData == NULL)return;\r
+                        memcpy(recvData,totalData+17,packdataLen-1);\r
+                        if(totalDataLen == 0){\r
+                            crcvalue = 0x00;\r
+                        }else{\r
+                            crcvalue = totalData[event_size-1];\r
+                        }\r
+                        \r
+                        bleRecvANCSData(recvData,packdataLen-1,cmd_data,totalData,crcvalue);\r
+                        if(recvData != NULL){\r
+                            free(recvData);\r
+                        }\r
+                        packdataLen = 0;\r
+                        break;\r
+                    }\r
                 }\r
                 break;\r
+                \r
+            }else//这是接收两包以上的数据\r
+            {\r
+                totalpack+=1;//包数\r
+                printf("ancs 122222;%d packdataLen:%d",totalDataLen,packdataLen);\r
+                memcpy(recvData+packdataLen,totalData,event_size); //先copy再加\r
+                packdataLen = packdataLen+event_size;\r
+                printf("ancs 133333;%d packdataLen:%d",totalDataLen,packdataLen);\r
+                if(totalDataLen >= (packdataLen-18))//总的数据包 packdataLen-18把前面17个字节的包头和一个字节的校验和去掉得到数据部分和校验和部分\r
+                {\r
+                    bigDataBuf = malloc(totalDataLen);\r
+                    crcvalue = totalData[event_size-1];\r
+                    memcpy(bigDataBuf,recvData+17,totalDataLen);\r
+                    bleRecvANCSData(bigDataBuf,totalDataLen,cmd_data,recvData,crcvalue);\r
+                    totalDataLen = 0;\r
+                    packdataLen = 0;\r
+                    ANCSBigBufFlag = 0;\r
+                    totalpack = 0; \r
+                    if(bigDataBuf != NULL){\r
+                        free(bigDataBuf);\r
+                    }\r
+                    if(recvData != NULL){\r
+                        free(recvData);\r
+                    }\r
+                    break;\r
+                }else{\r
+\r
+                    break;\r
+                }\r
             }\r
+            \r
+        }\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "xhandle %d,%d %d",data2ae3Cmd,data2ae4Cmd,handle);\r
+    }\r
+    if(Bleconnect == false)//断开蓝牙不接收数据\r
+    {\r
+        totalpack = 0;\r
+        muiltFlag = 0; \r
+        ANCSBigBufFlag = 0;\r
+        packdataLen = 0;\r
+        totalDataLen = 0;\r
+        recvBigDataBufState = false;\r
+        sendbigDataBufState = false;\r
+        if(bigDataBuf != NULL){\r
+            free(bigDataBuf);\r
+        }\r
+        if(recvData != NULL){\r
+            free(recvData);\r
         }\r
     }\r
-    // else if(data2ae5Cmd == handle)\r
-    // {\r
-    //      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "xhandle %d,%d %d",data2ae3Cmd,data2ae4Cmd,handle);\r
-    // }\r
 }\r
 void free_ble_data(void)//以防断开蓝牙没有释放数据类型\r
 {\r
@@ -4320,6 +4571,9 @@ void free_ble_data(void)//以防断开蓝牙没有释放数据类型
     muiltFlag = 0; \r
     packdataLen = 0;\r
     totalDataLen = 0;\r
+    ANCSBigBufFlag = 0;\r
+    recvBigDataBufState = false;\r
+    sendbigDataBufState = false;\r
     if(bigDataBuf != NULL){\r
         free(bigDataBuf);\r
     }\r
index ed6d214..e581233 100644 (file)
@@ -470,6 +470,10 @@ typedef struct
 }msg_get_other_target_info_t;//获取其他目标设置
 #pragma pack()
 
+/*********************ANCS********安卓指令********************/
+#define ANDROID_ANCS_CMD 0x0301
+
+
 /***********************长指令>20字节****************************************/
 /*******************TYPE+ID**********************/
 /*
index 5d9f924..b08205e 100644 (file)
@@ -67,7 +67,7 @@ extern "C" {
 #define BLE_DEFAULT_NAME_LEN 32\r
 #define BLE_MAC_MAX_LEN 6 //蓝牙mac地址最大个数6个\r
 \r
-\r
+static uint8_t exit_alipay_gui = 0;\r
 //  蓝牙模块全局变量\r
 static gap_ble_callbacks_t g_ble_gapble_cbs;\r
 static gatts_callbacks_t g_ble_gatts_cbs;\r
@@ -79,7 +79,7 @@ uint16_t g_ble_server_id = 1;
 \r
 static uint16_t g_ble_read_handle = 0;\r
 uint16_t g_ble_conn_id = 0;\r
-static uint16_t g_ble_server_handle = 0;\r
+uint16_t g_ble_server_handle = 0;\r
 static uint8_t g_ble_character_buf[BLE_CHARACTERISTIC_MAX_LENGTH] = {0};\r
 static bool g_ble_init_flag = false;\r
 static const uint8_t ble_adv_type[BLE_ADV_TYPE_LENTH] = {2, 1, 2};\r
@@ -99,9 +99,10 @@ uint16_t ble_nus_max_data_len = SDK_BLE_MTU_MIN - 3;
 #define A2DP_STREAM_ACCEPT_TIMER_PERIOD 500\r
 static osal_timer g_a2dp_stream_accept_timer = {NULL, NULL, 0, 0};\r
 \r
-uint8_t data2ae3Cmd = 0;//2ae3短指令特征值\r
-uint8_t data2ae4Cmd = 0;\r
-uint8_t data2ae5Cmd = 0;\r
+uint16_t data2ae3Cmd = 0;//2ae3短指令特征值\r
+uint16_t data2ae4Cmd = 0;\r
+uint16_t data2ae5Cmd = 0;\r
+uint16_t data2ae1Cmd = 0;//安卓消息来电\r
 #if 1//def SUPPORT_BLE_SERVICE\r
 static void set_phone_info(bd_addr_t *addr)//保存手机信息 包含手机mac地址\r
 {\r
@@ -245,9 +246,9 @@ static void svr_ble_adv_data_set(int adv_id)
 void svr_ble_adv_start_param(void)\r
 {\r
     int adv_id = BLE_ADV_ID;\r
-    if (AdverFlag == false) { //已经开始广播了,不需要重复开启广播\r
+    if (AdverFlag == true) { //已经开始广播了,不需要重复开启广播\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BleAdvStart already started1");\r
-        return;\r
+        // return;\r
     }\r
 \r
     gap_ble_adv_params_t adv_para;\r
@@ -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;\r
     if (GAP_BLE_STATE_DISCONNECTED == conn_state) { // restart ble adv when disconnected\r
         Bleconnect = GAP_BLE_STATE_DISCONNECTED;//蓝牙已断开\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GAP_BLE_STATE_DISCONNECTED!!! 0x%x ret:%d\r\n",pair_state,AdverFlag);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GAP_BLE_STATE_DISCONNECTED!!! 0x%x exit_alipay_gui:%d\r\n",pair_state,exit_alipay_gui);\r
         // if(AdverFlag == true){\r
-        svr_ble_adv_start();\r
-        free_ble_data();\r
+\r
+            if(exit_alipay_gui==0)\r
+            {\r
+                if(svr_alipay_get_adv_start_state())\r
+                {\r
+                    svr_alipay_set_adv_start_state(0);\r
+                    svr_alipay_ble_adv_stop();\r
+                    svr_ble_adv_start_param();\r
+\r
+                }\r
+                svr_ble_adv_start();\r
+            }\r
+            \r
+            free_ble_data();\r
         // }    \r
     } else {\r
         devpair_state = 0;//\r
@@ -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);\r
     }\r
 }\r
-static uint16_t ble_server_handle = 0;\r
+\r
 static uint8_t g_alipay_character_buf[256] = {0};\r
-void alipay_add_chart_decr_cb(uint8_t server_id,uint16_t srv_handle)\r
+static void alipay_add_chart_decr_recv_cmd1(uint8_t server_id,uint16_t srv_handle)\r
 {\r
     errcode_t ret = 0;\r
     // uint16_t id = ALIPAYY_CHARACTERISTIC_ID;\r
     gatts_add_chara_info_t character;\r
     uint16_t value = 0;\r
     bt_uuid_t alipay_service_uuid = {0};\r
-    bts_data_to_uuid_len2(0x4a02, &alipay_service_uuid);\r
+    bts_data_to_uuid_len2(ALIPAYY_CHARACTERISTIC_ID, &alipay_service_uuid);\r
     memset_s(&character, sizeof(gatts_add_chara_info_t), 0, sizeof(gatts_add_chara_info_t));\r
     // character.chara_uuid.uuid_len = sizeof(id);\r
     // memcpy_s(character.chara_uuid.uuid, sizeof    (character.chara_uuid.uuid), (char *)&id, sizeof(id));\r
@@ -589,6 +602,92 @@ void alipay_add_chart_decr_cb(uint8_t server_id,uint16_t srv_handle)
     if (ret != ERRCODE_SUCC) {\r
         ALIPAY_PRINT_ERR(0, "gatts_add_descriptor second fail, ret:%u.\r\n", ret);\r
     }\r
+}\r
+\r
+\r
+\r
+static uint16_t ble_server_handle = 0;\r
+\r
+void alipay_add_chart_decr_cb(uint8_t server_id,uint16_t srv_handle)\r
+{\r
+    errcode_t ret = 0;\r
+    static uint8_t ota_point_val[] = {0x00, 0x00};\r
+    gatts_add_chara_info_t character;\r
+    gatts_add_desc_info_t descriptor;\r
+    bts_data_to_uuid_len2(0x4a02, &character.chara_uuid);\r
+    character.permissions = GATT_ATTRIBUTE_PERMISSION_READ;\r
+    character.properties = BLE_CHARACTERISTIC_SNED_OTA_ID_PROPERTIES;\r
+    character.value_len = (uint16_t)sizeof(ota_point_val);\r
+    character.value = ota_point_val;\r
+\r
+    ret = gatts_add_characteristic(server_id, srv_handle, &character);\r
+    if (ret != ERRCODE_SUCC) {\r
+        // ALIPAY_PRINT_ERR(0, "gatts_add_characteristic fail, ret:%u.\r\n", ret);\r
+    }\r
+    bts_data_to_uuid_len2(0x2902, &descriptor.desc_uuid);\r
+    descriptor.permissions =  GATT_ATTRIBUTE_PERMISSION_WRITE|GATT_ATTRIBUTE_PERMISSION_READ;\r
+    descriptor.value_len = (uint16_t)sizeof(ota_point_val);\r
+    descriptor.value = ota_point_val;\r
+    \r
+    ret = gatts_add_descriptor(server_id, srv_handle, &descriptor);\r
+    if (ret != ERRCODE_SUCC) {\r
+        // ALIPAY_PRINT_ERR(0, "gatts_add_descriptor fail, ret:%u.\r\n", ret);\r
+    }\r
+    // errcode_t ret = 0;\r
+    // // uint16_t id = ALIPAYY_CHARACTERISTIC_ID;\r
+    // gatts_add_chara_info_t character;\r
+    // uint16_t value = 0;\r
+    // bt_uuid_t alipay_service_uuid = {0};\r
+    // bts_data_to_uuid_len2(0x4a02, &alipay_service_uuid);\r
+    // memset_s(&character, sizeof(gatts_add_chara_info_t), 0, sizeof(gatts_add_chara_info_t));\r
+    // // character.chara_uuid.uuid_len = sizeof(id);\r
+    // // memcpy_s(character.chara_uuid.uuid, sizeof    (character.chara_uuid.uuid), (char *)&id, sizeof(id));\r
+    // character.chara_uuid = alipay_service_uuid;\r
+    // character.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE;\r
+    // character.properties =\r
+    //     GATT_CHARACTER_PROPERTY_BIT_READ | GATT_CHARACTER_PROPERTY_BIT_WRITE | GATT_CHARACTER_PROPERTY_BIT_NOTIFY;\r
+    // character.value_len = 256;\r
+    // character.value = g_alipay_character_buf;\r
+\r
+    // ret = gatts_add_characteristic(server_id, srv_handle, &character);\r
+    // if (ret != ERRCODE_SUCC) {\r
+    //     ALIPAY_PRINT_ERR(0, "gatts_add_characteristic fail, ret:%u.\r\n", ret);\r
+    // }\r
+\r
+    // uint8_t bas_ccc_val[] = {\r
+    //         0x01,\r
+    //         0x00\r
+    //     };\r
+    // bt_uuid_t ccc_uuid = { 0 };\r
+    // bts_data_to_uuid_len2(0x2902, &ccc_uuid);\r
+    // // bts_data_to_uuid_len2(0x2902, &ccc_uuid);\r
+    // gatts_add_desc_info_t descriptor;\r
+    // descriptor.desc_uuid = ccc_uuid;\r
+    // descriptor.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE;\r
+    // descriptor.value_len = (uint16_t)sizeof(bas_ccc_val);\r
+    // descriptor.value = bas_ccc_val;\r
+    \r
+    // ret = gatts_add_descriptor(server_id, srv_handle, &descriptor);\r
+    // if (ret != ERRCODE_SUCC) {\r
+    //     ALIPAY_PRINT_ERR(0, "gatts_add_descriptor fail, ret:%u.\r\n", ret);\r
+    // }\r
+    // bd_addr_t addr_info;\r
+    // gatts_add_desc_info_t descriptor_ap;\r
+    // gap_ble_get_local_addr(&addr_info);\r
+    // bts_data_to_uuid_len2(0x4b02, &ccc_uuid);\r
+    // descriptor_ap.desc_uuid = ccc_uuid;\r
+    // descriptor_ap.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE;\r
+    // descriptor_ap.value_len = BD_ADDR_LEN;\r
+    // uint8_t ble_data_mac_switch[BD_ADDR_LEN] = {0};\r
+    // int k = BD_ADDR_LEN;\r
+    // for (int i = 0; i < BD_ADDR_LEN; i++) {\r
+    //     ble_data_mac_switch[--k] = addr_info.addr[i];\r
+    // }\r
+    // descriptor_ap.value = ble_data_mac_switch;\r
+    // ret = gatts_add_descriptor(server_id, srv_handle, &descriptor_ap);\r
+    // if (ret != ERRCODE_SUCC) {\r
+    //     ALIPAY_PRINT_ERR(0, "gatts_add_descriptor second fail, ret:%u.\r\n", ret);\r
+    // }\r
 \r
 \r
 }\r
@@ -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};\r
     bts_data_to_uuid_len2(BLE_UUID_HUMAN_INTERFACE_DEVICE, &hid_service_uuid);\r
 \r
-   \r
-     bt_uuid_t factory_service_uuid = {0};\r
+    bt_uuid_t alipay_service_uuid = {0};\r
+    bts_data_to_uuid_len2(0x3802, &alipay_service_uuid);\r
+\r
+    bt_uuid_t factory_service_uuid = {0};\r
     bts_data_to_uuid_len2(BLE_UUID_ATE_FACTORYTEST_SERVICE, &factory_service_uuid);\r
 \r
     errcode_t ret = 0;\r
@@ -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);\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "factorytest service svr_ble_bt_gatts_service_add_cb ret:%d\r\n",ret);\r
     }\r
+    if (ble_gatts_cmp_uuid(uuid, &alipay_service_uuid) == true){\r
+        alipay_add_chart_decr_recv_cmd1(server_id,srv_handle);\r
+        ret = gatts_start_service(server_id, srv_handle);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "alipay_service_uuid service svr_ble_bt_gatts_service_add_cb ret:%d\r\n",ret);\r
+    }\r
+    \r
 }\r
+uint16_t alipay_handle = 0;\r
 uint16_t g_hid_server_handle = 0;\r
 static void svr_ble_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid_t *uuid, uint16_t srv_handle,\r
     gatts_add_character_result_t *result, errcode_t status)\r
 {\r
-    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);\r
+    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);\r
     bt_uuid_t chara_uuid_data4 = {0};\r
     bts_data_to_uuid_len2(BLE_CHARACTERISTIC_SNED_OTA_ID, &chara_uuid_data4);\r
 \r
@@ -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};\r
     bts_data_to_uuid_len2(BLE_UUID_REPORT, &hid_report_uuid);\r
 \r
- \r
+    bt_uuid_t alipay_report_uuid = {0};\r
+    bts_data_to_uuid_len2(ALIPAYY_CHARACTERISTIC_ID, &alipay_report_uuid);\r
+\r
+    if(ble_gatts_cmp_uuid(uuid, &alipay_report_uuid))\r
+    {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " alipay_handle  %d\r\n",result->value_handle);\r
+        alipay_handle = result->value_handle;\r
+    }\r
 \r
     if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data1))\r
     {\r
         g_ble_server_handle = result->value_handle;\r
         data2ae5Cmd = result->value_handle;\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->value_handle1  %d\r\n",result->value_handle);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " 2ae5 result->value_handle1  %d\r\n",result->value_handle);\r
     }\r
     \r
     if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data2))\r
     {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->value_handle2  %d\r\n",result->value_handle);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "2ae3 result->value_handle2  %d\r\n",result->value_handle);\r
         data2ae3Cmd = result->value_handle;\r
     }\r
     \r
     if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data4))\r
     {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->value_handle4  %d\r\n",result->value_handle);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "2ae0 result->value_handle4  %d\r\n",result->value_handle);\r
         // shortCmdChara = result->value_handle;\r
     }\r
     if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data5))\r
     {\r
-\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->value_handle5  %d\r\n",result->value_handle);\r
+        data2ae1Cmd = result->value_handle;\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "2ae1 result->value_handle5  %d\r\n",result->value_handle);\r
         // shortCmdChara = result->value_handle;\r
     }\r
     if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data6))\r
     {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->value_handle6  %d\r\n",result->value_handle);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "2ae2 result->value_handle6  %d\r\n",result->value_handle);\r
         // shortCmdChara = result->value_handle;\r
     }\r
     if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data3))\r
     {\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->value_handle3  %d\r\n",result->value_handle);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "2ae4 result->value_handle3  %d\r\n",result->value_handle);\r
         data2ae4Cmd = result->value_handle;\r
     }\r
     if (ble_gatts_cmp_uuid(uuid, &hid_report_uuid) == true) {\r
@@ -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,\r
     uint16_t desc_handle, errcode_t status)\r
 {\r
-    \r
+     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);\r
 }\r
 \r
 static void svr_ble_bt_gatts_service_start_cb(uint8_t server_id, uint16_t srv_handle, errcode_t status)\r
@@ -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,\r
     errcode_t status)\r
 { \r
-     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,\r
-     write_cb_para->handle,write_cb_para->request_id);\r
+    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,\r
+    write_cb_para->handle,write_cb_para->request_id);\r
+    printf("alipay_handle%d",alipay_handle);\r
     for(uint16_t i = 0;i<write_cb_para->length;i++)\r
     {   \r
         printf("%x ",write_cb_para->value[i]);\r
@@ -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())\r
     {\r
         factory_recv_ota_data(write_cb_para->value,write_cb_para->length,write_cb_para->handle);\r
+    }else if(write_cb_para->handle == alipay_handle)\r
+    {\r
+        printf("alipay wirte!!!!!");\r
+        // svr_alipay_bt_gatts_noyify(buf,5);\r
+        errcode_t ret = svr_alipay_msg_write(ALIPAY_MSG_BT, write_cb_para->value, write_cb_para->length, false);\r
+\r
     }else{\r
         revBleOldData(write_cb_para->value,write_cb_para->length,write_cb_para->handle);\r
     }\r
@@ -1180,12 +1302,13 @@ static uint8_t g_server_id = 0;
 static void svr_ble_bt_init_gatts(void)\r
 {\r
     uint16_t id = BLE_SERVICE_UUID;\r
+    uint16_t srevr_id = BLE_SERVICE_UUID;\r
     uint16_t ser_id = 0x1fff;\r
     uint8_t serverId = 0;\r
     bt_uuid_t uuid;\r
     errcode_t ret = 0;\r
-    uuid.uuid_len = (uint8_t)sizeof(id);\r
-    memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&id, sizeof(id));\r
+    uuid.uuid_len = (uint8_t)sizeof(srevr_id);\r
+    memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&srevr_id, sizeof(srevr_id));\r
     ret = gatts_register_server(&uuid, &serverId); /* 注册gatt server */\r
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_register_server ret: 0x%x serverId = 0x%x uuid.uuid_len:%d", ret, serverId,uuid.uuid_len);\r
     g_ble_server_id = serverId;\r
@@ -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);\r
     return result;\r
 }\r
-extern void alipay_unregist_server(void);\r
+// extern void alipay_unregist_server(void);\r
 void ble_unregist_server(void)\r
 {\r
     svr_ble_adv_stop();\r
@@ -1236,8 +1359,10 @@ void ble_unregist_server(void)
 //     svr_ble_adv_start_param();\r
 // }\r
 \r
-static void svr_bluetooth_init(void)\r
+void svr_bluetooth_init(void)\r
 {\r
+\r
+    AdverFlag = true;\r
     bool ret = enable_bt_stack();\r
     // bool ret = enable_ble();\r
     if (ret != ERRCODE_SUCC) {\r
@@ -1245,13 +1370,17 @@ static void svr_bluetooth_init(void)
     }\r
     // osDelay(100);\r
     svr_ble_btcallback_reg();\r
+  \r
     #ifdef SUPPORT_BLE_SERVICE\r
+    //add server and ble service\r
     svr_ble_bt_init_gatts();\r
     #endif\r
     #ifdef SUPPORT_HID_SERVICE\r
     // ble_hid_server_init();\r
     #endif\r
+    svr_alipay_bt_init_gatts();\r
     ble_factory_server_init();\r
+\r
     svr_ble_adv_start_param();\r
     ble_recv_register_msg_callback(ble_recv_msg_callback);//注册驱动回调\r
     return;\r
@@ -1291,6 +1420,7 @@ void openBle(void)
     printf("%d %s\n",__LINE__,__FUNCTION__);\r
     if(AdverFlag == false)//在连接的状态下不需要\r
     {\r
+        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AdverFlag true need openBle again\r\n");\r
         AdverFlag = true;\r
         svr_bluetooth_init();\r
     }else{\r
@@ -1298,6 +1428,41 @@ void openBle(void)
 \r
     }\r
 }\r
+#define MODE_BLE_ADV_SRV (0)\r
+#define MODE_ALIPAY_ADV_SRV (1)\r
+void ble_avd_mode_change(uint8_t mode)\r
+{\r
+    switch(mode)\r
+    {\r
+        case MODE_BLE_ADV_SRV:\r
+            if(AdverFlag != true)\r
+            {\r
+                exit_alipay_gui = 0;\r
+                printf("ble_advd_start!!!!!!!!!");\r
+                svr_alipay_ble_adv_stop();\r
+                svr_alipay_set_adv_start_state(0);\r
+                errcode_t ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&phone_addr);\r
+                svr_ble_adv_start_param();\r
+            }\r
+            \r
+            break;\r
+        case MODE_ALIPAY_ADV_SRV:\r
+            if(svr_alipay_get_adv_start_state() != true)\r
+            {\r
+                exit_alipay_gui = 1;\r
+                printf("alipay_advd_start!!!!!!!!!");\r
+                AdverFlag = false;\r
+                svr_ble_adv_stop();\r
+                errcode_t ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&phone_addr);\r
+                svr_alipay_set_adv_start_state(1);\r
+                svr_alipay_ble_adv_start();\r
+            }\r
+            \r
+            break;\r
+        default:\r
+            break;\r
+    }\r
+}\r
 #endif\r
 #ifdef __cplusplus\r
 }\r
index c0a877c..5dd5eaa 100644 (file)
@@ -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
index 822ed86..1490239 100755 (executable)
@@ -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
index 322bcc6..7348693 100644 (file)
@@ -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();