\r
\r
\r
-#ifdef SUPPORT_ALIPAY_SEC\r
- uapi_alipay_svr_init();\r
-#endif\r
- \r
+\r
\r
#ifdef SUPPORT_CAT1_SERVICE\r
cat1_server_init();\r
uapi_blesrv_service_init();\r
\r
start_custom_ble_service();\r
-\r
+ \r
+#ifdef SUPPORT_ALIPAY_SEC\r
+ uapi_alipay_svr_init();\r
+#endif\r
+ \r
startup_post_init();\r
\r
set_startup_finish_flag();\r
memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&service_id, sizeof(service_id));\r
#ifndef SUPPORT_AT_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
-#endif\r
if (ret != ERRCODE_SUCC) {\r
- ALIPAY_PRINT_ERR(0, "gatts_register_server ret:%u.\r\n", ret);\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
#ifndef SUPPORT_AT_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
static int32_t svr_alipay_notify_bt(bool value)
{
if (value) {
- printf("svr_alipay_notify_bt true:%d",value);
- ble_avd_mode_change(1);
+ // svr_alipay_ble_adv_start(); //统一采用 bleService的adv
} else {
- printf("svr_alipay_notify_bt false:%d",value);
+ // svr_alipay_ble_adv_stop(); //统一采用 bleService的adv
}
return 0;
}
uapi_gpio_set_dir(ALIPAY_SEC_GPIO, GPIO_DIRECTION_OUTPUT);
uapi_gpio_set_val(ALIPAY_SEC_GPIO, GPIO_LEVEL_HIGH);
osDelay(30);
-
+ // svr_alipay_bluetooth_init();
HS_IIC_Init();
alipay_pre_init();
svr_alipay_enter_lpm();
void BtInitGatts(void);\r
void BtInitSpp(void);\r
void BleAdvStart(void);\r
+void bluetooth_init(void);\r
+void bluetooth_enable_all(void);\r
+void bluetooth_close_all(void);\r
#ifdef __cplusplus\r
}\r
#endif\r
#include "dfx_channel.h"\r
#include "tcxo.h"\r
#include "custom_runtime.h"\r
+#include "bleService.h"\r
namespace OHOS {\r
\r
#define BT_SPP_TASK_STACK_SIZE 2048\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "nameLen: %u", nameLen);\r
}\r
}\r
-void BluetoothModel::Init()\r
+\r
+void bluetooth_enable_all(void)\r
{\r
#ifndef SUPPORT_AUTO_OTA\r
errcode_t ret;\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt enable_bt_stack ret = %u", ret);\r
\r
// 设置安全连接\r
- gap_ble_sec_params_t sec_param = { 1, GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT, 1, GAP_BLE_GAP_SECURITY_MODE1_LEVEL3 };\r
- ret = gap_ble_set_sec_param(&sec_param);\r
+ gap_ble_sec_params_t sec_params = {0};\r
+ sec_params.bondable = 0x01;\r
+ sec_params.io_capability = GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT;//最好选择没有输入输出IO能力\r
+ sec_params.sc_enable = 0x00;\r
+ sec_params.sc_mode = GAP_BLE_GAP_SECURITY_MODE1_LEVEL2;\r
+ errcode_t ret = gap_ble_set_sec_param(&sec_params);//设置配对参数 发起配对弹窗\r
+\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
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt gap_ble_set_sec_param ret = %u", ret);\r
\r
- InitBluetoothInfo();\r
BtInitCallBacks();\r
wrapper_ble_register();\r
#ifdef SUPPORT_ALIPAY_SEC\r
- svr_alipay_bluetooth_init();\r
+ // svr_alipay_bluetooth_init(); //Alipay BLE\r
#endif\r
- BtInitCallBacksEx();\r
- BtInitGatts();\r
- BtInitSpp();\r
\r
- SetUpListCase();\r
- SetUpConnedDevicesList();\r
+ /***Custom BleService */\r
+ svr_ble_bluetooth_init(); //CUSTOM BLE\r
+ // BtInitCallBacksEx(); //BLE\r
+ // BtInitGatts(); //BLE \r
+\r
+ wrapper_gatts_service_start(); //start reg ble server\r
+\r
+ // BtInitSpp();\r
+ BtA2dpInit();\r
+\r
+ /**开始ble广播*/\r
+ // openBle();\r
+ // BleAdvStart();\r
+\r
#endif\r
}\r
\r
+void bluetooth_close_all(void)\r
+{\r
+ errcode_t ret;\r
+ \r
+ /**停止扫描,清除协议缓存*/\r
+ closeBle();\r
+\r
+ ret = disable_bt_stack();\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "bt disable_bt_stack ret = %u", ret);\r
+}\r
+\r
+void BluetoothModel::Init()\r
+{\r
+// bluetooth_init();\r
+// InitBluetoothInfo();\r
+SetUpListCase();\r
+SetUpConnedDevicesList();\r
+}\r
+\r
void BluetoothModel::SetCaseListClear()\r
{\r
btScansDevicesList_.clear();\r
{\r
uint16_t id = 0x1FF0;\r
uint16_t ser_id = 0x1FFF;\r
- uint8_t serverId = 0;\r
+ uint8_t serverId = 1;\r
bt_uuid_t uuid;\r
int ret;\r
\r
memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&id, sizeof(id));\r
ret = wrapper_gatts_add_service(serverId, &uuid, true);\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_add_service ret: 0x%x", ret);\r
-\r
- wrapper_gatts_service_start();\r
}\r
\r
static uint8_t Char2Num(int8_t c)\r
g_uuid_list.push_back(*service_uuid);\r
return ERRCODE_SUCC;\r
}\r
-\r
+#include "debug_print.h"\r
+extern "C" void openBle(void);\r
void wrapper_gatts_service_start(void)\r
{\r
if (!g_uuid_list.empty()) {\r
bt_uuid_t &uuid = g_uuid_list.front();\r
// 服务异步添加,需要保证当前服务start后,再添加下一个服务\r
- (void)gatts_add_service(gatts_server_id, &uuid, true);\r
+ errcode_t ret = gatts_add_service(gatts_server_id, &uuid, true);\r
+ printf("wrapper_gatts_service_start gatts_add_service uuid len %x [0x%04X],gatts_server_id %u, ret 0x%x\n",uuid.uuid_len,*((uint16_t*)&uuid.uuid),gatts_server_id,ret);\r
g_uuid_list.pop_front();\r
} else {\r
g_svr_handle_list.clear();\r
+ /**开始ble广播*/\r
+ openBle();\r
}\r
}\r
\r
/*\r
* @Author: luozheng 1732036298@qq.com\r
* @Date: 2024-04-25 11:50:57\r
- * @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-04-25 15:54:05\r
+ * @LastEditors: SnickerSun snickersun@163.com\r
+ * @LastEditTime: 2024-07-03 15:18:50\r
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/classicbluetooth/src/ClassicBlueToothPresenter.cpp\r
*/\r
#include "classicbluetooth/include/ClassicBlueToothPresenter.h"\r
return true;\r
}\r
\r
- extern "C"\r
- {\r
- void closeBle(void); // 主动关闭蓝牙\r
- void openBle(void); // 主动开启蓝牙\r
- bool get_ble_status(void); // 获取蓝牙是否关闭还是开启 1就是开启 0关闭 一开机默认是开启蓝牙\r
- void getDeviceState(void);\r
- void malloc_test(void);\r
- }\r
bool ClassicBlueToothPresenter::OnChange(UICheckBox::UICheckBoxState state)\r
{\r
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ClassicBlueToothPresenter::OnChange");\r
static bool ANCSBigBufFlag = 0;//ANCS多包数据flag\r
static uint16_t data_len = 0;\r
ble_recv_data_info_t ble_recv_data;\r
-ble_recv_msg_callback_t g_recv_msg_toUI = NULL;\r
static uint8_t TRANSMIT_DATA;\r
#if 1\r
#include "app_msg_manager.h"\r
\r
return ERRCODE_SUCC;\r
} \r
-// typedef void (*hx3695_msg_callback_t)(uint8_t msg_type, uint8_t *msg_data, int32_t msg_datalen);\r
-uint32_t ble_recv_register_msg_callback(ble_recv_msg_callback_t func)\r
-{\r
- g_recv_msg_toUI = func;\r
- return 0;\r
-}\r
-\r
-ble_recv_msg_callback_t ble_recv_get_send_msg_callback_func(void)\r
-{\r
- return g_recv_msg_toUI;\r
-}\r
-static msg_get_heart_set_param_info_t hr_param;\r
-static msg_get_spo2_set_param_info_t spo2_param;\r
-static msg_drink_set_param_info_t drink_info;\r
-static msg_drink_param_info_t drink_on_t;//喝水提醒开关\r
-static msg_watch_lcd_param_info_t watch_lcd_param;//手表屏幕参数\r
-static msg_get_voice_vibration_info_t voice_vibration;\r
-static msg_caramer_info_t caramer_info;//拍照手势状态 0退出拍照 1进入拍照\r
-static msg_user_info_t user_info;//用户信息 体重 身高 年龄 性别\r
-//手表TODO 这是一个sample\r
-int ble_recv_msg_callback(uint8_t writ_read,uint16_t msg_typeID, uint8_t *msg_data, uint16_t msg_datalen)\r
-{\r
- if(writ_read == READ_FLASH_DATA){//读手表数据 WRITE_FLASH_DATA 写手表数据\r
- switch (msg_typeID)\r
- {\r
- case SET_DRINK_PARAM_CMD:\r
- memset(&drink_info,0,sizeof(msg_drink_set_param_info_t));\r
- drink_info.drink_on = 1;\r
- drink_info.alarm_mode = 1;\r
- drink_info.start_hour = 8;\r
- drink_info.startt_min = 9;\r
- drink_info.end_hour = 23;\r
- drink_info.end_min = 59;\r
- drink_info.frequenc = 1;\r
- memcpy(msg_data,&drink_info,sizeof(msg_drink_set_param_info_t));\r
- \r
- break;\r
- case GET_WATCH_HR_SET_PARAM_CMD:\r
- memset(&hr_param,0,sizeof(msg_get_heart_set_param_info_t));\r
- hr_param.frequence = 1;\r
- hr_param.remind_on = 1;\r
- hr_param.max_min = 1;\r
- hr_param.heart = 180;\r
- memcpy(msg_data,&hr_param,sizeof(msg_get_heart_set_param_info_t));\r
- \r
- break;\r
- case GET_DRINK_SWITCH_CMD:\r
- \r
- memset(&drink_on_t,0,sizeof(msg_drink_param_info_t));\r
- drink_on_t.drink_on = 1;\r
- memcpy(msg_data,&drink_on_t,sizeof(msg_drink_param_info_t));\r
- break;\r
- case GET_WATCH_LCD_PARAM_CMD:\r
- memset(&watch_lcd_param,0,sizeof(msg_watch_lcd_param_info_t));\r
- watch_lcd_param.brigntess = 10;\r
- watch_lcd_param.screen_time = 3;\r
- watch_lcd_param.wrist_on = 0;\r
- memcpy(msg_data,&watch_lcd_param,sizeof(msg_get_heart_set_param_info_t));\r
- \r
- break;\r
- default:\r
- break;\r
- }\r
- \r
- \r
- }else{\r
- switch (msg_typeID)\r
- {\r
- case SET_DRINK_PARAM_CMD:\r
- \r
- memset(&drink_info,0,sizeof(msg_drink_set_param_info_t));\r
- drink_info.drink_on = msg_data[0];\r
- drink_info.alarm_mode = msg_data[1];\r
- drink_info.target_drink = msg_data[2]+msg_data[3]*256;\r
- drink_info.start_hour = msg_data[4];\r
- drink_info.startt_min = msg_data[5];\r
- drink_info.end_hour = msg_data[6];\r
- drink_info.end_min = msg_data[7];\r
- drink_info.frequenc = msg_data[8];\r
- // memcpy(msg_data,&drink_info,sizeof(msg_drink_set_param_info_t));\r
- break;\r
- case GET_DRINK_SWITCH_CMD:\r
- \r
- memset(&drink_on_t,0,sizeof(msg_drink_param_info_t));\r
- drink_on_t.drink_on = 1;\r
- memcpy(msg_data,&drink_on_t,sizeof(msg_drink_param_info_t));\r
- break;\r
\r
- case USER_INFOR_CMD:\r
- \r
- break;\r
\r
- \r
- default:\r
- break;\r
- }\r
- }\r
- int ret = 1;\r
- return ret;\r
-}\r
int char_to_dec(char ch)\r
{\r
int num = 0;\r
);\r
\r
set_user_data(&msg_userinfo);\r
-\r
- ble_recv_msg_callback_t func = ble_recv_get_send_msg_callback_func();\r
- if (func !=NULL)\r
- {\r
- \r
- }\r
- \r
\r
}else{\r
ble_reply_cmd(USER_INFOR_CMD,0);//crc error\r
packdataLen = 0;\r
totalDataLen = 0;\r
ANCSBigBufFlag = 0;\r
+\r
recvBigDataBufState = false;\r
sendbigDataBufState = false;\r
+\r
+ for (int i = 0 ; i < MAX_HANDLE_NUM ; i++)\r
+ {\r
+ if (handle_l[i].data != NULL)\r
+ {\r
+ free(handle_l[i].data);\r
+ handle_l[i].data=NULL;\r
+ }\r
+ memset((void*)&handle_l[i],0,sizeof(ble_read_data));\r
+ }\r
return;\r
\r
}\r
uint16_t data_len; /* data_len 数据长度 */
uint16_t handle; /* handle 数据句柄 */
} ble_recv_data_info_t;
-typedef int (*ble_recv_msg_callback_t)(uint8_t writ_read,uint16_t msg_typeID, uint8_t *msg_data, uint16_t msg_datalen);
-uint32_t ble_recv_register_msg_callback(ble_recv_msg_callback_t func);
-ble_recv_msg_callback_t ble_recv_get_send_msg_callback_func(void);
//write_read 0x01是从手表中读取数据 0x02 是app将数据传给设备 设备保存
//msy_typeid 是协议指令类型+ID拼接 去bleEvent.h里面或者协议文档查找对应的协议指令 比如 01 02 会拼接成0x0102两个字节的数据
//msg_data 是数据内容 如果数据没有就传NULL
//返回值 解析数据成功返回 1 解析失败返回 0
//
void malloc_test(void);
-int ble_recv_msg_callback(uint8_t writ_read,uint16_t msg_typeID, uint8_t *msg_data, uint16_t msg_datalen);
void cameram_send_data(void);
/*********************TYPE+ID***********************************
* TYPE:01
#include "custom_runtime.h"\r
#include "custom_utils.h"\r
#include "bletest.h"\r
-\r
+#ifdef SUPPORT_AT_OHOSFWK\r
+#include "BluetoothWrapper.h"\r
+#endif\r
\r
// extern void bts_data_to_uuid_len2(uint16_t uuid_data, bt_uuid_t *out_uuid);\r
// extern void bts_init_128bit_uuid(const bt_uuid_t *uuid);\r
#define BLE_DEFAULT_NAME_LEN 32\r
#define BLE_MAC_MAX_LEN 6 //蓝牙mac地址最大个数6个\r
\r
-#define BLE_CHANGE_MODE //开启是不需要切换广播数据 屏蔽掉就需要切换广播模式数据\r
+#define SWAP_U16(x) ((uint16_t)((((uint16_t)(x) & (uint16_t)0x00ffU) << 8) | \\r
+ (((uint16_t)(x) & (uint16_t)0xff00U) >> 8)))\r
\r
static uint8_t exit_alipay_gui = 0;\r
// 蓝牙模块全局变量\r
BLE_CHARACTERISTIC_READ_BATTERY_ID_PROPERTIES = GATT_CHARACTER_PROPERTY_BIT_READ|GATT_CHARACTER_PROPERTY_BIT_NOTIFY,\r
};\r
static uint8_t ble_adv_falg = 0;\r
+static bool g_custom_ble_init_flag = false;\r
+\r
void svr_ble_adv_stop(void)\r
{\r
ble_adv_falg = 0;\r
unsigned int len = BLE_MAC_MAX_LEN;\r
errcode_t ret = 0;\r
\r
-\r
- \r
ret = bluetooth_get_local_name(ble_name, &ble_name_len);\r
if (ret != 0) {\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_get_local_name fail, name:%s,len:%u,ret:%u.", ble_name, ble_name_len, ret);\r
// printf("scan_data_len!!!!3333:%d\r\n",scan_data_len);\r
\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ble_info:%02x:%02x:%02x:%02x:%02x:%02x", ble_data_mac_switch[0], ble_data_mac_switch[1],\r
- ble_data_mac_switch[2], ble_data_mac_switch[3], ble_data_mac_switch[4], ble_data_mac_switch[5]);\r
- \r
- \r
- #ifdef BLE_CHANGE_MODE\r
+ ble_data_mac_switch[2], ble_data_mac_switch[3], ble_data_mac_switch[4], ble_data_mac_switch[5]); \r
+ \r
memcpy_s(adv_mac_head + BLE_ADV_MAC_HEAD_LENTH, BD_ADDR_LEN, ble_data_mac_switch, BD_ADDR_LEN);\r
\r
memcpy_s(scan_data + scan_data_len, sizeof(adv_mac_head), adv_mac_head, sizeof(adv_mac_head));\r
scan_data_len = scan_data_len + sizeof(adv_mac_head);\r
// printf("adv_data_len!!!!4444:%d\r\n",scan_data_len);\r
- #endif\r
+ \r
\r
if (scan_data_len > BLE_SCAN_DATA_LENTH){\r
scan_data_len = BLE_SCAN_DATA_LENTH;\r
gap_ble_pair_state_t pair_state, gap_ble_disc_reason_t disc_reason)\r
{\r
\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "svr_ble_connstate_change_cb gap_ble_conn_state_t conn_state:%d pair_state:%d disc_reason:%d\r\n",conn_state,pair_state,disc_reason);\r
\r
g_ble_conn_id = conn_id;\r
if (GAP_BLE_STATE_DISCONNECTED == conn_state) { // restart ble adv when disconnected\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GAP_BLE_STATE_DISCONNECTED!!! \r\n");\r
// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GAP_BLE_STATE_DISCONNECTED!!! svr_alipay_get_adv_start_state %d alipay_get_binding_status:%d\r\n",svr_alipay_get_adv_start_state(),alipay_get_binding_status());\r
// if(AdverFlag == true){\r
- free_ble_data();\r
- #ifdef BLE_CHANGE_MODE\r
- svr_ble_adv_start();\r
- #else\r
- if(svr_alipay_get_adv_start_state())//如果绑定二维码识图界面并且没有绑定成功断开连接还是广播alipay服务\r
- {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "alipay_get_binding_status error!!!");\r
- svr_alipay_ble_adv_start_t();\r
- }else{\r
- svr_ble_adv_start();\r
- }\r
- \r
- #endif\r
- \r
+ free_ble_data(); \r
+ svr_ble_adv_start(); \r
// } \r
} else {\r
devpair_state = 0;//\r
- #ifdef BLE_CHANGE_MODE\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "exit_alipay_gui error!!! %d",exit_alipay_gui);\r
+ \r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "exit_alipay_gui !!! %d",exit_alipay_gui);\r
if(!exit_alipay_gui)//如果进入了绑定二维码界面 正在连接app 不需要停止广播数据\r
{\r
svr_ble_adv_stop();\r
- }\r
- #else\r
- if(svr_alipay_get_adv_start_state())//进了支付宝二维码界面没有绑定连接才停止当前alipay的服务\r
- {\r
- if(alipay_get_binding_status() == false)//如果还在绑定二维码码所有的识图界面没有绑定成功都不需要关闭广播数据还是继续广播数据\r
- { \r
- svr_alipay_ble_adv_stop();\r
- }\r
- }else{\r
- svr_ble_adv_stop();\r
- }\r
- #endif\r
- \r
+ } \r
set_phone_info(addr);\r
Bleconnect = GAP_BLE_STATE_CONNECTED;//蓝牙已连接\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GAP_BLE_STATE_CONNECTED!!! 0x%x\r\n",pair_state);\r
static void svr_ble_bt_gatts_service_add_cb(uint8_t server_id, bt_uuid_t *uuid, uint16_t srv_handle,\r
errcode_t status)\r
{\r
+ if (uuid->uuid_len != sizeof(uint16_t)) return ;\r
+ uint16_t uuid_tmp = *((uint16_t*)uuid->uuid);\r
+ uuid_tmp = SWAP_U16(uuid_tmp);\r
+ if ( uuid_tmp == BLE_SERVICE_UUID \r
+ || uuid_tmp == BLE_UUID_HUMAN_INTERFACE_DEVICE \r
+ || uuid_tmp == BLE_UUID_ATE_FACTORYTEST_SERVICE \r
+ || uuid_tmp == BLE_UUID_PPG_BLE_SERVICE \r
+ || uuid_tmp == 0x3802 ) \r
+ {\r
+\r
+ }else{\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_bt_gatts_service_add_cb UUID not supported 0x%x\r\n",uuid_tmp);\r
+ return ;\r
+ }\r
ble_server_handle = srv_handle;\r
// ALIPAY_PRINT_DEBUG(0, "BtGattsServiceAddCallback 0x%x 0x%x 0x%x 0x%x", status, server_id, srv_handle,\r
// *((uint16_t *)uuid->uuid));\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_bt_gatts_service_add_cb 0x%x\r\n",srv_handle);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_bt_gatts_service_add_cb srv_handle 0x%x\r\n",srv_handle);\r
if (status != ERRCODE_BT_SUCCESS)\r
{\r
return;\r
static void svr_ble_bt_gatts_characteristic_add_cb(uint8_t server_id, bt_uuid_t *uuid, uint16_t srv_handle,\r
gatts_add_character_result_t *result, errcode_t status)\r
{\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt_gatts_characteristic_add_cb uuid:0x%02x%02x 0x%x %d %d\r\n",uuid->uuid[0],uuid->uuid[1],srv_handle,result->handle,result->value_handle);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bt_gatts_characteristic_add_cb uuid:0x%02x%02x 0x%x %d %d , status %x\r\n",\r
+ uuid->uuid[0],uuid->uuid[1],\r
+ srv_handle,result->handle,\r
+ result->value_handle,status);\r
bt_uuid_t chara_uuid_data_2ae0 = {0};\r
bts_data_to_uuid_len2(BLE_CHARACTERISTIC_SNED_OTA_ID, &chara_uuid_data_2ae0);\r
\r
scan_result_data->addr.addr[0], scan_result_data->addr.addr[4],\r
scan_result_data->addr.addr[5], scan_result_data->rssi );\r
}\r
-void srv_ble_start_scan(void)\r
-{\r
- gap_ble_scan_params_t scan_param = { 0 };\r
- scan_param.scan_interval = 0x0050;\r
- scan_param.scan_window = 0x0030;\r
- scan_param.scan_type = GAP_BLE_SCAN_TYPE_ACTIVE;\r
- scan_param.scan_phy = GAP_BLE_PHY_NO_PACKET;\r
- scan_param.scan_filter_policy = GAP_BLE_ADV_FILTER_ALLOW_SCAN_ANY_CON_ANY;\r
- errcode_t ret = gap_ble_set_scan_parameters(&scan_param);\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"gap ble set scan parameters ret(errcode_t): %x\n", ret);\r
-\r
- errcode_t reT_gap=gap_ble_start_scan();\r
- if(reT_gap==ERRCODE_SUCC)\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_start_scan %d !",reT_gap);\r
- else\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_start_scan fail %d !",reT_gap);\r
+// void srv_ble_start_scan(void)\r
+// {\r
+// gap_ble_scan_params_t scan_param = { 0 };\r
+// scan_param.scan_interval = 0x0050;\r
+// scan_param.scan_window = 0x0030;\r
+// scan_param.scan_type = GAP_BLE_SCAN_TYPE_ACTIVE;\r
+// scan_param.scan_phy = GAP_BLE_PHY_NO_PACKET;\r
+// scan_param.scan_filter_policy = GAP_BLE_ADV_FILTER_ALLOW_SCAN_ANY_CON_ANY;\r
+// errcode_t ret = gap_ble_set_scan_parameters(&scan_param);\r
+// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"gap ble set scan parameters ret(errcode_t): %x\n", ret);\r
+\r
+// errcode_t reT_gap=gap_ble_start_scan();\r
+// if(reT_gap==ERRCODE_SUCC)\r
+// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_start_scan %d !",reT_gap);\r
+// else\r
+// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_start_scan fail %d !",reT_gap);\r
\r
-}\r
+// }\r
\r
-void srv_ble_stop_scan(void)\r
-{\r
- errcode_t reT_gap=gap_ble_stop_scan();\r
- if(reT_gap==ERRCODE_SUCC)\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_stop_scan %d !",reT_gap);\r
- else\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_stop_scan fail %d !",reT_gap);\r
-}\r
+// void srv_ble_stop_scan(void)\r
+// {\r
+// errcode_t reT_gap=gap_ble_stop_scan();\r
+// if(reT_gap==ERRCODE_SUCC)\r
+// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_stop_scan %d !",reT_gap);\r
+// else\r
+// WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_stop_scan fail %d !",reT_gap);\r
+// }\r
\r
void svr_ble_btcallback_reg(void)//ble基础通讯服务注册回调函数\r
{\r
\r
- gap_ble_sec_params_t sec_params = {0};\r
- sec_params.bondable = 0x01;\r
- sec_params.io_capability = GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT;//最好选择没有输入输出IO能力\r
- sec_params.sc_enable = 0x00;\r
- sec_params.sc_mode = GAP_BLE_GAP_SECURITY_MODE1_LEVEL2;\r
- errcode_t ret = gap_ble_set_sec_param(&sec_params);//设置配对参数 发起配对弹窗\r
+ // gap_ble_sec_params_t sec_params = {0};\r
+ // sec_params.bondable = 0x01;\r
+ // sec_params.io_capability = GAP_BLE_IO_CAPABILITY_NOINPUTNOOUTPUT;//最好选择没有输入输出IO能力\r
+ // sec_params.sc_enable = 0x00;\r
+ // sec_params.sc_mode = GAP_BLE_GAP_SECURITY_MODE1_LEVEL2;\r
+ // errcode_t ret = gap_ble_set_sec_param(&sec_params);//设置配对参数 发起配对弹窗\r
\r
\r
g_ble_gapble_cbs.ble_enable_cb = NULL;\r
g_ble_gapble_cbs.auth_complete_cb = svr_gap_ble_auth_complete_callback;\r
g_ble_gapble_cbs.conn_param_update_cb = svr_gap_ble_connect_param_update_callback;\r
\r
+#ifndef SUPPORT_AT_OHOSFWK\r
gap_ble_register_callbacks(&g_ble_gapble_cbs);\r
-\r
+#else\r
+ wrapper_gap_ble_register_callbacks(&g_ble_gapble_cbs);\r
+#endif\r
srv_ble_server_register_gatt_callbacks();\r
}\r
void srv_ble_server_register_gatt_callbacks(void)\r
g_ble_gatts_cbs.read_request_cb = svr_ble_bt_gatts_req_read_cb;\r
g_ble_gatts_cbs.write_request_cb = svr_ble_bt_gatts_req_write_cb;\r
g_ble_gatts_cbs.mtu_changed_cb = svr_ble_mtu_exchange;\r
+\r
+#ifndef SUPPORT_AT_OHOSFWK\r
gatts_register_callbacks(&g_ble_gatts_cbs);\r
+#else\r
+ wrapper_gatts_register_callbacks(&g_ble_gatts_cbs);\r
+#endif\r
return;\r
}\r
static uint8_t g_server_id = 0;\r
errcode_t ret = 0;\r
uuid.uuid_len = (uint8_t)sizeof(srevr_id);\r
memcpy_s(uuid.uuid, sizeof(uuid.uuid), (char *)&srevr_id, sizeof(srevr_id));\r
+\r
+#ifndef SUPPORT_AT_OHOSFWK\r
ret = gatts_register_server(&uuid, &serverId); /* 注册gatt server */\r
+#else\r
+ ret = wrapper_gatts_register_server(&uuid, &serverId); /* 注册gatt server */\r
+#endif\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_register_server ret: 0x%x serverId = 0x%x uuid.uuid_len:%d", ret, serverId,uuid.uuid_len);\r
g_ble_server_id = serverId;\r
\r
bt_uuid_t ble_service_uuid = {0};\r
bts_data_to_uuid_len2(id, &ble_service_uuid);\r
+\r
+#ifndef SUPPORT_AT_OHOSFWK\r
ret = gatts_add_service(serverId, &ble_service_uuid, true);\r
+#else\r
+ ret = wrapper_gatts_add_service(serverId, &ble_service_uuid, true);\r
+#endif\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "gatts_add_service ret: 0x%x", ret);\r
\r
- \r
return;\r
}\r
bool ble_gatts_cmp_uuid(const bt_uuid_t *tgt_uuid, const bt_uuid_t *src_uuid)//比较源uuid和给定的uuid是否匹配\r
// svr_ble_adv_start_param();\r
// }\r
\r
-void svr_bluetooth_init(void)\r
+void svr_ble_bluetooth_init(void)\r
{\r
memset(&phone_addr,0,sizeof(bd_addr_t));\r
- bool ret = enable_bt_stack();\r
- // bool ret = enable_ble();\r
- if (ret != ERRCODE_SUCC) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_bluetooth_init enable_bt_stack ret:%u.\r\n", ret);\r
+ // bool ret = enable_bt_stack();\r
+ // // bool ret = enable_ble();\r
+ // if (ret != ERRCODE_SUCC) {\r
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "svr_ble_bluetooth_init enable_bt_stack ret:%u.\r\n", ret);\r
+ // }\r
+\r
+ if (g_custom_ble_init_flag)\r
+ {\r
+ return ;\r
}\r
// osDelay(100);\r
svr_ble_btcallback_reg();\r
\r
- #ifdef SUPPORT_BLE_SERVICE\r
//add server and ble service\r
svr_ble_bt_init_gatts();\r
- #endif\r
#ifdef SUPPORT_HID_SERVICE\r
// ble_hid_server_init();\r
#endif\r
- svr_alipay_bt_init_gatts();\r
- ble_factory_server_init();\r
- ble_ppgtest_server_init();\r
- svr_ble_adv_start_param();\r
- ble_recv_register_msg_callback(ble_recv_msg_callback);//注册驱动回调\r
+ // svr_alipay_bt_init_gatts();\r
+ ble_factory_server_init(g_ble_server_id);\r
+ ble_ppgtest_server_init(g_ble_server_id);\r
+\r
+ g_custom_ble_init_flag = true;\r
return;\r
}\r
//关闭蓝牙\r
{\r
AdverFlag = false;\r
g_ble_init_flag = false;\r
- bd_addr_t bd_addr;\r
- unsigned char addr[BLE_MAC_MAX_LEN] = {0};\r
- bluetooth_get_local_addr(&addr[0],BD_ADDR_LEN);\r
- memcpy(bd_addr.addr,addr,BLE_MAC_MAX_LEN);\r
+ // bd_addr_t bd_addr;\r
+ // unsigned char addr[BLE_MAC_MAX_LEN] = {0};\r
+ // bluetooth_get_local_addr(&addr[0],BD_ADDR_LEN);\r
+ // memcpy(bd_addr.addr,addr,BLE_MAC_MAX_LEN);\r
errcode_t ret = 0;\r
if(Bleconnect == GAP_BLE_STATE_CONNECTED){//设备连接需要断开\r
ret = gap_ble_disconnect_remote_device((const bd_addr_t *)&phone_addr);//与固定的mac设置地址进行断开连接\r
}\r
- // ret = gap_ble_remove_all_pairs();//删除和所有配对的手机app\r
- // gap_remove_all_pairs();\r
+ // // ret = gap_ble_remove_all_pairs();//删除和所有配对的手机app\r
+ // // gap_remove_all_pairs();\r
svr_ble_adv_stop();//停止广播 不发送广播数据 就是app搜索不到该设备了\r
-\r
- ble_recv_register_msg_callback(NULL);\r
- ret = disable_bt_stack();//关闭ble 直接断开和当前连接的手机app\r
+ free_ble_data();\r
+ // ble_recv_register_msg_callback(NULL);\r
+ // ret = disable_bt_stack();//关闭ble 直接断开和当前连接的手机app\r
// ret = disable_ble();//关闭ble 直接断开和当前连接的手机app\r
- WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "closeBle ret%d 0x%x-0x%x-0x%x-0x%x-0x%x-0x%x\r\n",ret,bd_addr.addr[0],bd_addr.addr[1],bd_addr.addr[2],bd_addr.addr[3],bd_addr.addr[4],bd_addr.addr[5]);\r
+ // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "closeBle ret%d 0x%x-0x%x-0x%x-0x%x-0x%x-0x%x\r\n",ret,bd_addr.addr[0],bd_addr.addr[1],bd_addr.addr[2],bd_addr.addr[3],bd_addr.addr[4],bd_addr.addr[5]);\r
}else{\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AdverFlag false no need closeBle\r\n");\r
\r
{\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AdverFlag true need openBle again\r\n");\r
AdverFlag = true;\r
- svr_bluetooth_init();\r
+ svr_ble_adv_start_param();\r
}else{\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "AdverFlag true no need openBle again\r\n");\r
\r
switch(mode)\r
{\r
case MODE_BLE_ADV_SRV:\r
- #ifdef BLE_CHANGE_MODE \r
+ \r
if(exit_alipay_gui == 1)//如果进了绑定二维码界面就走这里\r
{\r
exit_alipay_gui = 0;\r
svr_ble_adv_stop();\r
}\r
}\r
- #else\r
- if(alipay_get_binding_status() == false)//已经绑定了就不需要再开关蓝牙服务了\r
- {\r
- printf("ble_advd_start!!!!!!!!!");\r
-\r
- exit_alipay_gui= 0;\r
- printf("svr_alipay_ble_adv stop !!!!!!!!!");\r
- svr_alipay_ble_adv_stop();\r
- svr_alipay_set_adv_start_state(0);\r
- svr_ble_adv_start_param();\r
- }\r
- #endif\r
+ \r
break;\r
case MODE_ALIPAY_ADV_SRV:\r
\r
- #ifdef BLE_CHANGE_MODE\r
+ \r
exit_alipay_gui = 1;\r
printf("alipay_ble_advd_start!!!!!!!!! %d %d",ble_adv_falg,AdverFlag);\r
svr_ble_adv_start(); \r
- #else\r
- if(alipay_get_binding_status() == false)//已经绑定了就不需要再开关蓝牙服务了 未绑定就需要切换开启服务\r
- {\r
- exit_alipay_gui = 1;\r
- printf("alipay_advd_start!!!!!!!!!");\r
- svr_ble_adv_stop();\r
- svr_alipay_set_adv_start_state(1);\r
- svr_alipay_ble_adv_start();\r
- }\r
- #endif\r
+ \r
break;\r
default:\r
break;\r
extern uint16_t alipay_handle;
extern uint16_t g_ble_conn_id;
extern uint16_t g_ble_server_handle;
-void svr_bluetooth_init(void);//蓝牙服务初始化
+void svr_ble_bluetooth_init(void);//蓝牙服务初始化
void closeBle(void);//主动关闭蓝牙
void openBle(void);//主动开启蓝牙
+
void svr_ble_adv_start_param(void);//开始蓝牙广播
bool get_ble_status(void);//默认是开启一开机
void svr_ble_btcallback_reg(void);
#include "bts_gatt_server.h"\r
#include "securec.h"\r
#include "wearable_log.h"\r
-\r
-\r
-#define BLE_HID_SERVER_ID 1\r
+#ifdef SUPPORT_AT_OHOSFWK\r
+#include "BluetoothWrapper.h"\r
+#endif\r
\r
/* HID gatt notification flag, do not need confirm */\r
#define GATT_NOTIFICATION_FLAG 0\r
uint32_t factory_ota_write_handl = 0;\r
\r
/* 创建服务 */\r
-static void ble_factorytest_add_service(void)\r
+static void ble_factorytest_add_service(uint8_t server_id)\r
{\r
bt_uuid_t factory_service_uuid = {0};\r
bts_data_to_uuid_len2(BLE_UUID_ATE_FACTORYTEST_SERVICE, &factory_service_uuid);\r
//只有一个服务,永远是1\r
- gatts_add_service(BLE_HID_SERVER_ID, &factory_service_uuid, true);\r
+ errcode_t ret = 0;\r
+#ifndef SUPPORT_AT_OHOSFWK\r
+ ret = gatts_add_service(server_id, &factory_service_uuid, true);\r
+#else\r
+ ret = wrapper_gatts_add_service(server_id, &factory_service_uuid, true);\r
+#endif\r
+\r
}\r
static void ble_factory_add_descriptor_report_reference(uint8_t server_id, uint16_t srvc_handle, bool is_notify_report)\r
{\r
ble_factorytest_add_character_and_information(server_id, srvc_handle);\r
}\r
\r
-void ble_factory_server_init(void)\r
+void ble_factory_server_init(uint8_t server_id)\r
{\r
- ble_factorytest_add_service();\r
+ ble_factorytest_add_service(server_id);\r
}\r
\r
extern void factorytest_protocol_decode(uint8_t *buf, uint16_t event_size);\r
* @li ble_hid_server.h
* @endif
*/
-void ble_factory_server_init(void);
+void ble_factory_server_init(uint8_t server_id);
/**
* @if Eng
#include "bts_gatt_server.h"\r
#include "securec.h"\r
#include "wearable_log.h"\r
-\r
+#ifdef SUPPORT_AT_OHOSFWK\r
+#include "BluetoothWrapper.h"\r
+#endif\r
// #include "bts_def.h"\r
// #include "sdk_general.h"\r
// #include "bts_gatt_stru.h"\r
// #include "ble_gatts_callbacks.h"\r
// #include "bts_uuid.h"\r
\r
-#define BLE_HID_SERVER_ID 1\r
\r
/* HID gatt notification flag, do not need confirm */\r
#define GATT_NOTIFICATION_FLAG 0\r
uint32_t ppgtest_ota_write_handl = 0;\r
\r
/* 创建服务 */\r
-static void ble_ppgtest_add_service(void)\r
+static void ble_ppgtest_add_service(uint8_t server_id)\r
{\r
bt_uuid_t ppgtest_service_uuid = {0};\r
bts_data_to_uuid_len2(BLE_UUID_PPG_BLE_SERVICE, &ppgtest_service_uuid);\r
//只有一个服务,永远是1\r
- gatts_add_service(BLE_HID_SERVER_ID, &ppgtest_service_uuid, true);\r
+ errcode_t ret = 0;\r
+#ifndef SUPPORT_AT_OHOSFWK\r
+ ret = gatts_add_service(server_id, &ppgtest_service_uuid, true);\r
+#else\r
+ ret = wrapper_gatts_add_service(server_id, &ppgtest_service_uuid, true);\r
+#endif\r
}\r
static void ble_ppgtest_add_descriptor_report_reference(uint8_t server_id, uint16_t srvc_handle, bool is_notify_report)\r
{\r
ble_ppgtest_add_character_and_information(server_id, srvc_handle);\r
}\r
\r
-void ble_ppgtest_server_init(void)\r
+void ble_ppgtest_server_init(uint8_t server_id)\r
{\r
- ble_ppgtest_add_service();\r
+ ble_ppgtest_add_service(server_id);\r
}\r
\r
#ifdef __cplusplus\r
* @li ble_hid_server.h
* @endif
*/
-void ble_ppgtest_server_init(void);
+void ble_ppgtest_server_init(uint8_t server_id);
/**
* @if Eng
return true;
}
-extern void BtInitSpp(void);
-extern void BtA2dpInit(void);
-extern void BtInitCallBacks(void);
+extern void bluetooth_close_all(void);
+extern void bluetooth_enable_all(void);
bool start_custom_ble_service(void)
{
#ifdef SUPPORT_BLE_SERVICE
- openBle();
PRINT("start custom protocol classic bt ble service !\r\n");
- // bool ret = enable_bt_stack();
+ bluetooth_enable_all();
#endif
- // if(uapi_dev_runtime_get_bt_powerstat()==true)
- {
-
- PRINT("register custom protocol classic bt service !\r\n");
-
- BtInitCallBacks();
- #ifdef FD230
- BtA2dpInit();
- #endif
- enable_a2dp_service(true);
- BtInitSpp();
- enable_spp_service(true);
-
- }
uapi_dev_runtime_set_bt_powerstat(1);
return true;
bool stop_custom_ble_service(void)
{
#ifdef SUPPORT_BLE_SERVICE
- PRINT("start custom protocol classic bt ble service !\r\n");
- // ble_unregist_server();
- closeBle();
- // bool ret = disable_bt_stack();
+ PRINT("stop custom protocol classic bt ble service !\r\n");
+ bluetooth_close_all();
#endif
uapi_dev_runtime_set_bt_powerstat(0);
return true;
bool start_alipay_ble_service(void)
{
- // ble_avd_mode_change(1);
+ ble_avd_mode_change(1);
// if(get_ble_status())
// {
// PRINT("stop custom protocol classic bt ble service first !\r\n");