Page 1 of 1

CPU0和CPU1的交互问题

Posted: 2025年 Aug 1日 16:38
by xyy

我们现在有个需求,就是每次按键都显示不同的动画,怎么实现


Re: CPU0和CPU1的交互问题

Posted: 2025年 Aug 18日 14:20
by 愚者千虑必有一得

CPU0通过IPC发生消息到CPU1,CPU1根据消息来显示一些内容。你可以在按键里发送自定义的TY_DISPLAY_TYPE_E 给CPU1,CPU1按需去显示UI。

CPU0:发送消息

Code: Select all

 typedef enum {	// 目前支持的事件,可以自己扩展
    TY_DISPLAY_TP_HUMAN_CHAT,
    TY_DISPLAY_TP_AI_CHAT,
    TY_DISPLAY_TP_STAT_SLEEP,
    TY_DISPLAY_TP_STAT_WAKEUP,
    TY_DISPLAY_TP_STAT_NETCFG,
    TY_DISPLAY_TP_STAT_NET,
    TY_DISPLAY_TP_STAT_POWERON,
    TY_DISPLAY_TP_STAT_ONLINE,
    TY_DISPLAY_TP_CHAT_MODE,
    TY_DISPLAY_TP_CHAT_STAT,
    TY_DISPLAY_TP_MALLOC,
    TY_DISPLAY_TP_EMOJI,
    TY_DISPLAY_TP_VOLUME
    TY_DISPLAY_TP_ASR_EMOJI,
    TY_DISPLAY_TP_STAT_IDLE,
    TY_DISPLAY_TP_STAT_LISTEN,
    TY_DISPLAY_TP_STAT_SPEAK,
    TY_DISPLAY_TP_STAT_BATTERY,
    TY_DISPLAY_TP_STAT_CHARGING,
    TY_DISPLAY_TP_LANGUAGE,
} TY_DISPLAY_TYPE_E;

// 调用这个接口发送消息给CPU1
OPERATE_RET tuya_ai_display_msg(char *msg, int len, TY_DISPLAY_TYPE_E display_tp)

CPU1:接收线程:

Code: Select all

STATIC VOID_T __tuya_ai_display_thread(VOID_T *arg)
{
    TY_DISPLAY_MSG_T disp_msg;
    OPERATE_RET rt = OPRT_OK;
    tuya_ui_init();

for (;;) {
    rt = tkl_queue_fetch(disp_msg_queue, &disp_msg, TKL_QUEUE_WAIT_FROEVER);
    lv_vendor_disp_lock();
    tuya_ui_app(&disp_msg);	// 这里处理不同类型的ui,wechat、robot、xiaozhi等
    lv_vendor_disp_unlock();
    if (disp_msg.data && disp_msg.len) {
        tkl_system_psram_free(disp_msg.data);
    }
}
}