static char *uart_dma_buf =NULL;
static int uart_timer_id = 0;
static int uart_timer_count = 0;
+u8 is_need_send_bt_state = 0;
static void uart_timer_cb(void *p);
#define uart_read_buf_len 1024*4
//{"event":"AI_KEY_PRESS"}
cJSON *root = cJSON_CreateObject();
if (root == NULL) {
+
printf( "Failed to create JSON object\n");
return -1;
}
if (data == NULL) {
printf( "Failed to create JSON object\n");
cJSON_Delete(data);
+ cJSON_Delete(root);
return -1;
}
if (data == NULL) {
printf( "Failed to create JSON object\n");
cJSON_Delete(data);
+ cJSON_Delete(root);
return;
}
char mac_tmp[18]={0};
}
}
+extern u8 maddr[6];
+int uart_send_bt_state(u8 bt_state) //蓝牙向4G发送蓝牙耳机的状态
+{
+ printf("uart_send_bt_state:%d %d\n",bt_state,is_need_send_bt_state);
+ if(!is_need_send_bt_state)
+ {
+ return 0;
+ }
+ is_need_send_bt_state=0;
+ cJSON *root = cJSON_CreateObject();
+ if (root == NULL) {
+ printf( " uart_send_get_ble_switch Failed to create JSON object\n");
+ return -1;
+ }
+ // 添加字符串字段 "event"
+ cJSON_AddStringToObject(root, "event", "post_bt_connect_rest");
+ cJSON *data = cJSON_CreateObject();
+ if (data == NULL) {
+ printf( "Failed to create JSON object\n");
+ cJSON_Delete(data);
+ cJSON_Delete(root);
+ return -1;
+ }
+ // {
+ // "cmd":"post_bt_connect_rest",
+ // "ts":1738283829,
+ // "msg":"上报蓝牙连接结果",
+ // "data":{
+ // "mac":"mac地址",
+ // "state":"connected/disconnected/connecting/failed"
+ // }
+ // // }
+ // BT_CONN_STATE_INIT=0,
+ // BT_CONN_STATE_CONNECTING = 1,
+ // BT_CONN_STATE_CONNECTED = 2,
+ // BT_CONN_STATE_ERROR = 3,
+ // BT_CONN_STATE_NOT_FOUND = 4
+ char s_mac[18];
+ memset(s_mac,0,18);
+ sprintf(s_mac,"%02x:%02x:%02x:%02x:%02x:%02x",maddr[0],maddr[1],maddr[2],maddr[3],maddr[4],maddr[5]);
+ // cJSON_AddStringToObject(data, "name", (char *)userremote_name);
+ cJSON_AddStringToObject(data, "mac", (char *)s_mac);
+ if(bt_state == 1){
+ cJSON_AddStringToObject(data, "state", "connecting");
+ }
+ else if (bt_state == 2)
+ {
+ cJSON_AddStringToObject(data, "state", "connected");
+ }else if(bt_state == 3){
+ cJSON_AddStringToObject(data, "state", "failed");
+ }else if (bt_state == 0)
+ {
+ cJSON_AddStringToObject(data, "state", "disconnected");
+ }
+
+ cJSON_AddItemToObject(root, "data", data);
+ // 将JSON对象转换为字符串
+ char *json_string = cJSON_Print(root);
+ if (json_string == NULL) {
+ printf( "uart_send_get_ble_switch Failed to print JSON\n");
+ cJSON_Delete(root);
+ return -1;
+ }
+ // 打印JSON字符串
+ printf("uart_send_bt_state JSON数据: %s\n", json_string);
+ bk_uart_send_smg(BK_UART_WRITE_DATA, json_string,strlen(json_string));
+ // uart_send_blocking(ut, json_string, strlen(json_string), 20);
+ // 释放内存
+ cJSON_free(json_string);
+ cJSON_Delete(root);
+ return 0;
+}
int uart_send_error(void)
{
cJSON *root = cJSON_CreateObject();
cJSON *data = cJSON_GetObjectItemCaseSensitive(root, "data");
if (cJSON_IsString(data) && (data->valuestring != NULL)) {
printf("蓝牙连接: %s\n", data->valuestring);
- connect_bt(json_string,0);//开始扫描
+ // is_need_send_bt_state = 1;
+ // if(bt_connect==2){ //已连接
+ // bt_connect
+ // }
+ connect_bt(json_string,0);//开始连接蓝牙耳机设备
}
}
if (cJSON_IsString(data) && (data->valuestring != NULL)) {
printf("imei: %s\n", data->valuestring);
get_cat1_imei_state=1;
- set_adv_imei(data->valuestring);//开始扫描
+ set_adv_imei(data->valuestring);//设置广播imei号
}
}
if (scan_state){
return;
}
- if (bt_connect) { //搜索前断开已连接得蓝牙耳机
- user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL);
- }
+ user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL); //
scan_state = 1;
bt_emitter_start_search_device(); //开始扫描
}
}
extern u8 bt_connect;
extern u8 bt_conn_addr[6];//蓝牙连接成功的地址
+u8 maddr[6]={0}; // 目标数组
+extern u8 is_need_send_bt_state;
void connect_bt(char *json_data,u8 conect){
// json_data = \
// {
if(root == NULL){
return;
}
- u8 maddr[6]; // 目标数组
+
u8 reversed_mac[6]; // 反序数组
memset(reversed_mac,0,6);
memset(maddr,0,6);
printf("转换失败,错误码:%d\n", ret);
return;
}
+
for(u8 i=0;i<6;i++)//需要反序
{
reversed_mac[i]=maddr[5-i];
}
printf("bt_connect:%d bt_conn_addr %x %x %x %x %x %x\r\n",bt_connect,bt_conn_addr[0],bt_conn_addr[1],bt_conn_addr[2],bt_conn_addr[3],bt_conn_addr[4],bt_conn_addr[5]);
printf("maddr %x %x %x %x %x %x\r\n",maddr[0],maddr[1],maddr[2],maddr[3],maddr[4],maddr[5]);
- if(bt_connect == 1) //已经连上了看看连接的地址是否一致
+ is_need_send_bt_state=1;
+ if(bt_connect == 2) //已经连上了看看连接的地址是否一致
{
if (memcmp(bt_conn_addr, reversed_mac, 6) != 0){//如果连上了并且和小程序下发得mac地址是一致不需要重新连接
user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL); //
emitter_bt_connect(reversed_mac);//连接地址
}
+ else{
+
+ uart_send_bt_state(bt_connect);
+ is_need_send_bt_state=0;
+ }
}else{
emitter_bt_connect(reversed_mac);//连接地址
}
printf("***rsp_data overflow!!!!!!\n");
return -1;
}
-
+
printf("rsp_data(%d):", offset);
log_info_hexdump(buf, offset);
scan_rsp_data_len = offset;
return ret;
}
-
+#include "ble_protocol.h"
extern u8 bt_connect;
+extern char userremote_name[32]; //当前连接或者断开的蓝牙名称
+extern u8 bt_conn_addr[6];//蓝牙连接成功的地址
/*----------------------------------------------------------------------------*/
/**@brief 蓝牙模式协议栈事件
@param bt:事件
if (bt->value == ERROR_CODE_PAIRING_NOT_ALLOWED) { //用于判断华为手表的断开情况
UI_MSG_POST("bt_status:hci_value=%4", bt->value);
}
+ uart_send_single_bt_mac(userremote_name,bt_conn_addr,0);
bt_hci_event_disconnect(bt) ;
+
clock_remove_set(BT_CONN_CLK);
break;
case BTSTACK_EVENT_HCI_CONNECTIONS_DELETE:
break;
case ERROR_CODE_PAGE_TIMEOUT:
log_info(" ERROR_CODE_PAGE_TIMEOUT \n");
+ bt_connect=BT_CONN_STATE_ERROR;//连接超时没有连上设备
+ uart_send_bt_state(bt_connect);
bt_connect=0;
bt_hci_event_page_timeout(bt);
break;
#include "ui/ui_api.h"
#include "ui_manage.h"
#include "ui/ui_style.h"
-
+#include "bk_drive/bk_uart.h"
#include "key_event_deal.h"
#include "clock_cfg.h"
#include "gSensor/gSensor_manage.h"
void bt_status_connect(struct bt_event *bt)
{
bt_connect = BT_CONN_STATE_CONNECTED;
+ uart_send_bt_state(bt_connect);
// connect_bt_cb(bt_connect);
sys_auto_sniff_controle(1, NULL);
sys_auto_shut_down_disable();
void bt_status_disconnect(struct bt_event *bt)
{
bt_connect = BT_CONN_STATE_INIT;
- uart_send_single_bt_mac(userremote_name,bt_conn_addr,0);
+ uart_send_bt_state(bt_connect);
+
sys_auto_sniff_controle(0, NULL);
__this->call_flag = 0;
/* log_info("BT_STATUS_DISCONNECT\n"); */