rp2040js 0.17.17 → 0.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/dist/cjs/clock/clock.d.ts +11 -11
  2. package/dist/cjs/clock/clock.js +2 -2
  3. package/dist/cjs/clock/mock-clock.d.ts +17 -17
  4. package/dist/cjs/clock/mock-clock.js +52 -52
  5. package/dist/cjs/clock/realtime-clock.d.ts +23 -23
  6. package/dist/cjs/clock/realtime-clock.js +73 -73
  7. package/dist/cjs/cortex-m0-core.d.ts +87 -87
  8. package/dist/cjs/cortex-m0-core.js +1251 -1251
  9. package/dist/cjs/gdb/gdb-connection.d.ts +11 -11
  10. package/dist/cjs/gdb/gdb-connection.js +57 -57
  11. package/dist/cjs/gdb/gdb-server.d.ts +23 -23
  12. package/dist/cjs/gdb/gdb-server.js +232 -232
  13. package/dist/cjs/gdb/gdb-tcp-server.d.ts +10 -10
  14. package/dist/cjs/gdb/gdb-tcp-server.js +34 -34
  15. package/dist/cjs/gdb/gdb-utils.d.ts +9 -9
  16. package/dist/cjs/gdb/gdb-utils.js +48 -48
  17. package/dist/cjs/gpio-pin.d.ts +56 -56
  18. package/dist/cjs/gpio-pin.js +216 -216
  19. package/dist/cjs/index.d.ts +11 -11
  20. package/dist/cjs/index.js +36 -36
  21. package/dist/cjs/interpolator.d.ts +36 -36
  22. package/dist/cjs/interpolator.js +150 -150
  23. package/dist/cjs/irq.d.ts +29 -29
  24. package/dist/cjs/irq.js +33 -33
  25. package/dist/cjs/peripherals/adc.d.ts +52 -52
  26. package/dist/cjs/peripherals/adc.js +261 -261
  27. package/dist/cjs/peripherals/busctrl.d.ts +10 -10
  28. package/dist/cjs/peripherals/busctrl.js +84 -84
  29. package/dist/cjs/peripherals/clocks.d.ts +9 -9
  30. package/dist/cjs/peripherals/clocks.js +42 -42
  31. package/dist/cjs/peripherals/dma.d.ts +109 -109
  32. package/dist/cjs/peripherals/dma.js +520 -520
  33. package/dist/cjs/peripherals/i2c.d.ts +54 -54
  34. package/dist/cjs/peripherals/i2c.js +458 -458
  35. package/dist/cjs/peripherals/io.d.ts +11 -11
  36. package/dist/cjs/peripherals/io.js +100 -100
  37. package/dist/cjs/peripherals/pads.d.ts +13 -13
  38. package/dist/cjs/peripherals/pads.js +58 -58
  39. package/dist/cjs/peripherals/peripheral.d.ts +22 -22
  40. package/dist/cjs/peripherals/peripheral.js +61 -61
  41. package/dist/cjs/peripherals/pio.d.ts +120 -120
  42. package/dist/cjs/peripherals/pio.js +1086 -1086
  43. package/dist/cjs/peripherals/ppb.d.ts +25 -25
  44. package/dist/cjs/peripherals/ppb.js +229 -229
  45. package/dist/cjs/peripherals/pwm.d.ts +65 -65
  46. package/dist/cjs/peripherals/pwm.js +372 -372
  47. package/dist/cjs/peripherals/reset.d.ts +8 -8
  48. package/dist/cjs/peripherals/reset.js +40 -40
  49. package/dist/cjs/peripherals/rtc.d.ts +10 -10
  50. package/dist/cjs/peripherals/rtc.js +74 -74
  51. package/dist/cjs/peripherals/spi.d.ts +38 -38
  52. package/dist/cjs/peripherals/spi.js +240 -240
  53. package/dist/cjs/peripherals/ssi.d.ts +6 -6
  54. package/dist/cjs/peripherals/ssi.js +43 -43
  55. package/dist/cjs/peripherals/syscfg.d.ts +5 -5
  56. package/dist/cjs/peripherals/syscfg.js +26 -26
  57. package/dist/cjs/peripherals/sysinfo.d.ts +4 -4
  58. package/dist/cjs/peripherals/sysinfo.js +22 -22
  59. package/dist/cjs/peripherals/tbman.d.ts +4 -4
  60. package/dist/cjs/peripherals/tbman.js +17 -17
  61. package/dist/cjs/peripherals/timer.d.ts +18 -18
  62. package/dist/cjs/peripherals/timer.js +156 -156
  63. package/dist/cjs/peripherals/uart.d.ts +31 -31
  64. package/dist/cjs/peripherals/uart.js +132 -132
  65. package/dist/cjs/peripherals/usb.d.ts +29 -29
  66. package/dist/cjs/peripherals/usb.js +309 -309
  67. package/dist/cjs/rp2040.d.ts +71 -71
  68. package/dist/cjs/rp2040.js +361 -361
  69. package/dist/cjs/sio.d.ts +21 -21
  70. package/dist/cjs/sio.js +425 -425
  71. package/dist/cjs/usb/cdc.d.ts +20 -20
  72. package/dist/cjs/usb/cdc.js +126 -126
  73. package/dist/cjs/usb/interfaces.d.ts +47 -47
  74. package/dist/cjs/usb/interfaces.js +46 -46
  75. package/dist/cjs/usb/setup.d.ts +5 -5
  76. package/dist/cjs/usb/setup.js +53 -53
  77. package/dist/cjs/utils/assembler.d.ts +79 -79
  78. package/dist/cjs/utils/assembler.js +328 -328
  79. package/dist/cjs/utils/bit.d.ts +3 -3
  80. package/dist/cjs/utils/bit.js +15 -15
  81. package/dist/cjs/utils/fifo.d.ts +15 -15
  82. package/dist/cjs/utils/fifo.js +56 -56
  83. package/dist/cjs/utils/logging.d.ts +23 -23
  84. package/dist/cjs/utils/logging.js +48 -48
  85. package/dist/cjs/utils/pio-assembler.d.ts +45 -45
  86. package/dist/cjs/utils/pio-assembler.js +87 -87
  87. package/dist/cjs/utils/time.d.ts +2 -2
  88. package/dist/cjs/utils/time.js +32 -32
  89. package/dist/cjs/utils/timer32.d.ts +57 -57
  90. package/dist/cjs/utils/timer32.js +208 -208
  91. package/dist/esm/clock/clock.d.ts +11 -11
  92. package/dist/esm/clock/clock.js +1 -1
  93. package/dist/esm/clock/mock-clock.d.ts +17 -17
  94. package/dist/esm/clock/mock-clock.js +47 -47
  95. package/dist/esm/clock/realtime-clock.d.ts +23 -23
  96. package/dist/esm/clock/realtime-clock.js +68 -68
  97. package/dist/esm/cortex-m0-core.d.ts +87 -87
  98. package/dist/esm/cortex-m0-core.js +1247 -1247
  99. package/dist/esm/gdb/gdb-connection.d.ts +11 -11
  100. package/dist/esm/gdb/gdb-connection.js +53 -53
  101. package/dist/esm/gdb/gdb-server.d.ts +23 -23
  102. package/dist/esm/gdb/gdb-server.js +228 -228
  103. package/dist/esm/gdb/gdb-tcp-server.d.ts +10 -10
  104. package/dist/esm/gdb/gdb-tcp-server.js +30 -30
  105. package/dist/esm/gdb/gdb-utils.d.ts +9 -9
  106. package/dist/esm/gdb/gdb-utils.js +36 -36
  107. package/dist/esm/gpio-pin.d.ts +56 -56
  108. package/dist/esm/gpio-pin.js +212 -212
  109. package/dist/esm/index.d.ts +11 -11
  110. package/dist/esm/index.js +11 -11
  111. package/dist/esm/interpolator.d.ts +36 -36
  112. package/dist/esm/interpolator.js +145 -145
  113. package/dist/esm/irq.d.ts +29 -29
  114. package/dist/esm/irq.js +30 -30
  115. package/dist/esm/peripherals/adc.d.ts +52 -52
  116. package/dist/esm/peripherals/adc.js +257 -257
  117. package/dist/esm/peripherals/busctrl.d.ts +10 -10
  118. package/dist/esm/peripherals/busctrl.js +80 -80
  119. package/dist/esm/peripherals/clocks.d.ts +9 -9
  120. package/dist/esm/peripherals/clocks.js +38 -38
  121. package/dist/esm/peripherals/dma.d.ts +109 -109
  122. package/dist/esm/peripherals/dma.js +515 -515
  123. package/dist/esm/peripherals/i2c.d.ts +54 -54
  124. package/dist/esm/peripherals/i2c.js +454 -454
  125. package/dist/esm/peripherals/io.d.ts +11 -11
  126. package/dist/esm/peripherals/io.js +96 -96
  127. package/dist/esm/peripherals/pads.d.ts +13 -13
  128. package/dist/esm/peripherals/pads.js +54 -54
  129. package/dist/esm/peripherals/peripheral.d.ts +22 -22
  130. package/dist/esm/peripherals/peripheral.js +55 -55
  131. package/dist/esm/peripherals/pio.d.ts +120 -120
  132. package/dist/esm/peripherals/pio.js +1081 -1081
  133. package/dist/esm/peripherals/ppb.d.ts +25 -25
  134. package/dist/esm/peripherals/ppb.js +225 -225
  135. package/dist/esm/peripherals/pwm.d.ts +65 -65
  136. package/dist/esm/peripherals/pwm.js +368 -368
  137. package/dist/esm/peripherals/reset.d.ts +8 -8
  138. package/dist/esm/peripherals/reset.js +36 -36
  139. package/dist/esm/peripherals/rtc.d.ts +10 -10
  140. package/dist/esm/peripherals/rtc.js +70 -70
  141. package/dist/esm/peripherals/spi.d.ts +38 -38
  142. package/dist/esm/peripherals/spi.js +236 -236
  143. package/dist/esm/peripherals/ssi.d.ts +6 -6
  144. package/dist/esm/peripherals/ssi.js +39 -39
  145. package/dist/esm/peripherals/syscfg.d.ts +5 -5
  146. package/dist/esm/peripherals/syscfg.js +22 -22
  147. package/dist/esm/peripherals/sysinfo.d.ts +4 -4
  148. package/dist/esm/peripherals/sysinfo.js +18 -18
  149. package/dist/esm/peripherals/tbman.d.ts +4 -4
  150. package/dist/esm/peripherals/tbman.js +13 -13
  151. package/dist/esm/peripherals/timer.d.ts +18 -18
  152. package/dist/esm/peripherals/timer.js +152 -152
  153. package/dist/esm/peripherals/uart.d.ts +31 -31
  154. package/dist/esm/peripherals/uart.js +128 -128
  155. package/dist/esm/peripherals/usb.d.ts +29 -29
  156. package/dist/esm/peripherals/usb.js +305 -305
  157. package/dist/esm/rp2040.d.ts +71 -71
  158. package/dist/esm/rp2040.js +357 -357
  159. package/dist/esm/sio.d.ts +21 -21
  160. package/dist/esm/sio.js +421 -421
  161. package/dist/esm/usb/cdc.d.ts +20 -20
  162. package/dist/esm/usb/cdc.js +121 -121
  163. package/dist/esm/usb/interfaces.d.ts +47 -47
  164. package/dist/esm/usb/interfaces.js +43 -43
  165. package/dist/esm/usb/setup.d.ts +5 -5
  166. package/dist/esm/usb/setup.js +46 -46
  167. package/dist/esm/utils/assembler.d.ts +79 -79
  168. package/dist/esm/utils/assembler.js +245 -245
  169. package/dist/esm/utils/bit.d.ts +3 -3
  170. package/dist/esm/utils/bit.js +9 -9
  171. package/dist/esm/utils/fifo.d.ts +15 -15
  172. package/dist/esm/utils/fifo.js +52 -52
  173. package/dist/esm/utils/logging.d.ts +23 -23
  174. package/dist/esm/utils/logging.js +44 -44
  175. package/dist/esm/utils/pio-assembler.d.ts +45 -45
  176. package/dist/esm/utils/pio-assembler.js +75 -75
  177. package/dist/esm/utils/time.d.ts +2 -2
  178. package/dist/esm/utils/time.js +27 -27
  179. package/dist/esm/utils/timer32.d.ts +57 -57
  180. package/dist/esm/utils/timer32.js +203 -203
  181. package/package.json +38 -27
  182. package/dist/esm/package.json +0 -1
@@ -1,37 +1,37 @@
1
- "use strict";
2
- /**
3
- * RP2040 GDB Server
4
- *
5
- * Copyright (C) 2021, Uri Shaked
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.GDBServer = exports.STOP_REPLY_TRAP = exports.STOP_REPLY_SIGINT = void 0;
9
- const cortex_m0_core_1 = require("../cortex-m0-core");
10
- const logging_1 = require("../utils/logging");
11
- const gdb_utils_1 = require("./gdb-utils");
12
- exports.STOP_REPLY_SIGINT = 'S02';
13
- exports.STOP_REPLY_TRAP = 'S05';
14
- /* string value: armv6m-none-unknown-eabi */
15
- const lldbTriple = '61726d76366d2d6e6f6e652d756e6b6e6f776e2d65616269';
16
- const registers = [
17
- `name:r0;bitsize:32;offset:0;encoding:int;format:hex;set:General Purpose Registers;generic:arg1;gcc:0;dwarf:0;`,
18
- `name:r1;bitsize:32;offset:4;encoding:int;format:hex;set:General Purpose Registers;generic:arg2;gcc:1;dwarf:1;`,
19
- `name:r2;bitsize:32;offset:8;encoding:int;format:hex;set:General Purpose Registers;generic:arg3;gcc:2;dwarf:2;`,
20
- `name:r3;bitsize:32;offset:12;encoding:int;format:hex;set:General Purpose Registers;generic:arg4;gcc:3;dwarf:3;`,
21
- `name:r4;bitsize:32;offset:16;encoding:int;format:hex;set:General Purpose Registers;gcc:4;dwarf:4;`,
22
- `name:r5;bitsize:32;offset:20;encoding:int;format:hex;set:General Purpose Registers;gcc:5;dwarf:5;`,
23
- `name:r6;bitsize:32;offset:24;encoding:int;format:hex;set:General Purpose Registers;gcc:6;dwarf:6;`,
24
- `name:r7;bitsize:32;offset:28;encoding:int;format:hex;set:General Purpose Registers;gcc:7;dwarf:7;`,
25
- `name:r8;bitsize:32;offset:32;encoding:int;format:hex;set:General Purpose Registers;gcc:8;dwarf:8;`,
26
- `name:r9;bitsize:32;offset:36;encoding:int;format:hex;set:General Purpose Registers;gcc:9;dwarf:9;`,
27
- `name:r10;bitsize:32;offset:40;encoding:int;format:hex;set:General Purpose Registers;gcc:10;dwarf:10;`,
28
- `name:r11;bitsize:32;offset:44;encoding:int;format:hex;set:General Purpose Registers;generic:fp;gcc:11;dwarf:11;`,
29
- `name:r12;bitsize:32;offset:48;encoding:int;format:hex;set:General Purpose Registers;gcc:12;dwarf:12;`,
30
- `name:sp;bitsize:32;offset:52;encoding:int;format:hex;set:General Purpose Registers;generic:sp;alt-name:r13;gcc:13;dwarf:13;`,
31
- `name:lr;bitsize:32;offset:56;encoding:int;format:hex;set:General Purpose Registers;generic:ra;alt-name:r14;gcc:14;dwarf:14;`,
32
- `name:pc;bitsize:32;offset:60;encoding:int;format:hex;set:General Purpose Registers;generic:pc;alt-name:r15;gcc:15;dwarf:15;`,
33
- `name:cpsr;bitsize:32;offset:64;encoding:int;format:hex;set:General Purpose Registers;generic:flags;alt-name:psr;gcc:16;dwarf:16;`,
34
- ];
1
+ "use strict";
2
+ /**
3
+ * RP2040 GDB Server
4
+ *
5
+ * Copyright (C) 2021, Uri Shaked
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.GDBServer = exports.STOP_REPLY_TRAP = exports.STOP_REPLY_SIGINT = void 0;
9
+ const cortex_m0_core_js_1 = require("../cortex-m0-core.js");
10
+ const logging_js_1 = require("../utils/logging.js");
11
+ const gdb_utils_js_1 = require("./gdb-utils.js");
12
+ exports.STOP_REPLY_SIGINT = 'S02';
13
+ exports.STOP_REPLY_TRAP = 'S05';
14
+ /* string value: armv6m-none-unknown-eabi */
15
+ const lldbTriple = '61726d76366d2d6e6f6e652d756e6b6e6f776e2d65616269';
16
+ const registers = [
17
+ `name:r0;bitsize:32;offset:0;encoding:int;format:hex;set:General Purpose Registers;generic:arg1;gcc:0;dwarf:0;`,
18
+ `name:r1;bitsize:32;offset:4;encoding:int;format:hex;set:General Purpose Registers;generic:arg2;gcc:1;dwarf:1;`,
19
+ `name:r2;bitsize:32;offset:8;encoding:int;format:hex;set:General Purpose Registers;generic:arg3;gcc:2;dwarf:2;`,
20
+ `name:r3;bitsize:32;offset:12;encoding:int;format:hex;set:General Purpose Registers;generic:arg4;gcc:3;dwarf:3;`,
21
+ `name:r4;bitsize:32;offset:16;encoding:int;format:hex;set:General Purpose Registers;gcc:4;dwarf:4;`,
22
+ `name:r5;bitsize:32;offset:20;encoding:int;format:hex;set:General Purpose Registers;gcc:5;dwarf:5;`,
23
+ `name:r6;bitsize:32;offset:24;encoding:int;format:hex;set:General Purpose Registers;gcc:6;dwarf:6;`,
24
+ `name:r7;bitsize:32;offset:28;encoding:int;format:hex;set:General Purpose Registers;gcc:7;dwarf:7;`,
25
+ `name:r8;bitsize:32;offset:32;encoding:int;format:hex;set:General Purpose Registers;gcc:8;dwarf:8;`,
26
+ `name:r9;bitsize:32;offset:36;encoding:int;format:hex;set:General Purpose Registers;gcc:9;dwarf:9;`,
27
+ `name:r10;bitsize:32;offset:40;encoding:int;format:hex;set:General Purpose Registers;gcc:10;dwarf:10;`,
28
+ `name:r11;bitsize:32;offset:44;encoding:int;format:hex;set:General Purpose Registers;generic:fp;gcc:11;dwarf:11;`,
29
+ `name:r12;bitsize:32;offset:48;encoding:int;format:hex;set:General Purpose Registers;gcc:12;dwarf:12;`,
30
+ `name:sp;bitsize:32;offset:52;encoding:int;format:hex;set:General Purpose Registers;generic:sp;alt-name:r13;gcc:13;dwarf:13;`,
31
+ `name:lr;bitsize:32;offset:56;encoding:int;format:hex;set:General Purpose Registers;generic:ra;alt-name:r14;gcc:14;dwarf:14;`,
32
+ `name:pc;bitsize:32;offset:60;encoding:int;format:hex;set:General Purpose Registers;generic:pc;alt-name:r15;gcc:15;dwarf:15;`,
33
+ `name:cpsr;bitsize:32;offset:64;encoding:int;format:hex;set:General Purpose Registers;generic:flags;alt-name:psr;gcc:16;dwarf:16;`,
34
+ ];
35
35
  const targetXML = `<?xml version="1.0"?>
36
36
  <!DOCTYPE target SYSTEM "gdb-target.dtd">
37
37
  <target version="1.0">
@@ -63,201 +63,201 @@ const targetXML = `<?xml version="1.0"?>
63
63
  <reg name="faultmask" bitsize="1" regnum="21" save-restore="yes" type="int8" group="system"/>
64
64
  <reg name="control" bitsize="2" regnum="22" save-restore="yes" type="int8" group="system"/>
65
65
  </feature>
66
- </target>`;
67
- const LOG_NAME = 'GDBServer';
68
- class GDBServer {
69
- constructor(rp2040) {
70
- this.rp2040 = rp2040;
71
- this.logger = new logging_1.ConsoleLogger(logging_1.LogLevel.Warn, true);
72
- this.connections = new Set();
73
- }
74
- processGDBMessage(cmd) {
75
- const { rp2040 } = this;
76
- const { core } = rp2040;
77
- if (cmd === 'Hg0') {
78
- return gdb_utils_1.gdbMessage('OK');
79
- }
80
- switch (cmd[0]) {
81
- case '?':
82
- return gdb_utils_1.gdbMessage(exports.STOP_REPLY_TRAP);
83
- case 'q':
84
- // Query things
85
- if (cmd.startsWith('qSupported:')) {
86
- return gdb_utils_1.gdbMessage('PacketSize=4000;vContSupported+;qXfer:features:read+');
87
- }
88
- if (cmd === 'qAttached') {
89
- return gdb_utils_1.gdbMessage('1');
90
- }
91
- if (cmd.startsWith('qXfer:features:read:target.xml')) {
92
- return gdb_utils_1.gdbMessage('l' + targetXML);
93
- }
94
- if (cmd.startsWith('qRegisterInfo')) {
95
- const index = parseInt(cmd.substring(13), 16);
96
- const register = registers[index];
97
- if (register) {
98
- return gdb_utils_1.gdbMessage(register);
99
- }
100
- else {
101
- return gdb_utils_1.gdbMessage(`E45`);
102
- }
103
- }
104
- if (cmd === 'qHostInfo') {
105
- return gdb_utils_1.gdbMessage(`triple:${lldbTriple};endian:little;ptrsize:4;`);
106
- }
107
- if (cmd === 'qProcessInfo') {
108
- return gdb_utils_1.gdbMessage('pid:1;endian:little;ptrsize:4;');
109
- }
110
- return gdb_utils_1.gdbMessage('');
111
- case 'v':
112
- if (cmd === 'vCont?') {
113
- return gdb_utils_1.gdbMessage('vCont;c;C;s;S');
114
- }
115
- if (cmd.startsWith('vCont;c')) {
116
- if (!rp2040.executing) {
117
- rp2040.execute();
118
- }
119
- return;
120
- }
121
- if (cmd.startsWith('vCont;s')) {
122
- rp2040.step();
123
- const registerStatus = [];
124
- for (let i = 0; i < 17; i++) {
125
- const value = i === 16 ? core.xPSR : core.registers[i];
126
- registerStatus.push(`${gdb_utils_1.encodeHexByte(i)}:${gdb_utils_1.encodeHexUint32(value)}`);
127
- }
128
- return gdb_utils_1.gdbMessage(`T05${registerStatus.join(';')};reason:trace;`);
129
- }
130
- break;
131
- case 'c':
132
- if (!rp2040.executing) {
133
- rp2040.execute();
134
- }
135
- return gdb_utils_1.gdbMessage('OK');
136
- case 'g': {
137
- // Read registers
138
- const buf = new Uint32Array(17);
139
- buf.set(core.registers);
140
- buf[16] = core.xPSR;
141
- return gdb_utils_1.gdbMessage(gdb_utils_1.encodeHexBuf(new Uint8Array(buf.buffer)));
142
- }
143
- case 'p': {
144
- // Read register
145
- const registerIndex = parseInt(cmd.substr(1), 16);
146
- if (registerIndex >= 0 && registerIndex <= 15) {
147
- return gdb_utils_1.gdbMessage(gdb_utils_1.encodeHexUint32(core.registers[registerIndex]));
148
- }
149
- const specialRegister = (sysm) => gdb_utils_1.gdbMessage(gdb_utils_1.encodeHexUint32(core.readSpecialRegister(sysm)));
150
- switch (registerIndex) {
151
- case 0x10:
152
- return gdb_utils_1.gdbMessage(gdb_utils_1.encodeHexUint32(core.xPSR));
153
- case 0x11:
154
- return specialRegister(cortex_m0_core_1.SYSM_MSP);
155
- case 0x12:
156
- return specialRegister(cortex_m0_core_1.SYSM_PSP);
157
- case 0x13:
158
- return specialRegister(cortex_m0_core_1.SYSM_PRIMASK);
159
- case 0x14:
160
- this.logger.warn(LOG_NAME, 'TODO BASEPRI');
161
- return gdb_utils_1.gdbMessage(gdb_utils_1.encodeHexUint32(0)); // TODO BASEPRI
162
- case 0x15:
163
- this.logger.warn(LOG_NAME, 'TODO faultmask');
164
- return gdb_utils_1.gdbMessage(gdb_utils_1.encodeHexUint32(0)); // TODO faultmask
165
- case 0x16:
166
- return specialRegister(cortex_m0_core_1.SYSM_CONTROL);
167
- }
168
- break;
169
- }
170
- case 'P': {
171
- // Write register
172
- const params = cmd.substr(1).split('=');
173
- const registerIndex = parseInt(params[0], 16);
174
- const registerValue = params[1].trim();
175
- const registerBytes = registerIndex > 0x12 ? 1 : 4;
176
- const decodedValue = gdb_utils_1.decodeHexBuf(registerValue);
177
- if (registerIndex < 0 || registerIndex > 0x16 || decodedValue.length !== registerBytes) {
178
- return gdb_utils_1.gdbMessage('E00');
179
- }
180
- const valueBuffer = new Uint8Array(4);
181
- valueBuffer.set(decodedValue.slice(0, 4));
182
- const value = new DataView(valueBuffer.buffer).getUint32(0, true);
183
- switch (registerIndex) {
184
- case 0x10:
185
- core.xPSR = value;
186
- break;
187
- case 0x11:
188
- core.writeSpecialRegister(cortex_m0_core_1.SYSM_MSP, value);
189
- break;
190
- case 0x12:
191
- core.writeSpecialRegister(cortex_m0_core_1.SYSM_PSP, value);
192
- break;
193
- case 0x13:
194
- core.writeSpecialRegister(cortex_m0_core_1.SYSM_PRIMASK, value);
195
- break;
196
- case 0x14:
197
- this.logger.warn(LOG_NAME, 'TODO BASEPRI');
198
- break; // TODO BASEPRI
199
- case 0x15:
200
- this.logger.warn(LOG_NAME, 'TODO faultmask');
201
- break; // TODO faultmask
202
- case 0x16:
203
- core.writeSpecialRegister(cortex_m0_core_1.SYSM_CONTROL, value);
204
- break;
205
- default:
206
- core.registers[registerIndex] = value;
207
- break;
208
- }
209
- return gdb_utils_1.gdbMessage('OK');
210
- }
211
- case 'm': {
212
- // Read memory
213
- const params = cmd.substr(1).split(',');
214
- const address = parseInt(params[0], 16);
215
- const length = parseInt(params[1], 16);
216
- let result = '';
217
- for (let i = 0; i < length; i++) {
218
- result += gdb_utils_1.encodeHexByte(rp2040.readUint8(address + i));
219
- }
220
- return gdb_utils_1.gdbMessage(result);
221
- }
222
- case 'M': {
223
- // Write memory
224
- const params = cmd.substr(1).split(/[,:]/);
225
- const address = parseInt(params[0], 16);
226
- const length = parseInt(params[1], 16);
227
- const data = gdb_utils_1.decodeHexBuf(params[2].substr(0, length * 2));
228
- for (let i = 0; i < data.length; i++) {
229
- this.debug(`Write ${data[i].toString(16)} to ${(address + i).toString(16)}`);
230
- rp2040.writeUint8(address + i, data[i]);
231
- }
232
- return gdb_utils_1.gdbMessage('OK');
233
- }
234
- }
235
- return gdb_utils_1.gdbMessage('');
236
- }
237
- addConnection(connection) {
238
- this.connections.add(connection);
239
- this.rp2040.onBreak = () => {
240
- this.rp2040.stop();
241
- this.rp2040.core.PC -= this.rp2040.core.breakRewind;
242
- for (const connection of this.connections) {
243
- connection.onBreakpoint();
244
- }
245
- };
246
- }
247
- removeConnection(connection) {
248
- this.connections.delete(connection);
249
- }
250
- debug(msg) {
251
- this.logger.debug(LOG_NAME, msg);
252
- }
253
- info(msg) {
254
- this.logger.info(LOG_NAME, msg);
255
- }
256
- warn(msg) {
257
- this.logger.warn(LOG_NAME, msg);
258
- }
259
- error(msg) {
260
- this.logger.error(LOG_NAME, msg);
261
- }
262
- }
263
- exports.GDBServer = GDBServer;
66
+ </target>`;
67
+ const LOG_NAME = 'GDBServer';
68
+ class GDBServer {
69
+ constructor(rp2040) {
70
+ this.rp2040 = rp2040;
71
+ this.logger = new logging_js_1.ConsoleLogger(logging_js_1.LogLevel.Warn, true);
72
+ this.connections = new Set();
73
+ }
74
+ processGDBMessage(cmd) {
75
+ const { rp2040 } = this;
76
+ const { core } = rp2040;
77
+ if (cmd === 'Hg0') {
78
+ return (0, gdb_utils_js_1.gdbMessage)('OK');
79
+ }
80
+ switch (cmd[0]) {
81
+ case '?':
82
+ return (0, gdb_utils_js_1.gdbMessage)(exports.STOP_REPLY_TRAP);
83
+ case 'q':
84
+ // Query things
85
+ if (cmd.startsWith('qSupported:')) {
86
+ return (0, gdb_utils_js_1.gdbMessage)('PacketSize=4000;vContSupported+;qXfer:features:read+');
87
+ }
88
+ if (cmd === 'qAttached') {
89
+ return (0, gdb_utils_js_1.gdbMessage)('1');
90
+ }
91
+ if (cmd.startsWith('qXfer:features:read:target.xml')) {
92
+ return (0, gdb_utils_js_1.gdbMessage)('l' + targetXML);
93
+ }
94
+ if (cmd.startsWith('qRegisterInfo')) {
95
+ const index = parseInt(cmd.substring(13), 16);
96
+ const register = registers[index];
97
+ if (register) {
98
+ return (0, gdb_utils_js_1.gdbMessage)(register);
99
+ }
100
+ else {
101
+ return (0, gdb_utils_js_1.gdbMessage)(`E45`);
102
+ }
103
+ }
104
+ if (cmd === 'qHostInfo') {
105
+ return (0, gdb_utils_js_1.gdbMessage)(`triple:${lldbTriple};endian:little;ptrsize:4;`);
106
+ }
107
+ if (cmd === 'qProcessInfo') {
108
+ return (0, gdb_utils_js_1.gdbMessage)('pid:1;endian:little;ptrsize:4;');
109
+ }
110
+ return (0, gdb_utils_js_1.gdbMessage)('');
111
+ case 'v':
112
+ if (cmd === 'vCont?') {
113
+ return (0, gdb_utils_js_1.gdbMessage)('vCont;c;C;s;S');
114
+ }
115
+ if (cmd.startsWith('vCont;c')) {
116
+ if (!rp2040.executing) {
117
+ rp2040.execute();
118
+ }
119
+ return;
120
+ }
121
+ if (cmd.startsWith('vCont;s')) {
122
+ rp2040.step();
123
+ const registerStatus = [];
124
+ for (let i = 0; i < 17; i++) {
125
+ const value = i === 16 ? core.xPSR : core.registers[i];
126
+ registerStatus.push(`${(0, gdb_utils_js_1.encodeHexByte)(i)}:${(0, gdb_utils_js_1.encodeHexUint32)(value)}`);
127
+ }
128
+ return (0, gdb_utils_js_1.gdbMessage)(`T05${registerStatus.join(';')};reason:trace;`);
129
+ }
130
+ break;
131
+ case 'c':
132
+ if (!rp2040.executing) {
133
+ rp2040.execute();
134
+ }
135
+ return (0, gdb_utils_js_1.gdbMessage)('OK');
136
+ case 'g': {
137
+ // Read registers
138
+ const buf = new Uint32Array(17);
139
+ buf.set(core.registers);
140
+ buf[16] = core.xPSR;
141
+ return (0, gdb_utils_js_1.gdbMessage)((0, gdb_utils_js_1.encodeHexBuf)(new Uint8Array(buf.buffer)));
142
+ }
143
+ case 'p': {
144
+ // Read register
145
+ const registerIndex = parseInt(cmd.substr(1), 16);
146
+ if (registerIndex >= 0 && registerIndex <= 15) {
147
+ return (0, gdb_utils_js_1.gdbMessage)((0, gdb_utils_js_1.encodeHexUint32)(core.registers[registerIndex]));
148
+ }
149
+ const specialRegister = (sysm) => (0, gdb_utils_js_1.gdbMessage)((0, gdb_utils_js_1.encodeHexUint32)(core.readSpecialRegister(sysm)));
150
+ switch (registerIndex) {
151
+ case 0x10:
152
+ return (0, gdb_utils_js_1.gdbMessage)((0, gdb_utils_js_1.encodeHexUint32)(core.xPSR));
153
+ case 0x11:
154
+ return specialRegister(cortex_m0_core_js_1.SYSM_MSP);
155
+ case 0x12:
156
+ return specialRegister(cortex_m0_core_js_1.SYSM_PSP);
157
+ case 0x13:
158
+ return specialRegister(cortex_m0_core_js_1.SYSM_PRIMASK);
159
+ case 0x14:
160
+ this.logger.warn(LOG_NAME, 'TODO BASEPRI');
161
+ return (0, gdb_utils_js_1.gdbMessage)((0, gdb_utils_js_1.encodeHexUint32)(0)); // TODO BASEPRI
162
+ case 0x15:
163
+ this.logger.warn(LOG_NAME, 'TODO faultmask');
164
+ return (0, gdb_utils_js_1.gdbMessage)((0, gdb_utils_js_1.encodeHexUint32)(0)); // TODO faultmask
165
+ case 0x16:
166
+ return specialRegister(cortex_m0_core_js_1.SYSM_CONTROL);
167
+ }
168
+ break;
169
+ }
170
+ case 'P': {
171
+ // Write register
172
+ const params = cmd.substr(1).split('=');
173
+ const registerIndex = parseInt(params[0], 16);
174
+ const registerValue = params[1].trim();
175
+ const registerBytes = registerIndex > 0x12 ? 1 : 4;
176
+ const decodedValue = (0, gdb_utils_js_1.decodeHexBuf)(registerValue);
177
+ if (registerIndex < 0 || registerIndex > 0x16 || decodedValue.length !== registerBytes) {
178
+ return (0, gdb_utils_js_1.gdbMessage)('E00');
179
+ }
180
+ const valueBuffer = new Uint8Array(4);
181
+ valueBuffer.set(decodedValue.slice(0, 4));
182
+ const value = new DataView(valueBuffer.buffer).getUint32(0, true);
183
+ switch (registerIndex) {
184
+ case 0x10:
185
+ core.xPSR = value;
186
+ break;
187
+ case 0x11:
188
+ core.writeSpecialRegister(cortex_m0_core_js_1.SYSM_MSP, value);
189
+ break;
190
+ case 0x12:
191
+ core.writeSpecialRegister(cortex_m0_core_js_1.SYSM_PSP, value);
192
+ break;
193
+ case 0x13:
194
+ core.writeSpecialRegister(cortex_m0_core_js_1.SYSM_PRIMASK, value);
195
+ break;
196
+ case 0x14:
197
+ this.logger.warn(LOG_NAME, 'TODO BASEPRI');
198
+ break; // TODO BASEPRI
199
+ case 0x15:
200
+ this.logger.warn(LOG_NAME, 'TODO faultmask');
201
+ break; // TODO faultmask
202
+ case 0x16:
203
+ core.writeSpecialRegister(cortex_m0_core_js_1.SYSM_CONTROL, value);
204
+ break;
205
+ default:
206
+ core.registers[registerIndex] = value;
207
+ break;
208
+ }
209
+ return (0, gdb_utils_js_1.gdbMessage)('OK');
210
+ }
211
+ case 'm': {
212
+ // Read memory
213
+ const params = cmd.substr(1).split(',');
214
+ const address = parseInt(params[0], 16);
215
+ const length = parseInt(params[1], 16);
216
+ let result = '';
217
+ for (let i = 0; i < length; i++) {
218
+ result += (0, gdb_utils_js_1.encodeHexByte)(rp2040.readUint8(address + i));
219
+ }
220
+ return (0, gdb_utils_js_1.gdbMessage)(result);
221
+ }
222
+ case 'M': {
223
+ // Write memory
224
+ const params = cmd.substr(1).split(/[,:]/);
225
+ const address = parseInt(params[0], 16);
226
+ const length = parseInt(params[1], 16);
227
+ const data = (0, gdb_utils_js_1.decodeHexBuf)(params[2].substr(0, length * 2));
228
+ for (let i = 0; i < data.length; i++) {
229
+ this.debug(`Write ${data[i].toString(16)} to ${(address + i).toString(16)}`);
230
+ rp2040.writeUint8(address + i, data[i]);
231
+ }
232
+ return (0, gdb_utils_js_1.gdbMessage)('OK');
233
+ }
234
+ }
235
+ return (0, gdb_utils_js_1.gdbMessage)('');
236
+ }
237
+ addConnection(connection) {
238
+ this.connections.add(connection);
239
+ this.rp2040.onBreak = () => {
240
+ this.rp2040.stop();
241
+ this.rp2040.core.PC -= this.rp2040.core.breakRewind;
242
+ for (const connection of this.connections) {
243
+ connection.onBreakpoint();
244
+ }
245
+ };
246
+ }
247
+ removeConnection(connection) {
248
+ this.connections.delete(connection);
249
+ }
250
+ debug(msg) {
251
+ this.logger.debug(LOG_NAME, msg);
252
+ }
253
+ info(msg) {
254
+ this.logger.info(LOG_NAME, msg);
255
+ }
256
+ warn(msg) {
257
+ this.logger.warn(LOG_NAME, msg);
258
+ }
259
+ error(msg) {
260
+ this.logger.error(LOG_NAME, msg);
261
+ }
262
+ }
263
+ exports.GDBServer = GDBServer;
@@ -1,10 +1,10 @@
1
- /// <reference types="node" />
2
- import { Socket } from 'net';
3
- import { GDBServer } from './gdb-server';
4
- import { RP2040 } from '../rp2040';
5
- export declare class GDBTCPServer extends GDBServer {
6
- readonly port: number;
7
- private socketServer;
8
- constructor(rp2040: RP2040, port?: number);
9
- handleConnection(socket: Socket): void;
10
- }
1
+ /// <reference types="node" />
2
+ import { Socket } from 'net';
3
+ import { GDBServer } from './gdb-server.js';
4
+ import { RP2040 } from '../rp2040.js';
5
+ export declare class GDBTCPServer extends GDBServer {
6
+ readonly port: number;
7
+ private socketServer;
8
+ constructor(rp2040: RP2040, port?: number);
9
+ handleConnection(socket: Socket): void;
10
+ }
@@ -1,34 +1,34 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GDBTCPServer = void 0;
4
- const net_1 = require("net");
5
- const gdb_connection_1 = require("./gdb-connection");
6
- const gdb_server_1 = require("./gdb-server");
7
- class GDBTCPServer extends gdb_server_1.GDBServer {
8
- constructor(rp2040, port = 3333) {
9
- super(rp2040);
10
- this.port = port;
11
- this.socketServer = net_1.createServer();
12
- this.socketServer.listen(port);
13
- this.socketServer.on('connection', (socket) => this.handleConnection(socket));
14
- }
15
- handleConnection(socket) {
16
- this.info('GDB connected');
17
- socket.setNoDelay(true);
18
- const connection = new gdb_connection_1.GDBConnection(this, (data) => {
19
- socket.write(data);
20
- });
21
- socket.on('data', (data) => {
22
- connection.feedData(data.toString('utf-8'));
23
- });
24
- socket.on('error', (err) => {
25
- this.removeConnection(connection);
26
- this.error(`GDB socket error ${err}`);
27
- });
28
- socket.on('close', () => {
29
- this.removeConnection(connection);
30
- this.info('GDB disconnected');
31
- });
32
- }
33
- }
34
- exports.GDBTCPServer = GDBTCPServer;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GDBTCPServer = void 0;
4
+ const net_1 = require("net");
5
+ const gdb_connection_js_1 = require("./gdb-connection.js");
6
+ const gdb_server_js_1 = require("./gdb-server.js");
7
+ class GDBTCPServer extends gdb_server_js_1.GDBServer {
8
+ constructor(rp2040, port = 3333) {
9
+ super(rp2040);
10
+ this.port = port;
11
+ this.socketServer = (0, net_1.createServer)();
12
+ this.socketServer.listen(port);
13
+ this.socketServer.on('connection', (socket) => this.handleConnection(socket));
14
+ }
15
+ handleConnection(socket) {
16
+ this.info('GDB connected');
17
+ socket.setNoDelay(true);
18
+ const connection = new gdb_connection_js_1.GDBConnection(this, (data) => {
19
+ socket.write(data);
20
+ });
21
+ socket.on('data', (data) => {
22
+ connection.feedData(data.toString('utf-8'));
23
+ });
24
+ socket.on('error', (err) => {
25
+ this.removeConnection(connection);
26
+ this.error(`GDB socket error ${err}`);
27
+ });
28
+ socket.on('close', () => {
29
+ this.removeConnection(connection);
30
+ this.info('GDB disconnected');
31
+ });
32
+ }
33
+ }
34
+ exports.GDBTCPServer = GDBTCPServer;
@@ -1,9 +1,9 @@
1
- export declare function encodeHexByte(value: number): string;
2
- export declare function encodeHexBuf(buf: Uint8Array): string;
3
- export declare function encodeHexUint32BE(value: number): string;
4
- export declare function encodeHexUint32(value: number): string;
5
- export declare function decodeHexBuf(encoded: string): Uint8Array;
6
- export declare function decodeHexUint32Array(encoded: string): Uint32Array;
7
- export declare function decodeHexUint32(encoded: string): number;
8
- export declare function gdbChecksum(text: string): string;
9
- export declare function gdbMessage(value: string): string;
1
+ export declare function encodeHexByte(value: number): string;
2
+ export declare function encodeHexBuf(buf: Uint8Array): string;
3
+ export declare function encodeHexUint32BE(value: number): string;
4
+ export declare function encodeHexUint32(value: number): string;
5
+ export declare function decodeHexBuf(encoded: string): Uint8Array;
6
+ export declare function decodeHexUint32Array(encoded: string): Uint32Array;
7
+ export declare function decodeHexUint32(encoded: string): number;
8
+ export declare function gdbChecksum(text: string): string;
9
+ export declare function gdbMessage(value: string): string;