(1)添加开关机语音(2)发多个协议wife的信号强度AT+RSSI

This commit is contained in:
dianke3yu 2025-06-13 15:49:41 +08:00
parent 4b2b74f75a
commit be158a4975
12 changed files with 2162 additions and 161 deletions

View File

@ -5802,6 +5802,20 @@ static bk_err_t aud_tras_drv_play_prompt_tone(aud_intf_voc_prompt_tone_t prompt_
#endif
break;
case AUD_INTF_VOC_AGENT_POWER_ON://zhanyu
#if CONFIG_PROMPT_TONE_SOURCE_ARRAY
prompt_tone_info.url = (char *)agent_power_on_prompt_tone_array;
prompt_tone_info.total_len = sizeof(agent_power_on_prompt_tone_array);
#endif
break;
case AUD_INTF_VOC_AGENT_POWER_OFF://zhanyu
#if CONFIG_PROMPT_TONE_SOURCE_ARRAY
prompt_tone_info.url = (char *)agent_power_off_prompt_tone_array;
prompt_tone_info.total_len = sizeof(agent_power_off_prompt_tone_array);
#endif
break;
default:
LOGE("%s, %d, prompt_tone: %d not support fail\n", __func__, __LINE__, prompt_tone);
play_flag = false;

View File

@ -240,6 +240,8 @@ typedef enum {
AUD_INTF_VOC_OTA_UPDATE_FAIL,
AUD_INTF_VOC_OTA_UPDATE_SUCCESS,
AUD_INTF_VOC_AGENT_START_FAIL,
AUD_INTF_VOC_AGENT_POWER_ON,//zhanyu
AUD_INTF_VOC_AGENT_POWER_OFF,//zhanyu
} aud_intf_voc_prompt_tone_t;
#endif

File diff suppressed because it is too large Load Diff

View File

@ -137,6 +137,7 @@ static uint8_t ota_event_callback(evt_ota event_param)
case EVT_OTA_SUCCESS:
app_event_send_msg(APP_EVT_OTA_SUCCESS, 0);
break;
default:
break;
}
@ -151,11 +152,12 @@ static uint8_t battery_event_callback(evt_battery event_param)
app_event_send_msg(APP_EVT_CHARGING, 0);
break;
case EVT_BATTERY_LOW_VOLTAGE:
app_event_send_msg(APP_EVT_LOW_VOLTAGE, 0);
// app_event_send_msg(APP_EVT_LOW_VOLTAGE, 0);
break;
case EVT_SHUTDOWN_LOW_BATTERY:
app_event_send_msg(APP_EVT_SHUTDOWN_LOW_BATTERY, 0);
//app_event_send_msg(APP_EVT_SHUTDOWN_LOW_BATTERY, 0);
break;
default:
break;
}
@ -175,6 +177,14 @@ static uint8_t battery_main_event_callback(evt_main_battery event_param)//zhanyu
case EVT_SHUTDOWN_MAIN_LOW_BATTERY:
app_event_send_msg(APP_EVT_SHUTDOWN_LOW_BATTERY, 0);
break;
case EVT_POWER_ON:
app_event_send_msg(APP_EVT_POWER_ON, 0);
break;
case EVT_POWER_OFF:
app_event_send_msg(APP_EVT_POWER_OFF, 0);
break;
default:
break;
}
@ -373,6 +383,20 @@ static void app_event_thread(beken_thread_arg_t data)
bool skip_countdown_update = false;
switch (msg.event)
{
case APP_EVT_POWER_ON://zhanyu
LOGE("APP_EVT_POWER_ON\n");
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_AGENT_POWER_ON);
#endif
break;
case APP_EVT_POWER_OFF://zhanyu
LOGE("APP_EVT_POWER_ON\n");
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_AGENT_POWER_OFF);
#endif
break;
case APP_EVT_ASR_WAKEUP: // hi armino
is_standby = 0;
indicates_state &= ~((1 << INDICATES_STANDBY) | (1 << INDICATES_AGENT_CONNECT));
@ -542,8 +566,8 @@ static void app_event_thread(beken_thread_arg_t data)
case APP_EVT_SHUTDOWN_LOW_BATTERY:
LOGI("APP_EVT_SHUTDOWN_LOW_BATTERY\n");
skip_countdown_update = true;
bk_config_sync_flash();
//skip_countdown_update = true;
// bk_config_sync_flash();
break;
case APP_EVT_CLOSE_BLUETOOTH:

View File

@ -20,8 +20,8 @@ typedef enum
APP_EVT_OTA_START,
APP_EVT_OTA_SUCCESS,
APP_EVT_OTA_FAIL,
APP_EVT_POWER_ON,
APP_EVT_POWER_OFF,
} app_evt_type_t;

View File

@ -353,15 +353,19 @@ static void handle_system_event(key_event_t event)
// bk_reboot();
// break;
case TURN_OFF_LOGHT:
bk_printf("ispoweron = %d\n", ispoweron);
bk_printf("ispoweron11 = %d\n", ispoweron);
// clearallled();
if (ispoweron == 1)
{
bk_printf(TAG, "POWER OFFaaa~~~ \r\n");
bk_printf("POWER OFFaaa~~~ \r\n");
poweroff_voice();
ws2812_led_clear_all();
ispoweron = 0;
rtos_delay_milliseconds(300);
bk_gpio_enable_output(51);
bk_gpio_set_output_low(51);
}
else if (ispoweron == 0)
{
@ -373,7 +377,7 @@ static void handle_system_event(key_event_t event)
ispoweron = 1;
ws2812_led_wifi_disconnect();
poweron_voice();
// bk_gpio_enable_output(0);
//bk_gpio_set_output_high(0);
#endif
@ -464,7 +468,7 @@ static void handle_system_event(key_event_t event)
return 0;
}
static void bk_enter_deepsleep()
void bk_enter_deepsleep()
{
#if CONFIG_GSENSOR_ENABLE
extern int gsensor_enter_sleep_config();
@ -551,6 +555,9 @@ static void handle_system_event(key_event_t event)
bk_gpio_enable_output(GPIO_0);
bk_gpio_set_output_low(GPIO_0);
if (bk_misc_get_reset_reason() != RESET_SOURCE_FORCE_DEEPSLEEP)
{
#if (CONFIG_SYS_CPU0)
@ -568,6 +575,8 @@ static void handle_system_event(key_event_t event)
#endif
#if (CONFIG_SYS_CPU0)
/*to judgement key is long press or short press; long press exit deepsleep*/
//zhanyu
@ -651,6 +660,11 @@ static void handle_system_event(key_event_t event)
}
#if (CONFIG_SYS_CPU0)
// bk_printf("ispoweron = %d bk_enter_deepsleep();\n",ispoweron);
// if(ispoweron == 0){
// bk_printf("bk_enter_deepsleep()aaa\n");
// bk_enter_deepsleep();
// }
volume = 10;
bk_aud_intf_set_spk_gain(0x29); // 0x30
@ -661,6 +675,7 @@ static void handle_system_event(key_event_t event)
thing_init();
init_bat_timer();
// spi_led_init();
bk_printf("bk_misc_get_reset_reason = 0x%02X \n",bk_misc_get_reset_reason());
bk_printf("VER:1.0.3 2025.05.27\r\n");
#endif
#endif

View File

@ -170,7 +170,7 @@ static bk_err_t prvStartBatteryAdcOneTime()
if (s_battery_main_event_callback && insert_value == 0)
{
bk_printf("ADC bat_value < 3500\r\n");
//s_battery_main_event_callback(EVT_BATTERY_MAIN_LOW_VOLTAGE);
s_battery_main_event_callback(EVT_BATTERY_MAIN_LOW_VOLTAGE);
}
}
@ -218,3 +218,30 @@ void init_bat_timer()
bk_printf("rtos_start_bat_timer fail\r\n");
}
}
void poweron_voice()
{
if (s_battery_main_event_callback)
{
bk_printf("s_battery_main_event_callback(EVT_POWER_ON);\r\n");
s_battery_main_event_callback(EVT_POWER_ON);
}
}
void poweroff_voice()
{
if (s_battery_main_event_callback)
{
bk_printf("s_battery_main_event_callback(EVT_POWER_ON);\r\n");
s_battery_main_event_callback(EVT_POWER_OFF);
}
}

View File

@ -2,8 +2,12 @@ typedef enum{
EVT_BATTERY_MAIN_CHARGING = 0,
EVT_BATTERY_MAIN_LOW_VOLTAGE,
EVT_SHUTDOWN_MAIN_LOW_BATTERY,
EVT_POWER_ON,
EVT_POWER_OFF,
}evt_main_battery;
typedef uint8_t (*battery_main_event_callback_t)(evt_main_battery event_param);
int battery_main_event_callback_register(battery_main_event_callback_t callback);
void init_bat_timer();
void poweron_voice();
void poweroff_voice();

View File

@ -130,6 +130,47 @@ void ble_set_wifi_scan_result(wifi_scan_result_t *result){
//<2F>ش<EFBFBD>WIFI <20>б<EFBFBD>
wifi_boarding_notify((uint8_t *)str_ssid, strlen(str_ssid));
// 封装 AT+RSSI 指令
char str_ssid2[1024] = {0};
strcat(str_ssid2, "AT+RSSI=");
ap_index = 0;
int valid_ssid_count = 0; // 用于记录有效的 SSID 数量
for (int i = 0; i < count; i++)
{
if (strlen(scan_result->aps[i].ssid) > 0)
{
ssid_count_in_scan_result(scan_result->aps[i].ssid);
// if (in_list > 0)
// {
// os_printf("%s already in list for str_ssid2\r\n", scan_result->aps[i].ssid);
// continue;
// }
// 拼接 SSID 和信号强度
char temp[32] = {0};
int ret = sprintf(temp, "%s:%d", scan_result->aps[i].ssid, scan_result->aps[i].rssi);
if (ret < 0) {
// os_printf("Error: sprintf failed for %s\r\n", scan_result->aps[i].ssid);
continue;
}
strcat(str_ssid2, temp);
valid_ssid_count++;
// os_printf("After adding SSID:RSSI %s, str_ssid2: %s\r\n", temp, str_ssid2);
if (i != count - 1)
{
strcat(str_ssid2, ",");
// os_printf("After adding comma, str_ssid2: %s\r\n", str_ssid2);
}
}
}
if (valid_ssid_count == 0) {
// os_printf("No valid SSIDs added to str_ssid2\r\n");
}
os_printf("STR2:%s\r\n", str_ssid2);
// 回复 AT+SSID2 指令结果
wifi_boarding_notify((uint8_t *)str_ssid2, strlen(str_ssid2));
}
#endif

View File

@ -690,6 +690,8 @@ static int bk_genie_reselect_pan(void)
extern void beken_auto_run(void);
extern void ws2812_led_wifi_connected(void);
extern void bk_enter_deepsleep();
extern int ispoweron;
beken_timer_t led_wifi_connected_timer;
static void led_wifi_connected(void *param)
@ -697,6 +699,13 @@ static void led_wifi_connected(void *param)
bk_printf("led_wifi_connected\n");
// bk_printf("ispoweron = %d bk_enter_deepsleep();\n",ispoweron);
// if(ispoweron == 0){
// bk_printf("bk_enter_deepsleep()aaa\n");
// bk_enter_deepsleep();
// }
ws2812_led_wifi_connected();
rtos_stop_timer(&led_wifi_connected_timer);

View File

@ -110,7 +110,7 @@ extern uint32_t volume;
extern uint32_t g_volume_gain[SPK_VOLUME_LEVEL];
extern app_aud_para_t app_aud_cust_para;
bk_err_t beken_rtc_stop(void);//zhanyu
bk_err_t beken_rtc_stop(void); // zhanyu
#if CONFIG_WIFI_ENABLE
extern void rwnxl_set_video_transfer_flag(uint32_t video_transfer_flag);
@ -523,7 +523,7 @@ void rtc_websocket_msg_handle(char *json_text, unsigned int size)
LOGE("Error: Failed to parse JSON text:%s\n", json_text);
return;
}
//bk_printf("rtc_websocket_msg_handle json_text : %s \n",json_text);
// bk_printf("rtc_websocket_msg_handle json_text : %s \n",json_text);
cJSON *type = cJSON_GetObjectItem(root, "type");
if (type == NULL)
{
@ -541,7 +541,8 @@ void rtc_websocket_msg_handle(char *json_text, unsigned int size)
int ret = 200;
if (ret == 200)
{
if(g_connected_flag){//zhanyu
if (g_connected_flag)
{ // zhanyu
return;
}
g_connected_flag = true;
@ -550,16 +551,15 @@ void rtc_websocket_msg_handle(char *json_text, unsigned int size)
smart_config_running = false;
__get_beken_rtc()->disconnecting_state = 0;
//发送设备IOT能力描述到服务器
//rtc_websocket_send_text(client, "", BEKEN_RTC_SEND_IOT_DESC);
// 发送设备IOT能力描述到服务器
// rtc_websocket_send_text(client, "", BEKEN_RTC_SEND_IOT_DESC);
}
else
{
LOGE("join WebSocket server fail\r\n");
}
}
//解析服务器下发的IOT 指令
// 解析服务器下发的IOT 指令
else if (strcmp(type->valuestring, "iot") == 0)
{
thing_iot_invoke(json_text);
@ -673,7 +673,7 @@ int first_abort = 0;
void sent_abort_msg()
{
bk_printf("MEDIA_APP_EVT_ASR_WAKEUP_IND_sent_abort_msg first_abort = %d\n",first_abort);
bk_printf("MEDIA_APP_EVT_ASR_WAKEUP_IND_sent_abort_msg first_abort = %d\n", first_abort);
if (first_abort == 0)
{
first_abort = 1;
@ -693,7 +693,6 @@ void sent_abort_msg()
}
}
// 检查二进制数据接收状态的接口函数
uint8_t get_binary_data_status(void)
{
@ -753,11 +752,11 @@ static bk_err_t init_check_timer(void)
timer_initialized = true;
return 0;
}
//extern bk_err_t audio_tras_deinit(void);zhanyu
// extern bk_err_t audio_tras_deinit(void);zhanyu
void rtc_websocket_event_handler(void *event_handler_arg, char *event_base, int32_t event_id, void *event_data)
{
bk_websocket_event_data_t *data = (bk_websocket_event_data_t *)event_data;
//transport client = (transport)event_handler_arg;//zhanyu
// transport client = (transport)event_handler_arg;//zhanyu
client = (transport)event_handler_arg;
switch (event_id)
{
@ -778,22 +777,21 @@ void rtc_websocket_event_handler(void *event_handler_arg, char *event_base, int3
LOGE("Disconnected from WebSocket server\r\n");
g_connected_flag = false;
__get_beken_rtc()->disconnecting_state++;
if (__get_beken_rtc()->disconnecting_state == 1){
if (__get_beken_rtc()->disconnecting_state == 1)
{
app_event_send_msg(APP_EVT_RTC_CONNECTION_LOST, 0);
}
// beken_rtc_stop();//zhanyu
//audio_tras_deinit();
// audio_tras_deinit();
break;
case WEBSOCKET_EVENT_CLOSED:
bk_printf("WEBSOCKET_EVENT_CLOSED~~~~\n");
beken_rtc_stop();//zhanyu
//audio_tras_deinit();
beken_rtc_stop(); // zhanyu
// audio_tras_deinit();
break;
case WEBSOCKET_EVENT_DATA:
LOGD("data from WebSocket server, len:%d op:%d\r\n", data->data_len, data->op_code);
if (data->op_code == WS_TRANSPORT_OPCODES_BINARY)
@ -835,7 +833,7 @@ void beken_rtc_main(void)
bk_printf("headers = %s\r\n", headers);
websocket_cfg.headers = headers;
websocket_cfg.uri = "wss://xiaozhi.xa-poka.com/websocket/xiaozhi/v1/";
//websocket_cfg.uri = "ws://43.139.216.160:8000/xiaozhi/v1/";
// websocket_cfg.uri = "ws://43.139.216.160:8000/xiaozhi/v1/";
websocket_cfg.ws_event_handler = rtc_websocket_event_handler;
rtc_session *rtc_session = rtc_websocket_create(&websocket_cfg, rtc_user_audio_rx_data_handle, &audio_info);
if (rtc_session == NULL)
@ -923,8 +921,6 @@ bk_err_t beken_rtc_stop(void)
return BK_OK;
}
static bk_err_t beken_rtc_start(void)
{
bk_printf("beken_rtc_start2222~~~\n");
@ -1042,4 +1038,3 @@ void cli_beken_rtc_test_cmd(char *pcWriteBuffer, int xWriteBufferLen, int argc,
cmd_fail:
cli_beken_rtc_help();
}