• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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