doubao_chat/apps/demo/demo_DevKitBoard/app_main.c

290 lines
10 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "app_config.h"
#include "system/includes.h"
#include "os/os_api.h"
#include "event/net_event.h"
#include "wifi/wifi_connect.h"
#include "net/config_network.h"
#include "event/key_event.h"
#include "event/device_event.h"
#include "app_power_manage.h"
/*中断列表 */
const struct irq_info irq_info_table[] = {
//中断号 //优先级0-7 //注册的cpu(0或1)
#ifdef CONFIG_IPMASK_ENABLE
//不可屏蔽中断方法:支持写flash,但中断函数和调用函数和const要全部放在内部ram
{ IRQ_SOFT5_IDX, 6, 0 }, //此中断强制注册到cpu0
{ IRQ_SOFT4_IDX, 6, 1 }, //此中断强制注册到cpu1
#if 0 //如下,SPI1使用不可屏蔽中断设置,优先级固定7
{ IRQ_SPI1_IDX, 7, 1 },//中断强制注册到cpu0/1
#endif
#endif
#if CPU_CORE_NUM == 1
{ IRQ_SOFT5_IDX, 7, 0 }, //此中断强制注册到cpu0
{ IRQ_SOFT4_IDX, 7, 1 }, //此中断强制注册到cpu1
{ -2, -2, -2 },//如果加入了该行, 那么只有该行之前的中断注册到对应核, 其他所有中断强制注册到CPU0
#endif
{ -1, -1, -1 },
};
/*任务列表 */
const struct task_info task_info_table[] = {
{"init", 30, 512, 256 },
{"app_core", 15, 1024, 256 },
{"sys_event", 29, 512, 0 },
{"systimer", 14, 256, 0 },
{"sys_timer", 9, 512, 64 },
{"mp3_encoder", 13, 768, 0 },
{"jla_encoder", 13, 768, 0 },
{"audio_server", 16, 512, 64 },
{"audio_mix", 28, 512, 0 },
{"audio_decoder", 30, 1024, 64 },
{"audio_encoder", 12, 384, 64 },
{"speex_encoder", 10, 1024, 0 },
{"opus_encoder", 10, 1536, 0 },
{"ogg_encoder", 10, 1536, 0 },
{"vir_dev_task", 13, 256, 0 },
{"wechat_task", 18, 2048, 64 },
{"amr_encoder", 16, 1024, 0 },
{"cvsd_encoder", 13, 512, 0 },
{"vad_encoder", 16, 1024, 0 },
{"aec_encoder", 13, 1024, 0 },
{"dns_encoder", 13, 512, 0 },
{"adpcm_encoder", 13, 512, 0 },
{"msbc_encoder", 13, 256, 0 },
{"echo_deal", 11, 1024, 32 },
{"sbc_encoder", 13, 512, 0 },
{"usb_server", 20, 1024, 64 },
#if CPU_CORE_NUM > 1
{"#C0usb_msd0", 1, 512, 128 },
#else
{"usb_msd0", 1, 512, 128 },
#endif
{"usb_msd1", 1, 512, 128 },
{"uac_sync", 20, 512, 0 },
{"uac_play", 7, 768, 0 },
{"uac_record", 7, 768, 32 },
{"uda_main", 2, 7000, 0 },
#ifdef CONFIG_BT_ENABLE
#if CPU_CORE_NUM > 1
{"#C0btencry", 16, 512, 128 },
{"#C0btctrler", 19, 512, 384 },
{"#C0btstack", 18, 1024, 384 },
#else
{"btencry", 14, 512, 128 },
{"btctrler", 19, 512, 384 },
{"btstack", 18, 768, 384 },
#endif
#endif
{"tcpip_thread", 16, 800, 0},
#ifdef CONFIG_WIFI_ENABLE
{"tasklet", 10, 1400, 0},//通过调节任务优先级平衡WIFI收发占据总CPU的比重
{"RtmpMlmeTask", 17, 700, 0},
{"RtmpCmdQTask", 17, 300, 0},
{"wl_rx_irq_thread", 5, 256, 0},
#endif
#ifdef CONFIG_UI_ENABLE
{"ui", 21, 768, 256 },
{"lcd_task_0", 9, 1024, 32 },
{"lcd_task_1", 9, 1024, 32 },
{"te_task", 10, 1024, 32 },
#endif
{"update", 21, 512, 32 },
{"dw_update", 21, 512, 32 },
{"iperf_test", 15, 1024, 0 },
{"ai_server", 15, 1024, 64 },
{"asr_server", 15, 1024, 64 },
{"wake-on-voice", 7, 1024, 0 },
{"resample_task", 8, 1024, 0 },
{"video_server", 26, 800, 1024 },
{"vpkg_server", 26, 512, 512 },
{"jpg_dec", 27, 1024, 32 },
{"jpg_spec_enc", 27, 1024, 32 },
{"dynamic_huffman0", 15, 256, 32 },
{"video0_rec0", 25, 512, 512 },
{"video0_rec1", 24, 512, 512 },
{"video1_rec0", 25, 512, 512 },
{"video1_rec1", 24, 512, 512 },
{"video2_rec0", 25, 512, 512 },
{"video2_rec1", 24, 512, 512 },
{"audio_rec0", 22, 256, 256 },
{"audio_rec1", 19, 256, 256 },
{"avi0", 29, 320, 64 },
{"avi1", 29, 320, 64 },
{"avi2", 29, 320, 64 },
{"ctp_server", 26, 600, 64 },
{"net_video_server", 16, 256, 64 },
{"net_avi0", 24, 600, 0 },
{"net_avi1", 24, 600, 0 },
{"net_avi2", 24, 600, 0 },
{"stream_avi0", 18, 600, 0 },
{"stream_avi1", 18, 600, 0 },
{"stream_avi2", 18, 600, 0 },
{"video_dec_server", 27, 1024, 1024 },
{"vunpkg_server", 23, 1024, 128 },
{"yuv_task", 22, 1024, 128 },
{"wyuv_task", 22, 1024, 128 },
{0, 0, 0, 0, 0},
};
static int app_demo_state_machine(struct application *app, enum app_state state, struct intent *it)
{
return 0;
}
static int doubao_key_click(struct key_event *key)
{
/* printf("key->value%d\n",key->value); */
switch (key->value) {
case KEY_OK:
printf("app_event_handler[in %s task] SYS_KEY_EVENT %d \r\n", os_current_task(), key->value);
extern OS_SEM voice_start_sem;
os_sem_set(&voice_start_sem,0);
os_sem_post(&voice_start_sem);
break;
default:
break;
}
return false;
}
static int doubao_key_event_handler(struct key_event *key)
{
int ret = false;
switch (key->action) {
case KEY_EVENT_CLICK:
ret = doubao_key_click(key);
break;
default:
break;
}
return ret;
}
static int app_demo_event_handler(struct application *app, struct sys_event *sys_event)
{
switch (sys_event->type) {
case SYS_NET_EVENT:
#ifdef USE_DEMO_WIFI_TEST
struct net_event *net_event = (struct net_event *)sys_event->payload;
if (!ASCII_StrCmp(net_event->arg, "net", 4)) {
switch (net_event->event) {
case NET_CONNECT_TIMEOUT_NOT_FOUND_SSID:
puts("app_demo_event_handler recv NET_CONNECT_TIMEOUT_NOT_FOUND_SSID \r\n");
break;
case NET_CONNECT_ASSOCIAT_FAIL:
puts("app_demo_event_handler recv NET_CONNECT_ASSOCIAT_FAIL \r\n");
break;
case NET_EVENT_SMP_CFG_FIRST:
puts("app_demo_event_handler recv NET_EVENT_SMP_CFG_FIRST \r\n");
break;
case NET_EVENT_SMP_CFG_FINISH:
puts("app_demo_event_handler recv NET_EVENT_SMP_CFG_FINISH \r\n");
if (is_in_config_network_state()) {
config_network_stop();
}
config_network_connect();
break;
case NET_EVENT_CONNECTED:
puts("app_demo_event_handler recv NET_EVENT_CONNECTED \r\n");
extern void config_network_broadcast(void);
config_network_broadcast();
break;
case NET_EVENT_DISCONNECTED:
puts("app_demo_event_handler recv NET_EVENT_DISCONNECTED \r\n");
break;
case NET_EVENT_SMP_CFG_TIMEOUT:
puts("app_demo_event_handler recv NET_EVENT_SMP_CFG_TIMEOUT \r\n");
break;
case NET_SMP_CFG_COMPLETED:
puts("app_demo_event_handler recv NET_SMP_CFG_COMPLETED \r\n");
#ifdef CONFIG_AIRKISS_NET_CFG
wifi_smp_set_ssid_pwd();
#endif
break;
case NET_EVENT_DISCONNECTED_AND_REQ_CONNECT:
puts("app_demo_event_handler recv NET_EVENT_DISCONNECTED_AND_REQ_CONNECT \r\n");
extern void sys_power_auto_shutdown_pause();
wifi_return_sta_mode();
break;
case NET_NTP_GET_TIME_SUCC: //NTP获取成功事件返回
break;
default:
break;
}
}
#endif //USE_DEMO_WIFI_TEST
case SYS_KEY_EVENT:
printf("%s %d\n", __func__, __LINE__);
doubao_key_event_handler((struct key_event *)sys_event->payload);
default:
return false;
}
}
static const struct application_operation app_demo_ops = {
.state_machine = app_demo_state_machine,
.event_handler = app_demo_event_handler,
};
REGISTER_APPLICATION(app_demo) = {
.name = "app_demo",
.ops = &app_demo_ops,
.state = APP_STA_DESTROY,
};
#if 0
void app_default_event_handler(struct sys_event *event)
{
switch (event->type) {
case SYS_KEY_EVENT:
#ifdef UI_MASS_PRODUCTION
extern int raw_key_event_handler(struct key_event * key);
raw_key_event_handler((struct key_event *)event->payload);
#endif
break;
case SYS_TOUCH_EVENT:
break;
case SYS_DEVICE_EVENT:
break;
case SYS_NET_EVENT:
break;
case SYS_BT_EVENT:
break;
default:
ASSERT(0, "unknow event type: %s\n", __func__);
break;
}
}
#endif
/*
* 应用程序主函数
*/
void app_main()
{
#ifdef CONFIG_CXX_SUPPORT
//注意:使用时也可以不放置在这里调用,但必须在使用c++前进行调用初始化c++环境
void cpp_run_init(void);
cpp_run_init();
#endif
printf("\r\n\r\n\r\n\r\n 1--------------- app_main run %s ---------------\r\n\r\n\r\n\r\n\r\n", __TIME__);
struct intent it;
init_intent(&it);
it.name = "app_demo";
it.action = ACTION_DO_NOTHING;
start_app(&it);
key_event_enable(); //针对按键事件,需要先使能开关
}