• 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 #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