alipay 文件夹合并
authorluozheng <1732036298@qq.com>
Fri, 16 May 2025 02:52:36 +0000 (10:52 +0800)
committerluozheng <1732036298@qq.com>
Fri, 16 May 2025 02:52:36 +0000 (10:52 +0800)
code/sdk/application/wearable/alipay/driver_adapt/CMakeLists.txt
code/sdk/application/wearable/alipay/driver_adapt/soc_adapt.c
code/sdk/application/wearable/alipay/driver_adapt/vendor_net.c
code/sdk/application/wearable/alipay/driver_adapt/vendor_product.c
code/sdk/application/wearable/alipay/service/CMakeLists.txt
code/sdk/application/wearable/alipay/service/alipay_bluetooth.c
code/sdk/application/wearable/alipay/service/alipay_bluetooth.h [new file with mode: 0644]
code/sdk/application/wearable/alipay/service/alipay_feature.c
code/sdk/application/wearable/alipay/service/alipay_feature.h
code/sdk/interim_binary/brandy/libs/bt/evb_standard/liteos/br/libbt_host_audio_manager_wrapper.a

index d83743a..a715177 100644 (file)
@@ -10,6 +10,7 @@ set(PRIVATE_HEADER
     ${ALIPAY_SDK_DIR}/lib/rv70_llvm/share/common/inc
     ${ALIPAY_SDK_DIR}/lib/rv70_llvm/hal/network/inc
     ${ROOT_DIR}/application/wearable/service/alipay_msg
+    ${ROOT_DIR}/open_source/openharmony/third_party/lwip/port/lwip-2.1/porting/include/lwip/
 )
 
 set(SOURCES
index 3a22172..2aa4dd3 100644 (file)
@@ -14,6 +14,8 @@
 #include "gpio.h"\r
 #include "cmsis_os2.h"\r
 \r
+#define PRINT_I2C_LOG 0\r
+\r
 #define ALIPAY_SEC_I2C_MEMPOOL_SIZE 2048\r
 #define ALIPAY_SEC_I2C_SLAVE_ADDR 100\r
 \r
@@ -52,6 +54,22 @@ int IIC_Master_Send(unsigned char byAddr, unsigned char *pData, unsigned short w
     if (ret != ERRCODE_SUCC) {\r
         MyPrintf("se i2c data write fail! ret=0x%x", ret);\r
     }\r
+\r
+#if PRINT_I2C_LOG\r
+    char printbuf[128*3]={0};\r
+    uint8_t buflen =  sizeof(printbuf)/3;\r
+    uint8_t printlen = wLen;\r
+    if(wLen > buflen)\r
+    {\r
+        printlen = buflen;\r
+    }\r
+    for( int ii=0;ii<printlen;ii++)\r
+    {\r
+        sprintf(printbuf+(ii*3),"%02X ",pData[ii]);\r
+    }\r
+    MyPrintf("se i2c data write byAddr(0x%x),pData(0x%s),wLen(%d),ret=0x%x",byAddr, printbuf,wLen,ret);\r
+#endif\r
+   \r
     return ret;\r
 }\r
 \r
@@ -78,6 +96,20 @@ void IIC_Master_Receive(unsigned char byAddr, unsigned char *pData, unsigned sho
         if (ret != ERRCODE_I2C_TIMEOUT) MyPrintf("se i2c data read fail! and not equal ERRCODE_I2C_TIMEOUT , ret=0x%x", ret);\r
     }\r
 \r
+#if PRINT_I2C_LOG\r
+    char printbuf[128*3]={0};\r
+    uint8_t buflen =  sizeof(printbuf)/3;\r
+    uint8_t printlen = wLen;\r
+    if(wLen > buflen)\r
+    {\r
+        printlen = buflen;\r
+    }\r
+    for( int ii=0;ii<printlen;ii++)\r
+    {\r
+        sprintf(printbuf+(ii*3),"%02X ",pData[ii]);\r
+    }\r
+    MyPrintf("se i2c data read byAddr(0x%x),pData(0x%s),wLen(%d),ret=0x%x",byAddr, printbuf,wLen,ret);\r
+#endif\r
     return;\r
 }\r
 \r
index 0c9da69..e17f302 100644 (file)
 #include "alipay_app.h"\r
 #endif\r
 \r
+#define IF_SUPPORT_LWIP 0\r
+\r
+#if IF_SUPPORT_LWIP\r
+#include "lwip/dns.h"\r
+#include "lwip/inet.h"\r
+#include "api_shell.h"\r
+#include <string.h>\r
+#include <lwip/sockets.h>\r
+#endif\r
+\r
 void alipay_iot_gettimeofday(alipay_iot_timeval *now)\r
 {\r
     now->tv_sec = time(NULL);\r
@@ -55,6 +65,22 @@ int alipay_iot_dns(const char *name, unsigned char ip[4])
     ret = msg_center_alipay_hostent_request((void*)name, strlen(name));\r
     ret |= msg_center_alipay_hostent_reponse(ip);\r
     return ret;\r
+    #if IF_SUPPORT_LWIP\r
+    printf("alipay_iot_dns name:%s\n",name);// 发起 DNS 解析请求\r
+    unsigned int ipaddr = get_hostip(name);\r
+    if (ipaddr == 0) {\r
+        printf("dns_gethostbyname request %s ipaddr fail\n", name);\r
+        return -1;\r
+    }\r
+    printf("%s %d ipaddr 0x%x\n",__func__,__LINE__,ipaddr);\r
+    // 将 ipaddr 按字节拆分并存储到 ip 数组中\r
+    ip[0] = (ipaddr >> 24) & 0xFF;\r
+    ip[1] = (ipaddr >> 16) & 0xFF;\r
+    ip[2] = (ipaddr >> 8) & 0xFF;\r
+    ip[3] = ipaddr & 0xFF;\r
+    printf("alipay_iot_dns ip:%d.%d.%d.%d\n",ip[0],ip[1],ip[2],ip[3]);\r
+    return 0;\r
+    #endif\r
 }\r
 \r
 int alipay_iot_socket_create(int domain, alipay_socket_type_enum type, int protocol)\r
@@ -67,6 +93,15 @@ int alipay_iot_socket_create(int domain, alipay_socket_type_enum type, int proto
     }\r
     int fd = DEFAULT_SOCKET_FD;\r
     return fd;\r
+    #if IF_SUPPORT_LWIP\r
+    // 创建套接字\r
+    int fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);\r
+    if (fd < 0) {\r
+        printf("socket create fail\n");\r
+        return;\r
+    }\r
+    return fd;\r
+    #endif\r
 }\r
 \r
 int alipay_iot_socket_connect(int s, const struct alipay_iot_sockaddr *name,\r
@@ -87,6 +122,29 @@ int alipay_iot_socket_connect(int s, const struct alipay_iot_sockaddr *name,
     ret = msg_center_alipay_connect_request(&request, sizeof(alipay_connect_request));\r
     ret |= msg_center_alipay_connect_reponse();\r
     return ret;\r
+    #if IF_SUPPORT_LWIP\r
+    struct sockaddr_in server_addr;\r
+    int ret;\r
+    // 检查网络状态,这里可以根据 lwIP 的网络接口状态来判断\r
+    // if (!netif_is_up(&g_mynetif)) {\r
+    //     return -1;\r
+    // }\r
+    // 填充服务器地址结构体\r
+    memset(&server_addr, 0, sizeof(server_addr));\r
+    server_addr.sin_family = AF_INET;\r
+    server_addr.sin_port = name->data.sin_data.port;\r
+    memcpy(&server_addr.sin_addr.s_addr, name->data.sin_data.ip, 4);\r
+    // 发起连接请求\r
+    ret = connect(s, (struct sockaddr *)&server_addr, sizeof(server_addr));\r
+    if (ret < 0) {\r
+        // 连接失败,可以根据具体情况添加错误处理逻辑\r
+        // 例如记录日志等\r
+        printf("connect fail\n");\r
+        close(s);\r
+        return -1;\r
+    }\r
+    return ret;\r
+    #endif\r
 }\r
 \r
 int alipay_iot_socket_write(int s, const void *dataptr, int len)\r
@@ -99,6 +157,15 @@ int alipay_iot_socket_write(int s, const void *dataptr, int len)
     }\r
     ret = msg_center_alipay_tcpdata_request((void *)dataptr, len);\r
     return ret;\r
+    #if IF_SUPPORT_LWIP\r
+    ret = send(s, dataptr, len, 0);//调用 lwIP 的 send 函数发送数据\r
+    if (ret < 0) {\r
+        // 发送失败,可以根据具体情况添加错误处理逻辑\r
+        // 例如记录日志等\r
+        return -1;\r
+    }\r
+    return ret;\r
+    #endif\r
 }\r
 \r
 int alipay_iot_fd_isset(int fd, alipay_iot_fd_set* fdset)\r
@@ -161,6 +228,13 @@ int alipay_iot_socket_read(int s, void *mem, int len)
     }\r
     ret = msg_center_alipay_tcpdata_read(mem, len);\r
     return ret;\r
+    #if IF_SUPPORT_LWIP\r
+    ret = recv(s, mem, len, 0);// 调用 lwIP 的 recv 函数接收数据\r
+    if (ret < 0) {\r
+        return -1;\r
+    }\r
+    return ret;\r
+    #endif\r
 }\r
 \r
 int alipay_iot_socket_close(int s)\r
@@ -170,6 +244,14 @@ int alipay_iot_socket_close(int s)
     int ret;\r
     ret = msg_center_alipay_close_request();\r
     return ret;\r
+    #if IF_SUPPORT_LWIP\r
+    ret = close(s);\r
+    if (ret < 0) {\r
+        // 关闭失败\r
+        return -1;\r
+    }\r
+    return ret;\r
+    #endif\r
 }\r
 #else\r
 int alipay_iot_dns(const char *name, unsigned char ip[4])\r
index bd141fc..835cd5d 100644 (file)
@@ -20,6 +20,8 @@
 extern void Ble_SendDataSimple(uint16_t handle, uint8_t *data, uint16_t len);
 extern uint32_t Unix_time;
 
+// #define ALIPAY_CSI_LOG_EXT_ON
+
 #define ALIPAY_BLE_MAC_ADDR_NUM 6
 #define ALIPAY_ADAPT_LOG_MAX_NUM 300
 
@@ -100,6 +102,7 @@ csi_error_t csi_get_sn(uint8_t *buf_sn, uint32_t *len_sn)
         return CSI_ERROR;
     }
 
+#if 1
     bd_addr_t addr_info;
     gap_ble_get_local_addr(&addr_info);
     char str[18] = {0};
@@ -111,6 +114,11 @@ csi_error_t csi_get_sn(uint8_t *buf_sn, uint32_t *len_sn)
     *len_sn = strlen(str);
     memcpy(buf_sn, str, strlen(str));
 
+#else
+    const char *mock_sn = "";    
+    *len_sn = strlen(mock_sn);
+    memcpy(buf_sn, mock_sn, strlen(mock_sn));
+#endif
     return CSI_OK;
 }
 
index 4fc1907..f6a8a07 100644 (file)
@@ -17,17 +17,6 @@ set(PRIVATE_HEADER
     ${ALIPAY_SDK_DIR}/lib/rv70_llvm/share/common/inc
     ${ALIPAY_SDK_DIR}/lib/rv70_llvm/hal/file/inc
 )
-if("FD230" IN_LIST DEFINES)
-set(PRIVATE_HEADER
-    ${PRIVATE_HEADER}
-    ${ROOT_DIR}/application/wearable/fd230/nativeapp/nativeui/bluetooth/include
-)
-else()
-set(PRIVATE_HEADER
-    ${PRIVATE_HEADER}
-    ${ROOT_DIR}/application/wearable/nativeapp/nativeui/bluetooth/include
-)
-endif()
 
 set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/alipay_feature.c
index 1d9d5c0..0bb7eb5 100644 (file)
@@ -55,6 +55,8 @@ 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
+#define ALIPAY_PRINT_LOG 0\r
+\r
 static bool svr_alipay_get_adv_start_state(void)\r
 {\r
     return g_alipay_adv_start_state;\r
@@ -205,47 +207,46 @@ static void svr_alipay_ble_adv_stop_cb(uint8_t adv_id, adv_status_t status)
     }\r
 }\r
 \r
+//在服务添加成功后添加特征\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
     unused(status);\r
-    if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t *)uuid->uuid) == ALIPAYY_SERVICE_ID)) {\r
+    // 检查UUID是否匹配支付宝服务ID\r
+    if ((uuid->uuid_len == sizeof(uint16_t)) && (*((uint16_t *)uuid->uuid) == ALIPAYY_SERVICE_ID)) \r
+    {\r
+        // 打印服务添加回调的调试信息\r
         ALIPAY_PRINT_DEBUG(0, "BtGattsServiceAddCallback 0x%x 0x%x 0x%x 0x%x",\r
                            status, server_id, srv_handle, *((uint16_t *)uuid->uuid));\r
-        uint16_t id = ALIPAYY_CHARACTERISTIC_ID;\r
-        gatts_add_chara_info_t character;\r
+        uint16_t id = ALIPAYY_CHARACTERISTIC_ID;// 支付宝特征值ID\r
+        gatts_add_chara_info_t character;// 特征值信息结构体\r
         uint16_t value = 0;\r
 \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
+        character.chara_uuid.uuid_len = sizeof(id); // 设置特征值UUID长度\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
+        character.value_len = ALIPAY_CHARACTERISTIC_MAX_LENGTH; // 设置特征值最大长度\r
+        character.value = g_alipay_character_buf; // 设置特征值缓冲区\r
 \r
+        // 添加特征值到服务\r
         int 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
-        g_alipay_svr_handle = srv_handle;\r
+        g_alipay_svr_handle = srv_handle;// 保存服务句柄\r
     }\r
 }\r
 \r
-/* 将uint16的uuid数字转化为bt_uuid_t */\r
-static void bts_data_to_uuid_len2(uint16_t uuid_data, bt_uuid_t *out_uuid)\r
-{\r
-    out_uuid->uuid_len = UUID16_LEN;\r
-    out_uuid->uuid[0] = (uint8_t)(uuid_data >> 8); /* 8: octet bit num */\r
-    out_uuid->uuid[1] = (uint8_t)(uuid_data);\r
-}\r
-\r
+//在特征添加成功后添加描述符。\r
 static void svr_alipay_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
-    unused(status);\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
         ALIPAY_PRINT_DEBUG(0, "BtGattsCharacteristicAddCallback 0x%x 0x%x 0x%x 0x%x 0x%x",\r
                            status, server_id, srv_handle, result->handle, result->value_handle);\r
         uint8_t bas_ccc_val[] = {\r
@@ -253,38 +254,43 @@ static void svr_alipay_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid
             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
+        bts_data_to_uuid_len2(0x2902, &ccc_uuid); // 将0x2902转换为UUID格式\r
+        gatts_add_desc_info_t descriptor;  \r
+        descriptor.desc_uuid = ccc_uuid;         //设置描述符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
         int ret = 0;\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
+        // 获取本地蓝牙地址\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
+        bts_data_to_uuid_len2(0x4b02, &ccc_uuid); // 将0x4b02转换为UUID格式\r
+        descriptor_ap.desc_uuid = ccc_uuid;       // 设置描述符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
+            ble_data_mac_switch[--k] = addr_info.addr[i]; // 反转蓝牙地址字节顺序\r
         }\r
-        descriptor_ap.value = ble_data_mac_switch;\r
+\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
         ret = gatts_start_service(server_id, srv_handle);\r
         if (ret != ERRCODE_SUCC) {\r
             ALIPAY_PRINT_ERR(0, "gatts_start_service fail, ret:%u.\r\n", ret);\r
         }\r
+        // 保存特征值句柄\r
         g_alipay_characteristic_handle = result->value_handle;\r
     }\r
 }\r
@@ -292,9 +298,6 @@ static void svr_alipay_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid
 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
-    unused(server_id);\r
-    unused(uuid);\r
-    unused(status);\r
     if (g_alipay_svr_handle == srv_handle) {\r
         ALIPAY_PRINT_DEBUG(0, "BtGattsDescriptorAddCallback 0x%x 0x%x 0x%x 0x%x", status, server_id, srv_handle,\r
             desc_handle);\r
@@ -307,8 +310,6 @@ static void svr_alipay_bt_gatts_descriptor_add_cb(uint8_t server_id, bt_uuid_t *
 \r
 static void svr_alipay_bt_gatts_service_start_cb(uint8_t server_id, uint16_t srv_handle, errcode_t status)\r
 {\r
-    unused(server_id);\r
-    unused(status);\r
     if (g_alipay_svr_handle == srv_handle) {\r
         ALIPAY_PRINT_DEBUG(0, "BtGattsServiceStartCallback 0x%x 0x%x 0x%x", status, server_id, srv_handle);\r
     }\r
@@ -316,41 +317,42 @@ static void svr_alipay_bt_gatts_service_start_cb(uint8_t server_id, uint16_t srv
 \r
 static void svr_alipay_bt_gatts_service_stop_cb(uint8_t server_id, uint16_t srv_handle, errcode_t status)\r
 {\r
-    unused(server_id);\r
-    unused(srv_handle);\r
-    unused(status);\r
     ALIPAY_PRINT_DEBUG(0, "BtGattsServiceStopCallback 0x%x 0x%x 0x%x", status, server_id, srv_handle);\r
 }\r
 \r
 static void svr_alipay_bt_gatts_service_del_cb(uint8_t server_id, errcode_t status)\r
 {\r
-    unused(server_id);\r
-    unused(status);\r
     ALIPAY_PRINT_DEBUG(0, "BtGattsServiceDeleteCallback 0x%x 0x%x", status, server_id);\r
 }\r
 \r
 static void svr_alipay_bt_gatts_req_read_cb(uint8_t server_id, uint16_t conn_id, gatts_req_read_cb_t *read_cb_para,\r
     errcode_t status)\r
 {\r
-    unused(server_id);\r
-    unused(conn_id);\r
-    unused(read_cb_para);\r
-    unused(status);\r
     ALIPAY_PRINT_DEBUG(0, "BtGattsRequestReadCallback");\r
 }\r
 \r
+bool is_alipay_handle(uint16_t hande)\r
+{\r
+     if ((g_alipay_characteristic_handle == hande) ||\r
+        (g_alipay_descriptor_handle[0] == hande) ||\r
+        (g_alipay_descriptor_handle[1] == hande)) \r
+        {\r
+            return true;\r
+        }\r
+        return false;\r
+}\r
+// 接收手机数据\r
 static void svr_alipay_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
-    unused(server_id);\r
-    unused(conn_id);\r
-    unused(status);\r
+    // 检查写入的句柄是否匹配支付宝特征值或描述符的句柄\r
     if ((g_alipay_characteristic_handle == write_cb_para->handle) ||\r
         (g_alipay_descriptor_handle[0] == write_cb_para->handle) ||\r
         (g_alipay_descriptor_handle[1] == write_cb_para->handle)) {\r
         ALIPAY_PRINT_DEBUG(0, "write callback,handle:%u str:%s len:%u",\r
                            write_cb_para->handle, write_cb_para->value, write_cb_para->length);\r
-        uint8_t *msg_data = write_cb_para->value;\r
+        uint8_t *msg_data = write_cb_para->value;  \r
+        // 将数据写入支付宝消息队列\r
         errcode_t ret = svr_alipay_msg_write(ALIPAY_MSG_BT, msg_data, write_cb_para->length, false);\r
         if (ret != ERRCODE_SUCC) {\r
             ALIPAY_PRINT_ERR(0, "svr_alipay_msg_write fail, ret:%u.\r\n", ret);\r
@@ -359,6 +361,7 @@ static void svr_alipay_bt_gatts_req_write_cb(uint8_t server_id, uint16_t conn_id
     return;\r
 }\r
 \r
+//发送数据到手机\r
 void svr_alipay_bt_gatts_noyify(uint8_t *data, uint16_t data_len)\r
 {\r
     gatts_ntf_ind_t data_info;\r
@@ -366,6 +369,16 @@ void svr_alipay_bt_gatts_noyify(uint8_t *data, uint16_t data_len)
     data_info.value = data;\r
     data_info.value_len = data_len;\r
 \r
+    #if ALIPAY_PRINT_LOG\r
+    // 打印 data 数据\r
+    printf("发送数据到手机: ");\r
+    for (uint16_t i = 0; i < data_len; i++) {\r
+        printf("%02x ", data[i]);\r
+    }\r
+    printf("数据长度:%d",data_len);\r
+    printf("\n");\r
+    #endif\r
+\r
     errcode_t ret = gatts_notify_indicate(g_alipay_server_id, g_alipay_conn_id, &data_info);\r
     ALIPAY_PRINT_DEBUG(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_characteristic_handle);\r
@@ -400,51 +413,81 @@ static void svr_alipay_btcallback_reg(void)
 #endif\r
 }\r
 \r
-static void svr_alipay_bt_init_gatts(void)\r
+void ble_add_alipay_service(uint8_t server_id)\r
+{\r
+    printf("ble_add_alipay_service\r\n");\r
+    bt_uuid_t alipay_service_uuid = {0};\r
+    bts_data_to_uuid_len2(ALIPAYY_SERVICE_ID, &alipay_service_uuid);\r
+    //只有一个服务,永远是1\r
+   errcode_t ret = 0;\r
+#ifndef SUPPORT_OHOSFWK\r
+        ret = gatts_add_service(server_id, &alipay_service_uuid, true);\r
+        printf(" NO SUPPORT_OHOSFWK\r\n");\r
+ #else\r
+    ret = wrapper_gatts_add_service(server_id, &alipay_service_uuid, true);\r
+    printf("ble_add_alipay_service wrapper_gatts_add_service ret: 0x%x serverId = 0x%x uuid.uuid_len:%d\n", ret, server_id,alipay_service_uuid.uuid_len);\r
+#endif\r
+    g_alipay_server_id=server_id;\r
+}\r
+\r
+\r
+void svr_alipay_bt_init_gatts(uint8_t server_id )\r
 {\r
     uint16_t service_id = ALIPAYY_SERVICE_ID;\r
-    uint8_t server_id = 0;\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
-#ifndef SUPPORT_OHOSFWK\r
-    ret = gatts_register_server(&uuid, &server_id); /* 注册gatt server */\r
-#else\r
-    ret = wrapper_gatts_register_server(&uuid, &server_id); /* 注册gatt server */\r
-#endif\r
-    if (ret != ERRCODE_SUCC) {\r
-        ALIPAY_PRINT_ERR(0, "gatts_register_server ret:%u.\r\n", ret);\r
-    }\r
+// #ifndef SUPPORT_OHOSFWK\r
+//     ret = gatts_register_server(&uuid, &server_id); /* 注册gatt server */\r
+//     if (ret != ERRCODE_SUCC) {\r
+//         ALIPAY_PRINT_ERR(0, "gatts_register_server ret:0x%x.\r\n", ret);\r
+//     }\r
+// #else\r
+//     ret = wrapper_gatts_register_server(&uuid, &server_id); /* 注册gatt server */\r
+//     if (ret != ERRCODE_SUCC) {\r
+//         ALIPAY_PRINT_ERR(0, "wrapper_gatts_register_server ret:0x%x.\r\n", ret);\r
+//     }\r
+// #endif\r
+    \r
     ALIPAY_PRINT_DEBUG(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
+\r
 #ifndef SUPPORT_OHOSFWK\r
     ret = gatts_add_service(server_id, &uuid, true);\r
+    if (ret != ERRCODE_SUCC) {\r
+        ALIPAY_PRINT_ERR(0, "gatts_add_service ret:0x%x.\r\n", ret);\r
+    }\r
 #else\r
     ret = wrapper_gatts_add_service(server_id, &uuid, true);\r
-#endif\r
     if (ret != ERRCODE_SUCC) {\r
-        ALIPAY_PRINT_ERR(0, "gatts_add_service ret:%u.\r\n", ret);\r
+        ALIPAY_PRINT_ERR(0, "wrapper_gatts_add_service ret:0x%x.\r\n", ret);\r
     }\r
+#endif\r
+    \r
     return;\r
 }\r
 \r
-void svr_alipay_bluetooth_init(void)\r
+//2.Alipay蓝牙模块初始化\r
+void svr_alipay_bluetooth_init(uint8_t server_id)\r
 {\r
-#ifndef SUPPORT_OHOSFWK\r
-    bool ret = enable_bt_stack();\r
-    if (ret != ERRCODE_SUCC) {\r
-        ALIPAY_PRINT_ERR(0, "enable_bt_stack ret:%u.\r\n", ret);\r
-    }\r
-#endif\r
+// #ifndef SUPPORT_OHOSFWK\r
+//     bool ret = enable_bt_stack();\r
+//     if (ret != ERRCODE_SUCC) {\r
+//         ALIPAY_PRINT_ERR(0, "enable_bt_stack ret:%u.\r\n", ret);\r
+//     }\r
+// #endif\r
     if (g_alipay_ble_init_flag == true) {\r
         return;\r
     }\r
+    printf("svr_alipay_bluetooth_init \r\n");\r
     svr_alipay_btcallback_reg();\r
-    svr_alipay_bt_init_gatts();\r
+    svr_alipay_bt_init_gatts(server_id);\r
+    \r
     g_alipay_ble_init_flag = true;\r
     return;\r
 }\r
diff --git a/code/sdk/application/wearable/alipay/service/alipay_bluetooth.h b/code/sdk/application/wearable/alipay/service/alipay_bluetooth.h
new file mode 100644 (file)
index 0000000..c4cdd58
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef _ALPAY_BLUETOOTH_H
+#define _ALPAY_BLUETOOTH_H
+#include <stdint.h>
+#include <stdio.h>
+#include "stdbool.h"
+#include "bts_def.h"
+
+/* Gatt service UUID */
+#define ALIPAYY_SERVICE_ID 0x0238
+/* Gatt Characteristic UUID */
+#define ALIPAYY_CHARACTERISTIC_ID 0x024A
+/* Client Characteristic Configuration UUID */
+#define ALIPAYY_BLE_UUID_CLIENT_CHARACTERISTIC_CONF 0x2902
+/* Gatt Characteristic max length */
+#define ALIPAY_CHARACTERISTIC_MAX_LENGTH 256
+#define ALIPAY_BLE_ADV_ID 1
+#define ALIPAY_BLE_ADV_DATA_MAX_LENGTH 31
+#define ALIPAY_BLE_ADV_BLE_NAME_MAX_LENGTH 15 // 31-4-2-3-9 = 13
+#define ALIPAY_BLE_NAME_LENGTH 20
+#define ALIPAY_BLE_ADV_MAC_HEAD_LENTH 4
+#define ALIPAY_BLE_ADV_MAC_LENTH 10
+#define ALIPAY_BLE_ADV_TYPE_LENTH 3
+#define ALIPAY_BLE_ADV_UUID_LENTH 4
+#define ALIPAY_BLE_DEFAULT_NAME  "WatchDemo"
+#define ALIPAY_BLE_DEFAULT_NAME_LEN 9 
+
+#define ALIPAY_BLE_MAC_MAX_LEN 6
+void svr_alipay_bluetooth_init(uint8_t);
+void ble_alipay_add_characters_input_report_cbk(uint16_t srvc_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(uint8_t);
+void svr_alipay_ble_adv_start_t(void);
+void ble_add_alipay_service(uint8_t server_id);
+
+uint16_t get_g_alipay_conn_id(void);
+
+bool is_alipay_handle(uint16_t hande);
+
+#endif
+
index e029553..8bf6585 100644 (file)
@@ -24,6 +24,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"
@@ -73,9 +75,9 @@ static mc_payment_state_t svr_alipay_get_paystate(void)
 static int32_t svr_alipay_notify_bt(bool value)
 {
     if (value) {
-        svr_alipay_ble_adv_start();
+        // svr_alipay_ble_adv_start();  //统一采用 bleService的adv
     } else {
-        svr_alipay_ble_adv_stop();
+        // svr_alipay_ble_adv_stop();   //统一采用 bleService的adv
     }
     return 0;
 }
@@ -501,7 +503,7 @@ static int32_t svr_alipay_msg_proc(uint32_t msg_id, uint8_t *data, uint16_t size
     return ERRCODE_SUCC;
 }
 
-static void svr_alipay_msg_thread(void *data)
+static errcode_t svr_alipay_msg_thread(void *data)
 {
     uint8_t msg_data[ALIPAY_MAX_SIZE + ALIPAY_ID_LEN + ALIPAY_MSG_LEN];
     uint32_t msg_data_size = sizeof(msg_data);
@@ -522,7 +524,7 @@ static void svr_alipay_msg_thread(void *data)
         svr_alipay_msg_proc(msg_id, &msg_data[ALIPAY_ID_LEN + ALIPAY_MSG_LEN], msg_len);
     }
     ALIPAY_PRINT_ERR(0, "svr_alipay_msg_thread exit");
-    return;
+    return ERRCODE_SUCC;
 }
 
 static errcode_t svr_alipay_task_init(void)
@@ -604,7 +606,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();
+    // svr_alipay_bluetooth_init();
     HS_IIC_Init();
     alipay_pre_init();
     svr_alipay_enter_lpm();
@@ -613,6 +615,11 @@ errcode_t uapi_alipay_svr_init(void)
     return ERRCODE_SUCC;
 }
 
+bool Alipay_is_init(void)
+{
+    return g_alipay_init_flag;
+}
+
 errcode_t uapi_alipay_svr_reset(void)
 {
     if (g_alipay_init_flag) {
index fe7eec9..27b1ecf 100644 (file)
@@ -30,13 +30,16 @@ extern "C" {
 #define APP_FAILURE (-1)
 
 #if !defined(SW_UART_DEBUG) && !defined(SW_RTT_DEBUG)
+#ifdef WEARABLE_LOG_DEBUG
+#define ALIPAY_PRINT_DEBUG(log_num, fmt, arg...) uapi_diag_debug_log(0, fmt, ##arg)
 #define ALIPAY_PRINT_ERR(log_num, fmt, arg...) uapi_diag_error_log(0, fmt, ##arg)
 #define ALIPAY_PRINT_WARN(log_num, fmt, arg...) uapi_diag_warning_log(0, fmt, ##arg)
 #define ALIPAY_PRINT_INFO(log_num, fmt, arg...) uapi_diag_info_log(0, fmt, ##arg)
-#ifdef WEARABLE_LOG_DEBUG
-#define ALIPAY_PRINT_DEBUG(log_num, fmt, arg...) uapi_diag_debug_log(0, fmt, ##arg)
 #else
 #define ALIPAY_PRINT_DEBUG(log_num, fmt, arg...)
+#define ALIPAY_PRINT_ERR(log_num, fmt, arg...) 
+#define ALIPAY_PRINT_WARN(log_num, fmt, arg...) 
+#define ALIPAY_PRINT_INFO(log_num, fmt, arg...) 
 #endif
 #else
 #define ALIPAY_PRINT_ERR(log_num, fmt, arg...) PRINT("[ALIPAY SVR E/] %s: " fmt "\r\n", __FUNCTION__, ##arg)
@@ -97,27 +100,27 @@ typedef struct {
 typedef enum {
     ALIPAY_TRANS_SUCCESS = 0,
     ALIPAY_TRANS_CARD_LIST_START = ALIPAY_TRANS_CARD_SHIFT << 8,
-    ALIPAY_TRANS_CARD_LIST_UNBIND = ALIPAY_TRANS_CARD_LIST_START, // 设备已经在服务端解绑,设备端也需要调用解绑接口
-    ALIPAY_TRANS_CARD_LIST_NET_ERROR,                             // 网络错误
-    ALIPAY_TRANS_CARD_LIST_OWN_TOO_MANY_CARD,                     // 用户开通了太多乘车码
-    ALIPAY_TRANS_CARD_LIST_FUNC_NOT_SUPPPORT,                     // 不支持该功能
-    ALIPAY_TRANS_CARD_LIST_DEV_ERROR,                             // 不该出现的错误
-    ALIPAY_TRANS_CARD_LIST_BUF_TOO_SHORT,                         // 入参的缓存太小
+    ALIPAY_TRANS_CARD_LIST_UNBIND = ALIPAY_TRANS_CARD_LIST_START,       // 设备已经在服务端解绑,设备端也需要调用解绑接口
+    ALIPAY_TRANS_CARD_LIST_NET_ERROR,                                   // 网络错误
+    ALIPAY_TRANS_CARD_LIST_OWN_TOO_MANY_CARD,                           // 用户开通了太多乘车码
+    ALIPAY_TRANS_CARD_LIST_FUNC_NOT_SUPPPORT,                           // 不支持该功能
+    ALIPAY_TRANS_CARD_LIST_DEV_ERROR,                                   // 不该出现的错误
+    ALIPAY_TRANS_CARD_LIST_BUF_TOO_SHORT,                               // 入参的缓存太小
     ALIPAY_TRANS_CODE_START = ALIPAY_TRANS_CODE_SHIFT << 8,
-    ALIPAY_TRANS_CODE_UNBIND = ALIPAY_TRANS_CODE_START, // 设备已经在服务端解绑,设备端也需要调用解绑接口
-    ALIPAY_TRANS_CODE_NET_ERROR,                        // 网络错误
-    ALIPAY_TRANS_CODE_DATA_LIMIT,                       // 因安全原因限制生码
-    ALIPAY_TRANS_CODE_NOT_SUPPORT,                      // 该乘车码不支持
-    ALIPAY_TRANS_CODE_SERVER_ERROR,                     // 服务端报错
-    ALIPAY_TRANS_CODE_DEV_ERROR,                        // 不该出现的错误
+    ALIPAY_TRANS_CODE_UNBIND = ALIPAY_TRANS_CODE_START,                 // 设备已经在服务端解绑,设备端也需要调用解绑接口
+    ALIPAY_TRANS_CODE_NET_ERROR,                                        // 网络错误
+    ALIPAY_TRANS_CODE_DATA_LIMIT,                                       // 因安全原因限制生码
+    ALIPAY_TRANS_CODE_NOT_SUPPORT,                                      // 该乘车码不支持
+    ALIPAY_TRANS_CODE_SERVER_ERROR,                                     // 服务端报错
+    ALIPAY_TRANS_CODE_DEV_ERROR,                                        // 不该出现的错误
 
 } mc_alipay_trans_errcode_t;
 
 typedef enum {
     ALIPAY_MSG_BT = 0,
-    ALIPAY_MSG_UPDATA_TRANS_LIST,
-    ALIPAY_MSG_UPDATA_SPECIAL_CARD,
-    ALIPAY_MSG_UPDATA_ALL_CARDS,
+    ALIPAY_MSG_UPDATA_TRANS_LIST,                                       // 设备端更新乘车码列表
+    ALIPAY_MSG_UPDATA_SPECIAL_CARD,                                     // 设备端更新特殊卡列表
+    ALIPAY_MSG_UPDATA_ALL_CARDS,                                        // 设备端更新所有卡列表
 
 } mc_alipay_msg_type_t;
 
@@ -362,8 +365,7 @@ void svr_alipay_bt_gatts_noyify(uint8_t *data, uint16_t data_len);
  * @brief alipay BLE module initialization.
  * @return  NULL.
  */
-void svr_alipay_bluetooth_init(void);
-
+void svr_alipay_bluetooth_init(uint8_t);
 /*
  * @brief alipay BLE adv start.
  * @return  NULL.
@@ -413,6 +415,9 @@ mc_alipay_trans_context_t * svr_alipay_get_trans_context(void);
  */
 uint32_t svr_alipay_register_cb(alipay_msgf_event_callback_func callback);
 
+
+bool Alipay_is_init(void);
+
 #ifdef __cplusplus
 #if __cplusplus
 }
index 8a914dc..6775998 100644 (file)
Binary files a/code/sdk/interim_binary/brandy/libs/bt/evb_standard/liteos/br/libbt_host_audio_manager_wrapper.a and b/code/sdk/interim_binary/brandy/libs/bt/evb_standard/liteos/br/libbt_host_audio_manager_wrapper.a differ