添加产测ble服务
authorSnickerSun <snickersun@163.com>
Wed, 27 Mar 2024 12:35:54 +0000 (20:35 +0800)
committerSnickerSun <snickersun@163.com>
Wed, 27 Mar 2024 12:35:54 +0000 (20:35 +0800)
code/sdk/application/wearable/service/CMakeLists.txt
code/sdk/application/wearable/service/ble_service/bleService.c
code/sdk/application/wearable/service/factorytest_service/CMakeLists.txt [new file with mode: 0644]
code/sdk/application/wearable/service/factorytest_service/factorytestService.c [new file with mode: 0644]
code/sdk/application/wearable/service/factorytest_service/factorytestService.h [new file with mode: 0644]
code/sdk/build/config/target_config/brandy/config.py

index f31ae54..d9af264 100755 (executable)
@@ -10,4 +10,5 @@ endif()
 add_subdirectory_if_exist(power_manager)
 add_subdirectory_if_exist(timeservice)
 add_subdirectory_if_exist(ble_service)
-add_subdirectory_if_exist(hid_service)
\ No newline at end of file
+add_subdirectory_if_exist(hid_service)
+add_subdirectory_if_exist(factorytest_service)
\ No newline at end of file
index 61e5a34..42ba3e7 100644 (file)
@@ -27,7 +27,7 @@
 #include "osal_timer.h"\r
 #include "bleEvent.h"\r
 #include "hidService.h"\r
-\r
+#include "factorytestService.h"\r
 // #include "ble_hid_take_photo_server.h"\r
 /* Gatt service UUID */\r
 #define BLE_SERVICE_UUID 0x18e0\r
@@ -90,7 +90,6 @@ static osal_timer g_a2dp_stream_accept_timer = {NULL, NULL, 0, 0};
 uint8_t data2ae3Cmd = 0;//2ae3短指令特征值\r
 uint8_t data2ae4Cmd = 0;\r
 \r
-\r
 static void set_phone_info(bd_addr_t *addr)//保存手机信息 包含手机mac地址\r
 {\r
     phone_addr.addr[0] = addr->addr[5];\r
@@ -138,6 +137,7 @@ static void svr_ble_adv_data_set(int adv_id)
     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
 \r
+#if U6_DEBUG\r
     unsigned char set_mac[6] = {0x61,0x22,0x33,0x44,0x09,0x14};\r
     bluetooth_set_local_addr(set_mac,6);\r
     bd_addr_t addr_info;\r
@@ -155,6 +155,13 @@ static void svr_ble_adv_data_set(int adv_id)
     if (ret == false) {\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt SetLocalName ret = 0x%x", ret);\r
     }\r
+#else\r
+    int32_t ret= 0;\r
+    unsigned int len = BLE_MAC_MAX_LEN;\r
+    unsigned char addr[BLE_MAC_MAX_LEN] = {0};\r
+    bluetooth_get_local_addr(&addr[0],len);\r
+#endif\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
@@ -528,7 +535,7 @@ void alipay_add_chart_decr_cb(uint8_t server_id,uint16_t srv_handle)
     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
+    // 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
@@ -597,7 +604,9 @@ static void svr_ble_bt_gatts_service_add_cb(uint8_t server_id, bt_uuid_t *uuid,
     bts_data_to_uuid_len2(BLE_UUID_HUMAN_INTERFACE_DEVICE, &hid_service_uuid);\r
 \r
    \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
     if (ble_gatts_cmp_uuid(uuid, &ble_service_uuid) == true) {//通过传入的uuid进行比较\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_bt_gatts_service_add_cb ble_service_uuid\r\n");\r
@@ -613,14 +622,19 @@ static void svr_ble_bt_gatts_service_add_cb(uint8_t server_id, bt_uuid_t *uuid,
     if (ble_gatts_cmp_uuid(uuid, &hid_service_uuid) == true){\r
         ble_hid_add_characters_and_descriptors(server_id, srv_handle);\r
         ret = gatts_start_service(server_id, srv_handle);\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_bt_gatts_service_add_cb ret:%d\r\n",ret);\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "hid service svr_ble_bt_gatts_service_add_cb ret:%d\r\n",ret);\r
+    }\r
+    if (ble_gatts_cmp_uuid(uuid, &factory_service_uuid) == true){\r
+        ble_factorytest_add_characters_and_descriptors(server_id,srv_handle);\r
+        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
 }\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 0x%x 0x%x 0x%x\r\n",srv_handle,result->handle,result->value_handle);\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
     bt_uuid_t chara_uuid_data4 = {0};\r
     bts_data_to_uuid_len2(BLE_CHARACTERISTIC_SNED_OTA_ID, &chara_uuid_data4);\r
 \r
@@ -641,6 +655,7 @@ 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
 \r
     if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data1))\r
     {\r
@@ -683,6 +698,58 @@ static void svr_ble_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid_t
             ble_hid_add_characters_input_report_cbk(g_hid_server_handle);\r
         }\r
     }\r
+\r
+    bt_uuid_t factorytest_recv_uuid = {0};\r
+    bts_data_to_uuid_len2(BLE_UUID_ATE_TX, &factorytest_recv_uuid);\r
+\r
+    if (ble_gatts_cmp_uuid(uuid, &factorytest_recv_uuid) == true) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->factorytest_recv_uuid  %d\r\n",result->value_handle);\r
+        // if(g_hid_server_handle == 0){\r
+            // g_hid_server_handle = result->value_handle;\r
+            // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_hid_server_handle  %d\r\n",g_hid_server_handle);\r
+        ble_factorytest_store_recv_handle(result->value_handle) ;\r
+        // }\r
+    }\r
+\r
+    bt_uuid_t factorytest_report_uuid = {0};\r
+    bts_data_to_uuid_len2(BLE_UUID_ATE_RX, &factorytest_report_uuid);\r
+\r
+    if (ble_gatts_cmp_uuid(uuid, &factorytest_report_uuid) == true) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->factorytest_report_uuid  %d\r\n",result->value_handle);\r
+        // if(g_hid_server_handle == 0){\r
+            // g_hid_server_handle = result->value_handle;\r
+            // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_hid_server_handle  %d\r\n",g_hid_server_handle);\r
+        ble_factorytest_store_report_handle(result->value_handle);\r
+        // }\r
+    }\r
+\r
+    bt_uuid_t factorytest_ota_recv_uuid = {0};\r
+    bts_data_to_uuid_len2(BLE_UUID_OTA_TX, &factorytest_ota_recv_uuid);\r
+\r
+    if (ble_gatts_cmp_uuid(uuid, &factorytest_ota_recv_uuid) == true) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->factorytest_ota_recv_uuid  %d\r\n",result->value_handle);\r
+        // if(g_hid_server_handle == 0){\r
+            // g_hid_server_handle = result->value_handle;\r
+            // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_hid_server_handle  %d\r\n",g_hid_server_handle);\r
+        ble_factorytest_store_ota_recv_handle(result->value_handle) ;\r
+        // }\r
+    }\r
+\r
+    bt_uuid_t factorytest_ota_report_uuid = {0};\r
+    bts_data_to_uuid_len2(BLE_UUID_OTA_RX, &factorytest_ota_report_uuid);\r
+\r
+    if (ble_gatts_cmp_uuid(uuid, &factorytest_ota_report_uuid) == true) {\r
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->factorytest_ota_report_uuid  %d\r\n",result->value_handle);\r
+        // if(g_hid_server_handle == 0){\r
+            // g_hid_server_handle = result->value_handle;\r
+            // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_hid_server_handle  %d\r\n",g_hid_server_handle);\r
+        ble_factorytest_store_ota_report_handle(result->value_handle);\r
+        // }\r
+    }\r
+\r
+\r
+\r
+\r
     return;\r
 }\r
 \r
@@ -737,7 +804,17 @@ static void svr_ble_bt_gatts_req_write_cb(uint8_t server_id, uint16_t conn_id, g
         printf("%x ",write_cb_para->value[i]);\r
        \r
     }\r
-    revBleOldData(write_cb_para->value,write_cb_para->length,write_cb_para->handle);\r
+\r
+    if (write_cb_para->handle == get_factory_ate_write_handl()) \r
+    {\r
+        factory_recv_cmd_data(write_cb_para->value,write_cb_para->length,write_cb_para->handle);\r
+    }\r
+    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{\r
+        revBleOldData(write_cb_para->value,write_cb_para->length,write_cb_para->handle);\r
+    }\r
     // if(write_cb_para->handle == g_alipay_server_handle)\r
     // {\r
     //     printf("g_alipay_server_handle:%d",g_alipay_server_handle);\r
@@ -1155,6 +1232,7 @@ void svr_ble_reset_init(void)//重新启ble服务
     svr_ble_btcallback_reg();\r
     svr_ble_bt_init_gatts();\r
     ble_hid_server_init();\r
+    ble_factory_server_init();\r
     svr_ble_adv_start_param();\r
 }\r
 \r
@@ -1168,6 +1246,7 @@ void svr_bluetooth_init(void)
     svr_ble_btcallback_reg();\r
     svr_ble_bt_init_gatts();\r
     ble_hid_server_init();\r
+    ble_factory_server_init();\r
     svr_ble_adv_start_param();\r
     WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "svr_bluetooth_init22222222222\r\n");\r
     ble_recv_register_msg_callback(ble_recv_msg_callback);//注册驱动回调\r
diff --git a/code/sdk/application/wearable/service/factorytest_service/CMakeLists.txt b/code/sdk/application/wearable/service/factorytest_service/CMakeLists.txt
new file mode 100644 (file)
index 0000000..29a329d
--- /dev/null
@@ -0,0 +1,34 @@
+set(COMPONENT_NAME "factorytest_service")
+set(PUBLIC_HEADER
+    ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+
+set(PRIVATE_HEADER
+
+)
+set(SOURCES
+    ${CMAKE_CURRENT_SOURCE_DIR}/factorytestService.c
+)
+
+set(COMPONENT_PUBLIC_CCFLAGS
+)
+
+set(COMPONENT_CCFLAGS
+)
+
+set(WHOLE_LINK
+    true
+)
+
+set(MAIN_COMPONENT
+    false
+)
+
+set(PUBLIC_DEFINES
+)
+
+set(PRIVATE_DEFINES
+)
+
+build_component()
diff --git a/code/sdk/application/wearable/service/factorytest_service/factorytestService.c b/code/sdk/application/wearable/service/factorytest_service/factorytestService.c
new file mode 100644 (file)
index 0000000..3ff3c3d
--- /dev/null
@@ -0,0 +1,253 @@
+/*\r
+ * Copyright (c) @CompanyNameMagicTag 2022. All rights reserved.\r
+ * Description: BT HID Service Server Module.\r
+ */\r
+#include "factorytestService.h"\r
+#ifdef SUPPORT_BLE_SERVICE\r
+#include "bleService.h"\r
+#endif\r
+#include "bts_gatt_stru.h"\r
+#include "bts_a2dp_source.h"\r
+#include "bts_gatt_server.h"\r
+#include "securec.h"\r
+#include "wearable_log.h"\r
+\r
+\r
+#define BLE_HID_SERVER_ID 1\r
+\r
+/* HID gatt notification flag, do not need confirm */\r
+#define GATT_NOTIFICATION_FLAG 0\r
+/* HID gatt indication flag, need confirm */\r
+#define GATT_INDICATION_FLAG 1\r
+#define INVALID_SERVER_ID 0\r
+/* Client Characteristic Configuration UUID */\r
+#define BLE_UUID_CLIENT_CHARACTERISTIC_CONF 0x2902\r
+/*user Characteristic Configuration UUID*/\r
+#define BLE_UUID_USER_CHARACTERISTIC_CONF 0x2901\r
+/* gatt server ID */\r
+static uint8_t g_server_id = INVALID_SERVER_ID;\r
+// RX定为Notify属性,TX为Write属性\r
+enum {\r
+    /* HID input report characteristic properties */\r
+    FACTORYTEST_INPUT_REPORT_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_NOTIFY|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP|GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_READ,\r
+    /* HID output report characteristic properties */\r
+    FACTORYTEST_OUTPUT_REPORT_PROPERTIES =  GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP,\r
+};\r
+    \r
+#define uint16_to_byte(n) ((uint8_t)(n)), ((uint8_t)((n) >> 8))\r
+\r
+/* hid input report att handle */\r
+uint32_t g_factory_notify_report_att_hdl = 0;\r
+uint32_t factory_ate_write_handl = 0;\r
+\r
+uint32_t g_factory_ota_report_hdl = 0;\r
+uint32_t factory_ota_write_handl = 0;\r
+\r
+uint16_t modbus_crc16(uint8_t *data, uint16_t length) {  \r
+    uint8_t crc_hi = 0xFF;  \r
+    uint8_t crc_lo = 0xFF;  \r
+    int i;  \r
+  \r
+    while (length--) {  \r
+        crc_hi ^= *data++;\r
+        for (i = 0; i < 8; i++) {  \r
+            if (crc_hi & 0x80) {  \r
+                crc_hi = (crc_hi << 1) ^ 0x8005;  \r
+            } else {  \r
+                crc_hi <<= 1;  \r
+            }  \r
+        }  \r
+    }  \r
+  \r
+    return (crc_hi << 8) | crc_lo;  \r
+}  \r
+ \r
+\r
+/* 创建服务 */\r
+static void ble_factorytest_add_service(void)\r
+{\r
+    bt_uuid_t factory_service_uuid = {0};\r
+    bts_data_to_uuid_len2(BLE_UUID_ATE_FACTORYTEST_SERVICE, &factory_service_uuid);\r
+    //只有一个服务,永远是1\r
+    gatts_add_service(BLE_HID_SERVER_ID, &factory_service_uuid, true);\r
+}\r
+static void ble_factory_add_descriptor_report_reference(uint8_t server_id, uint16_t srvc_handle, bool is_notify_report)\r
+{\r
+    /* HID input report reference value for test  [report id 1, input] */\r
+    static uint8_t report_reference_val_input[] = {0, 0};\r
+    gatts_add_desc_info_t descriptor;\r
+    if (is_notify_report)\r
+    {\r
+        bts_data_to_uuid_len2(BLE_UUID_CLIENT_CHARACTERISTIC_CONF, &descriptor.desc_uuid);\r
+        descriptor.permissions = GATT_ATTRIBUTE_PERMISSION_WRITE ;\r
+    }else{\r
+        bts_data_to_uuid_len2(BLE_UUID_USER_CHARACTERISTIC_CONF, &descriptor.desc_uuid);\r
+        descriptor.permissions = GATT_ATTRIBUTE_PERMISSION_WRITE | GATT_ATTRIBUTE_PERMISSION_READ ;\r
+        \r
+    }\r
+    descriptor.value = report_reference_val_input;\r
+    descriptor.value_len = (uint16_t)sizeof(report_reference_val_input);\r
+\r
+    gatts_add_descriptor(server_id, srvc_handle, &descriptor);\r
+}\r
+\r
+/* 添加特征:HID information */\r
+static void ble_factorytest_add_character_and_information(uint8_t server_id, uint16_t srvc_handle)\r
+{\r
+    /* HID information value for test */\r
+    gatts_add_chara_info_t character={0};\r
+\r
+\r
+\r
+\r
+    memset_s(&character,sizeof(gatts_add_chara_info_t),0,sizeof(gatts_add_chara_info_t));\r
+    bts_data_to_uuid_len2(BLE_UUID_OTA_TX, &character.chara_uuid);\r
+    character.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE;\r
+    character.properties = FACTORYTEST_OUTPUT_REPORT_PROPERTIES;\r
+    character.value_len = 0;//(uint16_t)sizeof(hid_information_val);\r
+    character.value = NULL;//hid_information_val;\r
+    gatts_add_characteristic(server_id, srvc_handle, &character);\r
+    ble_factory_add_descriptor_report_reference(server_id,srvc_handle,false);\r
+    memset_s(&character,sizeof(gatts_add_chara_info_t),0,sizeof(gatts_add_chara_info_t));\r
+\r
+    bts_data_to_uuid_len2(BLE_UUID_ATE_TX, &character.chara_uuid);\r
+    character.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE;\r
+    character.properties = FACTORYTEST_OUTPUT_REPORT_PROPERTIES;\r
+    character.value_len = 0;//(uint16_t)sizeof(hid_information_val);\r
+    character.value = NULL;//hid_information_val;\r
+    gatts_add_characteristic(server_id, srvc_handle, &character);\r
+    ble_factory_add_descriptor_report_reference(server_id,srvc_handle,false);\r
+\r
+    memset_s(&character,sizeof(gatts_add_chara_info_t),0,sizeof(gatts_add_chara_info_t));\r
+    bts_data_to_uuid_len2(BLE_UUID_ATE_RX, &character.chara_uuid);\r
+    character.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE;\r
+    character.properties = FACTORYTEST_INPUT_REPORT_PROPERTIES;\r
+    character.value_len = 0;//(uint16_t)sizeof(hid_information_val);\r
+    character.value = NULL;//hid_information_val;\r
+    gatts_add_characteristic(server_id, srvc_handle, &character);\r
+    ble_factory_add_descriptor_report_reference(server_id,srvc_handle,true);\r
+    ble_factory_add_descriptor_report_reference(server_id,srvc_handle,false);\r
+    \r
+\r
+    memset_s(&character,sizeof(gatts_add_chara_info_t),0,sizeof(gatts_add_chara_info_t));\r
+    bts_data_to_uuid_len2(BLE_UUID_OTA_RX, &character.chara_uuid);\r
+    character.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE;\r
+    character.properties = FACTORYTEST_INPUT_REPORT_PROPERTIES;\r
+    character.value_len = 0;//(uint16_t)sizeof(hid_information_val);\r
+    character.value = NULL;//hid_information_val;\r
+    gatts_add_characteristic(server_id, srvc_handle, &character);\r
+    ble_factory_add_descriptor_report_reference(server_id,srvc_handle,true);\r
+    ble_factory_add_descriptor_report_reference(server_id,srvc_handle,false);\r
+}\r
+\r
+/* device向host发送数据:input report */\r
+errcode_t ble_factorytest_server_send_input_report(const uint8_t *data, uint8_t len)\r
+{\r
+    // printf("ble_hid_server_send_input_report:%d %d %d",data[0],data[1],len);\r
+    gatts_ntf_ind_t param = {0};\r
+    param.attr_handle = (uint16_t)g_factory_notify_report_att_hdl;\r
+    param.value_len = len;\r
+    param.value = bt_os_new(len);\r
+    if (param.value == NULL) {\r
+        printf(  "[factory][ERROR]send input report new fail\r\n");\r
+        return ERRCODE_BT_MALLOC_FAIL;\r
+    }\r
+    if (memcpy_s(param.value, param.value_len, data, len) != EOK) {\r
+        printf( "[factory][ERROR]send input report memcpy fail\r\n");\r
+        bt_os_free(param.value);\r
+        return ERRCODE_BT_FAIL;\r
+    }\r
+    errcode_t ret = 0;\r
+    ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &param);\r
+    printf("ble_factorytest_server_send_input_report: 0x%x g_ble_conn_id:%d g_factory_notify_report_att_hdl:%d\r\n",ret,g_ble_conn_id,g_factory_notify_report_att_hdl);\r
+    bt_os_free(param.value);\r
+    return ERRCODE_BT_SUCCESS;\r
+}\r
+\r
+\r
+errcode_t ble_factorytest_server_send_ota_report(const uint8_t *data, uint8_t len)\r
+{\r
+    // printf("ble_hid_server_send_input_report:%d %d %d",data[0],data[1],len);\r
+    gatts_ntf_ind_t param = {0};\r
+    param.attr_handle = (uint16_t)g_factory_ota_report_hdl;\r
+    param.value_len = len;\r
+    param.value = bt_os_new(len);\r
+    if (param.value == NULL) {\r
+        printf(  "[factory][ERROR]send ota report new fail\r\n");\r
+        return ERRCODE_BT_MALLOC_FAIL;\r
+    }\r
+    if (memcpy_s(param.value, param.value_len, data, len) != EOK) {\r
+        printf( "[factory][ERROR]send ota report memcpy fail\r\n");\r
+        bt_os_free(param.value);\r
+        return ERRCODE_BT_FAIL;\r
+    }\r
+    errcode_t ret = 0;\r
+    ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, &param);\r
+    printf("ble_factorytest_server_send_ota_report: 0x%x g_ble_conn_id:%d g_factory_ota_report_hdl:%d\r\n",ret,g_ble_conn_id,g_factory_ota_report_hdl);\r
+    bt_os_free(param.value);\r
+    return ERRCODE_BT_SUCCESS;\r
+}\r
+\r
+\r
+void ble_factorytest_store_report_handle(uint16_t srvc_handle)\r
+{\r
+    printf("g_factory_notify_report_att_hdl: 0x%X\r\n",srvc_handle);\r
+    g_factory_notify_report_att_hdl = srvc_handle;\r
+}\r
+void ble_factorytest_store_recv_handle(uint16_t srvc_handle)\r
+{\r
+    printf("factory_ate_write_handl : 0x%X\r\n",srvc_handle);\r
+    factory_ate_write_handl = srvc_handle;\r
+}\r
+\r
+uint32_t get_factory_ate_write_handl(void)\r
+{\r
+    return factory_ate_write_handl;\r
+}\r
+\r
+void ble_factorytest_store_ota_report_handle(uint16_t srvc_handle)\r
+{\r
+    printf("g_factory_ota_report_hdl: 0x%X\r\n",srvc_handle);\r
+    g_factory_ota_report_hdl = srvc_handle;\r
+}\r
+void ble_factorytest_store_ota_recv_handle(uint16_t srvc_handle)\r
+{\r
+    printf("factory_ota_write_handl : 0x%X\r\n",srvc_handle);\r
+    factory_ota_write_handl = srvc_handle;\r
+}\r
+uint32_t get_factory_ota_write_handl(void)\r
+{\r
+    return factory_ota_write_handl;\r
+}\r
+\r
+void ble_factorytest_add_characters_and_descriptors(uint8_t server_id, uint16_t srvc_handle)\r
+{\r
+    ble_factorytest_add_character_and_information(server_id, srvc_handle);\r
+}\r
+\r
+void ble_factory_server_init(void)\r
+{\r
+    ble_factorytest_add_service();\r
+}\r
+\r
+//协议接收client下发的数据接口\r
+void factory_recv_cmd_data(uint8_t *buf, uint16_t event_size,uint16_t handle)\r
+{\r
+    printf("factory_recv_cmd_data len %d , handle 0x%X\r\n",event_size,handle);\r
+    /****此处为接收指令,处理后反馈结果的参考**/\r
+    uint8_t buff[128]={0};\r
+    sprintf((char*)buff,"%X",event_size);\r
+    ble_factorytest_server_send_input_report((uint8_t*)buff,strlen((char*)buff));\r
+    /*****参考结束****/\r
+}\r
+\r
+\r
+void factory_recv_ota_data(uint8_t *buf, uint16_t event_size,uint16_t handle)\r
+{\r
+    printf("factory_recv_ota_data len %d , handle 0x%X\r\n",event_size,handle);\r
+    /****此处为接收指令,处理后反馈结果的参考**/\r
+    uint8_t buff[128]={0};\r
+    sprintf((char*)buff,"%X",event_size);\r
+    ble_factorytest_server_send_ota_report((uint8_t*)buff,strlen((char*)buff));\r
+    /*****参考结束****/\r
+}\r
diff --git a/code/sdk/application/wearable/service/factorytest_service/factorytestService.h b/code/sdk/application/wearable/service/factorytest_service/factorytestService.h
new file mode 100644 (file)
index 0000000..388b5ab
--- /dev/null
@@ -0,0 +1,197 @@
+/*
+ * Copyright (c) @CompanyNameMagicTag 2022. All rights reserved.
+ * Description: BT HID Service Server module.
+ */
+
+/**
+ * @defgroup bluetooth_bts_hid_server HID SERVER API
+ * @ingroup  bluetooth
+ * @{
+ */
+#ifndef BLE_FACTORY_TEST_SERVER_H
+#define BLE_FACTORY_TEST_SERVER_H
+
+#include "errcode.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+// ATE工厂模式服务UUID:        00002760-08c2-11e1-9073-0e8afefd1000                    
+// OTA RX characteristic UUID:         00002760-08c2-11e1-9073-0e8afefd1001                    
+// OTA TX characteristic UUID:         00002760-08c2-11e1-9073-0e8afefd1002                    
+// ATE RX characteristic UUID:         00002760-08c2-11e1-9073-0e8afefd1003                    
+// ATE TX characteristic UUID:         00002760-08c2-11e1-9073-0e8afefd1004                    
+
+
+/*  UUID */
+#define BLE_UUID_ATE_FACTORYTEST_SERVICE 0x1000
+/* notify */
+#define BLE_UUID_OTA_RX 0x1001
+/* write */
+#define BLE_UUID_OTA_TX 0x1002
+/* notify */
+#define BLE_UUID_ATE_RX 0x1003
+/* write */
+#define BLE_UUID_ATE_TX 0x1004
+
+//  主模式ID  公共接口  0x01
+#define BLE_TEST_CMD_MODE_COMMON  0x01
+//  主模式ID  生产软件  0x02
+#define BLE_TEST_CMD_MODE_SOFT_TEST  0x02
+//  主模式ID  硬测接口  0x03
+#define BLE_TEST_CMD_MODE_HW_TEST  0x03
+//  主模式ID  串口接口  0x04
+#define BLE_TEST_CMD_MODE_SERIAL_PORT  0x04
+
+
+// 协议定义:
+// 发送:协议头(0xFD) + 长度(2bytes) +模块ID(1bytes)+子模块ID(1bytes)+测试项ID(1bytes)+可变字节+CRC(2bytes)
+// 接收:协议头(0xFD) + 长度(2bytes) +模块ID(1bytes)+子模块ID(1bytes)+测试项ID(1bytes)+执行状态(1bytes)+可变字节+CRC(2bytes)
+// 备注:
+// 1、状态返回00表示成功,01表示开始执行,其他表示各种错误。
+// 2、命令响应超时为:3秒,超时重发2次。
+// 3、大端模式。
+// 4、长耗时命令,先确认收到,执行完再返回结果。
+#define BLE_TEST_PROTOCOL_HEADER 0xFD
+
+
+//公共模式 子模式ID  模式切换
+#define BLE_TEST_CMD_COMMON_SUB_MODE_SWITCH_MODE 0x01
+//公共模式 子模式ID  系统版本
+#define BLE_TEST_CMD_COMMON_SUB_MODE_SYSTEM_VERSION 0x02
+//公共模式 子模式ID  开关机
+#define BLE_TEST_CMD_COMMON_SUB_MODE_POWER_ON_OFF_DEVICE 0x03
+//公共模式 子模式ID  功耗
+#define BLE_TEST_CMD_COMMON_SUB_MODE_POWERCONSUMPTION 0x04
+//公共模式 子模式ID  OTA
+#define BLE_TEST_CMD_COMMON_SUB_MODE_OTA 0x05
+
+//软件测试 子模式ID  蓝牙
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_BLE  0x01
+//软件测试 子模式ID  马达
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_VIBRATOR  0x02
+//软件测试 子模式ID  按键
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_KEY  0x03
+//软件测试 子模式ID  RTC
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_RTC  0x04
+//软件测试 子模式ID  温度
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_TEMPERATURE  0x05
+
+//软件测试 子模式ID  老化测试
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_AGING_TEST  0x06
+
+//软件测试 子模式ID  定制测试  读写SN等 读CHIPID
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CUSTOM_CMD  0x07
+
+//软件测试 子模式ID  屏幕
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_LCD  0x11
+//软件测试 子模式ID  TP
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_TP  0x12
+//软件测试 子模式ID  ACC
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_ACC  0x13
+//软件测试 子模式ID  心率
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_HRS  0x14
+//软件测试 子模式ID  地磁
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_COMPASS  0x16
+//软件测试 子模式ID  电源管理
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_PM  0x17
+//软件测试 子模式ID  扩展FLASH
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_EXTFLASH  0x18
+//软件测试 子模式ID  扩展RAM
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_EXTRAM  0x19
+//软件测试 子模式ID  CAT1
+#define BLE_TEST_CMD_SOFT_TEST_SUB_MODE_CAT1  0x1A
+
+
+/**
+ * @if Eng
+ * @brief  Use this funtion to init HID service.
+ * @par Description:add HID service, character and character descriptor, then start service.
+ * @attention  NULL
+ * @param  NULL
+ * @retval NULL
+ * @par Dependency:
+ * @li ble_hid_server.h
+ * @else
+ * @brief  初始化HID服务。
+ * @par 说明:添加HID服务,特征,特征描述符,然后启动服务。
+ * @attention  NULL
+ * @param  NULL
+ * @retval NULL
+ * @par 依赖:
+ * @li ble_hid_server.h
+ * @endif
+ */
+void ble_factory_server_init(void);
+
+/**
+ * @if Eng
+ * @brief  Notify remote device the press button value.
+ * @par Description:Notify remote device the press button value..
+ * @attention  NULL
+ * @param  [in]  value  Press button value.
+ * @param  [in]  len    Length of press button value。
+ * @retval ERRCODE_BT_SUCCESS    Excute successfully
+ * @retval ERRCODE_BT_FAIL       Execute fail
+ * @par Dependency:
+ * @li ble_hid_server.h
+ * @else
+ * @brief  通知对端按键变化。
+ * @par 说明:通知对端按键变化。
+ * @attention  NULL
+ * @param  [in]  data   按键值。
+ * @param  [in]  len    按键值数据长度。
+ * @retval ERRCODE_BT_SUCCESS    执行成功
+ * @retval ERRCODE_BT_FAIL       执行失败
+ * @par 依赖:
+ * @li ble_hid_server.h
+ * @endif
+ */
+errcode_t ble_factorytest_server_send_input_report(const uint8_t *data, uint8_t len);
+
+/**
+ * @if Eng
+ * @brief  Hid add characters and descriptors.
+ * @par Description:Hid add characters and descriptors.
+ * @attention  NULL
+ * @param  [in]  server_id  server id.
+ * @param  [in]  srvc_handle    service handle.
+ * @retval NULL
+ * @par Dependency:
+ * @li ble_hid_server.h
+ * @else
+ * @brief  HID 服务添加特征和描述符。
+ * @par 说明:HID 服务添加特征和描述符。
+ * @attention  NULL
+ * @param  [in]  server_id   服务id。
+ * @param  [in]  srvc_handle    服务handle。
+ * @retval NULL
+ * @par 依赖:
+ * @li ble_hid_server.h
+ * @endif
+ */
+void ble_factorytest_add_characters_and_descriptors(uint8_t server_id, uint16_t srvc_handle);
+
+void ble_factorytest_store_report_handle(uint16_t srvc_handle);
+
+void ble_factorytest_store_recv_handle(uint16_t srvc_handle);
+//协议接收client下发的数据接口
+void factory_recv_cmd_data(uint8_t *buf, uint16_t event_size,uint16_t handle);
+uint32_t get_factory_ate_write_handl(void);
+
+
+void factory_recv_ota_data(uint8_t *buf, uint16_t event_size,uint16_t handle);
+void ble_factorytest_store_ota_report_handle(uint16_t srvc_handle);
+void ble_factorytest_store_ota_recv_handle(uint16_t srvc_handle);
+uint32_t get_factory_ota_write_handl(void);
+errcode_t ble_factorytest_server_send_ota_report(const uint8_t *data, uint8_t len);
+
+/**
+ * @}
+ */
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif//BLE_FACTORY_TEST_SERVER_H
index 70f33da..d53270e 100755 (executable)
@@ -128,7 +128,6 @@ target = {
                     'SUPPORT_SPO2_NOTIFICATION',
                     'SUPPORT_SPO2_NOTIFICATION_TEST',
                     'SUPPORT_DEVICE_PAIRING_NOTIFICATION',
-                    #'CONFIG_ADC_SUPPORT_AUTO_SCAN','CONFIG_ADC_SUPPORT_LONG_SAMPLE',
                     'MIPI_ULPS_SUPPORT', 
                     'ENABLE_FONT_VECTOR_GLOBAL', 
                     'ENABLE_SHAPING',
@@ -148,9 +147,9 @@ target = {
                           'graphic_at_service', 
                           'app_at_service', 
                           'ohosfwk_at_service',
-                        #   'audio_at_service', 
-                        #   'media_at_service', 
-                        #   'bt_manager_at_service',
+                          'audio_at_service', 
+                          'media_at_service', 
+                          'bt_manager_at_service',
                           "audio_proc", "audio_dump", "audio_probe", "power_manager", "gpu_proc", 'bts_header',
                           "ppg_sensor",
                           "mag_sensor",
@@ -169,6 +168,7 @@ target = {
                            "cywee",
                            "batterry_service",
                            "ble_service",
+                           "factorytest_service",
                            "hid_service"
                                                  ],
         'ram_component_set': ['bgh', 'media', 'gpu', 'graphic_uikit', 'bgh_audio', 'dfx_set', 'ohos_set', 'wearable_set', 'alipay_set'],