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 #include <os/os.h>
16 #include <components/log.h>
17 #include "cli.h"
18 #include "media_cli.h"
19 #include "aud_api.h"
20
21 #include "media_cli_comm.h"
22 #include "media_app.h"
23
24 #include <driver/dvp_camera.h>
25
26 #define TAG "mcli"
27
28 #define LOGI(...) BK_LOGI(TAG, ##__VA_ARGS__)
29 #define LOGE(...) BK_LOGE(TAG, ##__VA_ARGS__)
30
31 #define UNKNOW_ERROR (-686)
32 #define CMD_CONTAIN(value) cmd_contain(argc, argv, value)
33 #define GET_PPI(value) get_ppi_from_cmd(argc, argv, value)
34
35
get_string_to_ppi(char * string,uint32_t pre)36 uint32_t get_string_to_ppi(char *string, uint32_t pre)
37 {
38 uint32_t value = pre;
39
40 if (os_strcmp(string, "1280X720") == 0)
41 {
42 value = PPI_1280X720;
43 }
44
45 if (os_strcmp(string, "1024X600") == 0)
46 {
47 value = PPI_1024X600;
48 }
49
50 if (os_strcmp(string, "640X480") == 0)
51 {
52 value = PPI_640X480;
53 }
54
55 if (os_strcmp(string, "480X320") == 0)
56 {
57 value = PPI_480X320;
58 }
59
60 if (os_strcmp(string, "480X272") == 0)
61 {
62 value = PPI_480X272;
63 }
64
65 if (os_strcmp(string, "320X480") == 0)
66 {
67 value = PPI_320X480;
68 }
69
70 if (os_strcmp(string, "480X800") == 0)
71 {
72 value = PPI_480X800;
73 }
74
75 if (os_strcmp(string, "800X480") == 0)
76 {
77 value = PPI_800X480;
78 }
79
80 return value;
81 }
82
get_ppi_from_cmd(int argc,char ** argv,uint32_t pre)83 uint32_t get_ppi_from_cmd(int argc, char **argv, uint32_t pre)
84 {
85 int i;
86 uint32_t value = pre;
87
88 for (i = 0; i < argc; i++)
89 {
90 value = get_string_to_ppi(argv[i], pre);
91
92 if (value != pre)
93 {
94 break;
95 }
96 }
97
98 return value;
99 }
100
101
cmd_contain(int argc,char ** argv,char * string)102 bool cmd_contain(int argc, char **argv, char *string)
103 {
104 int i;
105 bool ret = false;
106
107 for (i = 0; i < argc; i++)
108 {
109 if (os_strcmp(argv[i], string) == 0)
110 {
111 ret = true;
112 }
113 }
114
115 return ret;
116 }
117
118
119
media_cli_test_cmd(char * pcWriteBuffer,int xWriteBufferLen,int argc,char ** argv)120 void media_cli_test_cmd(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv)
121 {
122 int ret = UNKNOW_ERROR;
123
124 LOGI("%s\n", __func__);
125
126 if (argc > 0)
127 {
128 if (os_strcmp(argv[1], "dvp") == 0)
129 {
130 #if (defined(CONFIG_CAMERA) && !defined(CONFIG_SLAVE_CORE))
131 media_ppi_t ppi = GET_PPI(PPI_DEFAULT);
132
133 if (os_strcmp(argv[2], "open") == 0)
134 {
135 if (CMD_CONTAIN("yuv"))
136 {
137 LOGI("YUV open\n");
138 ret = media_app_camera_open(APP_CAMERA_YUV, ppi);
139 }
140 else
141 {
142 LOGI("DVP open\n");
143 ret = media_app_camera_open(APP_CAMERA_DVP, ppi);
144 }
145 }
146
147 if (os_strcmp(argv[2], "close") == 0)
148 {
149 if (CMD_CONTAIN("yuv"))
150 {
151 ret = media_app_camera_close(APP_CAMERA_YUV);
152 }
153 else
154 {
155 ret = media_app_camera_close(APP_CAMERA_DVP);
156 }
157 }
158
159 if (os_strcmp(argv[2], "auto_encode") == 0)
160 {
161 uint8_t auto_enable = 0;
162 uint32_t up_size = 0, low_size = 0;
163
164 auto_enable = os_strtoul(argv[3], NULL, 10) & 0xF;
165 if (auto_enable)
166 {
167 up_size = os_strtoul(argv[4], NULL, 10) * 1024;
168 low_size = os_strtoul(argv[5], NULL, 10) * 1024;
169 }
170
171 ret = bk_dvp_camera_encode_config(auto_enable, up_size, low_size);
172 }
173 #endif
174 }
175
176 #ifdef CONFIG_AUDIO
177 if (os_strcmp(argv[1], "adc") == 0)
178 {
179 ret = adc_open();
180 }
181
182 if (os_strcmp(argv[1], "dac") == 0)
183 {
184 ret = dac_open();
185 }
186 #endif
187
188 if (os_strcmp(argv[1], "capture") == 0)
189 {
190 LOGI("capture\n");
191 #if defined(CONFIG_CAMERA) && !defined(CONFIG_SLAVE_CORE)
192
193 if (argc >= 3)
194 {
195 ret = media_app_capture(argv[2]);
196 }
197 else
198 {
199 ret = media_app_capture("unknow.jpg");
200 }
201 #endif
202 }
203
204 if (os_strcmp(argv[1], "lcd") == 0)
205 {
206 #if defined(CONFIG_LCD) && !defined(CONFIG_SLAVE_CORE)
207 media_ppi_t ppi = PPI_480X272;
208
209 ppi = GET_PPI(PPI_480X272);
210
211 if (CMD_CONTAIN("rotate"))
212 {
213 media_app_lcd_rotate(true);
214 }
215
216 if (os_strcmp(argv[2], "open") == 0)
217 {
218 ret = media_app_lcd_open(ppi);
219 }
220
221 if (os_strcmp(argv[2], "close") == 0)
222 {
223 ret = media_app_lcd_close();
224 }
225
226 if (os_strcmp(argv[2], "backlight") == 0)
227 {
228 uint8_t level = os_strtoul(argv[3], NULL, 10) & 0xFF;
229 ret = media_app_lcd_set_backlight(level);
230 }
231
232 if (os_strcmp(argv[2], "step") == 0)
233 {
234 if (CMD_CONTAIN("enable"))
235 {
236 ret = media_app_lcd_step_mode(true);
237 }
238
239 if (CMD_CONTAIN("disable"))
240 {
241 ret = media_app_lcd_step_mode(false);
242 }
243
244 if (CMD_CONTAIN("trigger"))
245 {
246 ret = media_app_lcd_step_trigger();
247 }
248 }
249 #endif
250 }
251 if (os_strcmp(argv[1], "uvc") == 0)
252 {
253 #if defined(CONFIG_USB_UVC) && !defined(CONFIG_SLAVE_CORE)
254 media_ppi_t ppi = GET_PPI(PPI_DEFAULT);
255
256 if (os_strcmp(argv[2], "open") == 0)
257 {
258 ret = media_app_camera_open(APP_CAMERA_UVC, ppi);
259 }
260
261 if (os_strcmp(argv[2], "close") == 0)
262 {
263 ret = media_app_camera_close(APP_CAMERA_UVC);
264 }
265 #endif
266 }
267
268 #ifdef CONFIG_MASTER_CORE
269 if (os_strcmp(argv[1], "mb") == 0)
270 {
271 ret = media_app_mailbox_test();
272 }
273 #endif
274
275 if (os_strcmp(argv[1], "dump") == 0)
276 {
277 #if defined(CONFIG_LCD) && !defined(CONFIG_SLAVE_CORE)
278
279 if (CMD_CONTAIN("decoder"))
280 {
281 ret = media_app_dump_decoder_frame();
282 }
283
284 if (CMD_CONTAIN("jpeg"))
285 {
286 ret = media_app_dump_jpeg_frame();
287 }
288
289 if (CMD_CONTAIN("display"))
290 {
291 ret = media_app_dump_display_frame();
292 }
293 #endif
294
295 }
296
297 #ifdef CONFIG_MASTER_CORE
298 if (os_strcmp(argv[1], "transfer") == 0)
299 {
300 if (os_strcmp(argv[2], "pause") == 0
301 && os_strcmp(argv[3], "0") == 0)
302 {
303 media_app_transfer_pause(false);
304 }
305
306 if (os_strcmp(argv[2], "pause") == 0
307 && os_strcmp(argv[3], "1") == 0)
308 {
309 media_app_transfer_pause(true);
310 }
311
312 }
313 #endif
314 }
315
316 if (ret == UNKNOW_ERROR)
317 {
318 LOGE("%s unknow cmd\n", __func__);
319 }
320 }
321
322
323
324 #define MEDIA_CMD_CNT (sizeof(s_media_commands) / sizeof(struct cli_command))
325
326 static const struct cli_command s_media_commands[] =
327 {
328 {"media", "meida...", media_cli_test_cmd},
329 };
330
media_cli_init(void)331 int media_cli_init(void)
332 {
333 return cli_register_commands(s_media_commands, MEDIA_CMD_CNT);
334 }
335