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 #ifdef __cplusplus 18 extern "C" { 19 #endif 20 21 #include <common/bk_include.h> 22 23 24 #define UVC_DEMO_SUPPORT102 25 26 #define USB_FAILURE (1) 27 #define USB_SUCCESS (0) 28 29 #define USB_DEV_NAME "usb" 30 31 typedef void (*USB_FPTR)(void *, void *); 32 33 #define USB_CMD_MAGIC (0xe550000) 34 enum 35 { 36 UCMD_RESET = USB_CMD_MAGIC + 1, 37 38 UCMD_MSC_REGISTER_FIDDLE_CB, 39 UCMD_UVC_REGISTER_CONFIG_NOTIFY_CB, 40 UCMD_UVC_REGISTER_RX_VSTREAM_CB, 41 UCMD_UVC_REGISTER_RX_VSTREAM_BUF_PTR, 42 UCMD_UVC_REGISTER_RX_VSTREAM_BUF_LEN, 43 44 UCMD_UVC_SET_PARAM, 45 UCMD_UVC_START_STREAM, 46 UCMD_UVC_STOP_STREAM, 47 UCMD_UVC_GET_CONNECT_STATUS, 48 UCMD_UVC_RECEIVE_VSTREAM, 49 UCMD_UVC_ENABLE_MJPEG, 50 UCMD_UVC_ENABLE_H264, 51 UCMD_USB_CONNECTED_REGISTER_CB, 52 UCMD_UVC_REGISTER_LINK, 53 54 UCMD_UVC_REGISTER_RX_PACKET_CB, 55 UCMD_UVC_GET_CUR, 56 UCMD_UVC_GET_MIN, 57 UCMD_UVC_GET_MAX, 58 UCMD_UVC_GET_RES, 59 UCMD_UVC_GET_LEN, 60 UCMD_UVC_GET_INFO, 61 UCMD_UVC_GET_DEF, 62 UCMD_UVC_SET_CUR, 63 }; 64 65 /*UCMD_UVC_SET_PARAM*/ 66 #define UVC_MUX_PARAM(resolution_id, fps) (fps + (resolution_id << 16)) 67 #define UVC_DEMUX_FPS(param) (param & 0xffff) 68 #define UVC_DEMUX_ID(param) ((param >> 16) & 0xffff) 69 70 typedef enum 71 { 72 USB_HOST_MODE = 0, 73 USB_DEVICE_MODE = 1 74 } USB_MODE; 75 76 /* 77 * The value is defined in field wWidth and wHeight in 'Video Streaming MJPEG 78 Frame Type Descriptor' 79 */ 80 #ifdef UVC_DEMO_SUPPORT100 81 typedef enum 82 { 83 U2_FRAME_640_480 = 1, 84 U2_FRAME_640_360 = 2, 85 U2_FRAME_320_240 = 3, 86 U2_FRAME_168_120 = 4, 87 } E_FRAME_ID_USB20; 88 89 typedef enum 90 { 91 U1_FRAME_640_480 = 1, 92 U1_FRAME_160_120 = 2, 93 } E_FRAME_ID_USB11; 94 #elif defined(UVC_DEMO_SUPPORT102) 95 typedef enum 96 { 97 UVC_FRAME_160_120 = 0, 98 UVC_FRAME_176_144 = 1, 99 UVC_FRAME_352_288 = 2, 100 UVC_FRAME_320_240 = 3, 101 UVC_FRAME_480_320 = 4, 102 UVC_FRAME_480_800 = 5, 103 UVC_FRAME_640_320 = 6, 104 UVC_FRAME_640_360 = 7, 105 UVC_FRAME_640_480 = 8, 106 UVC_FRAME_800_400 = 9, 107 UVC_FRAME_800_480 = 10, 108 UVC_FRAME_800_600 = 11, 109 UVC_FRAME_960_540 = 12, 110 UVC_FRAME_1280_720 =13, 111 UVC_FRAME_COUNT 112 } E_FRAME_ID_USB20; 113 #endif 114 115 typedef enum 116 { 117 FPS_60 = 60, 118 FPS_30 = 30, 119 FPS_25 = 25, 120 FPS_20 = 20, 121 FPS_15 = 15, 122 FPS_10 = 10, 123 FPS_5 = 5, 124 } E_FRAME_RATE_ID; 125 126 typedef struct 127 { 128 uint32_t fps; 129 uint32_t width; 130 uint32_t height; 131 } UVC_ResolutionFramerate; 132 133 /* 134 * Finish DRC interrupt processing 135 */ 136 enum 137 { 138 BSR_NONE_EVENT = 0, 139 BSR_ERROR_EVENT, 140 BSR_CONNECT_EVENT, 141 BSR_CONNECTED_EVENT, 142 143 BSR_DISCONNECT_EVENT, 144 BSR_READ_OK_EVENT, 145 BSR_WRITE_OK_EVENT 146 }; 147 148 /******************************************************************************* 149 * Function Declarations 150 *******************************************************************************/ 151 extern void usb_init(void); 152 extern void usb_exit(void); 153 extern uint32_t MUSB_HfiRead( uint32_t first_block, uint32_t block_num, uint8_t 154 *dest); 155 extern uint32_t MUSB_HfiWrite( uint32_t first_block, uint32_t block_num, uint8_t 156 *dest); 157 extern void MGC_RegisterCBTransferComplete(FUNCPTR func); 158 extern uint8_t MUSB_GetConnect_Flag(void); 159 160 extern void fuvc_test_init(uint8_t); 161 extern void printf_test_buff(void); 162 extern bk_err_t bk_usb_init(void); 163 extern bk_err_t bk_usb_deinit(void); 164 extern bk_err_t bk_usb_open (uint32_t usb_mode); 165 extern bk_err_t bk_usb_close (void); 166 extern bk_err_t bk_uvc_start(void); 167 extern bk_err_t bk_uvc_stop(void); 168 extern bk_err_t bk_uvc_set_parameter(uint32_t resolution_id, uint32_t fps); 169 extern bk_err_t bk_uvc_register_rx_vstream_buffptr(void *param); 170 extern bk_err_t bk_uvc_register_rx_vstream_bufflen(uint32_t param); 171 extern bk_err_t bk_uvc_receive_video_stream(); 172 extern bk_err_t bk_uvc_register_disconnect_callback(void *param); 173 extern bk_err_t bk_uvc_register_config_callback(void *param); 174 extern bk_err_t bk_uvc_register_VSrxed_callback(void *param); 175 extern bk_err_t bk_uvc_register_VSrxed_packet_callback(void *param); 176 extern bk_err_t bk_uvc_register_link(uint32_t param); 177 extern bk_err_t bk_uvc_set_cur(uint32_t attribute, uint32_t param); 178 extern uint32_t bk_uvc_get_cur(uint32_t attribute); 179 extern uint32_t bk_uvc_get_min(uint32_t attribute); 180 extern uint32_t bk_uvc_get_max(uint32_t attribute); 181 extern uint32_t bk_uvc_get_res(uint32_t attribute); 182 extern uint32_t bk_uvc_get_len(uint32_t attribute); 183 extern uint32_t bk_uvc_get_info(uint32_t attribute); 184 extern uint32_t bk_uvc_get_def(uint32_t attribute); 185 extern void bk_uvc_get_resolution_framerate(void *param, uint16_t count); 186 187 #if (CONFIG_SOC_BK7251) || (CONFIG_SOC_BK7271) 188 #define USB_PLUG_FAILURE (1) 189 #define USB_PLUG_SUCCESS (0) 190 191 #define USB_PLUG_DEV_NAME "usb_plug" 192 #include "bk_gpio.h" 193 194 void usb_plug_inout_init(void); 195 void usb_plug_inout_exit(void); 196 #endif // (CONFIG_SOC_BK7251) 197 198 #ifdef __cplusplus 199 } 200 #endif 201