#ifdef ALIPAY_CSI_LOG_EXT_ON
MyPrintf("csi_ble_write in %s,len:%u.", data, len);
#endif
+#ifdef SUPPORT_BLE_SERVICE
svr_alipay_bt_gatts_noyify(data, len);
+#endif
return CSI_OK;
}
#include "securec.h"\r
\r
#include "wearable_log.h"\r
-#ifdef SUPPORT_BLE_SERVICE\r
+#ifdef SUPPORT_ALIPAY_SEC\r
#include "bleService.h"\r
#include "alipay_bluetooth.h"\r
\r
gatts_unregister_server(g_alipay_server_id);\r
svr_alipay_ble_adv_stop();\r
}\r
+#ifdef SUPPORT_BLE_SERVICE\r
extern void ble_unregist_server(void);\r
+#endif\r
+\r
void svr_alipay_bluetooth_init(void)\r
{\r
+ #ifdef SUPPORT_BLE_SERVICE\r
ble_unregist_server();\r
+ #endif\r
disable_bt_stack();\r
svr_alipay_ble_adv_stop();\r
osDelay(100);\r
}\r
void svr_alipay_reset_init(void)//重新启动alipa的服务\r
{\r
+ #ifdef SUPPORT_BLE_SERVICE\r
ble_unregist_server();\r
+ #endif\r
osDelay(100);\r
svr_alipay_btcallback_reg();\r
svr_alipay_bt_init_gatts();\r
#define ALIPAY_BLE_DEFAULT_NAME_LEN 9
#define ALIPAY_BLE_MAC_MAX_LEN 6
+void svr_alipay_bluetooth_init(void);
void ble_alipay_add_characters_input_report_cbk(uint16_t srvc_handle);
void alipay_add_chart_decr_cb(uint8_t server_id,uint16_t srv_handle);
#endif
#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"
svr_alipay_bluetooth_init();
} else {
printf("svr_alipay_notify_bt false:%d",value);
+ #ifdef SUPPORT_BLE_SERVICE
svr_bluetooth_init();
+ #endif
// svr_alipay_ble_adv_stop();
}
return 0;
#include "bts_a2dp_sink.h"\r
#include "osal_timer.h"\r
#include "bleEvent.h"\r
+#include "ppg_service.h"\r
+#include "broadcast_feature.h"\r
#ifdef SUPPORT_BLE_SERVICE\r
#include "app_common_api.h"\r
#include "hidService.h"\r
sendBleData(value,19);\r
}\r
\r
-static void jsonCheck_phoneinfor(uint8_t *buf,uint8_t *mac_data)//解析手机信息json\r
+static uint8_t jsonCheck_phoneinfor(uint8_t *buf,uint8_t *mac_data,char *devname)//解析手机信息json\r
{\r
+ uint8_t len = 0;\r
uint8_t mac_tmp[6];\r
memset(mac_tmp,0,6);\r
- char *devname;//手机设备名称\r
uint8_t type = 0;\r
uint8_t count1 = 0;\r
uint8_t count2 = 0;\r
cJSON* root = cJSON_Parse((const char *)json);\r
if (root == NULL) {\r
printf("JSON解析错误\n");\r
- return;\r
+ return 0;\r
}\r
\r
cJSON* pn = cJSON_GetObjectItem(root, "pn");\r
if (cJSON_IsString(pn)) {\r
- printf("设备名称: %s\n", pn->valuestring);\r
\r
+ len = strlen(pn->valuestring)+1; \r
+ pn->valuestring[len-1]='\0';\r
+ memcpy((uint8_t *)devname,(uint8_t *)pn->valuestring,strlen(pn->valuestring));\r
+ printf("设备名称: %s\n", pn->valuestring);\r
}\r
\r
cJSON* tp = cJSON_GetObjectItem(root, "tp");\r
memcpy(mac_data,mac_tmp,6);\r
}\r
cJSON_Delete(root);\r
+ return len;\r
+ \r
}\r
errcode_t bondSucessCmd(void)//发送解绑指令,解绑界面调用这个函数 如果点了✓调用这个函数 返回成功后延迟10s再重启设备 \r
{\r
value[17] = flag;\r
value[18] = Calculate_CRC(value,1+17);\r
sendBleData(value,19);\r
+ if(flag == 1)\r
+ {\r
+ gap_ble_pair_remote_device(&phone_addr);\r
+ }else{\r
+ if(Bleconnect == GAP_BLE_STATE_CONNECTED){//设备连接需要断开\r
+ gap_ble_disconnect_remote_device(&phone_addr);//与固定的mac设置地址进行断开连接\r
+ gap_ble_remove_pair(&phone_addr);\r
+ }\r
+ svr_ble_adv_start();\r
+\r
+ }\r
}\r
// l连接手表之后-app通过特征值2AE4读手表信息->手表会把相应的信息给app->app通过73 02 10下发手机信息给设备(第一次连接mac为空)->设备返回73 02 10状态1才能和手机app第一次连接->设备会回发配对指令72 05 11给app,同时设备会对手机发起配对->手机点了配对后,配对成功手表会发配对成功指令72 05 10,这条指令包含手机的mac地址也会传给app->app校验解析成功之后->app下发时间指令72 02 02给设备->设备回复解析成功->完成连接\r
void alarmData(void)\r
{\r
\r
}\r
-\r
-uint8_t firts_bond = 0;//是否和手机app绑定过已经绑定就不需要配对指令给app,直接发起配对\r
+void getPhoneMac(uint8_t *phonemac)\r
+{\r
+ uint8_t mac[6];\r
+ memset(mac,0,6);\r
+ uint8_t count = 0;\r
+ FILE *jsfile = fopen(PHONE_WATCH_CONFIG_PATH, "r");\r
+ if (jsfile != NULL) {\r
+ printf("succes opening file\n");\r
+ fseek(jsfile, 0, SEEK_END);\r
+ long fileSize = ftell(jsfile);\r
+ fseek(jsfile, 0, SEEK_SET);\r
+\r
+ char *jsonData = (char *)malloc(fileSize + 1);\r
+ fread(jsonData, 1, fileSize, jsfile);\r
+ jsonData[fileSize] = '\0';\r
+ fclose(jsfile);\r
+\r
+ // 解析JSON数据\r
+ cJSON *root = cJSON_Parse(jsonData);\r
+ free(jsonData);\r
+\r
+ if (root != NULL) {\r
+ cJSON *modifiedJson = cJSON_GetObjectItem(root,"mac");\r
+ if (cJSON_IsArray(modifiedJson)) {\r
+ printf("MAC地址: ");\r
+ cJSON* macElement = NULL;\r
+ cJSON_ArrayForEach(macElement, modifiedJson) {\r
+ if (cJSON_IsNumber(macElement)) {\r
+ if ((macElement->prev != NULL)) {\r
+ mac[count] = macElement->valueint;\r
+ count++;\r
+ }\r
+ \r
+ }\r
+ }\r
+ printf("\n");\r
+ }\r
+ }\r
+ // 释放资源\r
+ cJSON_Delete(root);\r
+ }\r
+ memcpy(phonemac,mac,6);\r
+}\r
+uint8_t firts_bond = 0;//是否第一次绑定 第一次绑定保存配对mac地址\r
void getPhoneInfo(uint16_t cmd,uint8_t *crcnum,uint16_t len,uint8_t *totalData,uint8_t crcvalue)//获取手机信息\r
{\r
- //static void * next_tmp;\r
uint8_t value[20];\r
- // uint8_t crcvalue = 0;\r
memset(value,0,20);\r
uint32_t tmp = 1;\r
uint16_t tmp_fen= 1;\r
tmp_data = crcnum;\r
uint8_t copare_mac[6];\r
memset(copare_mac,0,6);\r
- jsonCheck_phoneinfor(tmp_data,&copare_mac);\r
- gap_ble_pair_state_t status;\r
- gap_ble_get_pair_state(&phone_addr,&status);//获取配对状态\r
+ uint8_t datalen=0;\r
+ char devname[256];\r
+ memset(devname,0,256);\r
+ datalen = jsonCheck_phoneinfor(tmp_data,&copare_mac,&devname);\r
uint8_t bond = 1;//未与任何手机绑定过\r
errcode_t ret = 0;\r
firts_bond = 0;\r
\r
uint8_t save_mac[6];\r
- uint8_t save_mac_t[6];\r
- uint8_t count = 0;\r
- uint8_t count_t = 0;\r
- FILE *jsfile = fopen(PHONE_WATCH_CONFIG_PATH, "r");\r
- if (jsfile != NULL) {\r
- printf("succes opening file\n");\r
- fseek(jsfile, 0, SEEK_END);\r
- long fileSize = ftell(jsfile);\r
- fseek(jsfile, 0, SEEK_SET);\r
-\r
- char *jsonData = (char *)malloc(fileSize + 1);\r
- fread(jsonData, 1, fileSize, jsfile);\r
- jsonData[fileSize] = '\0';\r
- fclose(jsfile);\r
-\r
- // 解析JSON数据\r
- cJSON *root = cJSON_Parse(jsonData);\r
- free(jsonData);\r
-\r
- if (root != NULL) {\r
- cJSON *modifiedJson = cJSON_GetObjectItem(root,"mac");\r
- if (cJSON_IsArray(modifiedJson)) {\r
- printf("MAC地址: ");\r
- cJSON* macElement = NULL;\r
- cJSON_ArrayForEach(macElement, modifiedJson) {\r
- if (cJSON_IsNumber(macElement)) {\r
- if ((macElement->prev != NULL)) {\r
- save_mac[count] = macElement->valueint;\r
- count++;\r
- }\r
- \r
- }\r
- }\r
- printf("\n");\r
- }\r
- // printf("success parsing JSON :save_mac :%d %d %d %d %d %d\n",save_mac[0],save_mac[1],save_mac[2],save_mac[3],save_mac[4],save_mac[5]);\r
- }\r
- // 释放资源\r
- cJSON_Delete(root);\r
- }\r
- if(save_mac[0] == 0 && save_mac[1] == 0 && save_mac[2] == 0)//只要手表本地存储没有mac地址就走连接流程重新绑定\r
+ getPhoneMac(&save_mac);\r
+ memset(save_mac,0,6);\r
+ if(save_mac[0] == 0 && save_mac[1] == 0 && save_mac[2] == 0 && save_mac[3] == 0 && save_mac[4] == 0 && save_mac[5] == 0)//只要手表本地存储没有mac地址就走连接流程重新绑定\r
{\r
bond = 0x01;//手表未和任何手机绑定过\r
- if(strlen((char *)copare_mac) == 0)//只要app没有下发mac就开启弹窗\r
+ if(copare_mac[0] == 0 && copare_mac[1] == 0 && copare_mac[2] == 0 && copare_mac[3] == 0 && copare_mac[4] == 0 && copare_mac[5] == 0)//只要app没有下发mac就开启弹窗\r
{\r
- comfirmPaire(1);\r
- gap_ble_pair_remote_device(&phone_addr);\r
+ #ifdef SUPPORT_DEVICE_PAIRING_NOTIFICATION\r
+ if(datalen == 0){\r
+ CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,NULL,0);\r
+ }else{\r
+ CustomEventPublish(TOPIC_EVENT_DEVICE_BIND,(uint8_t *)devname,datalen);\r
+ }\r
+ #endif\r
}else{\r
ret = gap_ble_pair_remote_device(&phone_addr);\r
}\r
\r
}else\r
{\r
- if(copare_mac[0] != 0 && copare_mac[1] != 0 && copare_mac[2] != 0 ) \r
+ if(copare_mac[0] != 0 && copare_mac[1] != 0 && copare_mac[2] != 0 && copare_mac[3] != 0 &&copare_mac[4] != 0 && copare_mac[5] != 0) \r
{\r
printf("success parsing JSON :save_mac :%d %d %d %d %d %d copare_mac %d %d %d %d %d %d;\n",save_mac[0],save_mac[1],save_mac[2],save_mac[3],save_mac[4],save_mac[5],\r
copare_mac[0],copare_mac[1],copare_mac[2],copare_mac[3],copare_mac[4],copare_mac[5]);\r
{\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sendParieSuccess:0x%x-0x%x-0x%x-0x%x-0x%x-0x%x\r\n",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);\r
if(firts_bond != 1 && phoneDataFlag == 1){//和该手机绑定过并且是连接app之后下发的数据 正常系统配对是不需要保存的\r
- // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sendParieSuccess:0x%x-0x%x-0x%x-0x%x-0x%x-0x%x\r\n",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);\r
uint8_t value[25];\r
uint8_t length = 0;\r
memset(value,0,25);\r
#include <stdio.h>
#include "stdbool.h"
#include "errcode.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
#define READ_FLASH_DATA 0x01 //读flash数据
#define WRITE_FLASH_DATA 0x02 //写flash数据
typedef struct {
void setFindWatchFlag(uint8_t flag);//查找手表标识
errcode_t bondSucessCmd(void);//发送解绑指令,解绑界面调用这个函数 如果点了✓调用这个函数 返回成功后延迟10s再重启设备
void getDeviceState(void);
+
+void comfirmPaire(uint8_t flag);//发送确认配对指令 1确认配对 0取消配对
+#ifdef __cplusplus
+}
+#endif
#endif
#include "osal_timer.h"\r
#include "bleEvent.h"\r
#include "hidService.h"\r
-\r
// #include "ble_hid_take_photo_server.h"\r
/* Gatt service UUID */\r
#define BLE_SERVICE_UUID 0x18e0\r
\r
uint8_t data2ae3Cmd = 0;//2ae3短指令特征值\r
uint8_t data2ae4Cmd = 0;\r
-\r
+#ifdef SUPPORT_BLE_SERVICE\r
\r
static void set_phone_info(bd_addr_t *addr)//保存手机信息 包含手机mac地址\r
{\r
gap_ble_config_adv_data_t adv_data_info;\r
memset_s(&adv_data_info, sizeof(gap_ble_config_adv_data_t), 0, sizeof(gap_ble_config_adv_data_t));\r
\r
- unsigned char set_mac[6] = {0x61,0x22,0x33,0x44,0x09,0x14};\r
+ unsigned char set_mac[6] = {0x61,0x22,0x33,0x44,0x09,0x15};\r
bluetooth_set_local_addr(set_mac,6);\r
bd_addr_t addr_info;\r
int32_t ret= 0;\r
}\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_get_local_name name:%s,len:%u,ret:%u.", ble_name, ble_name_len, ret);\r
\r
- ret = gap_br_set_bt_scan_mode(GAP_SCAN_MODE_CONNECTABLE_GENERAL_DISCOVERABLE, 60); // start scan\r
- if (ret == false) {\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ConnectPhonePresenter bt gap_br_set_bt_scan_mode ret = 0x%x", ret);\r
- }\r
-\r
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "gap_ble_get_local_addr, ret:%u.", ret);\r
memcpy_s(adv_data, sizeof(ble_adv_type), ble_adv_type, sizeof(ble_adv_type));\r
adv_data_len = sizeof(ble_adv_type);\r
ble_data_mac_switch[2], ble_data_mac_switch[3], ble_data_mac_switch[4], ble_data_mac_switch[5]);\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(adv_data + adv_data_len, sizeof(adv_mac_head), adv_mac_head, sizeof(adv_mac_head));\r
- adv_data_len = adv_data_len + sizeof(adv_mac_head);\r
+ // memcpy_s(adv_data + adv_data_len, sizeof(adv_mac_head), adv_mac_head, sizeof(adv_mac_head));\r
+ // adv_data_len = adv_data_len + sizeof(adv_mac_head);\r
\r
scan_data[0] = 0x0f;//长度\r
scan_data[1] = 0xff;//数据类型 manufactory data\r
\r
}\r
revBleOldData(write_cb_para->value,write_cb_para->length,write_cb_para->handle);\r
- // if(write_cb_para->handle == g_alipay_server_handle)\r
- // {\r
- // printf("g_alipay_server_handle:%d",g_alipay_server_handle);\r
- // uint8_t *msg_data = write_cb_para->value;\r
- // svr_alipay_msg_write(ALIPAY_MSG_BT, msg_data, write_cb_para->length, false);\r
- // }\r
- \r
}\r
static void svr_ble_mtu_exchange(uint8_t server_id, uint16_t conn_id, uint16_t mtu_size, errcode_t status)\r
{\r
{\r
bool ret = enable_bt_stack();\r
if (ret != ERRCODE_SUCC) {\r
- WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "svr_bluetooth_init enable_bt_stack ret:%u.\r\n", ret);\r
+ // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "svr_bluetooth_init enable_bt_stack ret:%u.\r\n", ret);\r
}\r
// osDelay(100);\r
svr_ble_btcallback_reg();\r
+ #ifdef SUPPORT_BLE_SERVICE\r
svr_ble_bt_init_gatts();\r
+ #endif\r
+ #ifdef SUPPORT_HID_SERVICE\r
ble_hid_server_init();\r
+ #endif\r
svr_ble_adv_start_param();\r
- WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "svr_bluetooth_init22222222222\r\n");\r
ble_recv_register_msg_callback(ble_recv_msg_callback);//注册驱动回调\r
return;\r
}\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 *)&bd_addr);//与固定的mac设置地址进行断开连接\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
AdverFlag = true;\r
svr_bluetooth_init();\r
}\r
-}
\ No newline at end of file
+}\r
+#endif
\ No newline at end of file
{TOPIC_EVENT_CHARGE_PLUG, A_CORE_MASK, 1},
{TOPIC_EVENT_CHARGE_UNPLUG, A_CORE_MASK, 1},
#endif
+#ifdef SUPPORT_DEVICE_PAIRING_NOTIFICATION
+ {TOPIC_EVENT_DEVICE_BIND,A_CORE_MASK, 1},
+ {TOPIC_EVENT_DEVICE_UNBIND,A_CORE_MASK, 1},
+ {TOPIC_EVENT_DEVICE_UNBINDING_REQUEST,A_CORE_MASK, 1},
+#endif
#ifdef SUPPORT_CAT1_MODEM
{TOPIC_EVENT_CAT1_INCOMMING, A_CORE_MASK, 1},
{TOPIC_EVENT_CAT1_CALLCONNTED, A_CORE_MASK, 1},
* Description: BT HID Service Server Module.\r
*/\r
#include "hidService.h"\r
-#ifdef SUPPORT_BLE_SERVICE\r
#include "bleService.h"\r
-#endif\r
#include "bts_gatt_stru.h"\r
#include "bts_a2dp_source.h"\r
#include "bts_gatt_server.h"\r
#include "securec.h"\r
#include "wearable_log.h"\r
\r
-#if 1\r
+#ifdef SUPPORT_HID_SERVICE\r
/* HID information flag remote wakeup */\r
#define BLE_HID_INFO_FLAG_REMOTE_WAKE_UP_MSK 0x01\r
/* HID information flag normally connectable */\r
#define BLE_UUID_REPORT_REFERENCE 0x2908
/* HID character value handle offset */
#define BLE_HID_CHARACTER_INPUT_REPORT_VALUE_HANDLE_OFFSET 8
-#if 1
+#if 1
/**
* @if Eng
* @brief Use this funtion to register callback function of framework.
#include "components/ui_button.h"
#include "components/ui_image_view.h"
#include "components/ui_scroll_view.h"
+#ifdef SUPPORT_BLE_SERVICE
+#include "bleEvent.h"
+
+#endif
+
namespace OHOS
{
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PairingViewEventListener:: DeviceBindingButtonCancel OnClick");
// 终止当前的绑定流程并关闭相关的通知界面。
+ #ifdef SUPPORT_BLE_SERVICE
+ comfirmPaire(0);
+ #endif
NotificationManager::GetInstance()->StopNotify();
}
else if (&view == DeviceBindingButtonOK) // 设备绑定确认按钮
*/
// 关闭通知界面
+ #ifdef SUPPORT_BLE_SERVICE
+ comfirmPaire(1);
+ #endif
NotificationManager::GetInstance()->StopNotify();
}
else if (&view == DeviceUnBindingButtonCancel) // 设备解绑取消按钮
'SUPPORT_CHARGER_PLUG_DETECTION_NOTIFICATION',
'SUPPORT_AT_CUSTOMUTILS',
'SUPPORT_ALIPAY_SEC',
- 'SUPPORT_BLE_SERVICE'
+ 'SUPPORT_BLE_SERVICE',
+ 'SUPPORT_HID_SERVICE'
],
'ram_component': ["algorithm", "dfx_port_brandy", "dfx_update", 'dfx_nv', "osal", "arch_port", "-:testsuite",
"liteos_port", 'lcd', 'qspi_display', 'dfx_file_operation',
return;
}
request->msgId = topic;
- ret = memcpy_s(request->data, size, (const void *)data, size);
- if (ret != EOK) {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish memcpy_s rateDataTmp fail! ret = %d", ret);
- return;
+ if(size > 0)
+ {
+ ret = memcpy_s(request->data, size, (const void *)data, size);
+ if (ret != EOK) {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ChargerEventPublish memcpy_s rateDataTmp fail! ret = %d", ret);
+ return;
+ }
}
request->len = size;
request->msgValue = 0;