Rev 2911 | Rev 2922 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2911 | Rev 2915 | ||
|---|---|---|---|
| Line 34... | Line 34... | ||
| 34 | 34 | ||
| 35 | #include <stdio.h> |
35 | #include <stdio.h> |
| 36 | #include <stdlib.h> |
36 | #include <stdlib.h> |
| 37 | #include <string.h> |
37 | #include <string.h> |
| 38 | #include <bool.h> |
38 | #include <bool.h> |
| - | 39 | #include <udebug.h> |
|
| - | 40 | #include <sys/types.h> |
|
| 39 | 41 | ||
| - | 42 | #include "main.h" |
|
| 40 | #include "cmd.h" |
43 | #include "cmd.h" |
| 41 | 44 | ||
| 42 | static void cmd_break(int argc, char *argv[]); |
45 | static void cmd_break(int argc, char *argv[]); |
| 43 | void cmd_help(int argc, char *argv[]); |
46 | void cmd_help(int argc, char *argv[]); |
| - | 47 | static void cmd_read(int argc, char *argv[]); |
|
| 44 | static void cmd_quit(int argc, char *argv[]); |
48 | static void cmd_quit(int argc, char *argv[]); |
| 45 | 49 | ||
| 46 | volatile bool quit = false; |
50 | volatile bool quit = false; |
| 47 | 51 | ||
| 48 | cmd_desc_t cmd_table[] = { |
52 | cmd_desc_t cmd_table[] = { |
| 49 | { 1, "break", cmd_break }, |
53 | { 1, "break", cmd_break }, |
| 50 | { 0, "help", cmd_help }, |
54 | { 0, "help", cmd_help }, |
| - | 55 | { 2, "read", cmd_read }, |
|
| 51 | { 0, "quit", cmd_quit }, |
56 | { 0, "quit", cmd_quit }, |
| 52 | { -1, NULL, NULL } |
57 | { -1, NULL, NULL } |
| 53 | }; |
58 | }; |
| 54 | 59 | ||
| 55 | static void cmd_break(int argc, char *argv[]) |
60 | static void cmd_break(int argc, char *argv[]) |
| 56 | { |
61 | { |
| 57 | uintptr_t addr; |
62 | uintptr_t addr; |
| - | 63 | char brkp[1]; |
|
| - | 64 | int rc; |
|
| 58 | 65 | ||
| 59 | (void)argc; |
66 | (void)argc; |
| 60 | addr = strtoul(argv[1], NULL, 0); |
67 | addr = strtoul(argv[1], NULL, 0); |
| 61 | 68 | ||
| 62 | printf("You requested a breakpoint at 0x%x\n", addr); |
69 | printf("You requested a breakpoint at 0x%x\n", addr); |
| - | 70 | brkp[0] = 0xcc; |
|
| - | 71 | rc = udebug_mem_write(app_phone, brkp, addr, 1); |
|
| - | 72 | printf("udebug_mem_write() -> %d\n", rc); |
|
| 63 | } |
73 | } |
| 64 | 74 | ||
| 65 | void cmd_help(int argc, char *argv[]) |
75 | void cmd_help(int argc, char *argv[]) |
| 66 | { |
76 | { |
| 67 | int i; |
77 | int i; |
| Line 72... | Line 82... | ||
| 72 | printf("%s\n", cmd_table[i].name); |
82 | printf("%s\n", cmd_table[i].name); |
| 73 | ++i; |
83 | ++i; |
| 74 | } |
84 | } |
| 75 | } |
85 | } |
| 76 | 86 | ||
| - | 87 | #define BYTES_PER_LINE 16 |
|
| - | 88 | ||
| - | 89 | static void cmd_read(int argc, char *argv[]) |
|
| - | 90 | { |
|
| - | 91 | uintptr_t addr; |
|
| - | 92 | size_t length; |
|
| - | 93 | uint8_t buf[BYTES_PER_LINE]; |
|
| - | 94 | int to_read, i; |
|
| - | 95 | int rc; |
|
| - | 96 | ||
| - | 97 | (void)argc; |
|
| - | 98 | addr = strtoul(argv[1], NULL, 0); |
|
| - | 99 | length = strtoul(argv[2], NULL, 0); |
|
| - | 100 | ||
| - | 101 | while (length > 0) { |
|
| - | 102 | to_read = length < BYTES_PER_LINE ? length : BYTES_PER_LINE; |
|
| - | 103 | ||
| - | 104 | rc = udebug_mem_read(app_phone, buf, addr, to_read); |
|
| - | 105 | if (rc < 0) { |
|
| - | 106 | printf("error %d\n", rc); |
|
| - | 107 | return; |
|
| - | 108 | } |
|
| - | 109 | ||
| - | 110 | printf("0x%x:", addr); |
|
| - | 111 | for (i = 0; i < to_read; ++i) { |
|
| - | 112 | printf(" %02x", buf[i]); |
|
| - | 113 | } |
|
| - | 114 | for (i = to_read; i < BYTES_PER_LINE; ++i) { |
|
| - | 115 | printf(" "); |
|
| - | 116 | } |
|
| - | 117 | ||
| - | 118 | putchar ('\t'); |
|
| - | 119 | ||
| - | 120 | for (i = 0; i < to_read; ++i) { |
|
| - | 121 | if (buf[i] >= 32 && buf[i] < 127) |
|
| - | 122 | putchar(buf[i]); |
|
| - | 123 | else |
|
| - | 124 | putchar('.'); |
|
| - | 125 | } |
|
| - | 126 | printf("\n"); |
|
| - | 127 | ||
| - | 128 | addr += to_read; |
|
| - | 129 | length -= to_read; |
|
| - | 130 | } |
|
| - | 131 | } |
|
| - | 132 | ||
| - | 133 | ||
| 77 | static void cmd_quit(int argc, char *argv[]) |
134 | static void cmd_quit(int argc, char *argv[]) |
| 78 | { |
135 | { |
| 79 | (void)argc; (void)argv; |
136 | (void)argc; (void)argv; |
| 80 | quit = true; |
137 | quit = true; |
| 81 | } |
138 | } |