This source file includes following definitions.
- gui_debug_init
- gui_debug_draw_values
- gui_debug_draw
- gui_debug_kbd_process
- gui_module_menu_kbd_process
- _run
- _module_can_unload
- _module_exit_alt
1 #include "camera_info.h"
2 #include "keyboard.h"
3 #include "gui.h"
4 #include "gui_draw.h"
5 #include "gui_lang.h"
6 #include "conf.h"
7
8 #include "module_def.h"
9 #include "simple_module.h"
10
11
12 void gui_debug_draw();
13
14
15
16 void gui_module_menu_kbd_process();
17 int gui_debug_kbd_process();
18
19 gui_handler GUI_MODE_DEBUG =
20 { GUI_MODE_MODULE, gui_debug_draw, gui_debug_kbd_process, gui_module_menu_kbd_process, 0, 0 };
21
22
23 static int running = 0;
24 static void *addr;
25 static char debug_to_draw;
26 static char debug_cont_update;
27 static char buf[32];
28 static char *bad_address = "Invalid Address ";
29 static unsigned int step;
30
31
32 void gui_debug_init(void *st_addr)
33 {
34 running = 1;
35 addr = st_addr;
36 debug_to_draw = 1;
37 debug_cont_update = 1;
38 step = 4;
39 gui_set_mode(&GUI_MODE_DEBUG);
40 }
41
42
43 static void gui_debug_draw_values(const coord y, void* addr) {
44 int i;
45
46 if (addr<=(void*)camera_info.maxramaddr || (addr>=(void*)camera_info.rombaseaddr && (unsigned)addr <= 0xfffffffc))
47 {
48 sprintf(buf, "0x%08X (%10u)", *((unsigned int*)addr), *((unsigned int*)addr));
49 draw_string(10*FONT_WIDTH, y, buf, MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
50
51 sprintf(buf, "0x%04X ( %5hu)", *((unsigned short*)addr), *((unsigned short*)addr));
52 draw_string(10*FONT_WIDTH, y+FONT_HEIGHT, buf, MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
53
54 sprintf(buf, "0x%02X ( %3hu)", *((unsigned char*)addr), *((unsigned char*)addr));
55 draw_string(10*FONT_WIDTH, y+2*FONT_HEIGHT, buf, MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
56
57 for (i=0; i<30; ++i) {
58 if (*((char*)(addr+i))) buf[i]=*((char*)(addr+i));
59 else break;
60 }
61 while (i<30) {
62 buf[i++]=' ';
63 }
64 buf[i]=0;
65 draw_string(10*FONT_WIDTH, y+3*FONT_HEIGHT, buf, MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
66 }
67 else
68 {
69 draw_string(10*FONT_WIDTH, y, bad_address, MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
70 draw_string(10*FONT_WIDTH, y+FONT_HEIGHT, bad_address, MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
71 draw_string(10*FONT_WIDTH, y+2*FONT_HEIGHT, bad_address, MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
72 draw_string(10*FONT_WIDTH, y+3*FONT_HEIGHT, bad_address, MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
73 }
74 }
75
76
77 void gui_debug_draw() {
78 switch (debug_to_draw) {
79 case 1:
80 draw_rectangle(camera_screen.disp_left, 0, camera_screen.disp_right, camera_screen.height-1, MAKE_COLOR(COLOR_BLACK, COLOR_BLACK), RECT_BORDER0|DRAW_FILLED);
81 draw_string(1*FONT_WIDTH, 0*FONT_HEIGHT, "Address:", MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
82 draw_string(22*FONT_WIDTH,0*FONT_HEIGHT, "Incr:", MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
83 draw_string(39*FONT_WIDTH,0*FONT_HEIGHT, "Auto:", MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
84 draw_string(1*FONT_WIDTH, 1*FONT_HEIGHT, "Values:", MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
85 draw_string(2*FONT_WIDTH, 2*FONT_HEIGHT, "DWORD :", MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
86 draw_string(2*FONT_WIDTH, 3*FONT_HEIGHT, "WORD :", MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
87 draw_string(2*FONT_WIDTH, 4*FONT_HEIGHT, "BYTE :", MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
88 draw_string(2*FONT_WIDTH, 5*FONT_HEIGHT, "STRING :", MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
89 draw_string(1*FONT_WIDTH, 7*FONT_HEIGHT, "Dereferencing:", MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
90 draw_string(2*FONT_WIDTH, 8*FONT_HEIGHT, "DWORD :", MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
91 draw_string(2*FONT_WIDTH, 9*FONT_HEIGHT, "WORD :", MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
92 draw_string(2*FONT_WIDTH, 10*FONT_HEIGHT,"BYTE :", MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
93 draw_string(2*FONT_WIDTH, 11*FONT_HEIGHT,"STRING :", MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
94
95 debug_to_draw = 2;
96 break;
97 case 2:
98 sprintf(buf, "0x%08X", addr);
99 draw_string(10*FONT_WIDTH, 0, buf, MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
100 sprintf(buf, "0x%08X", step);
101 draw_string(28*FONT_WIDTH, 0, buf, MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
102 sprintf(buf,"%0d",debug_cont_update);
103 draw_string(44*FONT_WIDTH, 0, buf, MAKE_COLOR(COLOR_BLACK, COLOR_WHITE));
104 gui_debug_draw_values(2*FONT_HEIGHT, addr);
105 if (addr<=(void*)camera_info.maxramaddr || (addr>=(void*)camera_info.rombaseaddr && (unsigned)addr <= 0xfffffffc))
106 gui_debug_draw_values(8*FONT_HEIGHT, *((void**)addr));
107 else
108 gui_debug_draw_values(8*FONT_HEIGHT, addr);
109 conf.mem_view_addr_init = (long)addr;
110
111 if (debug_cont_update==0) debug_to_draw = 0;
112 break;
113 default:
114 debug_to_draw = 0;
115 break;
116 }
117 }
118
119
120 int gui_debug_kbd_process() {
121 switch (kbd_get_autoclicked_key()) {
122 case KEY_DOWN:
123 break;
124 case KEY_UP:
125 debug_cont_update = !debug_cont_update;
126 debug_to_draw = 2;
127 break;
128 case KEY_LEFT:
129 addr-=step;
130 debug_to_draw = 2;
131 break;
132 case KEY_RIGHT:
133 addr+=step;
134 debug_to_draw = 2;
135 break;
136 case KEY_DISPLAY:
137 case KEY_SHOOT_HALF:
138 switch (step) {
139 case 0x00000004: step = 0x00000010; break;
140 case 0x10000000: step = 0x00000004; break;
141 default: step<<=4; break;
142 }
143 debug_to_draw = 2;
144 break;
145 case KEY_ZOOM_IN:
146 switch (step) {
147 case 0x00000010: step = 0x0000004; break;
148 case 0x00000004: break;
149 default: step>>=4; break;
150 }
151 debug_to_draw = 2;
152 break;
153 case KEY_ZOOM_OUT:
154 switch (step) {
155 case 0x00000004: step = 0x00000010; break;
156 case 0x10000000: break;
157 default: step<<=4; break;
158 }
159 debug_to_draw = 2;
160 break;
161 }
162 return 0;
163 }
164
165
166
167 void gui_module_menu_kbd_process()
168 {
169 running = 0;
170 gui_default_kbd_process_menu_btn();
171 }
172
173
174
175
176
177
178
179
180 int _run()
181 {
182 void* adr =(char*)(conf.mem_view_addr_init);
183 gui_debug_init(adr);
184
185 return 0;
186 }
187
188 int _module_can_unload()
189 {
190 return running == 0;
191 }
192
193 int _module_exit_alt()
194 {
195 running = 0;
196 return 0;
197 }
198
199
200
201 libsimple_sym _librun =
202 {
203 {
204 0, 0, _module_can_unload, _module_exit_alt, _run
205 }
206 };
207
208 ModuleInfo _module_info =
209 {
210 MODULEINFO_V1_MAGICNUM,
211 sizeof(ModuleInfo),
212 SIMPLE_MODULE_VERSION,
213
214 ANY_CHDK_BRANCH, 0, OPT_ARCHITECTURE,
215 ANY_PLATFORM_ALLOWED,
216
217 -LANG_MENU_DEBUG_MEMORY_BROWSER,
218 MTYPE_TOOL,
219
220 &_librun.base,
221
222 CONF_VERSION,
223 CAM_SCREEN_VERSION,
224 ANY_VERSION,
225 CAM_INFO_VERSION,
226
227 0x2a,
228 };
229
230