disp_debug.c 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  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"
  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. }
  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. printf("DE VI overlay (channel 0) register\n");
  33. printf_from_to(0x05102000,0x051020ff);
  34. printf("DE UI overlay (channel 1) register\n");
  35. printf_from_to(0x05103000,0x051030ff);
  36. printf("DE VI scaler register\n");
  37. printf_from_to(0x05120000,0x05121000);
  38. printf("DE UI scaler (channel 1) register\n");
  39. printf_from_to(0x05140000,0x05141000);
  40. printf("tcon lcd0\n");
  41. printf_from_to(0x05461000,0x05461240);
  42. printf("disp if top\n");
  43. printf_from_to(0x05460000,0x05460100);
  44. printf("csc\n");
  45. printf_from_to(0x51b0000,0x51b00ff);
  46. }
  47. static int cmd_disp_debug(int argc, const char **argv)
  48. {
  49. int i = 0, err = 0;
  50. struct disp_manager *mgr = NULL;
  51. u32 num_screens;
  52. char tmp[10] = {0};
  53. num_screens = bsp_disp_feat_get_num_screens();
  54. if (argc == 1) {
  55. disp_sys_show();
  56. } else {
  57. while(i < argc) {
  58. /*colorbar*/
  59. if ( ! strcmp(argv[i], "-c")) {
  60. if (argc > i+2) {
  61. i+=1;
  62. disp_colorbar_store(atoi(argv[i]), atoi(argv[i + 1]));
  63. i+=1;
  64. } else {
  65. DE_WRN("-c para error!\n");
  66. err++;
  67. }
  68. }
  69. if ( ! strcmp(argv[i], "-r")) {
  70. print_reg();
  71. }
  72. /*switch display*/
  73. if ( ! strcmp(argv[i], "-s")) {
  74. if (argc > i+3) {
  75. i+=1;
  76. bsp_disp_device_switch(atoi(argv[i]), atoi(argv[i + 1]), atoi(argv[i + 2]));
  77. i+=2;
  78. } else {
  79. DE_WRN("-s para error!\n");
  80. err++;
  81. }
  82. }
  83. /*dump de data*/
  84. if ( ! strcmp(argv[i], "-d")) {
  85. if (argc > i+2) {
  86. i+=1;
  87. disp_capture_dump(atoi(argv[i]), argv[i + 1]);
  88. i+=1;
  89. } else {
  90. DE_WRN("-d para error!\n");
  91. err++;
  92. }
  93. }
  94. /*enhance */
  95. if ( ! strcmp(argv[i], "-e")) {
  96. if (argc > i+2) {
  97. i+=1;
  98. switch(argv[i][0]) {
  99. case 'm'://mode
  100. disp_enhance_mode_store(atoi(argv[i + 1]), atoi(argv[i + 2]));
  101. break;
  102. case 's'://saturation
  103. disp_enhance_saturation_store(atoi(argv[i + 1]), atoi(argv[i + 2]));
  104. break;
  105. case 'b'://bright
  106. disp_enhance_bright_store(atoi(argv[i + 1]), atoi(argv[i + 2]));
  107. break;
  108. case 'c'://contrast
  109. disp_enhance_contrast_store(atoi(argv[i + 1]), atoi(argv[i + 2]));
  110. break;
  111. case 'g'://gamma color_temperature
  112. printf("gamma %s %s %d %d\n",argv[i + 1],argv[i + 2],atoi(argv[i + 1]), atoi(argv[i + 2]));
  113. disp_color_temperature_store(atoi(argv[i + 1]), atoi(argv[i + 2]));
  114. break;
  115. case 'n'://denoise
  116. disp_enhance_denoise_store(atoi(argv[i + 1]), atoi(argv[i + 2]));
  117. break;
  118. case 'd'://detail
  119. disp_enhance_detail_store(atoi(argv[i + 1]), atoi(argv[i + 2]));
  120. break;
  121. case 'p'://print
  122. if (atoi(argv[i + 1]) < 0 || atoi(argv[i + 1]) > 1) {
  123. i-=1;
  124. DE_WRN("para error!\n");
  125. break;
  126. }
  127. DISP_PRINT("screen %d:\n", atoi(argv[i + 1]));
  128. disp_enhance_mode_show(atoi(argv[i + 1]), tmp);
  129. DISP_PRINT("mode %s\n", tmp);
  130. disp_enhance_saturation_show(atoi(argv[i + 1]), tmp);
  131. DISP_PRINT("saturation %s\n", tmp);
  132. disp_enhance_bright_show(atoi(argv[i + 1]), tmp);
  133. DISP_PRINT("bright %s\n", tmp);
  134. disp_enhance_contrast_show(atoi(argv[i + 1]), tmp);
  135. DISP_PRINT("contrast %s\n", tmp);
  136. disp_color_temperature_show(atoi(argv[i + 1]), tmp);
  137. DISP_PRINT("color_temperature %s\n", tmp);
  138. disp_enhance_denoise_show(atoi(argv[i + 1]), tmp);
  139. DISP_PRINT("denoise %s\n", tmp);
  140. disp_enhance_detail_show(atoi(argv[i + 1]), tmp);
  141. DISP_PRINT("detail %s\n", tmp);
  142. i-=1;
  143. break;
  144. default:
  145. DE_WRN("para error!\n");
  146. break;
  147. }
  148. i+=2;
  149. } else {
  150. DE_WRN("para error!\n");
  151. err++;
  152. }
  153. }
  154. /*backlight*/
  155. if ( ! strcmp(argv[i], "-b")) {
  156. if (argc > i+2) {
  157. i+=1;
  158. if (atoi(argv[i]) < num_screens) {
  159. DE_WRN("set backligt:lcd%d %d\n", atoi(argv[i]), atoi(argv[i + 1]));
  160. mgr = g_disp_drv.mgr[atoi(argv[i])];
  161. mgr->device->set_bright(mgr->device, atoi(argv[i + 1]));
  162. }
  163. i+=1;
  164. } else {
  165. DE_WRN("-b para error!\n");
  166. err++;
  167. }
  168. }
  169. ++i;
  170. }
  171. }
  172. return 0;
  173. }
  174. FINSH_FUNCTION_EXPORT_ALIAS(cmd_disp_debug, __cmd_disp, disp cmd);