电话滑动流畅度bug修复 有概率出现空号码BUG修复 pabp服务添加(未具体实现,仅验证服务) 666/1
authorhcj <1224667075@qq.com>
Fri, 9 Aug 2024 03:37:37 +0000 (11:37 +0800)
committerhcj <1224667075@qq.com>
Fri, 9 Aug 2024 03:37:37 +0000 (11:37 +0800)
code/sdk/application/battery/service/battery_service.cpp
code/sdk/application/wearable/fd230app/CMakeLists.txt
code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/BluetoothModel.h
code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/Bluetooyhpabpserver.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/BluetoothModel.cpp
code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/Bluetooyhpabpserver.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/phone/src/TelephonyInitInterface.cpp
code/sdk/drivers/peripheral/slip/cat1Service/cat1_at_cmd.cpp
code/sdk/drivers/peripheral/slip/cat1Service/cat1_server.cpp
code/sdk/drivers/peripheral/slip/cat1Service/cat1_server_hal.cpp

index 2c645d4..9d5e4fe 100644 (file)
@@ -169,6 +169,8 @@ int get_charge_current_status(void)
  * 未插入充电线,则停止充电IC
  * 兼顾低电量报警检测
 */
+static uint8_t low_power_flag_1=1;
+static uint8_t low_power_flag_2=1; 
 static void battery_check_chargement(void)
 {
     float voltage;
@@ -270,12 +272,14 @@ static void battery_check_chargement(void)
              * report alarm shutdown event at 5%
              * pay attention to : debounce 
             */
-            if (percent >0 && percent <= BATTERY_LOWPOWER_ALARM_POWERLEVEL)
+            if (percent >0 && percent <= BATTERY_LOWPOWER_ALARM_POWERLEVEL && low_power_flag_1)
             {
                 low_power_play_toUI(0);
-            }else if (percent <= BATTERY_LOWPOWER_ALARM_SHUTDOWNLEVEL)
+                low_power_flag_1=0;
+            }else if (percent <= BATTERY_LOWPOWER_ALARM_SHUTDOWNLEVEL && low_power_flag_2)
             {
                 low_power_play_toUI(1);
+                low_power_flag_2=0;
             }
         }
     #endif
@@ -412,7 +416,12 @@ errcode_t charger_plug_event_notify(uint8_t plugged)
     // return 0;
    #ifdef SUPPORT_CHARGER_PLUG_DETECTION_NOTIFICATION
     if(plugged == 1){
+
         ChargerEventPublish(TOPIC_EVENT_CHARGE_PLUG,1);
+        //重置提醒flag
+        low_power_flag_1=1;
+        low_power_flag_2=1; 
+
     }else{
         ChargerEventPublish(TOPIC_EVENT_CHARGE_UNPLUG,0);
     } 
index c79dd9d..be47085 100644 (file)
@@ -190,7 +190,7 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothPresenter.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothHeadsetEvent.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothModel.cpp
-    #${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/Bluetooyhpabpserver.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/Bluetooyhpabpserver.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothWrapper.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/MainBluetoothView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothEarPhoneView.cpp
index a38074a..64fe975 100644 (file)
@@ -140,6 +140,7 @@ int uapi_a2dp_snk_disconnect(void);
 int uapi_disconnect_remote_device(void);\r
 int uapi_get_acl_connect_state(void);\r
 int uapi_set_acl_connect_hfp(void);\r
+void uapi_connect_pbap_pce(void);\r
 \r
 \r
 #ifdef __cplusplus\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/Bluetooyhpabpserver.h b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/include/Bluetooyhpabpserver.h
new file mode 100644 (file)
index 0000000..44ed2fc
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) @CompanyNameMagicTag 2022. All rights reserved.
+ * Description: This module include test functions of PBAP service.
+ */
+#ifndef PBAP_SERVICE_H
+#define PBAP_SERVICE_H
+#include <td_type.h>
+#include <stdint.h>
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+//void bt_pbap_service_sample_cmd(uint32_t cmd_id, const char **params, int32_t params_cnt);
+void uapi_pbap_pce_reg_callback(void);
+void uapi_pbap_cmd_start_client(void);
+
+void uapi_pbap_cmd_pull_phonebook(void);
+void uapi_pbap_cmd_pull_vcard_listing();
+void uapi_pbap_cmd_pull_vcard_entry(td_char *vcf_name);
+
+#endif /* SAMPLE_PBAP_SERVICE_H */
+
+#ifdef  __cplusplus
+}
+#endif
\ No newline at end of file
index 5836ceb..bddd77e 100644 (file)
@@ -22,6 +22,8 @@
 #include "bts_le_gap.h"\r
 #include "bts_spp.h"\r
 #include "osal_task.h"\r
+#include "bts_pbap.h"\r
+\r
 #ifdef SUPPORT_ALIPAY_SEC\r
 #include "alipay_feature.h"\r
 #endif\r
@@ -41,6 +43,7 @@
 #ifdef SUPPORT_AT_OHOSFWK\r
 #include "BluetoothWrapper.h"\r
 #endif\r
+#include "Bluetooyhpabpserver.h"\r
 namespace OHOS {\r
 \r
 #define BT_SPP_TASK_STACK_SIZE 2048\r
@@ -171,7 +174,7 @@ static int bluetooth_init_all(void)
     \r
     // BtInitCallBacksEx(); //BLE\r
     // BtInitGatts(); //BLE \r
-\r
+    uapi_pbap_pce_reg_callback();\r
     // BtInitSpp();\r
     BtA2dpInit();\r
 \r
@@ -198,10 +201,10 @@ void bluetooth_enable_all(void)
 \r
         errcode_t ret;\r
         // 设置自动回连,ios一键双连依赖此配置\r
-        bts_feature_t bts_feature = { 0 };\r
-        bts_feature.bt_auto_reconnect_closed = 0;\r
-        ret = bts_set_features(&bts_feature);\r
-        WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt bts_set_features ret = %u", ret);\r
+        // bts_feature_t bts_feature = { 0 };\r
+        // bts_feature.bt_auto_reconnect_closed = 0;\r
+        // ret = bts_set_features(&bts_feature);\r
+        // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt bts_set_features ret = %u", ret);\r
     // gap_ble_sec_params_t sec_param = { 1, GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT, 1, GAP_BLE_GAP_SECURITY_MODE1_LEVEL3 };\r
         gap_ble_sec_params_t sec_param = { 1, GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT, 0, GAP_BLE_GAP_SECURITY_MODE1_LEVEL2 };\r
         ret = gap_ble_set_sec_param(&sec_param);\r
@@ -230,11 +233,11 @@ void bluetooth_close_all(void)
     /**TODO: 关闭自动重连**/\r
 \r
     // 设置自动回连,ios一键双连依赖此配置\r
-    bts_feature_t bts_feature = { 0 };\r
-    bts_feature.bt_auto_reconnect_closed = 1;\r
-    bts_feature.bt_a2dp_snk_closed = 1;\r
-    ret = bts_set_features(&bts_feature);\r
-    WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt bts_set_features ret = %u", ret);\r
+    // bts_feature_t bts_feature = { 0 };\r
+    // bts_feature.bt_auto_reconnect_closed = 1;\r
+    // bts_feature.bt_a2dp_snk_closed = 1;\r
+    // ret = bts_set_features(&bts_feature);\r
+    // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt bts_set_features ret = %u", ret);\r
     \r
     /**TODO: 断开BR链接**/\r
     bd_addr_t bdaddr={0};\r
@@ -1331,6 +1334,17 @@ static void BtA2dpSnkConnectStateChangedCb(bd_addr_t *bd_addr, int conn_state)
     {\r
         SendMsgToUIService(BT_CONNECTED_TO_UI, 0, nullptr, 0);\r
         SendMsgToMsgCenterService(BT_CONNECTED_TO_MSGCENTER, 0, nullptr, 0);\r
+        // if(conn_state==PROFILE_STATE_CONNECTED)\r
+        // {\r
+        //     if(pbap_pce_get_device_connect_state(bd_addr)==PROFILE_STATE_DISCONNECTED)\r
+        //     uapi_connect_pbap_pce();\r
+        //     else \r
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"pbap_pce_get_device_connect_state(int): %X\n", pbap_pce_get_device_connect_state(bd_addr));\r
+            \r
+        // }\r
+       \r
+        \r
+\r
     }\r
     \r
     \r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/Bluetooyhpabpserver.cpp b/code/sdk/application/wearable/fd230app/nativeui/bluetooth/src/Bluetooyhpabpserver.cpp
new file mode 100644 (file)
index 0000000..5d057e7
--- /dev/null
@@ -0,0 +1,768 @@
+/*
+ * Copyright (c) @CompanyNameMagicTag 2022. All rights reserved.
+ * Description: This module include test function of BT PBAP Service module.
+ */
+
+#include "Bluetooyhpabpserver.h"
+#include <soc_osal.h>
+#include <td_base.h>
+#include "securec.h"
+#include "errcode.h"
+#include "bts_br_gap.h"
+#include "bts_pbap.h"
+// #include "sample_common.h"
+#include "debug_print.h"
+#include "graphic_service.h"
+#include "msg_center.h"
+#include "bts_def.h"
+#include "bts_gatt_stru.h"
+#include "bts_a2dp_source.h"
+#include "bts_gatt_server.h"
+#include "bts_le_gap.h"
+#include "bts_spp.h"
+#include "osal_task.h"
+#include "bleService.h"
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+
+#define SAMPLE_PBAP_TASK_STACK_SIZE 0x400
+#define PBAP_APP_FOLDER_MAXLENGTH   40
+static bd_addr_t g_pbap_curr_addr;
+
+typedef enum {
+    PBAP_VCF_PB = 0,
+    PBAP_VCF_ICH,
+    PBAP_VCF_OCH,
+    PBAP_VCF_MCH,
+    PBAP_VCF_CCH,
+    PBAP_VCF_SPD,
+    PBAP_VCF_FAV,
+} pbap_vcf_files;
+
+static void sample_pbap_print_addr(const bd_addr_t *bd_addr)
+{
+    if (bd_addr != NULL) {
+        printf("addr: ****%02x%02x%02x%02x ",
+            bd_addr->addr[3], bd_addr->addr[2], bd_addr->addr[1], bd_addr->addr[0]); /* addr 下标 3 2 1 0 */
+    }
+}
+
+static void sample_pbap_conn_state(const bd_addr_t *bd_addr, profile_connect_state_t state)
+{
+    sample_pbap_print_addr(bd_addr);
+    printf("%d\n", state);
+    return;
+}
+//接收数据回调
+static void sample_pbap_receive_data(const bd_addr_t *bd_addr, const uint8_t* data, int32_t len)
+{
+    sample_pbap_print_addr(bd_addr);
+
+    printf("receive %d bytes(%s)\n", len, data);
+
+    return;
+}
+
+//传输完成回调
+static void sample_pbap_transfer_complete(const bd_addr_t *bd_addr)
+{
+    sample_pbap_print_addr(bd_addr);
+    printf("\n");
+    return;
+}
+
+static void sample_pbap_get_phonebook_size(const bd_addr_t *bd_addr, uint16_t size)
+{
+    sample_pbap_print_addr(bd_addr);
+
+    printf("%u\n", size);
+    return;
+}
+
+typedef struct {
+    uint32_t bts_code;
+    td_char print_message[20]; /* 字符串长度20 */
+} sample_pbap_code_print;
+
+static sample_pbap_code_print g_pbap_error_pair[] = {
+    {PBAP_ERROR_OK, "OK"},
+    {PBAP_ERROR_BAD_REQUEST, "BAD REQUEST"},
+    {PBAP_ERROR_NOT_IMPLEMENTED, "NOT IMPLEMENTED"},
+    {PBAP_ERROR_UNAUTHORIZED, "UNAUTHORIZED"},
+    {PBAP_ERROR_PRECONDITION_FAILED, "PRECONDITION FAILED"},
+    {PBAP_ERROR_NOT_FOUND, "NOT FOUND"},
+    {PBAP_ERROR_NOT_ACCEPTABLE, "NOT ACCEPTABLE"},
+    {PBAP_ERROR_SERVICE_UNAVAILABLE, "SERVICE UNAVAILABLE"},
+    {PBAP_ERROR_FORBIDDEN, "FORBIDDEN"},
+};
+
+static td_char* sample_pbap_print_error(uint32_t code)
+{
+    for (uint32_t i = 0; i < sizeof(g_pbap_error_pair) / sizeof(g_pbap_error_pair[0]); i++) {
+        if (code == g_pbap_error_pair[i].bts_code) {
+            return g_pbap_error_pair[i].print_message;
+        }
+    }
+    return NULL;
+}
+
+static void sample_pbap_handle_error_code(const bd_addr_t *bd_addr, int32_t code)
+{
+    sample_pbap_print_addr(bd_addr);
+    printf("0x%x %s\n", code, sample_pbap_print_error((uint32_t)code));
+}
+
+static bool sample_pbap_is_null_pointer(uint16_t sample_mode, uint8_t index)
+{
+    return ((sample_mode & (1 << index)) != 0);
+}
+
+/* 蓝牙电话簿注册回调 */
+void uapi_pbap_pce_reg_callback(void)
+{
+    errcode_t ret = ERRCODE_BT_SUCCESS;
+    pbap_pce_callbacks_t callbacks = {
+        sample_pbap_conn_state,
+        sample_pbap_get_phonebook_size,
+        sample_pbap_transfer_complete,
+        sample_pbap_receive_data,
+        sample_pbap_handle_error_code,
+    };
+    ret = (errcode_t)pbap_pce_register_callbacks(&callbacks);
+    printf("ret=0x%x\n", ret);
+}
+
+
+
+static int32_t sample_pbap_connect_task_body(const void *bd_addr)
+{
+    uint32_t result = (uint32_t)pbap_pce_connect((bd_addr_t*)bd_addr);
+    if (result != ERRCODE_BT_SUCCESS) {
+        printf("Connect to PBAP service failed\n");
+    }
+    printf("[Line: %d] finish, result: 0x%x!\n", __LINE__, result);
+    return 0;
+}
+
+static void sample_pbap_create_conn_task(const bd_addr_t *bd_addr)
+{
+    osal_task *task = osal_kthread_create((osal_kthread_handler)sample_pbap_connect_task_body, (void *)bd_addr, "sample_pbap_connect_task",
+        SAMPLE_PBAP_TASK_STACK_SIZE);
+    if (task == NULL) {
+        printf("create task fail\n");
+        return;
+    }
+}
+
+/* start a pbap client */
+ void uapi_pbap_cmd_start_client()
+{
+    // if (params_cnt != 2) { /* 2个参数 */
+    //     printf("params cnt err: %d!\n", params_cnt);
+    //     return;
+    // }
+
+    // uint32_t sample_mode;
+    // if (sscanf_s(params[0], "%x", &sample_mode) <= 0) {
+    //     printf("get sample_mode fail\n");
+    //     return;
+    // }
+    // bd_addr_t* bd_addr = NULL;
+    // if (!sample_pbap_is_null_pointer((uint16_t)sample_mode, 0)) {
+    //     bd_addr = sample_pbap_parse_addr(params[1]);
+    bd_addr_t bdaddr={0};
+    get_phone_addr(&bdaddr);
+    // }
+    sample_pbap_create_conn_task((const bd_addr_t*)&bdaddr);
+}
+
+void uapi_pbap_cmd_stop_client()
+{
+    bd_addr_t bdaddr={0};
+    get_phone_addr(&bdaddr);
+
+    uint32_t ret = (uint32_t)pbap_pce_disconnect(&bdaddr);
+    printf("[Line: %d] finish, ret: %u\n", __LINE__, ret);
+}
+
+static int32_t sample_pbap_set_folder_vcf(uint8_t* name, uint8_t vcf, bool is_pull_phone_book)
+{
+    if (name == NULL) {
+        return -1;
+    }
+    switch (vcf) {
+        case PBAP_VCF_PB: /* Main Phone book */
+            (void)strcat_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "pb");
+            break;
+        case PBAP_VCF_ICH: /* Incoming Calls History */
+            (void)strcat_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "ich");
+            break;
+        case PBAP_VCF_OCH: /* Outgoing Calls History */
+            (void)strcat_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "och");
+            break;
+        case PBAP_VCF_MCH: /* Missed Calls History */
+            (void)strcat_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "mch");
+            break;
+        case PBAP_VCF_CCH: /* Combined Calls History */
+            (void)strcat_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "cch");
+            break;
+        case PBAP_VCF_SPD: /* Speed Dial */
+            (void)strcat_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "spd");
+            break;
+        case PBAP_VCF_FAV: /* Favorite Contacts */
+            (void)strcat_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "fav");
+            break;
+        default:
+            printf("no vcf file be seleted.\n");
+            return -1;
+    }
+    if (is_pull_phone_book) {
+        (void)strcat_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, ".vcf");
+    }
+    return 0;
+}
+
+static void sample_pbap_filter_composer(uint8_t filter[PBAP_MASK_LEN], uint8_t flag)
+{
+    uint8_t *temp = NULL;
+    uint8_t bytes = 0;
+    uint8_t bits = 0;
+
+    if (filter && (flag < 64)) { /* flag最大值64 */
+        bytes = (uint8_t)(flag >> 3); /* 右移3位判断填入哪个字节 */
+        bits = (uint8_t)(flag & 0x07); /* 求余数判断填入哪一位 */
+        temp = filter + PBAP_MASK_LEN - 1 - bytes;
+        *temp |= (1 << bits);
+    }
+}
+
+static void sample_pbap_set_property(uint8_t pro_arr[PBAP_MASK_LEN], uint32_t property)
+{
+    uint8_t cur_bit = 0;
+    uint32_t temp = property;
+    while (temp != 0) {
+        if ((temp & 0x01) != 0) {
+            sample_pbap_filter_composer(pro_arr, cur_bit);
+        }
+        temp = temp >> 1;
+        cur_bit++;
+    }
+}
+
+static bool sample_pbap_set_pull_phone_book_name(uint8_t folder, uint8_t vcf, uint8_t* name)
+{
+    if (name == NULL) {
+        printf("empty name.\n");
+        return false;
+    }
+    if (folder == PBAP_REPOSITORY_LOCAL) {
+        (void)strcpy_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "telecom/");
+    } else if (folder == PBAP_REPOSITORY_SIM) {
+        (void)strcpy_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, "SIM1/telecom/");
+    } else {
+        printf("no folder be seleted.\n");
+        return false;
+    }
+
+    if (sample_pbap_set_folder_vcf(name, vcf, true) != 0) {
+        return false;
+    }
+    return true;
+}
+
+static bool wstp_pbap_check_param_valid(
+    uint8_t folder, uint8_t vcf, uint16_t max_list_count, uint16_t list_offset, uint8_t format)
+{
+    // bts_unused(max_list_count);
+    // bts_unused(list_offset);
+    bool res = true;
+    if (folder == 1) { /* folder 1 */
+        if (vcf > 6) { /* vcf num 6 */
+            res = false;
+        }
+    } else if (folder == 2) { /* folder 2 */
+        if (vcf > 4) { /* vcf num 4 */
+            res = false;
+        }
+    } else {
+        res = false;
+    }
+
+    if (format > 1) {
+        res = false;
+    }
+
+    return res;
+}
+//PBAP_VCF_PB 10 1  0
+/* get phone book */
+void uapi_pbap_cmd_pull_phonebook()
+{
+    printf("uapi_pbap_cmd_pull_phonebook\n");
+    uint8_t folder=PBAP_REPOSITORY_LOCAL;//写死只拿手机的,不拿SIM卡的
+    uint8_t vcf=PBAP_VCF_PB;//写死 电话簿
+    uint16_t max_list_count=0xFFFF;//最大数量
+    uint16_t list_offset=0;
+    uint8_t format=0;//编码格式
+
+    if (!wstp_pbap_check_param_valid(folder, vcf, max_list_count, list_offset, format)) {
+        printf("pbap param invalid\n");
+        return;
+    }
+
+    pbap_pce_pull_phone_book_param_t *thr_par =
+        (pbap_pce_pull_phone_book_param_t*)(void *)malloc(sizeof(pbap_pce_pull_phone_book_param_t));
+    if (thr_par == NULL) {
+        printf("pbap param malloc failed\n");
+        return;
+    }
+    (void)memset_s(thr_par, sizeof(pbap_pce_pull_phone_book_param_t), 0, sizeof(pbap_pce_pull_phone_book_param_t));
+    thr_par->name = (unsigned char *)(void *)malloc(PBAP_APP_FOLDER_MAXLENGTH);
+    if (thr_par->name == NULL) {
+        printf("pbap name malloc failed\n");
+        free(thr_par);
+        return;
+    }
+    (void)memset_s(thr_par->name, PBAP_APP_FOLDER_MAXLENGTH, 0, PBAP_APP_FOLDER_MAXLENGTH);
+    /* 为0时代表查询对应记录大小 */
+    thr_par->max_list_count = max_list_count;
+    thr_par->list_offset = list_offset;
+    thr_par->format = format;
+    uint32_t property =PBAP_PROPERTY_MASK_TEL | PBAP_PROPERTY_MASK_FN|PBAP_PROPERTY_MASK_UID;
+    sample_pbap_set_property(thr_par->property_selector, property);
+    uint8_t filter = 0;
+    if (filter != 0) {
+        sample_pbap_filter_composer(thr_par->property_selector, PBAP_PROPERTY_MASK_FILTER);
+    }
+
+    if (sample_pbap_set_pull_phone_book_name(folder, vcf, thr_par->name)) {
+        printf("pbap_pce_pull_phone_book name=%s\n", thr_par->name);
+        pbap_pce_pull_phone_book(NULL, thr_par);
+    }
+    free(thr_par->name);
+    free(thr_par);
+}
+
+/* get phone book */
+static void sample_pbap_cmd_pull_phonebook(const char **params, int32_t params_cnt)
+{
+    // if (params_cnt != 9) { /* 9个参数 */
+    //     printf("params cnt err: %d!\n", params_cnt);
+    //     return;
+    // }
+
+    // uint32_t sample_mode;
+    // if (sscanf_s(params[0], "%x", &sample_mode) <= 0) {
+    //     printf("get sample_mode fail\n");
+    //     return;
+    // }
+    // bd_addr_t* bd_addr = NULL;
+    // if (!sample_pbap_is_null_pointer((uint16_t)sample_mode, 0)) {
+    //     bd_addr = sample_pbap_parse_addr(params[1]);
+    // }
+
+    // if (pbap_pce_get_device_connect_state(bd_addr) != PROFILE_STATE_CONNECTED) {
+    //     printf("No PBAP connection selected!\n");
+    //     return;
+    // }
+    // pbap_pce_pull_phone_book_param_t *thr_par =
+    //     (pbap_pce_pull_phone_book_param_t*)(void *)bt_os_new(sizeof(pbap_pce_pull_phone_book_param_t));
+    // if (thr_par == NULL) {
+    //     printf("pbap param malloc failed\n");
+    //     return;
+    // }
+    // (void)memset_s(thr_par, sizeof(pbap_pce_pull_phone_book_param_t), 0, sizeof(pbap_pce_pull_phone_book_param_t));
+    // thr_par->name = (unsigned char *)(void *)bt_os_new(PBAP_APP_FOLDER_MAXLENGTH);
+    // if (thr_par->name == NULL) {
+    //     printf("pbap name malloc failed\n");
+    //     bt_os_free(thr_par);
+    //     return;
+    // }
+    // (void)memset_s(thr_par->name, PBAP_APP_FOLDER_MAXLENGTH, 0, PBAP_APP_FOLDER_MAXLENGTH);
+    // thr_par->max_list_count = (unsigned short)atoi(params[4]); /* index = 4 */
+    // thr_par->list_offset = (unsigned short)atoi(params[5]); /* index = 5 */
+    // thr_par->format = (unsigned char)atoi(params[6]); /* index = 6 */
+    // uint32_t property = (uint32_t)atoi(params[7]); /* index = 7 */
+    // sample_pbap_set_property(thr_par->property_selector, property);
+    // int filter = atoi(params[8]); /* index = 8 */
+    // if (filter != 0) {
+    //     sample_pbap_filter_composer(thr_par->property_selector, PBAP_PROPERTY_MASK_FILTER);
+    // }
+
+    // uint8_t folder = (uint8_t)atoi(params[2]); /* index = 2 */
+    // uint8_t vcf = (uint8_t)atoi(params[3]); /* index = 3 */
+    // if (sample_pbap_set_pull_phone_book_name(folder, vcf, thr_par->name)) {
+    //     pbap_pce_pull_phone_book(bd_addr, thr_par);
+    // }
+    // bt_os_free(thr_par->name);
+    // bt_os_free(thr_par);
+}
+
+static bool sample_pbap_set_vcard_listing_name(bd_addr_t* bd_addr, uint8_t folder, uint8_t vcf, uint8_t* name)
+{
+    printf("folder=%u vcf=%u\n", folder, vcf);
+    uint8_t tel_name[8] = "telecom";
+    uint8_t sim_name[5] = "SIM1";
+    if (name == NULL) {
+        printf("empty name.\n");
+        return false;
+    }
+    uint32_t ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, NULL);
+    if (ret != ERRCODE_BT_SUCCESS) {
+        printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+        return false;
+    }
+    if (folder == PBAP_REPOSITORY_LOCAL) {
+        ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, tel_name);
+        if (ret != ERRCODE_BT_SUCCESS) {
+            printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+            return false;
+        }
+    } else if (folder == PBAP_REPOSITORY_SIM) {
+        ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, sim_name);
+        if (ret != ERRCODE_BT_SUCCESS) {
+            printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+            return false;
+        }
+        ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, tel_name);
+        if (ret != ERRCODE_BT_SUCCESS) {
+            printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+            return false;
+        }
+    } else {
+        printf("no folder be seleted.\n");
+        return false;
+    }
+    if (sample_pbap_set_folder_vcf(name, vcf, false)) {
+        return false;
+    }
+    return true;
+}
+
+/* get phone vCard-Listing */
+void uapi_pbap_cmd_pull_vcard_listing()
+{
+    uint8_t folder=1;
+    uint8_t vcf=PBAP_VCF_PB;
+    uint16_t max_list_count=0xffff;
+    uint16_t list_offset=0;
+    uint8_t order=0;
+
+    if (!wstp_pbap_check_param_valid(folder, vcf, max_list_count, list_offset, 0)) {
+        printf("pbap param invalid\n");
+        return;
+    }
+
+    bd_addr_t* bd_addr = NULL;
+
+    pbap_pce_pull_vcard_listing_param_t *thr_par =
+        (pbap_pce_pull_vcard_listing_param_t*)(void *)malloc(sizeof(pbap_pce_pull_vcard_listing_param_t));
+    if (thr_par == NULL) {
+        printf("pbap param malloc failed\n");
+        return;
+    }
+
+    (void)memset_s(
+        thr_par, sizeof(pbap_pce_pull_vcard_listing_param_t), 0, sizeof(pbap_pce_pull_vcard_listing_param_t));
+    thr_par->name = (uint8_t *)(void *)malloc(PBAP_APP_FOLDER_MAXLENGTH);
+    if (thr_par->name == NULL) {
+        printf("pbap param name malloc failed\n");
+        free(thr_par);
+        return;
+    }
+    (void)memset_s(thr_par->name, PBAP_APP_FOLDER_MAXLENGTH, 0, PBAP_APP_FOLDER_MAXLENGTH);
+
+    thr_par->search_property=PBAP_PROPERTY_MASK_TEL;
+    thr_par->search_value=(unsigned char*)"15111454038";
+    thr_par->max_list_count = max_list_count;
+    thr_par->list_offset = list_offset; /* index = 5 */
+    /* 0:索引序 1:字典序 */
+    thr_par->order = order;
+
+    if (sample_pbap_set_vcard_listing_name(bd_addr, folder, vcf, thr_par->name)) {
+        printf("pbap_pce_pull_vcard_listing name=%s\n", thr_par->name);
+        pbap_pce_pull_vcard_listing(bd_addr, thr_par);
+    }
+    free(thr_par->name);
+    free(thr_par);
+}
+
+/* get phone vCard-Listing */
+static void sample_pbap_cmd_pull_vcard_listing(const char **params, int32_t params_cnt)
+{
+    // if (params_cnt != 7) { /* 7个参数 */
+    //     printf("params cnt err: %d!\n", params_cnt);
+    //     return;
+    // }
+
+    // uint32_t sample_mode;
+    // if (sscanf_s(params[0], "%x", &sample_mode) <= 0) {
+    //     printf("get sample_mode fail\n");
+    //     return;
+    // }
+    // bd_addr_t* bd_addr = NULL;
+    // if (!sample_pbap_is_null_pointer((uint16_t)sample_mode, 0)) {
+    //     bd_addr = sample_pbap_parse_addr(params[1]);
+    // }
+
+    // if (pbap_pce_get_device_connect_state(bd_addr) != PROFILE_STATE_CONNECTED) {
+    //     printf("No PBAP connection selected!\n");
+    //     return;
+    // }
+
+    // pbap_pce_pull_vcard_listing_param_t *thr_par =
+    //     (pbap_pce_pull_vcard_listing_param_t*)(void *)bt_os_new(sizeof(pbap_pce_pull_vcard_listing_param_t));
+    // if (thr_par == NULL) {
+    //     printf("pbap param malloc failed\n");
+    //     return;
+    // }
+
+    // (void)memset_s(
+    //     thr_par, sizeof(pbap_pce_pull_vcard_listing_param_t), 0, sizeof(pbap_pce_pull_vcard_listing_param_t));
+    // thr_par->name = (uint8_t *)(void *)bt_os_new(PBAP_APP_FOLDER_MAXLENGTH);
+    // if (thr_par->name == NULL) {
+    //     printf("pbap param name malloc failed\n");
+    //     bt_os_free(thr_par);
+    //     return;
+    // }
+    // (void)memset_s(thr_par->name, PBAP_APP_FOLDER_MAXLENGTH, 0, PBAP_APP_FOLDER_MAXLENGTH);
+    // uint8_t folder = (uint8_t)atoi(params[2]); /* index = 2 */
+    // uint8_t vcf = (uint8_t)atoi(params[3]); /* index = 3 */
+    // thr_par->max_list_count = (unsigned short)atoi(params[4]); /* index = 4 */
+    // thr_par->list_offset = (unsigned short)atoi(params[5]); /* index = 5 */
+    // thr_par->order = (unsigned char)atoi(params[6]); /* index = 6 */
+
+    // if (sample_pbap_set_vcard_listing_name(bd_addr, folder, vcf, thr_par->name)) {
+    //     pbap_pce_pull_vcard_listing(bd_addr, thr_par);
+    // }
+    // bt_os_free(thr_par->name);
+    // bt_os_free(thr_par);
+}
+
+static bool sample_pbap_set_vcard_entry_name(
+    bd_addr_t *bd_addr, uint8_t folder, uint8_t vcf, const td_char *vcf_name, uint8_t *name)
+{
+    if (name == NULL) {
+        printf("empty name.\n");
+        return false;
+    }
+    uint8_t tel_name[8] = "telecom";
+    uint8_t sim_name[5] = "SIM1";
+    uint32_t ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, NULL);
+    if (ret != ERRCODE_BT_SUCCESS) {
+        printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+        return false;
+    }
+    if (folder == PBAP_REPOSITORY_LOCAL) {
+        ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, tel_name);
+        if (ret != ERRCODE_BT_SUCCESS) {
+            printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+            return false;
+        }
+    } else if (folder == PBAP_REPOSITORY_SIM) {
+        ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, sim_name);
+        if (ret != ERRCODE_BT_SUCCESS) {
+            printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+            return false;
+        }
+        ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, tel_name);
+        if (ret != ERRCODE_BT_SUCCESS) {
+            printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+            return false;
+        }
+    } else {
+        printf("no folder be seleted.\n");
+        return false;
+    }
+   if (sample_pbap_set_folder_vcf(name, vcf, false)) {
+        return false;
+    } else {
+        ret = (uint32_t)pbap_pce_set_phone_book(bd_addr, name);
+        if (ret != ERRCODE_BT_SUCCESS) {
+            printf("0x%x %s\n", ret, sample_pbap_print_error(ret));
+            return false;
+        }
+    }
+
+    if (strcpy_s((char *)name, PBAP_APP_FOLDER_MAXLENGTH, vcf_name) != EOK) {
+        printf("strcpy_s vcf_name fail\n");
+        return false;
+    }
+    return true;
+}
+
+/* get phone vCard-Entry */
+void uapi_pbap_cmd_pull_vcard_entry(td_char *vcf_name)
+{
+    printf("uapi_pbap_cmd_pull_vcard_entry: %s\r\n",vcf_name);
+    bd_addr_t bdaddr={0};
+    get_phone_addr(&bdaddr);
+
+    uint8_t format=0;
+    uint8_t vcf=PBAP_VCF_PB;
+    uint8_t folder=1;
+    if (!wstp_pbap_check_param_valid(folder, vcf, 0, 0, format)) {
+        printf("pbap param invalid\n");
+        return;
+    }
+
+    pbap_pce_pull_vcard_entry_param_t *thr_par =
+        (pbap_pce_pull_vcard_entry_param_t*)(void *)malloc(sizeof(pbap_pce_pull_vcard_entry_param_t));
+    if (thr_par == NULL) {
+        printf("pbap param malloc failed\n");
+        return;
+    }
+    (void)memset_s(thr_par, sizeof(pbap_pce_pull_vcard_entry_param_t), 0, sizeof(pbap_pce_pull_vcard_entry_param_t));
+    thr_par->name = (uint8_t*)(void *)malloc(PBAP_APP_FOLDER_MAXLENGTH);
+    if (thr_par->name == NULL) {
+        printf("pbap param name malloc failed\n");
+        free(thr_par);
+        return;
+    }
+    (void)memset_s(thr_par->name, PBAP_APP_FOLDER_MAXLENGTH, 0, PBAP_APP_FOLDER_MAXLENGTH);
+
+    thr_par->format = format; /* index = 5 */
+    uint32_t property = PBAP_PROPERTY_MASK_TEL | PBAP_PROPERTY_MASK_FN; /* index = 6 */
+    sample_pbap_set_property(thr_par->property_selector, property);
+    uint8_t filter = 0; /* index = 7 */
+    if (filter != 0) {
+        sample_pbap_filter_composer(thr_par->property_selector, PBAP_PROPERTY_MASK_FILTER);
+    }
+
+    if (sample_pbap_set_vcard_entry_name(&bdaddr, folder, vcf, vcf_name, thr_par->name)) {
+        pbap_pce_pull_vcard_entry(&bdaddr, thr_par);
+    }
+    free(thr_par->name);
+    free(thr_par);
+    printf("uapi_pbap_cmd_pull_vcard_entry\n");
+}
+
+/* get phone vCard-Entry */
+static void sample_pbap_cmd_pull_vcard_entry(const char **params, int32_t params_cnt)
+{
+    // if (params_cnt != 8) { /* 8个参数 */
+    //     printf("params cnt err: %d!\n", params_cnt);
+    //     return;
+    // }
+
+    // uint32_t sample_mode;
+    // if (sscanf_s(params[0], "%x", &sample_mode) <= 0) {
+    //     printf("get sample_mode fail\n");
+    //     return;
+    // }
+    // bd_addr_t* bd_addr = NULL;
+    // if (!sample_pbap_is_null_pointer((uint16_t)sample_mode, 0)) {
+    //     bd_addr = sample_pbap_parse_addr(params[1]);
+    // }
+
+    // if (pbap_pce_get_device_connect_state(bd_addr) != PROFILE_STATE_CONNECTED) {
+    //     printf("No PBAP connection selected!\n");
+    //     return;
+    // }
+
+    // pbap_pce_pull_vcard_entry_param_t *thr_par =
+    //     (pbap_pce_pull_vcard_entry_param_t*)(void *)bt_os_new(sizeof(pbap_pce_pull_vcard_entry_param_t));
+    // if (thr_par == NULL) {
+    //     printf("pbap param malloc failed\n");
+    //     return;
+    // }
+    // (void)memset_s(thr_par, sizeof(pbap_pce_pull_vcard_entry_param_t), 0, sizeof(pbap_pce_pull_vcard_entry_param_t));
+    // thr_par->name = (uint8_t*)(void *)bt_os_new(PBAP_APP_FOLDER_MAXLENGTH);
+    // if (thr_par->name == NULL) {
+    //     printf("pbap param name malloc failed\n");
+    //     bt_os_free(thr_par);
+    //     return;
+    // }
+    // (void)memset_s(thr_par->name, PBAP_APP_FOLDER_MAXLENGTH, 0, PBAP_APP_FOLDER_MAXLENGTH);
+    // thr_par->format = (unsigned char)atoi(params[5]); /* index = 5 */
+    // uint32_t property = (uint32_t)atoi(params[6]); /* index = 6 */
+    // sample_pbap_set_property(thr_par->property_selector, property);
+    // int filter = atoi(params[7]); /* index = 7 */
+    // if (filter != 0) {
+    //     sample_pbap_filter_composer(thr_par->property_selector, PBAP_PROPERTY_MASK_FILTER);
+    // }
+    // uint8_t folder = (uint8_t)atoi(params[2]); /* index = 2 */
+    // uint8_t vcf = (uint8_t)atoi(params[3]); /* index = 3 */
+    // const td_char* vcf_name = params[4]; /* index = 4 */
+
+    // if (sample_pbap_set_vcard_entry_name(bd_addr, folder, vcf, vcf_name, thr_par->name)) {
+    //     pbap_pce_pull_vcard_entry(bd_addr, thr_par);
+    // }
+    // bt_os_free(thr_par->name);
+    // bt_os_free(thr_par);
+}
+
+/* pbap abort operation */
+ void uapi_pbap_cmd_stop_trans(void)
+{
+
+    bd_addr_t bdaddr={0};
+    get_phone_addr(&bdaddr);
+
+    if (pbap_pce_get_device_connect_state(&bdaddr) != PROFILE_STATE_CONNECTED) {
+        printf("No PBAP connection selected!\n");
+        return;
+    }
+    uint32_t result = (uint32_t)pbap_pce_stop_trans(&bdaddr);
+    printf("[Line: %d] finish, ret: 0x%x\n", __LINE__, result);
+}
+
+/* pbap get connect status */
+void uapi_pbap_amd_get_conn_state(void)
+{
+    bd_addr_t bdaddr={0};
+    get_phone_addr(&bdaddr);
+
+    uint32_t result = (uint32_t)pbap_pce_get_device_connect_state(&bdaddr);
+    printf("[Line: %d] finish, conn state: 0x%x\n", __LINE__, result);
+}
+
+/* PBAP service test cmd id */
+typedef enum {
+    SAMPLE_PBAP_CMD_REG_CALLBACK,       /* 注册回调 */
+    SAMPLE_PBAP_CMD_START_CLIENT,       /* 启动PBAP客户端 */
+    SAMPLE_PBAP_CMD_STOP_CLIENT,        /* 关闭PBAP客户端 */
+    SAMPLE_PBAP_CMD_PULL_PHONEBOOK,     /* 下载电话簿 */
+    SAMPLE_PBAP_CMD_PULL_VCARD_LISTING, /* 下载vcard列表 */
+    SAMPLE_PBAP_CMD_PULL_VCARD_ENTRY,   /* 下载vcard条目 */
+    SAMPLE_PBAP_CMD_STOP_TRANS,         /* 中断传输 */
+    SAMPLE_PBAP_CMD_GET_CONN_STATE,     /* 获取连接状态 */
+} sample_pbap_cmd_id;
+
+typedef void (*pbap_sample_cmd_handle_func)(const char **params, int32_t params_cnt);
+
+typedef struct {
+    sample_pbap_cmd_id id;
+    pbap_sample_cmd_handle_func func;
+} sample_pbap_hdl_info;
+
+// sample_pbap_hdl_info g_sample_pbap_hdls[] = {
+//     { SAMPLE_PBAP_CMD_REG_CALLBACK, sample_pbap_cmd_reg_callback },
+//     { SAMPLE_PBAP_CMD_START_CLIENT, sample_pbap_cmd_start_client },
+//     { SAMPLE_PBAP_CMD_STOP_CLIENT, sample_pbap_cmd_stop_client },
+//     { SAMPLE_PBAP_CMD_PULL_PHONEBOOK, sample_pbap_cmd_pull_phonebook },
+//     { SAMPLE_PBAP_CMD_PULL_VCARD_LISTING, sample_pbap_cmd_pull_vcard_listing },
+//     { SAMPLE_PBAP_CMD_PULL_VCARD_ENTRY, sample_pbap_cmd_pull_vcard_entry },
+//     { SAMPLE_PBAP_CMD_STOP_TRANS, sample_pbap_cmd_stop_trans },
+//     { SAMPLE_PBAP_CMD_GET_CONN_STATE, sample_pbap_amd_get_conn_state },
+// };
+
+// void bt_pbap_service_sample_cmd(uint32_t cmd_id, const char **params, int32_t params_cnt)
+// {
+//     printf("id: %u\n", cmd_id);
+//     uint32_t hdl_cnt = sizeof(g_sample_pbap_hdls) / sizeof(sample_pbap_hdl_info);
+//     for (uint32_t i = 0; i < hdl_cnt; i++) {
+//         if (g_sample_pbap_hdls[i].id == cmd_id) {
+//             g_sample_pbap_hdls[i].func(params, params_cnt);
+//             return;
+//         }
+//     }
+//     printf("invalid cmd_id = %d \n", cmd_id);
+// }
+
+#ifdef  __cplusplus
+}
+#endif
index 9f1619a..f8c00f8 100644 (file)
@@ -29,8 +29,11 @@ namespace OHOS
         scrollView->SetScrollBlankSize(params.scrollBlankSize);
         scrollView->SetReboundSize(params.reboundSize);
         scrollView->SetDirection(params.direction);
+
         scrollView->SetTouchable(true);
         scrollView->SetDraggable(true);
+        scrollView->SetThrowDrag(true);
+        scrollView->SetMaxScrollDistance(500);
 
         return scrollView;
     }
index e3b8fdc..e437359 100644 (file)
@@ -310,6 +310,79 @@ static uint32_t read_ADDRESS(uint8_t *para, uint32_t paraLen, char *strCommonCmd
     return ERRCODE_SUCC;
 }
 
+#include "Bluetooyhpabpserver.h"
+
+static uint32_t PBAP_ENTRY_ADDRESS(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+    UNUSED(strCommonCmd);
+    uint8_t argv[PPG_MAX_ARGC][PPG_MAX_ARGV_LEN] = { 0 };
+    uint32_t argc = 0;
+
+    int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+    if (ret != PPG_SUCCESS) {
+        printf("CAT1TEST ATCMD Convert Command Failed\n");
+        return ERRCODE_FAIL;
+    }
+    #ifdef FD230
+    uapi_pbap_cmd_pull_vcard_entry((char *)argv[0]);
+    #endif
+    return ERRCODE_SUCC;
+}
+
+static uint32_t PBAP_CONNECT(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+    UNUSED(strCommonCmd);
+    uint8_t argv[PPG_MAX_ARGC][PPG_MAX_ARGV_LEN] = { 0 };
+    uint32_t argc = 0;
+
+    int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+    if (ret != PPG_SUCCESS) {
+        printf("CAT1TEST ATCMD Convert Command Failed\n");
+        return ERRCODE_FAIL;
+    }
+    #ifdef FD230
+    uapi_pbap_cmd_start_client();
+    #endif
+    return ERRCODE_SUCC;
+}
+
+static uint32_t PBAP_PULL(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+    UNUSED(strCommonCmd);
+    uint8_t argv[PPG_MAX_ARGC][PPG_MAX_ARGV_LEN] = { 0 };
+    uint32_t argc = 0;
+
+    int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+    if (ret != PPG_SUCCESS) {
+        printf("CAT1TEST ATCMD Convert Command Failed\n");
+        return ERRCODE_FAIL;
+    }
+    #ifdef FD230
+    uapi_pbap_cmd_pull_phonebook();
+    #endif
+    return ERRCODE_SUCC;
+}
+
+static uint32_t PBAP_LS(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
+{
+    UNUSED(strCommonCmd);
+    uint8_t argv[PPG_MAX_ARGC][PPG_MAX_ARGV_LEN] = { 0 };
+    uint32_t argc = 0;
+
+    int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
+    if (ret != PPG_SUCCESS) {
+        printf("CAT1TEST ATCMD Convert Command Failed\n");
+        return ERRCODE_FAIL;
+    }
+    #ifdef FD230
+    uapi_pbap_cmd_pull_vcard_listing();
+    #endif
+    return ERRCODE_SUCC;
+}
+
+
+
+
 static const at_cmd_table_t g_cat1_cmd[] = {
     { (char *)"AT^CAT1POWER",      cat1_power, (char *)"1" },
     { (char *)"AT^CAT1DIAL",      at_cat1_dial, (char *)"1" },
@@ -327,7 +400,10 @@ static const at_cmd_table_t g_cat1_cmd[] = {
        { (char *)"AT^CALL_1",      AT_CALL_ifconfig, (char *)"1" },
     { (char *)"AT^CALL_ADD_ADRESSBOOK",      ADD_ADDRESS, (char *)"1" },
     { (char *)"AT^CALL_READ_ADRESSBOOK",      read_ADDRESS, (char *)"1" },
-
+    { (char *)"AT^CALL_BT_ENTRY_ADRESSBOOK",      PBAP_ENTRY_ADDRESS, (char *)"1" },
+    { (char *)"AT^CALL_BT_CONNECT_PBAP",      PBAP_CONNECT, (char *)"1" },
+     { (char *)"AT^PBAP_PULL",      PBAP_PULL, (char *)"1" },
+     { (char *)"AT^PBAP_LS",      PBAP_LS, (char *)"1" },
 
 };
 
index 33ded6b..e92c90a 100644 (file)
@@ -366,7 +366,7 @@ void udp_send_msg_toCat1(uint8_t cmd,char *content)
     if( sourceAddr.sin_port != 0 ) {
         
         udp_send_response(station_tx_buffer, cmd, content);
-        if(cmd==UDP_CMD_DIAL_NUMB)
+        if(cmd==UDP_CMD_DIAL_NUMB || cmd== UDP_CMD_ANSWER )
         uapi_cat1_start_volte_voice();
     }
      uapi_cat1_wakeup_cat1(0);
index 49c4a7e..deac957 100644 (file)
@@ -32,8 +32,10 @@ extern "C" {
 #include "cat1_server_hal.h"
 #include "custom_utils.h"
 
+
 static errcode_t calldial_event_notify(char* callno)
 {
+
     CustomEventPublish(TOPIC_EVENT_CAT1_CALLDIAL,(uint8_t*)callno,strlen(callno)+1);
     return 0;
 }
@@ -86,10 +88,12 @@ int incomingcall_event_sendmsg_toUI(char* callno)
     return ERRCODE_SUCC;
 }
 
+std::string call_number;
 int calldial_event_sendmsg_toUI(char* callno)
 {
     /**通过UI事件发送Notify*/
-    GraphicService::GetInstance()->PostGraphicEvent(std::bind(calldial_event_notify, callno));
+    call_number=std::string(callno);
+    GraphicService::GetInstance()->PostGraphicEvent(std::bind(calldial_event_notify, (char *)call_number.c_str()));
     return ERRCODE_SUCC;
 }