doubao_chat/apps/demo/demo_audio/app_main.c

190 lines
6.4 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 "system/includes.h"
#include "app_config.h"
#include "storage_device.h"
#include "generic/log.h"
#include "os/os_api.h"
#include "event/key_event.h"
#include "event/device_event.h"
#include "event/net_event.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 },
};
/*创建使用 os_task_create_static 或者task_create 接口的 静态任务堆栈*/
#define SYS_TIMER_STK_SIZE 512
#define SYS_TIMER_Q_SIZE 128
static u8 sys_timer_tcb_stk_q[sizeof(StaticTask_t) + SYS_TIMER_STK_SIZE * 4 + sizeof(struct task_queue) + SYS_TIMER_Q_SIZE] ALIGNE(4);
#define SYSTIMER_STK_SIZE 256
static u8 systimer_tcb_stk_q[sizeof(StaticTask_t) + SYSTIMER_STK_SIZE * 4] ALIGNE(4);
#define SYS_EVENT_STK_SIZE 512
static u8 sys_event_tcb_stk_q[sizeof(StaticTask_t) + SYS_EVENT_STK_SIZE * 4] ALIGNE(4);
#define APP_CORE_STK_SIZE 1024
#define APP_CORE_Q_SIZE 256
static u8 app_core_tcb_stk_q[sizeof(StaticTask_t) + APP_CORE_STK_SIZE * 4 + sizeof(struct task_queue) + APP_CORE_Q_SIZE] ALIGNE(4);
/*创建使用 thread_fork 接口的 静态任务堆栈*/
#define WIFI_TASKLET_STK_SIZE 1024
static u8 wifi_tasklet_tcb_stk_q[sizeof(struct thread_parm) + WIFI_TASKLET_STK_SIZE * 4] ALIGNE(4);
#define WIFI_CMDQ_STK_SIZE 300
static u8 wifi_cmdq_tcb_stk_q[sizeof(struct thread_parm) + WIFI_CMDQ_STK_SIZE * 4] ALIGNE(4);
#define WIFI_MLME_STK_SIZE 700
static u8 wifi_mlme_tcb_stk_q[sizeof(struct thread_parm) + WIFI_MLME_STK_SIZE * 4] ALIGNE(4);
#define WIFI_RX_STK_SIZE 256
static u8 wifi_rx_tcb_stk_q[sizeof(struct thread_parm) + WIFI_RX_STK_SIZE * 4] ALIGNE(4);
/*任务列表 */
const struct task_info task_info_table[] = {
{"app_core", 15, APP_CORE_STK_SIZE, APP_CORE_Q_SIZE, app_core_tcb_stk_q },
{"sys_event", 29, SYS_EVENT_STK_SIZE, 0, sys_event_tcb_stk_q },
{"systimer", 14, SYSTIMER_STK_SIZE, 0, systimer_tcb_stk_q },
{"sys_timer", 9, SYS_TIMER_STK_SIZE, SYS_TIMER_Q_SIZE, sys_timer_tcb_stk_q },
{"audio_server", 16, 512, 64 },
{"audio_mix", 28, 512, 0 },
{"audio_encoder", 12, 384, 64 },
{"speex_encoder", 13, 512, 0 },
{"mp3_encoder", 13, 768, 0 },
{"jla_encoder", 13, 768, 0 },
{"aac_encoder", 13, 768, 0 },
{"opus_encoder", 13, 1536, 0 },
{"ogg_encoder", 13, 1536, 0 },
{"vir_dev_task", 13, 256, 0 },
{"amr_encoder", 13, 1024, 0 },
{"cvsd_encoder", 13, 512, 0 },
{"vad_encoder", 14, 768, 0 },
{"aec_encoder", 13, 1024, 0 },
{"dns_encoder", 13, 512, 0 },
{"msbc_encoder", 13, 256, 0 },
{"sbc_encoder", 13, 512, 0 },
{"adpcm_encoder", 13, 512, 0 },
{"echo_deal", 11, 1024, 32 },
#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_record0", 26, 768, 0 },
{"uac_record1", 26, 768, 0 },
{"uac_play0", 26, 768, 32 },
{"uac_play1", 26, 768, 32 },
{"tcpip_thread", 16, 800, 0 },
#ifdef CONFIG_WIFI_ENABLE
{"tasklet", 10, WIFI_TASKLET_STK_SIZE, 0, wifi_tasklet_tcb_stk_q },//通过调节任务优先级平衡WIFI收发占据总CPU的比重
{"RtmpMlmeTask", 17, WIFI_MLME_STK_SIZE, 0, wifi_mlme_tcb_stk_q },
{"RtmpCmdQTask", 17, WIFI_CMDQ_STK_SIZE, 0, wifi_cmdq_tcb_stk_q },
{"wl_rx_irq_thread", 5, WIFI_RX_STK_SIZE, 0, wifi_rx_tcb_stk_q },
#endif
{0, 0},
};
extern int audio_demo_mode_switch(void);
static int main_key_event_handler(struct key_event *key)
{
switch (key->action) {
case KEY_EVENT_CLICK:
switch (key->value) {
case KEY_MODE:
audio_demo_mode_switch();
break;
default:
return false;
}
break;
case KEY_EVENT_LONG:
break;
default:
return false;
}
return true;
}
static int main_dev_event_handler(struct device_event *event)
{
switch (event->event) {
case DEVICE_EVENT_IN:
break;
case DEVICE_EVENT_OUT:
break;
case DEVICE_EVENT_CHANGE:
break;
}
return 0;
}
#ifdef CONFIG_NET_ENABLE
static int main_net_event_hander(struct net_event *event)
{
switch (event->event) {
case NET_EVENT_CMD:
break;
case NET_EVENT_DATA:
break;
}
return false;
}
#endif
/*
* 默认的系统事件处理函数
* 当所有活动的app的事件处理函数都返回false时此函数会被调用
*/
void app_default_event_handler(struct sys_event *event)
{
switch (event->type) {
case SYS_KEY_EVENT:
main_key_event_handler((struct key_event *)event->payload);
break;
case SYS_TOUCH_EVENT:
break;
case SYS_DEVICE_EVENT:
main_dev_event_handler((struct device_event *)event->payload);
break;
#ifdef CONFIG_NET_ENABLE
case SYS_NET_EVENT:
main_net_event_hander((struct net_event *)event->payload);
break;
#endif
default:
ASSERT(0, "unknow event type: %s\n", __func__);
break;
}
}
/*应用程序主函数*/
void app_main()
{
puts("------------- demo_audio app main-------------\n");
audio_demo_mode_switch();
}