361 lines
12 KiB
C
361 lines
12 KiB
C
#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"
|
||
|
||
/*中断列表 */
|
||
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 void bt_net_config(void)
|
||
{
|
||
printf("%s %d\n", __func__, __LINE__);
|
||
|
||
#ifdef CONFIG_ASSIGN_MACADDR_ENABLE
|
||
cancel_server_assign_macaddr();
|
||
#endif
|
||
|
||
|
||
if (!is_in_config_network_state()) {
|
||
sys_power_auto_shutdown_pause();
|
||
|
||
config_network_start();
|
||
} else {
|
||
|
||
config_network_stop();
|
||
wifi_return_sta_mode();
|
||
sys_power_auto_shutdown_resume();
|
||
}
|
||
|
||
}
|
||
|
||
static int bt_net_config_key_click(struct key_event *key)
|
||
{
|
||
/* printf("key->value%d\n",key->value); */
|
||
switch (key->value) {
|
||
case KEY_OK:
|
||
#ifdef CONFIG_NET_ENABLE
|
||
puts("switch_net_config\n");
|
||
bt_net_config();
|
||
#endif
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
static int doubao_key_longclick(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_pause_sem;
|
||
extern OS_SEM listen_close_sem;
|
||
os_sem_set(&voice_pause_sem,0);
|
||
os_sem_post(&voice_pause_sem);
|
||
os_sem_set(&listen_close_sem,0);
|
||
os_sem_post(&listen_close_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;
|
||
case KEY_EVENT_DOUBLE_CLICK:
|
||
ret = bt_net_config_key_click(key);
|
||
break;
|
||
case KEY_EVENT_LONG:
|
||
ret = doubao_key_longclick(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);
|
||
// case SYS_BT_EVENT:
|
||
// extern int ble_demo_bt_event_handler(struct sys_event * event);
|
||
// ble_demo_bt_event_handler(sys_event);
|
||
// break;
|
||
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);
|
||
|
||
extern void bt_ble_module_init(void);
|
||
bt_ble_module_init();
|
||
|
||
key_event_enable(); //针对按键事件,需要先使能开关
|
||
}
|
||
|