From: SnickerSun Date: Wed, 27 Mar 2024 12:35:54 +0000 (+0800) Subject: 添加产测ble服务 X-Git-Tag: release_V1.2.70_20241020_135402~1250^2 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=788306227f1803d01c151babbb3341696c81c941;p=mirrors%2FFD230.git 添加产测ble服务 --- diff --git a/code/sdk/application/wearable/service/CMakeLists.txt b/code/sdk/application/wearable/service/CMakeLists.txt index f31ae54ac..d9af26417 100755 --- a/code/sdk/application/wearable/service/CMakeLists.txt +++ b/code/sdk/application/wearable/service/CMakeLists.txt @@ -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 diff --git a/code/sdk/application/wearable/service/ble_service/bleService.c b/code/sdk/application/wearable/service/ble_service/bleService.c index 61e5a34eb..42ba3e7d1 100644 --- a/code/sdk/application/wearable/service/ble_service/bleService.c +++ b/code/sdk/application/wearable/service/ble_service/bleService.c @@ -27,7 +27,7 @@ #include "osal_timer.h" #include "bleEvent.h" #include "hidService.h" - +#include "factorytestService.h" // #include "ble_hid_take_photo_server.h" /* Gatt service UUID */ #define BLE_SERVICE_UUID 0x18e0 @@ -90,7 +90,6 @@ static osal_timer g_a2dp_stream_accept_timer = {NULL, NULL, 0, 0}; uint8_t data2ae3Cmd = 0;//2ae3短指令特征值 uint8_t data2ae4Cmd = 0; - static void set_phone_info(bd_addr_t *addr)//保存手机信息 包含手机mac地址 { phone_addr.addr[0] = addr->addr[5]; @@ -138,6 +137,7 @@ static void svr_ble_adv_data_set(int adv_id) 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)); +#if U6_DEBUG unsigned char set_mac[6] = {0x61,0x22,0x33,0x44,0x09,0x14}; bluetooth_set_local_addr(set_mac,6); bd_addr_t addr_info; @@ -155,6 +155,13 @@ static void svr_ble_adv_data_set(int adv_id) if (ret == false) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt SetLocalName ret = 0x%x", ret); } +#else + int32_t ret= 0; + unsigned int len = BLE_MAC_MAX_LEN; + unsigned char addr[BLE_MAC_MAX_LEN] = {0}; + bluetooth_get_local_addr(&addr[0],len); +#endif + 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); @@ -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); 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)); + // 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 = @@ -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); - + bt_uuid_t factory_service_uuid = {0}; + bts_data_to_uuid_len2(BLE_UUID_ATE_FACTORYTEST_SERVICE, &factory_service_uuid); + errcode_t ret = 0; if (ble_gatts_cmp_uuid(uuid, &ble_service_uuid) == true) {//通过传入的uuid进行比较 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_bt_gatts_service_add_cb ble_service_uuid\r\n"); @@ -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){ ble_hid_add_characters_and_descriptors(server_id, srv_handle); ret = gatts_start_service(server_id, srv_handle); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_bt_gatts_service_add_cb ret:%d\r\n",ret); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "hid service svr_ble_bt_gatts_service_add_cb ret:%d\r\n",ret); + } + if (ble_gatts_cmp_uuid(uuid, &factory_service_uuid) == true){ + ble_factorytest_add_characters_and_descriptors(server_id,srv_handle); + 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); } } 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 0x%x 0x%x 0x%x\r\n",srv_handle,result->handle,result->value_handle); + 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); bt_uuid_t chara_uuid_data4 = {0}; bts_data_to_uuid_len2(BLE_CHARACTERISTIC_SNED_OTA_ID, &chara_uuid_data4); @@ -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}; bts_data_to_uuid_len2(BLE_UUID_REPORT, &hid_report_uuid); + if(ble_gatts_cmp_uuid(uuid, &chara_uuid_data1)) { @@ -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); } } + + bt_uuid_t factorytest_recv_uuid = {0}; + bts_data_to_uuid_len2(BLE_UUID_ATE_TX, &factorytest_recv_uuid); + + if (ble_gatts_cmp_uuid(uuid, &factorytest_recv_uuid) == true) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->factorytest_recv_uuid %d\r\n",result->value_handle); + // if(g_hid_server_handle == 0){ + // g_hid_server_handle = result->value_handle; + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_hid_server_handle %d\r\n",g_hid_server_handle); + ble_factorytest_store_recv_handle(result->value_handle) ; + // } + } + + bt_uuid_t factorytest_report_uuid = {0}; + bts_data_to_uuid_len2(BLE_UUID_ATE_RX, &factorytest_report_uuid); + + if (ble_gatts_cmp_uuid(uuid, &factorytest_report_uuid) == true) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->factorytest_report_uuid %d\r\n",result->value_handle); + // if(g_hid_server_handle == 0){ + // g_hid_server_handle = result->value_handle; + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_hid_server_handle %d\r\n",g_hid_server_handle); + ble_factorytest_store_report_handle(result->value_handle); + // } + } + + bt_uuid_t factorytest_ota_recv_uuid = {0}; + bts_data_to_uuid_len2(BLE_UUID_OTA_TX, &factorytest_ota_recv_uuid); + + if (ble_gatts_cmp_uuid(uuid, &factorytest_ota_recv_uuid) == true) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->factorytest_ota_recv_uuid %d\r\n",result->value_handle); + // if(g_hid_server_handle == 0){ + // g_hid_server_handle = result->value_handle; + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_hid_server_handle %d\r\n",g_hid_server_handle); + ble_factorytest_store_ota_recv_handle(result->value_handle) ; + // } + } + + bt_uuid_t factorytest_ota_report_uuid = {0}; + bts_data_to_uuid_len2(BLE_UUID_OTA_RX, &factorytest_ota_report_uuid); + + if (ble_gatts_cmp_uuid(uuid, &factorytest_ota_report_uuid) == true) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "result->factorytest_ota_report_uuid %d\r\n",result->value_handle); + // if(g_hid_server_handle == 0){ + // g_hid_server_handle = result->value_handle; + // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_hid_server_handle %d\r\n",g_hid_server_handle); + ble_factorytest_store_ota_report_handle(result->value_handle); + // } + } + + + + return; } @@ -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]); } - revBleOldData(write_cb_para->value,write_cb_para->length,write_cb_para->handle); + + if (write_cb_para->handle == get_factory_ate_write_handl()) + { + factory_recv_cmd_data(write_cb_para->value,write_cb_para->length,write_cb_para->handle); + } + 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{ + revBleOldData(write_cb_para->value,write_cb_para->length,write_cb_para->handle); + } // if(write_cb_para->handle == g_alipay_server_handle) // { // printf("g_alipay_server_handle:%d",g_alipay_server_handle); @@ -1155,6 +1232,7 @@ void svr_ble_reset_init(void)//重新启ble服务 svr_ble_btcallback_reg(); svr_ble_bt_init_gatts(); ble_hid_server_init(); + ble_factory_server_init(); svr_ble_adv_start_param(); } @@ -1168,6 +1246,7 @@ void svr_bluetooth_init(void) svr_ble_btcallback_reg(); svr_ble_bt_init_gatts(); ble_hid_server_init(); + ble_factory_server_init(); svr_ble_adv_start_param(); WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "svr_bluetooth_init22222222222\r\n"); ble_recv_register_msg_callback(ble_recv_msg_callback);//注册驱动回调 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 index 000000000..29a329d06 --- /dev/null +++ b/code/sdk/application/wearable/service/factorytest_service/CMakeLists.txt @@ -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 index 000000000..3ff3c3d12 --- /dev/null +++ b/code/sdk/application/wearable/service/factorytest_service/factorytestService.c @@ -0,0 +1,253 @@ +/* + * Copyright (c) @CompanyNameMagicTag 2022. All rights reserved. + * Description: BT HID Service Server Module. + */ +#include "factorytestService.h" +#ifdef SUPPORT_BLE_SERVICE +#include "bleService.h" +#endif +#include "bts_gatt_stru.h" +#include "bts_a2dp_source.h" +#include "bts_gatt_server.h" +#include "securec.h" +#include "wearable_log.h" + + +#define BLE_HID_SERVER_ID 1 + +/* HID gatt notification flag, do not need confirm */ +#define GATT_NOTIFICATION_FLAG 0 +/* HID gatt indication flag, need confirm */ +#define GATT_INDICATION_FLAG 1 +#define INVALID_SERVER_ID 0 +/* Client Characteristic Configuration UUID */ +#define BLE_UUID_CLIENT_CHARACTERISTIC_CONF 0x2902 +/*user Characteristic Configuration UUID*/ +#define BLE_UUID_USER_CHARACTERISTIC_CONF 0x2901 +/* gatt server ID */ +static uint8_t g_server_id = INVALID_SERVER_ID; +// RX定为Notify属性,TX为Write属性 +enum { + /* HID input report characteristic properties */ + 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, + /* HID output report characteristic properties */ + FACTORYTEST_OUTPUT_REPORT_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_WRITE|GATT_CHARACTER_PROPERTY_BIT_WRITE_NO_RSP, +}; + +#define uint16_to_byte(n) ((uint8_t)(n)), ((uint8_t)((n) >> 8)) + +/* hid input report att handle */ +uint32_t g_factory_notify_report_att_hdl = 0; +uint32_t factory_ate_write_handl = 0; + +uint32_t g_factory_ota_report_hdl = 0; +uint32_t factory_ota_write_handl = 0; + +uint16_t modbus_crc16(uint8_t *data, uint16_t length) { + uint8_t crc_hi = 0xFF; + uint8_t crc_lo = 0xFF; + int i; + + while (length--) { + crc_hi ^= *data++; + for (i = 0; i < 8; i++) { + if (crc_hi & 0x80) { + crc_hi = (crc_hi << 1) ^ 0x8005; + } else { + crc_hi <<= 1; + } + } + } + + return (crc_hi << 8) | crc_lo; +} + + +/* 创建服务 */ +static void ble_factorytest_add_service(void) +{ + bt_uuid_t factory_service_uuid = {0}; + bts_data_to_uuid_len2(BLE_UUID_ATE_FACTORYTEST_SERVICE, &factory_service_uuid); + //只有一个服务,永远是1 + gatts_add_service(BLE_HID_SERVER_ID, &factory_service_uuid, true); +} +static void ble_factory_add_descriptor_report_reference(uint8_t server_id, uint16_t srvc_handle, bool is_notify_report) +{ + /* HID input report reference value for test [report id 1, input] */ + static uint8_t report_reference_val_input[] = {0, 0}; + gatts_add_desc_info_t descriptor; + if (is_notify_report) + { + bts_data_to_uuid_len2(BLE_UUID_CLIENT_CHARACTERISTIC_CONF, &descriptor.desc_uuid); + descriptor.permissions = GATT_ATTRIBUTE_PERMISSION_WRITE ; + }else{ + bts_data_to_uuid_len2(BLE_UUID_USER_CHARACTERISTIC_CONF, &descriptor.desc_uuid); + descriptor.permissions = GATT_ATTRIBUTE_PERMISSION_WRITE | GATT_ATTRIBUTE_PERMISSION_READ ; + + } + descriptor.value = report_reference_val_input; + descriptor.value_len = (uint16_t)sizeof(report_reference_val_input); + + gatts_add_descriptor(server_id, srvc_handle, &descriptor); +} + +/* 添加特征:HID information */ +static void ble_factorytest_add_character_and_information(uint8_t server_id, uint16_t srvc_handle) +{ + /* HID information value for test */ + gatts_add_chara_info_t character={0}; + + + + + memset_s(&character,sizeof(gatts_add_chara_info_t),0,sizeof(gatts_add_chara_info_t)); + bts_data_to_uuid_len2(BLE_UUID_OTA_TX, &character.chara_uuid); + character.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE; + character.properties = FACTORYTEST_OUTPUT_REPORT_PROPERTIES; + character.value_len = 0;//(uint16_t)sizeof(hid_information_val); + character.value = NULL;//hid_information_val; + gatts_add_characteristic(server_id, srvc_handle, &character); + ble_factory_add_descriptor_report_reference(server_id,srvc_handle,false); + memset_s(&character,sizeof(gatts_add_chara_info_t),0,sizeof(gatts_add_chara_info_t)); + + bts_data_to_uuid_len2(BLE_UUID_ATE_TX, &character.chara_uuid); + character.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE; + character.properties = FACTORYTEST_OUTPUT_REPORT_PROPERTIES; + character.value_len = 0;//(uint16_t)sizeof(hid_information_val); + character.value = NULL;//hid_information_val; + gatts_add_characteristic(server_id, srvc_handle, &character); + ble_factory_add_descriptor_report_reference(server_id,srvc_handle,false); + + memset_s(&character,sizeof(gatts_add_chara_info_t),0,sizeof(gatts_add_chara_info_t)); + bts_data_to_uuid_len2(BLE_UUID_ATE_RX, &character.chara_uuid); + character.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE; + character.properties = FACTORYTEST_INPUT_REPORT_PROPERTIES; + character.value_len = 0;//(uint16_t)sizeof(hid_information_val); + character.value = NULL;//hid_information_val; + gatts_add_characteristic(server_id, srvc_handle, &character); + ble_factory_add_descriptor_report_reference(server_id,srvc_handle,true); + ble_factory_add_descriptor_report_reference(server_id,srvc_handle,false); + + + memset_s(&character,sizeof(gatts_add_chara_info_t),0,sizeof(gatts_add_chara_info_t)); + bts_data_to_uuid_len2(BLE_UUID_OTA_RX, &character.chara_uuid); + character.permissions = GATT_ATTRIBUTE_PERMISSION_READ | GATT_ATTRIBUTE_PERMISSION_WRITE; + character.properties = FACTORYTEST_INPUT_REPORT_PROPERTIES; + character.value_len = 0;//(uint16_t)sizeof(hid_information_val); + character.value = NULL;//hid_information_val; + gatts_add_characteristic(server_id, srvc_handle, &character); + ble_factory_add_descriptor_report_reference(server_id,srvc_handle,true); + ble_factory_add_descriptor_report_reference(server_id,srvc_handle,false); +} + +/* device向host发送数据:input report */ +errcode_t ble_factorytest_server_send_input_report(const uint8_t *data, uint8_t len) +{ + // printf("ble_hid_server_send_input_report:%d %d %d",data[0],data[1],len); + gatts_ntf_ind_t param = {0}; + param.attr_handle = (uint16_t)g_factory_notify_report_att_hdl; + param.value_len = len; + param.value = bt_os_new(len); + if (param.value == NULL) { + printf( "[factory][ERROR]send input report new fail\r\n"); + return ERRCODE_BT_MALLOC_FAIL; + } + if (memcpy_s(param.value, param.value_len, data, len) != EOK) { + printf( "[factory][ERROR]send input report memcpy fail\r\n"); + bt_os_free(param.value); + return ERRCODE_BT_FAIL; + } + errcode_t ret = 0; + ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, ¶m); + 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); + bt_os_free(param.value); + return ERRCODE_BT_SUCCESS; +} + + +errcode_t ble_factorytest_server_send_ota_report(const uint8_t *data, uint8_t len) +{ + // printf("ble_hid_server_send_input_report:%d %d %d",data[0],data[1],len); + gatts_ntf_ind_t param = {0}; + param.attr_handle = (uint16_t)g_factory_ota_report_hdl; + param.value_len = len; + param.value = bt_os_new(len); + if (param.value == NULL) { + printf( "[factory][ERROR]send ota report new fail\r\n"); + return ERRCODE_BT_MALLOC_FAIL; + } + if (memcpy_s(param.value, param.value_len, data, len) != EOK) { + printf( "[factory][ERROR]send ota report memcpy fail\r\n"); + bt_os_free(param.value); + return ERRCODE_BT_FAIL; + } + errcode_t ret = 0; + ret = gatts_notify_indicate(g_ble_server_id, g_ble_conn_id, ¶m); + 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); + bt_os_free(param.value); + return ERRCODE_BT_SUCCESS; +} + + +void ble_factorytest_store_report_handle(uint16_t srvc_handle) +{ + printf("g_factory_notify_report_att_hdl: 0x%X\r\n",srvc_handle); + g_factory_notify_report_att_hdl = srvc_handle; +} +void ble_factorytest_store_recv_handle(uint16_t srvc_handle) +{ + printf("factory_ate_write_handl : 0x%X\r\n",srvc_handle); + factory_ate_write_handl = srvc_handle; +} + +uint32_t get_factory_ate_write_handl(void) +{ + return factory_ate_write_handl; +} + +void ble_factorytest_store_ota_report_handle(uint16_t srvc_handle) +{ + printf("g_factory_ota_report_hdl: 0x%X\r\n",srvc_handle); + g_factory_ota_report_hdl = srvc_handle; +} +void ble_factorytest_store_ota_recv_handle(uint16_t srvc_handle) +{ + printf("factory_ota_write_handl : 0x%X\r\n",srvc_handle); + factory_ota_write_handl = srvc_handle; +} +uint32_t get_factory_ota_write_handl(void) +{ + return factory_ota_write_handl; +} + +void ble_factorytest_add_characters_and_descriptors(uint8_t server_id, uint16_t srvc_handle) +{ + ble_factorytest_add_character_and_information(server_id, srvc_handle); +} + +void ble_factory_server_init(void) +{ + ble_factorytest_add_service(); +} + +//协议接收client下发的数据接口 +void factory_recv_cmd_data(uint8_t *buf, uint16_t event_size,uint16_t handle) +{ + printf("factory_recv_cmd_data len %d , handle 0x%X\r\n",event_size,handle); + /****此处为接收指令,处理后反馈结果的参考**/ + uint8_t buff[128]={0}; + sprintf((char*)buff,"%X",event_size); + ble_factorytest_server_send_input_report((uint8_t*)buff,strlen((char*)buff)); + /*****参考结束****/ +} + + +void factory_recv_ota_data(uint8_t *buf, uint16_t event_size,uint16_t handle) +{ + printf("factory_recv_ota_data len %d , handle 0x%X\r\n",event_size,handle); + /****此处为接收指令,处理后反馈结果的参考**/ + uint8_t buff[128]={0}; + sprintf((char*)buff,"%X",event_size); + ble_factorytest_server_send_ota_report((uint8_t*)buff,strlen((char*)buff)); + /*****参考结束****/ +} 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 index 000000000..388b5abc8 --- /dev/null +++ b/code/sdk/application/wearable/service/factorytest_service/factorytestService.h @@ -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 diff --git a/code/sdk/build/config/target_config/brandy/config.py b/code/sdk/build/config/target_config/brandy/config.py index 70f33da11..d53270eeb 100755 --- a/code/sdk/build/config/target_config/brandy/config.py +++ b/code/sdk/build/config/target_config/brandy/config.py @@ -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'],