1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <stdint.h>
5 #include <rtthread.h>
6 #include <hal_mem.h>
7 #include <hal_cmd.h>
8 #include "dev_disp.h"
printf_from_to(unsigned long from,unsigned long to)9 static void printf_from_to(unsigned long from, unsigned long to)
10 {
11     unsigned int num = (to - from)/16;
12     while(num--){
13         printf("0x%08lx: ",from);
14         printf("0x%08x 0x%08x 0x%08x 0x%08x\n",
15             (*((volatile unsigned int  *)(from))),
16             (*((volatile unsigned int  *)(from+4))),
17             (*((volatile unsigned int  *)(from+8))),
18             (*((volatile unsigned int  *)(from+12)))
19         );
20         from+=16;
21     }
22 }
print_reg(void)23 static void print_reg(void)
24 {
25     printf("=========dump register================\n");
26     printf("DE top register\n\n");
27     printf_from_to(0x05000000,0x050000f0);
28     printf("DE global register\n\n");
29     printf_from_to(0x05100000,0x05100020);
30     printf("DE blender register\n");
31     printf_from_to(0x05101000,0x05101100);
32 
33     printf("DE VI overlay (channel 0) register\n");
34     printf_from_to(0x05102000,0x051020ff);
35     printf("DE UI overlay (channel 1) register\n");
36     printf_from_to(0x05103000,0x051030ff);
37 
38     printf("DE VI scaler register\n");
39     printf_from_to(0x05120000,0x05121000);
40 
41     printf("DE UI scaler (channel 1) register\n");
42     printf_from_to(0x05140000,0x05141000);
43 
44     printf("tcon lcd0\n");
45     printf_from_to(0x05461000,0x05461240);
46     printf("disp if top\n");
47     printf_from_to(0x05460000,0x05460100);
48     printf("csc\n");
49     printf_from_to(0x51b0000,0x51b00ff);
50 }
cmd_disp_debug(int argc,const char ** argv)51 static int cmd_disp_debug(int argc, const char **argv)
52 {
53     int i = 0, err = 0;
54     struct disp_manager *mgr = NULL;
55     u32 num_screens;
56     char tmp[10] = {0};
57 
58     num_screens = bsp_disp_feat_get_num_screens();
59 
60 
61     if (argc == 1) {
62         disp_sys_show();
63     } else {
64 
65         while(i < argc) {
66             /*colorbar*/
67             if ( ! strcmp(argv[i], "-c")) {
68                 if (argc > i+2) {
69                     i+=1;
70                     disp_colorbar_store(atoi(argv[i]), atoi(argv[i + 1]));
71                     i+=1;
72                 } else {
73                     DE_WRN("-c para error!\n");
74                     err++;
75                 }
76             }
77             if ( ! strcmp(argv[i], "-r")) {
78                 print_reg();
79             }
80             /*switch display*/
81             if ( ! strcmp(argv[i], "-s")) {
82                 if (argc > i+3) {
83                     i+=1;
84                     bsp_disp_device_switch(atoi(argv[i]), atoi(argv[i + 1]), atoi(argv[i + 2]));
85                     i+=2;
86                 } else {
87                     DE_WRN("-s para error!\n");
88                     err++;
89                 }
90             }
91             /*dump de data*/
92             if ( ! strcmp(argv[i], "-d")) {
93                 if (argc > i+2) {
94                     i+=1;
95                     disp_capture_dump(atoi(argv[i]), argv[i + 1]);
96                     i+=1;
97                 } else {
98                     DE_WRN("-d para error!\n");
99                     err++;
100                 }
101             }
102 
103             /*enhance */
104             if ( ! strcmp(argv[i], "-e")) {
105                 if (argc > i+2) {
106                     i+=1;
107 
108                     switch(argv[i][0]) {
109                     case 'm'://mode
110                         disp_enhance_mode_store(atoi(argv[i + 1]), atoi(argv[i + 2]));
111                         break;
112                     case 's'://saturation
113                         disp_enhance_saturation_store(atoi(argv[i + 1]), atoi(argv[i + 2]));
114                         break;
115                     case 'b'://bright
116                         disp_enhance_bright_store(atoi(argv[i + 1]), atoi(argv[i + 2]));
117                         break;
118                     case 'c'://contrast
119                         disp_enhance_contrast_store(atoi(argv[i + 1]), atoi(argv[i + 2]));
120                         break;
121                     case 'g'://gamma color_temperature
122                         printf("gamma %s %s %d %d\n",argv[i + 1],argv[i + 2],atoi(argv[i + 1]), atoi(argv[i + 2]));
123                         disp_color_temperature_store(atoi(argv[i + 1]), atoi(argv[i + 2]));
124                         break;
125                     case 'n'://denoise
126                         disp_enhance_denoise_store(atoi(argv[i + 1]), atoi(argv[i + 2]));
127                         break;
128                     case 'd'://detail
129                         disp_enhance_detail_store(atoi(argv[i + 1]), atoi(argv[i + 2]));
130                         break;
131                     case 'p'://print
132 
133                         if (atoi(argv[i + 1]) < 0 || atoi(argv[i + 1]) > 1) {
134                             i-=1;
135                             DE_WRN("para error!\n");
136                             break;
137                         }
138                         DISP_PRINT("screen %d:\n", atoi(argv[i + 1]));
139                         disp_enhance_mode_show(atoi(argv[i + 1]), tmp);
140                         DISP_PRINT("mode %s\n", tmp);
141                         disp_enhance_saturation_show(atoi(argv[i + 1]), tmp);
142                         DISP_PRINT("saturation %s\n", tmp);
143                         disp_enhance_bright_show(atoi(argv[i + 1]), tmp);
144                         DISP_PRINT("bright %s\n", tmp);
145                         disp_enhance_contrast_show(atoi(argv[i + 1]), tmp);
146                         DISP_PRINT("contrast %s\n", tmp);
147                         disp_color_temperature_show(atoi(argv[i + 1]), tmp);
148                         DISP_PRINT("color_temperature %s\n", tmp);
149                         disp_enhance_denoise_show(atoi(argv[i + 1]), tmp);
150                         DISP_PRINT("denoise %s\n", tmp);
151                         disp_enhance_detail_show(atoi(argv[i + 1]), tmp);
152                         DISP_PRINT("detail %s\n", tmp);
153                         i-=1;
154                         break;
155                     default:
156                         DE_WRN("para error!\n");
157                         break;
158                     }
159                     i+=2;
160                 } else {
161                     DE_WRN("para error!\n");
162                     err++;
163                 }
164             }
165 
166             /*backlight*/
167             if ( ! strcmp(argv[i], "-b")) {
168                 if (argc > i+2) {
169                     i+=1;
170                     if (atoi(argv[i]) < num_screens) {
171                         DE_WRN("set backligt:lcd%d %d\n", atoi(argv[i]), atoi(argv[i + 1]));
172                         mgr = g_disp_drv.mgr[atoi(argv[i])];
173                         mgr->device->set_bright(mgr->device, atoi(argv[i + 1]));
174                     }
175                     i+=1;
176                 } else {
177                     DE_WRN("-b para error!\n");
178                     err++;
179                 }
180             }
181             ++i;
182         }
183     }
184     return 0;
185 }
186 
187 FINSH_FUNCTION_EXPORT_ALIAS(cmd_disp_debug, __cmd_disp, disp cmd);
188