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