1 // Copyright (C) 2022 Beken Corporation 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 #pragma once 16 17 #include <common/bk_include.h> 18 #include "media_core.h" 19 20 #ifdef __cplusplus 21 extern "C" { 22 #endif 23 24 #define MEDIA_EVT_RETURN(res, val) \ 25 do { \ 26 if (res != NULL) { \ 27 res->ret = val; \ 28 rtos_set_semaphore(&res->sem); \ 29 } \ 30 } while(0) 31 32 33 /* 34 * Message Type: 35 * CMD <-> EVT for CPU0 <-> CPU1 36 * REQ <-> EVT for modules 37 * IND for unicast instruction 38 * _______________________________________ _______________________________________ 39 * | | | | 40 * | Major CPU(CPU0) | | Minor CPU(CPU1) | 41 * |_______________________________________| |_______________________________________| 42 * | | | CMD1 ==> | | | 43 * | Moudle A | Moudle B | <== EVT1 | Moudle C | Moudle D | 44 * | _____________ | _____________ | | _____________ | _____________ | 45 * | | | | | | | CMD2 ==> | | | | | | | 46 * | | EVENT_REQ1 | <-|-> | EVENT_RES1 | | <== EVT2 | | EVENT_REQ1 | <-|-> | EVENT_RES1 | | 47 * | | EVENT_REQ2 | <-|-> | EVENT_RES2 | | | | EVENT_REQ2 | <-|-> | EVENT_RES2 | | 48 * | | EVENT_RES1 | <-|-> | EVENT_REQ1 | | CMD3 ==> | | EVENT_RES1 | <-|-> | EVENT_REQ1 | | 49 * | | EVENT_RES2 | <-|-> | EVENT_REQ2 | | <== EVT3 | | EVENT_RES2 | <-|-> | EVENT_REQ2 | | 50 * | |_____________| | |_____________| | | |_____________| | |_____________| | 51 * |___________________|___________________| |___________________|___________________| 52 * 53 */ 54 55 56 typedef enum 57 { 58 COM_EVENT = 1, 59 CAM_EVENT, 60 AUD_EVENT, 61 LCD_EVENT, 62 STORAGE_EVENT, 63 TRS_EVENT, 64 EXIT_EVENT, 65 QUEUE_EVENT, 66 MAILBOX_CMD, 67 MAILBOX_EVT, 68 } media_mask_t; 69 70 typedef enum 71 { 72 EVENT_COM_DEFAULT_IND = (COM_EVENT << MEDIA_EVT_BIT), 73 EVENT_COM_FRAME_WIFI_FREE_IND, 74 EVENT_COM_FRAME_DECODER_FREE_IND, 75 EVENT_COM_FRAME_CAPTURE_FREE_IND, 76 EVENT_COM_FRAME_REQUEST_IND, 77 78 79 EVENT_AUD_ADC_OPEN = (AUD_EVENT << MEDIA_EVT_BIT), 80 EVENT_AUD_DAC_OPEN, 81 82 EVENT_CAM_DVP_JPEG_OPEN_IND = (CAM_EVENT << MEDIA_EVT_BIT), 83 EVENT_CAM_DVP_YUV_OPEN_IND, 84 EVENT_CAM_DVP_CLOSE_IND, 85 EVENT_CAM_UVC_OPEN_IND, 86 EVENT_CAM_UVC_CLOSE_IND, 87 88 EVENT_LCD_OPEN_IND = (LCD_EVENT << MEDIA_EVT_BIT), 89 EVENT_LCD_DVP_REG_CAM_INIT_RES, 90 EVENT_LCD_FRAME_COMPLETE_IND, 91 EVENT_LCD_RESIZE_IND, 92 EVENT_LCD_CLOSE_IND, 93 EVENT_LCD_SET_BACKLIGHT_IND, 94 EVENT_LCD_ROTATE_ENABLE_IND, 95 EVENT_LCD_FRAME_LOCAL_ROTATE_IND, 96 EVENT_LCD_DUMP_DECODER_IND, 97 EVENT_LCD_DUMP_JPEG_IND, 98 EVENT_LCD_DUMP_DISPLAY_IND, 99 EVENT_LCD_STEP_MODE_IND, 100 EVENT_LCD_STEP_TRIGGER_IND, 101 102 EVENT_STORAGE_OPEN_IND = (STORAGE_EVENT << MEDIA_EVT_BIT), 103 EVENT_STORAGE_CAPTURE_IND, 104 105 EVENT_TRANSFER_OPEN_IND = (TRS_EVENT << MEDIA_EVT_BIT), 106 EVENT_TRANSFER_CLOSE_IND, 107 EVENT_TRANSFER_PAUSE_IND, 108 109 EVENT_LCD_DEFAULT_CMD = (MAILBOX_CMD << MEDIA_EVT_BIT), 110 EVENT_LCD_ROTATE_RIGHT_CMD, 111 112 EVENT_LCD_DEFAULT_EVT = (MAILBOX_EVT << MEDIA_EVT_BIT), 113 EVENT_LCD_ROTATE_RIGHT_COMP_EVT, 114 } media_event_t; 115 116 117 typedef enum 118 { 119 EVENT_APP_DVP_OPEN, 120 EVENT_APP_EXIT, 121 } media_app_event_t; 122 123 124 typedef struct 125 { 126 uint32_t event; 127 uint32_t param; 128 } media_msg_t; 129 130 131 typedef struct 132 { 133 beken_semaphore_t sem; 134 uint32_t param; 135 int ret; 136 } param_pak_t; 137 138 139 bk_err_t media_send_msg(media_msg_t *msg); 140 bk_err_t media_app_send_msg(media_msg_t *msg); 141 142 143 #ifdef __cplusplus 144 } 145 #endif 146