620 lines
21 KiB
C
Executable File
620 lines
21 KiB
C
Executable File
#include <common/sys_config.h>
|
||
#include <components/log.h>
|
||
#include <modules/wifi.h>
|
||
#include <components/netif.h>
|
||
#include <components/event.h>
|
||
#include <string.h>
|
||
|
||
#include "bk_private/bk_init.h"
|
||
#include <components/system.h>
|
||
#include <os/os.h>
|
||
#include <os/mem.h>
|
||
#include <modules/pm.h>
|
||
|
||
#include "app_event.h"
|
||
#include "media_app.h"
|
||
#include "led_blink.h"
|
||
|
||
#include "countdown.h"
|
||
#include "components/bluetooth/bk_dm_bluetooth.h"
|
||
#include "boarding_service.h"
|
||
#include "bk_factory_config.h"
|
||
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
|
||
#include "aud_intf.h"
|
||
#include "aud_intf_types.h"
|
||
#endif
|
||
#include "bat_monitor.h"
|
||
#include "bk_ota_private.h"
|
||
#define TAG "app_evt"
|
||
|
||
#define LOGI(...) BK_LOGI(TAG, ##__VA_ARGS__)
|
||
#define LOGW(...) BK_LOGW(TAG, ##__VA_ARGS__)
|
||
#define LOGE(...) BK_LOGE(TAG, ##__VA_ARGS__)
|
||
#define LOGD(...) BK_LOGD(TAG, ##__VA_ARGS__)
|
||
|
||
|
||
typedef struct
|
||
{
|
||
beken_thread_t thread;
|
||
beken_queue_t queue;
|
||
} app_evt_info_t;
|
||
|
||
typedef struct
|
||
{
|
||
uint32_t event;
|
||
uint32_t param;
|
||
} app_evt_msg_t;
|
||
|
||
extern void lvgl_app_init(void);
|
||
extern void lvgl_app_deinit(void);
|
||
extern bk_err_t byte_stop(void);
|
||
|
||
|
||
static app_evt_info_t app_evt_info;
|
||
|
||
|
||
|
||
|
||
bk_err_t app_event_send_msg(uint32_t event, uint32_t param)
|
||
{
|
||
bk_err_t ret;
|
||
app_evt_msg_t msg;
|
||
|
||
msg.event = event;
|
||
msg.param = param;
|
||
|
||
ret = rtos_push_to_queue(&app_evt_info.queue, &msg, BEKEN_NO_WAIT);
|
||
if (BK_OK != ret)
|
||
{
|
||
LOGE("%s, %d : %d fail \n", __func__, __LINE__, event);
|
||
return BK_FAIL;
|
||
}
|
||
|
||
return BK_FAIL;
|
||
}
|
||
|
||
void app_event_asr_evt_callback(media_app_evt_type_t event, uint32_t param)
|
||
{
|
||
LOGD("asr event callback: %x\n", event);
|
||
|
||
/*Do not do anything blocking here */
|
||
|
||
switch (event)
|
||
{
|
||
case MEDIA_APP_EVT_ASR_WAKEUP_IND:
|
||
app_event_send_msg(APP_EVT_ASR_WAKEUP, 0);
|
||
break;
|
||
case MEDIA_APP_EVT_ASR_STANDBY_IND:
|
||
app_event_send_msg(APP_EVT_ASR_STANDBY, 0);
|
||
break;
|
||
}
|
||
}
|
||
|
||
static uint8_t ota_event_callback(evt_ota event_param)
|
||
{
|
||
|
||
switch(event_param)
|
||
{
|
||
case EVT_OTA_START:
|
||
app_event_send_msg(APP_EVT_OTA_START, 0);
|
||
break;
|
||
case EVT_OTA_FAIL:
|
||
app_event_send_msg(APP_EVT_OTA_FAIL, 0);
|
||
break;
|
||
case EVT_OTA_SUCCESS:
|
||
app_event_send_msg(APP_EVT_OTA_SUCCESS, 0);
|
||
break;
|
||
default :
|
||
break;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
static uint8_t battery_event_callback(evt_battery event_param)
|
||
{
|
||
switch(event_param)
|
||
{
|
||
case EVT_BATTERY_CHARGING:
|
||
app_event_send_msg(APP_EVT_CHARGING, 0);
|
||
break;
|
||
case EVT_BATTERY_LOW_VOLTAGE:
|
||
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);
|
||
break;
|
||
default :
|
||
break;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
#if CONFIG_OTA_DISPLAY_PICTURE_DEMO
|
||
extern bk_err_t audio_turn_on(void);
|
||
bk_err_t bk_ota_reponse_state_to_audio(int ota_state)
|
||
{
|
||
int ret = BK_FAIL;
|
||
LOGI("%s ota_state :%d\n", __func__,ota_state);
|
||
if(audio_turn_on() != BK_OK)
|
||
{
|
||
LOGE("%s audion turn off :%d\n", __func__);
|
||
return ret;
|
||
}
|
||
|
||
switch (ota_state)
|
||
{
|
||
case APP_EVT_OTA_SUCCESS : //success
|
||
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
|
||
ret = bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_OTA_UPDATE_SUCCESS);
|
||
#endif
|
||
break;
|
||
case APP_EVT_OTA_FAIL : //fail
|
||
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
|
||
ret = bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_OTA_UPDATE_FAIL);
|
||
#endif
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
LOGI("%s complete %x\n", __func__, ret);
|
||
return ret;
|
||
}
|
||
#endif
|
||
|
||
//red:if high priority conflicts with low-priority, should stay at high priority states
|
||
enum {
|
||
WARNING_PROVIOSION_FAIL, //LED_FAST_BLINK_RED
|
||
WARNING_WIFI_FAIL, //LED_FAST_BLINK_RED
|
||
WARNING_RTC_CONNECT_LOST, //LED_FAST_BLINK_RED
|
||
WARNING_AGENT_OFFLINE, //LED_FAST_BLINK_RED
|
||
WARNING_AGENT_AGENT_START_FAIL, //LED_FAST_BLINK_RED
|
||
|
||
WARNING_LOW_BATTERY, //LED_SLOW_BLINK_RED
|
||
}warning_t;
|
||
#define HIGH_PRIORITY_WARNING_MASK ((1<<WARNING_PROVIOSION_FAIL) | (1<<WARNING_WIFI_FAIL) | (1<<WARNING_RTC_CONNECT_LOST) | (1<<WARNING_AGENT_OFFLINE) | (1<<WARNING_AGENT_AGENT_START_FAIL))
|
||
#define LOW_PRIORITY_WARNING_MASK ((1<<WARNING_LOW_BATTERY))
|
||
#define AI_RTC_CONNECT_LOST_FAIL (1<<WARNING_RTC_CONNECT_LOST)
|
||
#define AI_AGENT_OFFLINE_FAIL (1<<WARNING_AGENT_OFFLINE)
|
||
#define WIFI_FAIL (1<<WARNING_WIFI_FAIL)
|
||
//green led, or red/green alternate led
|
||
enum {
|
||
INDICATES_WIFI_RECONNECT, //LED_FAST_BLINK_GREEN
|
||
INDICATES_PROVISIONING, //LED_REG_GREEN_ALTERNATE
|
||
INDICATES_POWER_ON, //LED_ON_GREEN default at power-on state, so green is always on
|
||
INDICATES_STANDBY, //LED_SLOW_BLINK_GREEN
|
||
INDICATES_AGENT_CONNECT, //LED_FAST_BLINK_GREEN at WIFI connection but no access to the AI AGENT
|
||
}indicates_t;
|
||
|
||
|
||
#define COUNTDOWN_INFINITE 0xFFFFFFFF
|
||
/* 新增倒计时票源类型,按照优先级排序*/
|
||
typedef enum {
|
||
COUNTDOWN_TICKET_PROVISIONING, // 配网倒计时(5分钟), 最高优先级
|
||
COUNTDOWN_TICKET_NETWORK_ERROR, //网络错误倒计时(5分钟) ,中优先级
|
||
COUNTDOWN_TICKET_STANDBY, // 待机倒计时(3分钟),低优先级
|
||
COUNTDOWN_TICKET_OTA, // OTA 事件,特殊逻辑,不参与比较
|
||
COUNTDOWN_TICKET_MAX
|
||
} countdown_ticket_t;
|
||
|
||
/* 各票源对应的倒计时时长(毫秒) */
|
||
static const uint32_t s_ticket_durations[COUNTDOWN_TICKET_MAX] = {
|
||
[COUNTDOWN_TICKET_PROVISIONING] = 5 * 60 * 1000, // 5分钟
|
||
[COUNTDOWN_TICKET_NETWORK_ERROR] = 5 * 60 * 1000, // 5分钟
|
||
[COUNTDOWN_TICKET_STANDBY] = 3 * 60 * 1000, // 3分钟
|
||
[COUNTDOWN_TICKET_OTA] = COUNTDOWN_INFINITE, // 暂停倒计时
|
||
};
|
||
|
||
static uint32_t s_active_tickets = 0; // 使用位掩码记录活跃票源
|
||
|
||
/* 更新倒计时状态 */
|
||
static void update_countdown()
|
||
{
|
||
|
||
// 检查OTA暂停票(最高优先级)
|
||
if(s_active_tickets & (1 << COUNTDOWN_TICKET_OTA)) {
|
||
LOGI("ota event start, stop countdown\r\n");
|
||
stop_countdown();
|
||
return;
|
||
}
|
||
|
||
static countdown_ticket_t last_selected_ticket = COUNTDOWN_TICKET_MAX;
|
||
countdown_ticket_t selected_ticket = COUNTDOWN_TICKET_MAX;
|
||
|
||
|
||
for(int i = 0; i < COUNTDOWN_TICKET_MAX; i++) {
|
||
if (i == COUNTDOWN_TICKET_OTA)
|
||
continue;
|
||
|
||
if(s_active_tickets & (1 << i))
|
||
{
|
||
selected_ticket = i;
|
||
break;
|
||
}
|
||
}
|
||
|
||
// 应用倒计时裁决结果
|
||
if(selected_ticket != COUNTDOWN_TICKET_MAX) {
|
||
const uint32_t max_duration = s_ticket_durations[selected_ticket];
|
||
|
||
bool is_same_event = (selected_ticket == last_selected_ticket);
|
||
bool is_network_error = (selected_ticket == COUNTDOWN_TICKET_NETWORK_ERROR);
|
||
|
||
if (selected_ticket != last_selected_ticket || (is_same_event && !is_network_error))
|
||
{
|
||
const uint32_t duration = max_duration;
|
||
start_countdown(duration);
|
||
LOGI("selected_ticket is %d, last_selected_ticket is %d,duration is %d\r\n",selected_ticket , last_selected_ticket, duration);
|
||
last_selected_ticket = selected_ticket;
|
||
}
|
||
} else {
|
||
LOGI("selected_ticket is %d, COUNTDOWN_TICKET_MAX is %d\r\n",selected_ticket , COUNTDOWN_TICKET_MAX);
|
||
LOGI("stop countdown\r\n");
|
||
stop_countdown();
|
||
last_selected_ticket = COUNTDOWN_TICKET_MAX;
|
||
}
|
||
|
||
}
|
||
|
||
static void led_blink(uint32_t* warning_state, uint32_t indicates_state)
|
||
{
|
||
static uint32_t last_warning_state = 0;
|
||
static uint32_t last_indicates_state = (1<<INDICATES_POWER_ON);
|
||
|
||
//indicates
|
||
if(indicates_state & (1<<INDICATES_PROVISIONING))
|
||
{
|
||
led_app_set(LED_REG_GREEN_ALTERNATE, LED_LAST_FOREVER);
|
||
}else if (HIGH_PRIORITY_WARNING_MASK & (*warning_state))
|
||
{
|
||
led_app_set(LED_OFF_GREEN, 0);
|
||
}else{
|
||
if(indicates_state & ((1<<INDICATES_WIFI_RECONNECT) | (1<<INDICATES_AGENT_CONNECT)))
|
||
{
|
||
led_app_set(LED_FAST_BLINK_GREEN, LED_LAST_FOREVER);
|
||
}else if(indicates_state & (1<<INDICATES_STANDBY))
|
||
{
|
||
led_app_set(LED_SLOW_BLINK_GREEN, LED_LAST_FOREVER);
|
||
}else
|
||
{
|
||
led_app_set(LED_OFF_GREEN, 0);
|
||
}
|
||
}
|
||
|
||
//warning
|
||
if (indicates_state & (1<<INDICATES_PROVISIONING))
|
||
{
|
||
;
|
||
}else if(HIGH_PRIORITY_WARNING_MASK & (*warning_state)){
|
||
led_app_set(LED_FAST_BLINK_RED, LED_LAST_FOREVER);
|
||
}else if(LOW_PRIORITY_WARNING_MASK & (*warning_state)){
|
||
led_app_set(LED_SLOW_BLINK_RED, LOW_VOLTAGE_BLINK_TIME);
|
||
*warning_state = *warning_state & ~(1<<WARNING_LOW_BATTERY);
|
||
}else{
|
||
led_app_set(LED_OFF_RED, 0);
|
||
}
|
||
|
||
if(indicates_state != last_indicates_state)
|
||
{
|
||
LOGI("indicate=%d,last_indicat=%d,warning_state=%d\r\n", indicates_state, last_indicates_state, *warning_state);
|
||
last_indicates_state = indicates_state;
|
||
}
|
||
|
||
if(*warning_state != last_warning_state)
|
||
{
|
||
LOGI("warning=%d,last_warning=%d,indicate=%d\r\n", *warning_state, last_warning_state, indicates_state);
|
||
last_warning_state = *warning_state;
|
||
}
|
||
|
||
}
|
||
|
||
static void app_event_thread(beken_thread_arg_t data)
|
||
{
|
||
int ret = BK_OK;
|
||
|
||
uint32_t is_standby = 1;
|
||
uint32_t is_joined_agent = 0;
|
||
|
||
uint32_t warning_state = 0;
|
||
uint32_t indicates_state = (1<<INDICATES_POWER_ON);
|
||
|
||
// uint32_t network_err = 0;
|
||
uint32_t is_network_provisioning = 0;
|
||
|
||
s_active_tickets = (1 << COUNTDOWN_TICKET_STANDBY);
|
||
ota_event_callback_register(ota_event_callback);
|
||
update_countdown();
|
||
|
||
battery_event_callback_register(battery_event_callback);
|
||
media_app_asr_evt_register_callback(app_event_asr_evt_callback);
|
||
|
||
while (1)
|
||
{
|
||
app_evt_msg_t msg;
|
||
|
||
ret = rtos_pop_from_queue(&app_evt_info.queue, &msg, BEKEN_WAIT_FOREVER);
|
||
|
||
if (ret == BK_OK)
|
||
{
|
||
bool skip_countdown_update = false;
|
||
switch (msg.event)
|
||
{
|
||
case APP_EVT_ASR_WAKEUP: //hi armino
|
||
is_standby = 0;
|
||
indicates_state &= ~(1<<INDICATES_STANDBY);
|
||
s_active_tickets &= ~(1 << COUNTDOWN_TICKET_STANDBY);
|
||
LOGI("APP_EVT_ASR_WAKEUP\n");
|
||
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
|
||
bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_ASR_WAKEUP);
|
||
#endif
|
||
bk_pm_module_vote_cpu_freq(PM_DEV_ID_AUDIO, PM_CPU_FRQ_480M);
|
||
bk_wifi_sta_pm_disable();
|
||
lvgl_app_init();
|
||
//TODO optimize
|
||
if (!is_network_provisioning){
|
||
led_app_set(LED_OFF_GREEN,0);
|
||
}
|
||
break;
|
||
case APP_EVT_ASR_STANDBY: //byebye armino
|
||
is_standby = 1;
|
||
indicates_state |= (1<<INDICATES_STANDBY);
|
||
s_active_tickets |= (1 << COUNTDOWN_TICKET_STANDBY);
|
||
LOGI("APP_EVT_ASR_STANDBY\n");
|
||
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
|
||
bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_ASR_STANDBY);
|
||
#endif
|
||
lvgl_app_deinit();
|
||
bk_wifi_sta_pm_enable();
|
||
bk_pm_module_vote_cpu_freq(PM_DEV_ID_AUDIO, PM_CPU_FRQ_240M);
|
||
break;
|
||
|
||
//-------------------network event start ------------------------------------------------------------------
|
||
/*
|
||
* Network abnormal event:APP_EVT_NETWORK_PROVISIONING_FAIL/APP_EVT_RECONNECT_NETWORK_FAIL/APP_EVT_RTC_CONNECTION_LOST/APP_EVT_AGENT_OFFLINE
|
||
* Network resotre event:APP_EVT_AGENT_JOINED
|
||
* If network retore event APP_EVT_AGENT_JOINED comes, it means all of the network abnormal event can be stop
|
||
*/
|
||
case APP_EVT_NETWORK_PROVISIONING:
|
||
LOGI("APP_EVT_NETWORK_PROVISIONING\n");
|
||
is_network_provisioning = 1;
|
||
//优先级最高
|
||
s_active_tickets &= ~(1 << COUNTDOWN_TICKET_NETWORK_ERROR);
|
||
s_active_tickets |= (1 << COUNTDOWN_TICKET_PROVISIONING);
|
||
indicates_state |= (1<<INDICATES_PROVISIONING);
|
||
indicates_state &= ~((1<<INDICATES_AGENT_CONNECT) | (1<<INDICATES_POWER_ON) | (1<<INDICATES_WIFI_RECONNECT));
|
||
warning_state &= ~ (HIGH_PRIORITY_WARNING_MASK);
|
||
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
|
||
bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_NETWORK_PROVISION);
|
||
#endif
|
||
break;
|
||
|
||
case APP_EVT_NETWORK_PROVISIONING_SUCCESS:
|
||
indicates_state &= ~(1<<INDICATES_PROVISIONING);
|
||
indicates_state |= (1<<INDICATES_AGENT_CONNECT);
|
||
warning_state &= ~(1<<WARNING_PROVIOSION_FAIL);
|
||
s_active_tickets &= ~(1 << COUNTDOWN_TICKET_PROVISIONING);
|
||
// s_active_tickets |= (1 << COUNTDOWN_TICKET_STANDBY);
|
||
LOGI("APP_EVT_NETWORK_PROVISIONING_SUCCESS\n");
|
||
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
|
||
bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_NETWORK_PROVISION_SUCCESS);
|
||
#endif
|
||
break;
|
||
|
||
case APP_EVT_NETWORK_PROVISIONING_FAIL:
|
||
LOGI("APP_EVT_NETWORK_PROVISIONING_FAIL\n");
|
||
// network_err = 1;
|
||
s_active_tickets &= ~(1 << COUNTDOWN_TICKET_PROVISIONING);
|
||
s_active_tickets |= (1 << COUNTDOWN_TICKET_NETWORK_ERROR);
|
||
indicates_state &= ~(1<<INDICATES_PROVISIONING);
|
||
warning_state |= 1<<WARNING_PROVIOSION_FAIL;
|
||
|
||
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
|
||
bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_NETWORK_PROVISION_FAIL);
|
||
#endif
|
||
break;
|
||
|
||
case APP_EVT_RECONNECT_NETWORK:
|
||
LOGI("APP_EVT_RECONNECT_NETWORK\n");
|
||
warning_state &= ~(1<<WARNING_WIFI_FAIL);
|
||
indicates_state |= (1<<INDICATES_WIFI_RECONNECT);
|
||
indicates_state &= ~(1<<INDICATES_POWER_ON);
|
||
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
|
||
bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_RECONNECT_NETWORK);
|
||
#endif
|
||
break;
|
||
|
||
case APP_EVT_RECONNECT_NETWORK_SUCCESS:
|
||
LOGI("APP_EVT_RECONNECT_NETWORK_SUCCESS\n");
|
||
s_active_tickets &= ~(1 << COUNTDOWN_TICKET_PROVISIONING);
|
||
if (warning_state & WIFI_FAIL)
|
||
{
|
||
if (is_joined_agent && is_standby)
|
||
{
|
||
indicates_state |= (1<<INDICATES_STANDBY);
|
||
}
|
||
|
||
}else{
|
||
indicates_state |= (1<<INDICATES_AGENT_CONNECT);
|
||
}
|
||
|
||
warning_state &= ~(1<<WARNING_WIFI_FAIL);
|
||
indicates_state &= ~(1<<INDICATES_WIFI_RECONNECT);
|
||
|
||
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
|
||
bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_RECONNECT_NETWORK_SUCCESS);
|
||
#endif
|
||
break;
|
||
|
||
case APP_EVT_RECONNECT_NETWORK_FAIL:
|
||
s_active_tickets |= (1 << COUNTDOWN_TICKET_NETWORK_ERROR);
|
||
LOGI("APP_EVT_RECONNECT_NETWORK_FAIL\n");
|
||
// network_err = 1;
|
||
warning_state |= 1<<WARNING_WIFI_FAIL;
|
||
indicates_state &= ~(1<<INDICATES_WIFI_RECONNECT);
|
||
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
|
||
bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_RECONNECT_NETWORK_FAIL);
|
||
#endif
|
||
break;
|
||
|
||
case APP_EVT_RTC_CONNECTION_LOST:
|
||
// network_err = 1;
|
||
LOGI("APP_EVT_RTC_CONNECTION_LOST\n");
|
||
warning_state |= 1<<WARNING_RTC_CONNECT_LOST;
|
||
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
|
||
bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_RTC_CONNECTION_LOST);
|
||
#endif
|
||
break;
|
||
|
||
|
||
case APP_EVT_RTC_REJOIN_SUCCESS:
|
||
LOGI("APP_EVT_RTC_REJOIN_SUCCESS\n");
|
||
warning_state &= ~(1<<WARNING_RTC_CONNECT_LOST);
|
||
if (is_joined_agent && is_standby)
|
||
{
|
||
indicates_state |= (1<<INDICATES_STANDBY);
|
||
}
|
||
break;
|
||
|
||
case APP_EVT_AGENT_JOINED: //doesn't know whether restore from error
|
||
is_joined_agent = 1;
|
||
s_active_tickets &= ~(1 << COUNTDOWN_TICKET_NETWORK_ERROR);
|
||
indicates_state &= ~(1<<INDICATES_AGENT_CONNECT);
|
||
warning_state &= ~((1<<WARNING_RTC_CONNECT_LOST) | (1<<WARNING_AGENT_OFFLINE) | (1<<WARNING_WIFI_FAIL) | 1<<WARNING_AGENT_AGENT_START_FAIL);
|
||
LOGI("APP_EVT_AGENT_JOINED \n");
|
||
//TODO optimize
|
||
is_network_provisioning = 0;
|
||
indicates_state &= ~(1<<INDICATES_PROVISIONING);
|
||
if(is_standby) //mie
|
||
{
|
||
indicates_state |= (1<<INDICATES_STANDBY);
|
||
}
|
||
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
|
||
bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_AGENT_JOINED);
|
||
#endif
|
||
break;
|
||
case APP_EVT_AGENT_OFFLINE:
|
||
// network_err = 1;
|
||
is_joined_agent = 0;
|
||
s_active_tickets |= (1 << COUNTDOWN_TICKET_NETWORK_ERROR);
|
||
LOGI("APP_EVT_AGENT_OFFLINE\n");
|
||
warning_state |= 1<<WARNING_AGENT_OFFLINE;
|
||
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
|
||
bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_AGENT_OFFLINE);
|
||
#endif
|
||
break;
|
||
|
||
case APP_EVT_AGENT_START_FAIL:
|
||
s_active_tickets |= (1 << COUNTDOWN_TICKET_NETWORK_ERROR);
|
||
LOGI("APP_EVT_AGENT_START_FAIL\n");
|
||
warning_state |= 1<<WARNING_AGENT_AGENT_START_FAIL;
|
||
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
|
||
bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_AGENT_START_FAIL);
|
||
#endif
|
||
break;
|
||
|
||
case APP_EVT_AGENT_DEVICE_REMOVE:
|
||
LOGI("APP_EVT_AGENT_DEVICE_REMOVE\n");
|
||
byte_stop();
|
||
break;
|
||
|
||
//-------------------network event end ------------------------------------------------------------------////
|
||
|
||
|
||
case APP_EVT_LOW_VOLTAGE:
|
||
LOGI("APP_EVT_LOW_VOLTAGE\n");
|
||
skip_countdown_update = true;
|
||
warning_state |= 1<<WARNING_LOW_BATTERY;
|
||
#if CONFIG_AUD_INTF_SUPPORT_PROMPT_TONE
|
||
bk_aud_intf_voc_play_prompt_tone(AUD_INTF_VOC_LOW_VOLTAGE);
|
||
#endif
|
||
break;
|
||
|
||
case APP_EVT_CHARGING:
|
||
LOGI("APP_EVT_CHARGING\n");
|
||
skip_countdown_update = true;
|
||
warning_state &= ~(1<<WARNING_LOW_BATTERY);
|
||
break;
|
||
|
||
case APP_EVT_SHUTDOWN_LOW_BATTERY:
|
||
LOGI("APP_EVT_SHUTDOWN_LOW_BATTERY\n");
|
||
skip_countdown_update = true;
|
||
bk_config_sync_flash();
|
||
break;
|
||
|
||
case APP_EVT_CLOSE_BLUETOOTH:
|
||
LOGI("APP_EVT_CLOSE_BLUETOOTH\n");
|
||
bk_genie_boarding_deinit();
|
||
bk_bluetooth_deinit();
|
||
break;
|
||
|
||
// OTA相关事件
|
||
case APP_EVT_OTA_START:
|
||
LOGI("APP_EVT_OTA_START\n");
|
||
s_active_tickets |= (1 << COUNTDOWN_TICKET_OTA);
|
||
break;
|
||
|
||
case APP_EVT_OTA_SUCCESS:
|
||
LOGI("APP_EVT_OTA_SUCCESS\n");
|
||
s_active_tickets &= ~(1 << COUNTDOWN_TICKET_OTA);
|
||
#if CONFIG_OTA_DISPLAY_PICTURE_DEMO
|
||
bk_ota_reponse_state_to_audio(msg.event);
|
||
#endif
|
||
break;
|
||
|
||
case APP_EVT_OTA_FAIL:
|
||
LOGI("APP_EVT_OTA_FAIL\n");
|
||
s_active_tickets &= ~(1 << COUNTDOWN_TICKET_OTA);
|
||
#if CONFIG_OTA_DISPLAY_PICTURE_DEMO
|
||
bk_ota_reponse_state_to_audio(msg.event);
|
||
#endif
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
if(!skip_countdown_update)
|
||
{
|
||
update_countdown();
|
||
}
|
||
|
||
//led blink by states
|
||
led_blink(&warning_state, indicates_state);
|
||
}
|
||
}
|
||
|
||
LOGI("%s, exit\r\n", __func__);
|
||
rtos_delete_thread(NULL);
|
||
}
|
||
|
||
|
||
|
||
void app_event_init(void)
|
||
{
|
||
int ret = BK_FAIL;
|
||
|
||
os_memset(&app_evt_info, 0, sizeof(app_evt_info_t));
|
||
|
||
ret = rtos_init_queue(&app_evt_info.queue,
|
||
"ae_queue",
|
||
sizeof(app_evt_msg_t),
|
||
15);
|
||
|
||
if (ret != BK_OK)
|
||
{
|
||
LOGE("%s, init queue failed\r\n", __func__);
|
||
return;
|
||
}
|
||
|
||
ret = rtos_create_thread(&app_evt_info.thread,
|
||
BEKEN_DEFAULT_WORKER_PRIORITY - 1,
|
||
"ae_thread",
|
||
(beken_thread_function_t)app_event_thread,
|
||
1024 * 4,
|
||
NULL);
|
||
|
||
if (ret != BK_OK)
|
||
{
|
||
LOGE("%s, init thread failed\r\n", __func__);
|
||
return;
|
||
}
|
||
}
|