This commit is contained in:
lmx
2025-12-18 11:06:31 +08:00
parent 01f442d636
commit 5757f3fb12
12 changed files with 109 additions and 1642 deletions

View File

@ -11,7 +11,7 @@
#include "asm/pwm_led.h"
#include "aec_user.h"
#include "app_power_manage.h"
#include "avctp_user.h"
#define LOG_TAG_CONST USER_CFG
#define LOG_TAG "[USER_CFG]"
#define LOG_ERROR_ENABLE
@ -581,5 +581,33 @@ int bt_modify_name(u8 *new_name)
}
return 0;
}
////////////////////////////////////////////////////////////////////////////////////////
extern void lmp_hci_write_local_name(const char *name);
int xtell_bt_newname(u8 *new_name){
u8 new_len = strlen(new_name);
if(new_len >= LOCAL_NAME_LEN){
new_name[LOCAL_NAME_LEN -1] = 0;
}
if(strcmp(new_name,bt_cfg.edr_name)){
user_send_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL); //断开此时经典蓝牙的连接,但经典蓝牙还是可以被发现
user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_DISABLE, 0, NULL); //关闭蓝牙可发现,已连接时不能操作
user_send_cmd_prepare(USER_CTRL_WRITE_CONN_DISABLE, 0, NULL); //关闭蓝牙可连接
syscfg_write(CFG_BT_NAME,new_name,LOCAL_NAME_LEN);
memcpy(bt_cfg.edr_name,new_name,LOCAL_NAME_LEN);
lmp_hci_write_local_name(bt_get_local_name());
printf("xtell set new name sucess\n");
delay_2ms(25);
bt_ble_init();
user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_ENABLE, 0, NULL); //打开蓝牙可发现,已连接时不能操作
user_send_cmd_prepare(USER_CTRL_WRITE_CONN_ENABLE, 0, NULL); //打开蓝牙可连接
connect_last_device_from_vm();
return 1;
}
return 0;
}

View File

@ -113,8 +113,6 @@ extern void bt_pll_para(u32 osc, u32 sys, u8 low_power, u8 xosc);
BT_USER_COMM_VAR bt_user_comm_var;
BT_USER_PRIV_VAR bt_user_priv_var;
/*********xtell code */
extern unsigned char xt_bl_new_name[13];
extern unsigned char xt_ble_new_name[9];
/*******end xtell cocde */
int phone_call_begin(void *priv);
@ -1492,13 +1490,7 @@ static int bt_connction_status_event_handler(struct bt_event *bt)
clear_current_poweron_memory_search_index(0);
case BT_STATUS_FIRST_CONNECTED:
log_info("BT_STATUS_CONNECTED\n");
if(strcmp(xt_ble_new_name,"CM-XXXXX") != 0){
//蓝牙连接成功
bt_newname =1;
// queue_ai_msg(xtell_uart_ai_14_bt_connect,5,14);
u8 temp[5]={0xBB,0xBE,0x02,0x04,0x00};
// send_data_to_ble_client(&temp,5);
}
//连接成功
earphone_change_pwr_mode(PWR_DCDC15, 3000);
sys_auto_shut_down_disable();
#if TCFG_ADSP_UART_ENABLE

View File

@ -6,8 +6,7 @@
#include "le_common.h"
#include "ble_user.h"
unsigned char xt_bl_new_name[13] = "WEBIRD-XXXXX";
unsigned char xt_ble_new_name[9] = "CM-XXXXX";

View File

@ -303,14 +303,13 @@ static void default_report_data_deal(att_data_report_t *report_data, target_uuid
}
// 默认要匹配的远程设备名称 1
static const u8 test_remoter_name1[] = "X100_TEST";
static const u8 test_remoter_name1[] = "X100ABCDE";
// static const u8 test_remoter_name1[] = "AC637N_MX(BLE)"; // 备选名称
// static const u8 test_remoter_name2[] = "AC630N_HID567(BLE)"; //备选名称
// 默认的 Client 写操作使用的 Characteristic Handle
static u16 default_client_write_handle;
// 用于定时触发写操作的定时器句柄
static u16 test_client_timer = 0;
// 默认的设备匹配配置 01
static const client_match_cfg_t match_dev01 = {
@ -358,20 +357,20 @@ static void default_event_callback(le_client_event_e event, u8 *packet, int size
case CLI_EVENT_SEARCH_PROFILE_COMPLETE: // 服务发现完成事件
log_info("CLI_EVENT_SEARCH_PROFILE_COMPLETE\n");
// 如果定时器未启动且找到了写入句柄
if ((!test_client_timer) && default_client_write_handle) {
log_info("test timer_add\n");
extern void test_func_main(void);
test_func_main();
if (default_client_write_handle) {
log_info("default_client_write_handle is not null\n");
// extern void test_func_main(void);
// test_func_main();
extern void create_key_detect_thread(void);
create_key_detect_thread(); //开始按键检测 -- task_func.c
}
break;
case CLI_EVENT_CONNECTED: // 连接建立事件
//不在这处理连接成功不等于可以发送数据还需要等profile搜索完成取到server的uuid获到写句柄
break;
case CLI_EVENT_DISCONNECT: // 断开连接事件
// 如果定时器正在运行,则删除它
if (test_client_timer) {
sys_timeout_del(test_client_timer);
test_client_timer = 0;
}
extern void destroy_key_detect_thread(void);
destroy_key_detect_thread(); //停止按键检测 -- task_func.c
default_client_write_handle = 0; // 清空写入句柄
break;
default:
@ -1433,7 +1432,7 @@ static void cbk_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *p
log_info("ATT MTU = %u\n", mtu); // 打印 MTU 值
ble_op_att_set_send_mtu(mtu); // 设置 ATT 客户端的发送 MTU
break;
case HCI_EVENT_VENDOR_REMOTE_TEST: // 供应商远程测试事件
case HCI_EVENT_VENDOR_REMOTE_TEST:
log_info("--- HCI_EVENT_VENDOR_REMOTE_TEST\n");
break;
case L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_RESPONSE: // L2CAP 连接参数更新响应事件
@ -2094,14 +2093,14 @@ void client_send_conn_param_update(void)
// mac_addr_buf: 用于填充 MAC 地址的缓冲区
void rcsp_adv_fill_mac_addr(u8 *mac_addr_buf)
{
#if (MUTIl_CHARGING_BOX_EN) // 如果使能了多路充电盒功能
u8 *mac_addr = get_chargebox_adv_addr(); // 获取充电盒的 MAC 地址
#if (MUTIl_CHARGING_BOX_EN)
u8 *mac_addr = get_chargebox_adv_addr();
if (mac_addr) {
swapX(mac_addr, mac_addr_buf, 6); // 交换 MAC 地址到缓冲区
}
/* printf("mac_addr:"); */
/* printf_buf(mac_addr_buf, 6); */
#else // 否则使用默认的蓝牙 MAC 地址
#else // 使用默认的蓝牙 MAC 地址
swapX(bt_get_mac_addr(), mac_addr_buf, 6); // 获取并填充蓝牙 MAC 地址
#endif
}
@ -2124,7 +2123,7 @@ void g_send_data_to_ble_server(const u8* data, u16 length){
// 数据类型为 ATT_OP_WRITE_WITHOUT_RESPOND (写无响应)
int ret = client_operation_send(default_client_write_handle, data, length, ATT_OP_WRITE_WITHOUT_RESPOND);
if(ret == 0){ // 如果发送成功 (返回值 0 表示成功)
printf("success: send data to server\n");
// printf("success: send data to server\n");
return;
}
printf("error: send data to server\n"); // 发送失败

View File

@ -38,6 +38,9 @@ static void rc_ble_state_set_disconnected(void);
//进程名称
static char control_key_task_name[] = "control_key";
//进程运行中标志
static u8 key_detect_sign = 0; //为1表示正在运行
// ==================================================================================================================================================================
// 全局变量
// ==================================================================================================================================================================
@ -242,8 +245,8 @@ void control_key_init(void){
* @param key2_state 按键2值
*/
void control_key_get_value(u16* Xout_adc, u16* Yout_adc, u8* key1_state, u8* key2_state){
*Xout_adc = (u16)adc_get_value(AD_CH_PG5);
*Yout_adc = (u16)adc_get_value(AD_CH_PG7);
*Xout_adc = (u16)adc_get_value(AD_CH_PG5) * 65;
*Yout_adc = (u16)adc_get_value(AD_CH_PG7) * 65;
*key1_state = gpio_read(IO_PORTG_06);
rc_log("adc_get_value: Xout = %d, Yout = %d, key1_state = %d, key2_state = %d\n", *Xout_adc , *Yout_adc, *key1_state, 1);
@ -258,11 +261,11 @@ void contol_key_task(void){
static u16 Xout_adc = 0;
static u16 Yout_adc = 0;
static u8 key1_state = 1;
u8 ble_data_buff[12] = {0xBE, 0xBB, 0x0A, 0x01, //0-3
u8 ble_data_buff[12] = {0xBE, 0xBB, 0x09, 0x01, //0-3
0x00, 0x00, 0x00, 0x00, //4-7 遥感值:上下、左右
0x00, 0x00, //8、9 两个按键
0x00, //10 电量百分比
0x0C}; //11 校验和
0x00}; //11 校验和
control_key_init(); //遥感按键初始化
@ -281,12 +284,35 @@ void contol_key_task(void){
ble_data_buff[10] = get_vbat_percent();
ble_data_buff[11] = 0;
for(int i = 0 ;i < 11; i++){
ble_data_buff[11] += ble_data_buff[i];
}
g_send_data_to_ble_server(ble_data_buff, sizeof(ble_data_buff));
os_time_dly(5);
os_time_dly(5); //10ms为单位
}
}
/**
* @brief 和主板ble连接上后会被调用
*
*/
void create_key_detect_thread(void){
key_detect_sign = 1;
os_task_create(contol_key_task, NULL, 1, 2048, 128, control_key_task_name);
}
/**
* @brief 和主板ble断连后会被调用
*
*/
void destroy_key_detect_thread(void){
if(key_detect_sign == 1){
key_detect_sign = 0;
os_task_del(control_key_task_name);
}
}
// ==================================================================================================================================================================
// 辅助函数
@ -341,19 +367,19 @@ void rc_app_main_init(void)
{
rc_log("Initializing Remote Control App...\n");
// 1. 初始化全局上下文
// 初始化全局上下文
memset(&g_rc_context, 0, sizeof(RC_Context_t));
g_rc_context.state = RC_STATE_DISCONNECTED; // 初始状态为未连接
g_rc_context.team = TEAM_NO;
FM176XX_HardInit();
// 2. 检查并启动RFID处理定时器
// 检查并启动RFID处理定时器
if (g_rfid_timer_id == 0) {
// g_rfid_timer_id = sys_timer_add(NULL, rc_rfid_callback_handler, RC_RFID_CALLBACK_INTERVAL_MS);
rc_log("RFID handler timer started (ID: %d).\n", g_rfid_timer_id);
}
// 3. 检查并启动BLE处理定时器
// 检查并启动BLE处理定时器
if (g_ble_timer_id == 0) {
// g_ble_timer_id = sys_timer_add(NULL, rc_ble_callback_handler, RC_BLE_CALLBACK_INTERVAL_MS);
rc_log("BLE handler timer started (ID: %d).\n", g_ble_timer_id);
@ -381,8 +407,9 @@ void test_task(void){
}
void test_func_main(void){
#if TEST_FUNCTION == 1
// os_task_create(test_task, NULL, 1, 1024, 128, "rfid_test");
os_task_create(contol_key_task, NULL, 1, 2048, 128, control_key_task_name);
// os_task_create(contol_key_task, NULL, 1, 2048, 128, control_key_task_name);
#endif
}

View File

@ -38,6 +38,10 @@
//-------------------------------------------------------------------------------------------------//
extern APP_VAR app_var;
//-------------------------------------------------------------------------------------------------//
// 全局变量
//-------------------------------------------------------------------------------------------------//
unsigned char xt_bt_new_name[13] = "WEBIRD-XXXXX"; //经典蓝牙名称
//-------------------------------------------------------------------------------------------------//
// 系统主函数 app_main
@ -124,10 +128,14 @@ void xtell_app_main()
rcsp_adv_fill_mac_addr(mac_data); //读取MAC地址
xlog("xtell BT mac data:%x:%x:%x:%x:%x:%x",mac_data[0],mac_data[1],mac_data[2],mac_data[3],mac_data[4],mac_data[5]);
user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_ENABLE, 0, NULL); //打开蓝牙可发现,已连接时不能操作
delay_2ms(50);
user_send_cmd_prepare(USER_CTRL_WRITE_CONN_ENABLE, 0, NULL); //打开蓝牙可连接
delay_2ms(50);
// user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_ENABLE, 0, NULL); //打开蓝牙可发现,已连接时不能操作
// delay_2ms(50);
// user_send_cmd_prepare(USER_CTRL_WRITE_CONN_ENABLE, 0, NULL); //打开蓝牙可连接
// delay_2ms(50);
extern int xtell_bt_newname(u8 *new_name);
xtell_bt_newname(xt_bt_new_name); //设置经典蓝牙名
extern void test_func_main(void);
// test_func_main();