// Copyright 2020-2021 Beken // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #pragma once #include #include "media_core.h" #ifdef __cplusplus extern "C" { #endif #define MEDIA_EVT_RETURN(res, val) \ do { \ if (res != NULL) { \ res->ret = val; \ rtos_set_semaphore(&res->sem); \ } \ } while(0) /* * Message Type: * CMD <-> EVT for CPU0 <-> CPU1 * REQ <-> EVT for modules * IND for unicast instruction * _______________________________________ _______________________________________ * | | | | * | Major CPU(CPU0) | | Minor CPU(CPU1) | * |_______________________________________| |_______________________________________| * | | | CMD1 ==> | | | * | Moudle A | Moudle B | <== EVT1 | Moudle C | Moudle D | * | _____________ | _____________ | | _____________ | _____________ | * | | | | | | | CMD2 ==> | | | | | | | * | | EVENT_REQ1 | <-|-> | EVENT_RES1 | | <== EVT2 | | EVENT_REQ1 | <-|-> | EVENT_RES1 | | * | | EVENT_REQ2 | <-|-> | EVENT_RES2 | | | | EVENT_REQ2 | <-|-> | EVENT_RES2 | | * | | EVENT_RES1 | <-|-> | EVENT_REQ1 | | CMD3 ==> | | EVENT_RES1 | <-|-> | EVENT_REQ1 | | * | | EVENT_RES2 | <-|-> | EVENT_REQ2 | | <== EVT3 | | EVENT_RES2 | <-|-> | EVENT_REQ2 | | * | |_____________| | |_____________| | | |_____________| | |_____________| | * |___________________|___________________| |___________________|___________________| * */ typedef enum { COM_EVENT = 1, CAM_EVENT, AUD_EVENT, LCD_EVENT, LVGL_EVENT, STORAGE_EVENT, TRS_EVENT, USB_TRS_EVENT, UVC_PIPELINE_EVENT, EXIT_EVENT, QUEUE_EVENT, MAILBOX_CMD, MAILBOX_EVT, MAILBOX_REQ, MAILBOX_RSP, MAILBOX_NOTIFY, AUD_NOTIFY, BT_EVENT, MAJOR_COMM_EVENT, FRAME_BUFFER_EVENT, } media_mask_t; typedef enum { EVENT_COM_DEFAULT_IND = (COM_EVENT << MEDIA_EVT_BIT), EVENT_COM_FRAME_WIFI_FREE_IND, EVENT_COM_FRAME_DECODER_FREE_IND, EVENT_COM_FRAME_CAPTURE_FREE_IND, EVENT_COM_FRAME_REQUEST_IND, EVENT_AUD_INIT_REQ = (AUD_EVENT << MEDIA_EVT_BIT), EVENT_AUD_DEINIT_REQ, /**< deinit aud tras drv */ EVENT_AUD_SET_MODE_REQ, /**< set work mode */ /* mic op */ EVENT_AUD_MIC_INIT_REQ, /**< init mic */ EVENT_AUD_MIC_DEINIT_REQ, /**< deinit mic */ EVENT_AUD_MIC_START_REQ, /**< start mic */ EVENT_AUD_MIC_PAUSE_REQ, /**< pause mic */ EVENT_AUD_MIC_STOP_REQ, /**< stop mic */ EVENT_AUD_MIC_SET_CHL_REQ, /**< set mic channel */ EVENT_AUD_MIC_SET_SAMP_RATE_REQ, /**< set adc sample rate */ EVENT_AUD_MIC_SET_GAIN_REQ, /**< set adc gain */ /* spk op */ EVENT_AUD_SPK_INIT_REQ, /**< init spk */ EVENT_AUD_SPK_DEINIT_REQ, /**< deinit spk */ EVENT_AUD_SPK_START_REQ, /**< start spk */ EVENT_AUD_SPK_PAUSE_REQ, /**< pause spk */ EVENT_AUD_SPK_STOP_REQ, /**< stop spk */ EVENT_AUD_SPK_SET_CHL_REQ, /**< set speaker channel */ EVENT_AUD_SPK_SET_SAMP_RATE_REQ, /**< set dac sample rate */ EVENT_AUD_SPK_SET_GAIN_REQ, /**< set dac gain */ /* voc op */ EVENT_AUD_VOC_INIT_REQ, /**< init voc */ EVENT_AUD_VOC_DEINIT_REQ, /**< deinit voc */ EVENT_AUD_VOC_START_REQ, /**< start voc */ EVENT_AUD_VOC_STOP_REQ, /**< stop voc */ EVENT_AUD_VOC_CTRL_MIC_REQ, /**< set voc mic enable */ EVENT_AUD_VOC_CTRL_SPK_REQ, /**< set voc spk enable */ EVENT_AUD_VOC_CTRL_AEC_REQ, /**< set voc aec enable */ EVENT_AUD_VOC_SET_MIC_GAIN_REQ, /**< set audio adc gain */ EVENT_AUD_VOC_SET_SPK_GAIN_REQ, /**< set audio dac gain */ EVENT_AUD_VOC_SET_AEC_PARA_REQ, /**< set AEC parameters */ EVENT_AUD_VOC_GET_AEC_PARA_REQ, /**< get AEC parameters */ EVENT_AUD_VOC_TX_DEBUG_REQ, /**< dump tx data */ EVENT_AUD_VOC_RX_DEBUG_REQ, /**< dump rx data */ EVENT_AUD_VOC_AEC_DEBUG_REQ, /**< dump aec data */ /* UAC op */ EVENT_AUD_UAC_REGIS_CONT_STATE_CB_REQ, /**< register uac mic and speaker connect state callback */ EVENT_AUD_UAC_CONT_REQ, /**< recover uac status after uac automatically connect */ EVENT_AUD_UAC_DISCONT_REQ, /**< uac abnormal disconnect */ EVENT_AUD_UAC_AUTO_CONT_CTRL_REQ, /**< uac automatically connect enable control*/ EVENT_CAM_DVP_OPEN_IND = (CAM_EVENT << MEDIA_EVT_BIT), EVENT_CAM_DVP_CLOSE_IND, EVENT_CAM_DVP_RESET_OPEN_IND, EVENT_CAM_UVC_OPEN_IND, EVENT_CAM_UVC_CLOSE_IND, EVENT_CAM_UVC_RESET_IND, EVENT_CAM_NET_OPEN_IND, EVENT_CAM_NET_CLOSE_IND, EVENT_CAM_RTSP_OPEN_IND, EVENT_CAM_RTSP_CLOSE_IND, EVENT_CAM_COMPRESS_IND, EVENT_CAM_SET_UVC_PARAM_IND, EVENT_CAM_REG_UVC_INFO_CB_IND, EVENT_CAM_GET_H264_INFO_IND, EVENT_CAM_H264_RESET_IND, EVENT_LCD_OPEN_IND = (LCD_EVENT << MEDIA_EVT_BIT), EVENT_LCD_DVP_REG_CAM_INIT_RES, EVENT_LCD_FRAME_COMPLETE_IND, EVENT_LCD_RESIZE_IND, EVENT_LCD_CLOSE_IND, EVENT_LCD_SET_BACKLIGHT_IND, EVENT_LCD_ROTATE_ENABLE_IND, EVENT_LCD_FRAME_LOCAL_ROTATE_IND, EVENT_LCD_DUMP_DECODER_IND, EVENT_LCD_DUMP_JPEG_IND, EVENT_LCD_DUMP_DISPLAY_IND, EVENT_LCD_STEP_MODE_IND, EVENT_LCD_STEP_TRIGGER_IND, EVENT_LCD_DISPLAY_IND, EVENT_LCD_BEKEN_LOGO_DISPLAY, EVENT_LCD_DISPLAY_FILE_IND, EVENT_LCD_BLEND_IND, EVENT_LCD_DECODE_MODE_IND, EVENT_LCD_BLEND_OPEN_IND, EVENT_LCD_GET_DEVICES_NUM_IND, EVENT_LCD_GET_DEVICES_LIST_IND, EVENT_LCD_GET_DEVICES_IND, EVENT_LCD_SCALE_IND, EVENT_LCD_GET_STATUS_IND, EVENT_GET_UVC_STATUS_IND, EVENT_PIPELINE_LCD_DISP_OPEN_IND = (UVC_PIPELINE_EVENT << MEDIA_EVT_BIT), EVENT_PIPELINE_LCD_DISP_CLOSE_IND, EVENT_PIPELINE_LCD_JDEC_OPEN_IND, EVENT_PIPELINE_LCD_JDEC_CLOSE_IND, EVENT_PIPELINE_SET_ROTATE_IND, EVENT_PIPELINE_H264_OPEN_IND, EVENT_PIPELINE_H264_CLOSE_IND, EVENT_PIPELINE_H264_RESET_IND, EVENT_LCD_SET_FMT_IND, EVENT_PIPELINE_LCD_SCALE_IND, EVENT_PIPELINE_MEM_SHOW_IND, EVENT_PIPELINE_MEM_LEAK_IND, EVENT_PIPELINE_DUMP_IND, EVENT_MEDIA_APP_EXIT_IND = (EXIT_EVENT << MEDIA_EVT_BIT), EVENT_LVGL_OPEN_IND = (LVGL_EVENT << MEDIA_EVT_BIT), EVENT_LVGL_CLOSE_IND, EVENT_LVCAM_LVGL_OPEN_IND, EVENT_LVCAM_LVGL_CLOSE_IND, EVENT_STORAGE_OPEN_IND = (STORAGE_EVENT << MEDIA_EVT_BIT), EVENT_STORAGE_CLOSE_IND, EVENT_STORAGE_CAPTURE_IND, EVENT_STORAGE_SAVE_START_IND, EVENT_STORAGE_SAVE_STOP_IND, EVENT_TRANSFER_OPEN_IND = (TRS_EVENT << MEDIA_EVT_BIT), EVENT_TRANSFER_CLOSE_IND, EVENT_TRANSFER_START_IND, EVENT_TRANSFER_PAUSE_IND, EVENT_AVI_OPEN_IND, EVENT_AVI_CLOSE_IND, EVENT_TRANSFER_USB_OPEN_IND = (USB_TRS_EVENT << MEDIA_EVT_BIT), EVENT_TRANSFER_USB_CLOSE_IND, EVENT_LCD_DEFAULT_CMD = (MAILBOX_CMD << MEDIA_EVT_BIT), EVENT_LCD_ROTATE_RIGHT_CMD, EVENT_LCD_RESIZE_CMD, EVENT_LCD_DEC_SW_CMD, EVENT_LCD_DEC_SW_OPEN_CMD, EVENT_LVGL_DRAW_CMD, EVENT_LCD_DEFAULT_EVT = (MAILBOX_EVT << MEDIA_EVT_BIT), EVENT_LCD_ROTATE_RIGHT_COMP_EVT, EVENT_LCD_OPEN_REQ = (MAILBOX_REQ << MEDIA_EVT_BIT), EVENT_LCD_DEC_SW_REQ, EVENT_TRANSFER_FRAME_REQ, EVENT_TRANSFER_DEINIT_REQ, EVENT_LCD_OPEN_RSP = (MAILBOX_RSP << MEDIA_EVT_BIT), EVENT_LCD_DEC_SW_RSP, EVENT_TRANSFER_FRAME_RSP, EVENT_TRANSFER_DEINIT_RSP, /* notify op */ EVENT_AUD_MIC_DATA_NOTIFY = (MAILBOX_NOTIFY << MEDIA_EVT_BIT), EVENT_AUD_SPK_DATA_NOTIFY, EVENT_MEDIA_DATA_NOTIFY, EVENT_USB_DATA_NOTIFY, EVENT_VID_CAPTURE_NOTIFY, EVENT_VID_SAVE_ALL_NOTIFY, EVENT_LCD_PICTURE_ECHO_NOTIFY, EVENT_DMA_RESTART_NOTIFY, EVENT_DVP_EOF_NOTIFY, EVENT_JPEG_DEC_INIT_NOTIFY, EVENT_JPEG_DEC_DEINIT_NOTIFY, EVENT_JPEG_DEC_START_NOTIFY, EVENT_JPEG_DEC_SET_ROTATE_ANGLE_NOTIFY, EVENT_JPEG_DEC_START_COMPLETE_NOTIFY, EVENT_JPEG_DEC_LINE_COMPLETE_NOTIFY, EVENT_TRANS_LOG_NOTIFY, EVENT_UVC_DEVICE_INFO_NOTIFY, EVENT_UAC_CONNECT_STATE_NOTIFY, EVENT_BT_AUDIO_INIT_REQ = (BT_EVENT << MEDIA_EVT_BIT), EVENT_BT_AUDIO_DEINIT_REQ, EVENT_BT_PCM_RESAMPLE_INIT_REQ, EVENT_BT_PCM_RESAMPLE_DEINIT_REQ, EVENT_BT_PCM_RESAMPLE_REQ, EVENT_BT_PCM_ENCODE_INIT_REQ, EVENT_BT_PCM_ENCODE_DEINIT_REQ, EVENT_BT_PCM_ENCODE_REQ, EVENT_MEDIA_DEBUG_IND = (MAJOR_COMM_EVENT << MEDIA_EVT_BIT), EVENT_MEDIA_CPU1_POWERUP_IND, EVENT_MEDIA_CPU1_POWEROFF_IND, EVENT_FRAME_BUFFER_INIT_IND = (FRAME_BUFFER_EVENT << MEDIA_EVT_BIT), EVENT_FRAME_BUFFER_JPEG_MALLOC_IND, EVENT_FRAME_BUFFER_H264_MALLOC_IND, EVENT_FRAME_BUFFER_FREE_IND, EVENT_FRAME_BUFFER_PUSH_IND, } media_event_t; typedef struct { uint32_t event; uint32_t param; } media_msg_t; typedef struct { uint32_t event; uint32_t param; uint32_t param1; } jpeg_msg_t; typedef struct { beken_semaphore_t sem; uint32_t param; int ret; } param_pak_t; typedef struct { void *media_debug; } media_share_ptr_t; bk_err_t media_send_msg(media_msg_t *msg); bk_err_t media_app_send_msg(media_msg_t *msg); #ifdef __cplusplus } #endif