rp2040js 1.2.0 → 1.3.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.
@@ -572,7 +572,7 @@ class CortexM0Core {
572
572
  const Rm = (opcode >> 3) & 0xf;
573
573
  const Rdn = ((opcode & 0x80) >> 4) | (opcode & 0x7);
574
574
  const leftValue = Rdn === pcRegister ? this.PC + 2 : this.registers[Rdn];
575
- const rightValue = this.registers[Rm];
575
+ const rightValue = Rm === pcRegister ? this.PC + 2 : this.registers[Rm];
576
576
  const result = leftValue + rightValue;
577
577
  if (Rdn !== spRegister && Rdn !== pcRegister) {
578
578
  this.registers[Rdn] = result;
@@ -9,4 +9,5 @@ export { Simulator } from './simulator.js';
9
9
  export { USBCDC } from './usb/cdc.js';
10
10
  export { DataDirection, DescriptorType, SetupRecipient, SetupRequest, SetupType, type ISetupPacketParams, } from './usb/interfaces.js';
11
11
  export { createSetupPacket, getDescriptorPacket, setDeviceAddressPacket, setDeviceConfigurationPacket, } from './usb/setup.js';
12
+ export { StandardRequest, DescriptorType as USBDescriptorType, parseSetupPacket, type USBDevice, type USBTransferResult, type USBTransferStatus, } from './usb/usb-device.js';
12
13
  export { ConsoleLogger, LogLevel, type Logger } from './utils/logging.js';
package/dist/cjs/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LogLevel = exports.ConsoleLogger = exports.setDeviceConfigurationPacket = exports.setDeviceAddressPacket = exports.getDescriptorPacket = exports.createSetupPacket = exports.SetupType = exports.SetupRequest = exports.SetupRecipient = exports.DescriptorType = exports.DataDirection = exports.USBCDC = exports.Simulator = exports.RP2040 = exports.RPUSBController = exports.BasePeripheral = exports.RPI2C = exports.I2CSpeed = exports.I2CMode = exports.GPIOPinState = exports.GPIOPin = exports.GDBServer = exports.GDBConnection = void 0;
3
+ exports.LogLevel = exports.ConsoleLogger = exports.parseSetupPacket = exports.setDeviceConfigurationPacket = exports.setDeviceAddressPacket = exports.getDescriptorPacket = exports.createSetupPacket = exports.SetupType = exports.SetupRequest = exports.SetupRecipient = exports.DescriptorType = exports.DataDirection = exports.USBCDC = exports.Simulator = exports.RP2040 = exports.RPUSBController = exports.BasePeripheral = exports.RPI2C = exports.I2CSpeed = exports.I2CMode = exports.GPIOPinState = exports.GPIOPin = exports.GDBServer = exports.GDBConnection = void 0;
4
4
  var gdb_connection_js_1 = require("./gdb/gdb-connection.js");
5
5
  Object.defineProperty(exports, "GDBConnection", { enumerable: true, get: function () { return gdb_connection_js_1.GDBConnection; } });
6
6
  var gdb_server_js_1 = require("./gdb/gdb-server.js");
@@ -33,6 +33,8 @@ Object.defineProperty(exports, "createSetupPacket", { enumerable: true, get: fun
33
33
  Object.defineProperty(exports, "getDescriptorPacket", { enumerable: true, get: function () { return setup_js_1.getDescriptorPacket; } });
34
34
  Object.defineProperty(exports, "setDeviceAddressPacket", { enumerable: true, get: function () { return setup_js_1.setDeviceAddressPacket; } });
35
35
  Object.defineProperty(exports, "setDeviceConfigurationPacket", { enumerable: true, get: function () { return setup_js_1.setDeviceConfigurationPacket; } });
36
+ var usb_device_js_1 = require("./usb/usb-device.js");
37
+ Object.defineProperty(exports, "parseSetupPacket", { enumerable: true, get: function () { return usb_device_js_1.parseSetupPacket; } });
36
38
  var logging_js_1 = require("./utils/logging.js");
37
39
  Object.defineProperty(exports, "ConsoleLogger", { enumerable: true, get: function () { return logging_js_1.ConsoleLogger; } });
38
40
  Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return logging_js_1.LogLevel; } });
@@ -0,0 +1,8 @@
1
+ import { BasePeripheral, Peripheral } from './peripheral.js';
2
+ export declare class RPPSM extends BasePeripheral implements Peripheral {
3
+ private frceOn;
4
+ private frceOff;
5
+ private wdsel;
6
+ readUint32(offset: number): number;
7
+ writeUint32(offset: number, value: number): void;
8
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RPPSM = void 0;
4
+ const peripheral_js_1 = require("./peripheral.js");
5
+ const FRCE_ON = 0x00;
6
+ const FRCE_OFF = 0x04;
7
+ const WDSEL = 0x08;
8
+ const DONE = 0x0c;
9
+ const PSM_BITS_MASK = 0x0001ffff;
10
+ class RPPSM extends peripheral_js_1.BasePeripheral {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.frceOn = 0;
14
+ this.frceOff = 0;
15
+ this.wdsel = 0;
16
+ }
17
+ readUint32(offset) {
18
+ switch (offset) {
19
+ case FRCE_ON:
20
+ return this.frceOn;
21
+ case FRCE_OFF:
22
+ return this.frceOff;
23
+ case WDSEL:
24
+ return this.wdsel;
25
+ case DONE:
26
+ // Domains are ready unless forced off (FRCE_ON overrides FRCE_OFF)
27
+ return (PSM_BITS_MASK & ~this.frceOff) | (this.frceOn & this.frceOff);
28
+ }
29
+ return super.readUint32(offset);
30
+ }
31
+ writeUint32(offset, value) {
32
+ switch (offset) {
33
+ case FRCE_ON:
34
+ this.frceOn = value & PSM_BITS_MASK;
35
+ break;
36
+ case FRCE_OFF:
37
+ this.frceOff = value & PSM_BITS_MASK;
38
+ break;
39
+ case WDSEL:
40
+ this.wdsel = value & PSM_BITS_MASK;
41
+ break;
42
+ default:
43
+ super.writeUint32(offset, value);
44
+ break;
45
+ }
46
+ }
47
+ }
48
+ exports.RPPSM = RPPSM;
@@ -1,4 +1,5 @@
1
1
  import { RP2040 } from '../rp2040.js';
2
+ import { USBDevice } from '../usb/usb-device.js';
2
3
  import { BasePeripheral } from './peripheral.js';
3
4
  export declare class RPUSBController extends BasePeripheral {
4
5
  private addrEndp;
@@ -8,15 +9,35 @@ export declare class RPUSBController extends BasePeripheral {
8
9
  private intForce;
9
10
  private sieStatus;
10
11
  private buffStatus;
12
+ private sieCtrl;
13
+ private sofFrameNumber;
14
+ private devAddrCtrl;
15
+ private intEpAddrCtrl;
16
+ private intEpCtrl;
17
+ private usbPwr;
18
+ private nakPoll;
19
+ private epAbort;
20
+ private epAbortDone;
21
+ private epStallArm;
22
+ private epStatusStallNak;
23
+ private hostMode;
24
+ private sofEnabled;
25
+ private connectedDevice;
26
+ private pendingSetupResponse;
27
+ private controlDataPid;
28
+ private expectingStatusPhase;
11
29
  private readonly endpointReadAlarms;
12
30
  private readonly endpointWriteAlarms;
13
31
  private readonly resetAlarm;
32
+ private readonly sofAlarm;
33
+ private readonly hostTransactionAlarm;
14
34
  onUSBEnabled?: () => void;
15
35
  onResetReceived?: () => void;
16
36
  onEndpointWrite?: (endpoint: number, buffer: Uint8Array) => void;
17
37
  onEndpointRead?: (endpoint: number, byteCount: number) => void;
18
38
  readDelayMicroseconds: number;
19
39
  writeDelayMicroseconds: number;
40
+ hostTransactionDelayMicroseconds: number;
20
41
  get intStatus(): number;
21
42
  constructor(rp2040: RP2040, name: string);
22
43
  readUint32(offset: number): number;
@@ -32,4 +53,22 @@ export declare class RPUSBController extends BasePeripheral {
32
53
  private indicateBufferReady;
33
54
  private buffStatusUpdated;
34
55
  private sieStatusUpdated;
56
+ /**
57
+ * Connect a simulated USB device to the host controller.
58
+ */
59
+ connectDevice(device: USBDevice): void;
60
+ /**
61
+ * Disconnect the simulated USB device from the host controller.
62
+ */
63
+ disconnectDevice(): void;
64
+ private onDeviceConnected;
65
+ private handleSieCtrlWrite;
66
+ private scheduleSofPacket;
67
+ private generateSOF;
68
+ private pollInterruptEndpoints;
69
+ private startHostTransaction;
70
+ private handleSetupTransaction;
71
+ private handleInTransaction;
72
+ private handleOutTransaction;
73
+ private completeHostTransaction;
35
74
  }