#include "os/os.h" #include #include "media_evt.h" #include "components/log.h" #if CONFIG_LVGL #include "lvgl.h" #include "src/draw/sw/lv_draw_sw_blend.h" #endif #define TAG "rotate" #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__) #ifdef CONFIG_SYS_CPU0 static beken_semaphore_t g_sem = NULL; static void _mailbox_rx_isr(void *param, mb_chnl_cmd_t *cmd_buf) { bk_err_t ret; //bk_printf("%s, %08X\n", __func__, cmd_buf->param1); if (cmd_buf->hdr.cmd == 0x19) { ret = rtos_set_semaphore(&g_sem); if (ret != BK_OK) { //bk_printf("%s semaphore get failed: %d\n", __func__, ret); } } } static void _mailbox_tx_isr(void *param) { //bk_printf("%s\n", __func__); } static void _mailbox_tx_cmpl_isr(void *param, mb_chnl_ack_t *ack_buf) { //bk_printf("%s\n", __func__); } void lv_draw_sw_master_init(void) { /* Mailbox */ mb_chnl_open(MB_CHNL_LVGL, NULL); mb_chnl_ctrl(MB_CHNL_LVGL, MB_CHNL_SET_RX_ISR, _mailbox_rx_isr); mb_chnl_ctrl(MB_CHNL_LVGL, MB_CHNL_SET_TX_ISR, _mailbox_tx_isr); mb_chnl_ctrl(MB_CHNL_LVGL, MB_CHNL_SET_TX_CMPL_ISR, _mailbox_tx_cmpl_isr); rtos_init_semaphore_ex(&g_sem, 1, 0); } #ifdef CONFIG_LVGL_DRAW_ON_CPU1 void lv_draw_sw_blend_basic_to_slave(lv_draw_ctx_t * draw_ctx, const lv_draw_sw_blend_dsc_t * dsc) { mb_chnl_cmd_t mb_cmd; bk_err_t ret = BK_FAIL; do{ mb_cmd.hdr.cmd = 0x18; mb_cmd.param1 = (uint32_t)draw_ctx; mb_cmd.param2 = (uint32_t)dsc;; mb_cmd.param3 = (uint32_t)_lv_refr_get_disp_refreshing(); ret = mb_chnl_write(MB_CHNL_LVGL, &mb_cmd); if (ret != BK_OK) { //LOGE("%s mb_chnl_write failed: %d\n", __func__, ret); break; } ret = rtos_get_semaphore(&g_sem, BEKEN_NEVER_TIMEOUT); if (ret != BK_OK) { //LOGE("%s semaphore get failed: %d\n", __func__, ret); break; } }while(0); return ; } #endif #endif #if CONFIG_SYS_CPU1 static void _mailbox_rx_isr(void *param, mb_chnl_cmd_t *cmd_buf) { #ifdef CONFIG_LVGL_DRAW_ON_CPU1 LOGD("%s, %08X\n", __func__, cmd_buf->hdr.cmd); if (cmd_buf->hdr.cmd == 0x18) { void bk_gui_set_cpu1_param(lv_draw_ctx_t * draw_ctx_param, lv_draw_sw_blend_dsc_t * dsc_param, lv_disp_t *disp_param); bk_gui_set_cpu1_param((lv_draw_ctx_t *)cmd_buf->param1, (lv_draw_sw_blend_dsc_t *)cmd_buf->param2, (lv_disp_t *)cmd_buf->param3); media_msg_t msg; msg.event = EVENT_LVGL_DRAW_CMD; media_send_msg(&msg); } #endif } static void _mailbox_tx_isr(void *param) { LOGD("%s\n", __func__); } static void _mailbox_tx_cmpl_isr(void *param, mb_chnl_ack_t *ack_buf) { LOGD("%s\n", __func__); } void lv_draw_sw_slave_init(void) { mb_chnl_open(MB_CHNL_LVGL, NULL); mb_chnl_ctrl(MB_CHNL_LVGL, MB_CHNL_SET_RX_ISR, _mailbox_rx_isr); mb_chnl_ctrl(MB_CHNL_LVGL, MB_CHNL_SET_TX_ISR, _mailbox_tx_isr); mb_chnl_ctrl(MB_CHNL_LVGL, MB_CHNL_SET_TX_CMPL_ISR, _mailbox_tx_cmpl_isr); } #endif