@johntalton/ftdi 1.1.0 → 1.1.2
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.
- package/README.md +88 -16
- package/lib/eeprom.d.ts +5 -5
- package/lib/eeprom.d.ts.map +1 -1
- package/lib/eeprom.js +2 -1
- package/lib/eeprom.js.map +1 -1
- package/lib/ftdi.d.ts +1 -1
- package/lib/ftdi.d.ts.map +1 -1
- package/lib/ftdi.js +16 -16
- package/lib/ftdi.js.map +1 -1
- package/lib/i2c/i2c-template.d.ts +19 -1
- package/lib/i2c/i2c-template.d.ts.map +1 -1
- package/lib/i2c/i2c-template.js +24 -13
- package/lib/i2c/i2c-template.js.map +1 -1
- package/lib/i2c/i2c.d.ts +2 -2
- package/lib/i2c/i2c.d.ts.map +1 -1
- package/lib/i2c/i2c.js +14 -8
- package/lib/i2c/i2c.js.map +1 -1
- package/lib/mpsse/command.d.ts.map +1 -1
- package/lib/mpsse/command.js +2 -2
- package/lib/mpsse/command.js.map +1 -1
- package/lib/mpsse/mpsse-template.d.ts +4 -2
- package/lib/mpsse/mpsse-template.d.ts.map +1 -1
- package/lib/mpsse/mpsse-template.js +36 -10
- package/lib/mpsse/mpsse-template.js.map +1 -1
- package/lib/mpsse/mpsse.d.ts +2 -2
- package/lib/mpsse/mpsse.d.ts.map +1 -1
- package/lib/mpsse/mpsse.js +2 -2
- package/lib/spi/index.d.ts +14 -0
- package/lib/spi/index.d.ts.map +1 -0
- package/lib/spi/index.js +74 -0
- package/lib/spi/index.js.map +1 -0
- package/lib/util.d.ts +4 -4
- package/lib/util.d.ts.map +1 -1
- package/lib/util.js +9 -8
- package/lib/util.js.map +1 -1
- package/package.json +14 -3
- package/src/eeprom.ts +10 -9
- package/src/ftdi.ts +16 -17
- package/src/i2c/i2c-template.ts +32 -13
- package/src/i2c/i2c.ts +15 -12
- package/src/mpsse/command.ts +2 -3
- package/src/mpsse/mpsse-template.ts +27 -10
- package/src/mpsse/mpsse.ts +3 -3
- package/src/spi/index.ts +113 -0
- package/src/util.ts +10 -9
package/lib/i2c/i2c.js
CHANGED
|
@@ -25,8 +25,6 @@ export async function readData(device, length, targetBuffer) {
|
|
|
25
25
|
(ArrayBuffer.isView(targetBuffer) ?
|
|
26
26
|
new Uint8Array(targetBuffer.buffer, targetBuffer.byteOffset, length) :
|
|
27
27
|
new Uint8Array(targetBuffer, 0, length));
|
|
28
|
-
// c0 low - RX-LED-emulation
|
|
29
|
-
// await device.mpsse.setGpioHigh(0b0000_0000, 0b0000_0001)
|
|
30
28
|
for (let offset = 0; offset < length; offset += 1) {
|
|
31
29
|
const ack = offset + 1 < length; // is last byte
|
|
32
30
|
const readByteTransaction = I2CTemplate.readData(ack);
|
|
@@ -34,8 +32,6 @@ export async function readData(device, length, targetBuffer) {
|
|
|
34
32
|
const byteReadResponse = await Util.pollData(device);
|
|
35
33
|
buffer.set(new Uint8Array(byteReadResponse.buffer, byteReadResponse.byteOffset, 1), offset);
|
|
36
34
|
}
|
|
37
|
-
// c0 high - RX-LED-emulation
|
|
38
|
-
// await device.mpsse.setGpioHigh(0b0000_0001, 0b0000_0001)
|
|
39
35
|
return buffer;
|
|
40
36
|
}
|
|
41
37
|
export async function writeData(device, length, buffer) {
|
|
@@ -69,7 +65,7 @@ export class FT232HBus {
|
|
|
69
65
|
constructor(device) {
|
|
70
66
|
this.#device = device;
|
|
71
67
|
}
|
|
72
|
-
// biome-ignore lint/
|
|
68
|
+
// biome-ignore lint/style/useThisInClassMethods: close is a noop
|
|
73
69
|
close() {
|
|
74
70
|
// noop
|
|
75
71
|
}
|
|
@@ -87,9 +83,19 @@ export class FT232HBus {
|
|
|
87
83
|
}
|
|
88
84
|
return result;
|
|
89
85
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
86
|
+
async sendByte(address, byteValue) {
|
|
87
|
+
//
|
|
88
|
+
const startAck = await sendAndReadACK(this.#device, I2CTemplate.startWithAddress(address, true));
|
|
89
|
+
if (!startAck) {
|
|
90
|
+
throw new Error('start with address nack');
|
|
91
|
+
}
|
|
92
|
+
//
|
|
93
|
+
const writeAck = await sendAndReadACK(this.#device, I2CTemplate.writeByte(byteValue));
|
|
94
|
+
if (!writeAck) {
|
|
95
|
+
throw new Error('write data nack');
|
|
96
|
+
}
|
|
97
|
+
//
|
|
98
|
+
await this.#device.sendData(I2CTemplate.stop());
|
|
93
99
|
}
|
|
94
100
|
async readI2cBlock(address, cmd, length, targetBuffer) {
|
|
95
101
|
//
|
package/lib/i2c/i2c.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i2c.js","sourceRoot":"","sources":["../../src/i2c/i2c.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,mCAAmC,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,MAAM,UAAU,QAAQ,CAAC,IAA6B;IACrD,IAAG,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;QAC7B,qCAAqC;IACtC,CAAC;IACD,MAAM,CAAE,IAAI,CAAE,GAAG,IAAI,CAAA;IACrB,IAAG,IAAI,KAAK,SAAS,EAAE,CAAC;QAAC,OAAO,KAAK,CAAA;IAAC,CAAC;IAEvC,OAAQ,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAkB,EAAE,WAAoC;IAC5F,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;IAClC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC5C,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAkB,EAAE,MAAc,EAAE,YAA8B;IAChG,MAAM,MAAM,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC;QAC5C,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACxB,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;YAClC,IAAI,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YACtE,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IAE1C,
|
|
1
|
+
{"version":3,"file":"i2c.js","sourceRoot":"","sources":["../../src/i2c/i2c.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/mpsse/command.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,MAAO,CAAA;AAC/B,eAAO,MAAM,oBAAoB,MAAO,CAAA;AAGxC,eAAO,MAAM,yBAAyB;IACrC,mBAAmB;IACnB,QAAQ;IACR,kBAAkB;IAClB,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;CACT,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AAEjC,eAAO,MAAM,aAAa;IACzB,yBAAyB;IACzB,yBAAyB;IACzB,wBAAwB;IACxB,wBAAwB;IAExB,wBAAwB;IACxB,wBAAwB;IACxB,uBAAuB;IACvB,uBAAuB;IAEvB,4CAA4C;IAC5C,4CAA4C;IAC5C,2CAA2C;IAC3C,2CAA2C;IAG3C,yBAAyB;IACzB,yBAAyB;IACzB,wBAAwB;IACxB,wBAAwB;IAExB,wBAAwB;IACxB,wBAAwB;IACxB,uBAAuB;IACvB,uBAAuB;IAEvB,4CAA4C;IAC5C,4CAA4C;IAC5C,2CAA2C;IAC3C,2CAA2C;
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/mpsse/command.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,MAAO,CAAA;AAC/B,eAAO,MAAM,oBAAoB,MAAO,CAAA;AAGxC,eAAO,MAAM,yBAAyB;IACrC,mBAAmB;IACnB,QAAQ;IACR,kBAAkB;IAClB,SAAS;IACT,SAAS;IACT,QAAQ;IACR,SAAS;CACT,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AAEjC,eAAO,MAAM,aAAa;IACzB,yBAAyB;IACzB,yBAAyB;IACzB,wBAAwB;IACxB,wBAAwB;IAExB,wBAAwB;IACxB,wBAAwB;IACxB,uBAAuB;IACvB,uBAAuB;IAEvB,4CAA4C;IAC5C,4CAA4C;IAC5C,2CAA2C;IAC3C,2CAA2C;IAG3C,yBAAyB;IACzB,yBAAyB;IACzB,wBAAwB;IACxB,wBAAwB;IAExB,wBAAwB;IACxB,wBAAwB;IACxB,uBAAuB;IACvB,uBAAuB;IAEvB,4CAA4C;IAC5C,4CAA4C;IAC5C,2CAA2C;IAC3C,2CAA2C;CAC1C,CAAA;AAYF,eAAO,MAAM,kBAAkB;IAC9B,sBAAsB;IACtB,uBAAuB;IAEvB,uBAAuB;IACvB,wBAAwB;CACxB,CAAA;AAED,eAAO,MAAM,iBAAiB;IAC7B,OAAO;IACP,OAAO;CACP,CAAA;AAED,eAAO,MAAM,sBAAsB;IAClC,eAAe;CACf,CAAA;AAED,eAAO,MAAM,4BAA4B;IACxC,cAAc;CAGd,CAAA;AASD,eAAO,MAAM,UAAU;IACtB,4BAA4B;IAC5B,2BAA2B;IAE3B,2BAA2B;IAC3B,4BAA4B;IAQ5B,wBAAwB;IACxB,yBAAyB;CAIzB,CAAA;AAED,eAAO,MAAM,oBAAoB;IAChC,qBAAqB;CACrB,CAAA"}
|
package/lib/mpsse/command.js
CHANGED
|
@@ -10,7 +10,7 @@ export const SHIFT_COMMANDS_DEFINITION = {
|
|
|
10
10
|
READ_TDO: 0b0010_0000, // Do read TDO
|
|
11
11
|
WRITE_TMS: 0b0100_0000 // Do writeTMS
|
|
12
12
|
};
|
|
13
|
-
export const SHIFT_COMMAND = {
|
|
13
|
+
export const SHIFT_COMMAND = /** @type {const} */ ({
|
|
14
14
|
OUT_MSB_BYTES_POSITIVE_VE: 0x10, // WRITE_TDI
|
|
15
15
|
OUT_MSB_BYTES_NEGATIVE_VE: 0x11, // WRITE_TDI | WRITE_NEGATIVE_EDGE
|
|
16
16
|
OUT_MSB_BITS_POSITIVE_VE: 0x12, // WRITE_TDI | BIT_MODE
|
|
@@ -36,7 +36,7 @@ export const SHIFT_COMMAND = {
|
|
|
36
36
|
IN_OUT_LSB_BYTES_OUT_POSITIVE_IN_NEGATIVE_VE: 0x3C,
|
|
37
37
|
IN_OUT_LSB_BITS_OUT_NEGATIVE_IN_POSITIVE_VE: 0x3B,
|
|
38
38
|
IN_OUT_LSB_BITS_OUT_POSITIVE_IN_NEGATIVE_VE: 0x3E,
|
|
39
|
-
};
|
|
39
|
+
});
|
|
40
40
|
// export const LSB_FIRST_TMS_COMMANDS = {
|
|
41
41
|
// CLOCK_DATA_NO_READ_POSITIVE_VE: 0x4A,
|
|
42
42
|
// CLOCK_DATA_NO_READ_NEGATIVE_VE: 0x4B,
|
package/lib/mpsse/command.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/mpsse/command.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAA,CAAC,wBAAwB;AACxD,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAA,CAAC,gDAAgD;AAEzF,kCAAkC;AAClC,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACxC,mBAAmB,EAAE,WAAW,EAAE,mBAAmB;IACrD,QAAQ,EAAa,WAAW,EAAE,8BAA8B;IAChE,kBAAkB,EAAG,WAAW,EAAE,kBAAkB;IACpD,SAAS,EAAY,WAAW,EAAE,+BAA+B;IACjE,SAAS,EAAY,WAAW,EAAE,eAAe;IACjD,QAAQ,EAAa,WAAW,EAAE,cAAc;IAChD,SAAS,EAAY,WAAW,CAAE,cAAc;CAChD,CAAA;AAID,MAAM,CAAC,MAAM,aAAa,GAAG;
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/mpsse/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
/** biome-ignore-all lint/style/useConsistentArrayType:
|
|
1
|
+
/** biome-ignore-all lint/style/useConsistentArrayType: miss-classified */
|
|
2
|
+
/** biome-ignore-all lint/nursery/noMisleadingReturnType: false-positive */
|
|
2
3
|
import { type ShiftCommand } from './command.ts';
|
|
3
4
|
export declare class MPSSETemplate {
|
|
4
5
|
static shiftOutByte(command: ShiftCommand, length: number, data: number): Array<number>;
|
|
6
|
+
static shiftOutBytes(command: ShiftCommand, length: number, data: Array<number>): Array<number>;
|
|
5
7
|
static shiftInByte(command: ShiftCommand, length: number): Array<number>;
|
|
6
8
|
static shiftOutBits(command: ShiftCommand, length: number, data: number): Array<number>;
|
|
7
9
|
static shiftInBits(command: ShiftCommand, length: number): Array<number>;
|
|
@@ -9,7 +11,7 @@ export declare class MPSSETemplate {
|
|
|
9
11
|
static gpioSetLow(pins: number, directions: number): Array<number>;
|
|
10
12
|
static gpioGetHigh(): Array<number>;
|
|
11
13
|
static gpioGetLow(): Array<number>;
|
|
12
|
-
static setClockDivisor(
|
|
14
|
+
static setClockDivisor(divisor: number): Array<number>;
|
|
13
15
|
static enableLoopback(enable?: boolean): Array<number>;
|
|
14
16
|
static enableClockDivideBy5(enable?: boolean): Array<number>;
|
|
15
17
|
static enableThreePhaseClocking(enable?: boolean): Array<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mpsse-template.d.ts","sourceRoot":"","sources":["../../src/mpsse/mpsse-template.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"mpsse-template.d.ts","sourceRoot":"","sources":["../../src/mpsse/mpsse-template.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,OAAO,EAMN,KAAK,YAAY,EACjB,MAAM,cAAc,CAAA;AAGrB,qBAAa,aAAa;IACzB,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAMtF;IAED,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAM9F;IAED,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAMvE;IAED,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAItF;IAED,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAIvE;IAED,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAMlE;IAED,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAMjE;IAED,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC,MAAM,CAAC,CAElC;IAED,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,CAAC,CAEjC;IAED,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CASrD;IAED,MAAM,CAAC,cAAc,CAAC,MAAM,UAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAGlD;IAED,MAAM,CAAC,oBAAoB,CAAC,MAAM,UAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAGxD;IAED,MAAM,CAAC,wBAAwB,CAAC,MAAM,UAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAG5D;IAED,MAAM,CAAC,sBAAsB,CAAC,MAAM,UAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAG1D;IAED,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAMxE;CACD"}
|
|
@@ -1,21 +1,47 @@
|
|
|
1
|
-
/** biome-ignore-all lint/style/useConsistentArrayType:
|
|
1
|
+
/** biome-ignore-all lint/style/useConsistentArrayType: miss-classified */
|
|
2
|
+
/** biome-ignore-all lint/nursery/noMisleadingReturnType: false-positive */
|
|
2
3
|
import { CLOCK_DIVISOR_COMMANDS, FT232H_ONLY_COMMANDS, H_COMMANDS, LOOPBACK_COMMANDS, PIN_STATE_COMMANDS } from './command.js';
|
|
3
4
|
export class MPSSETemplate {
|
|
4
5
|
static shiftOutByte(command, length, data) {
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
if (length <= 0) {
|
|
7
|
+
throw new RangeError('can not read zero length');
|
|
8
|
+
}
|
|
9
|
+
const lengthMinusOne = length - 1;
|
|
10
|
+
const lengthL = lengthMinusOne & 0xFF;
|
|
11
|
+
const lengthH = (lengthMinusOne >> 8) & 0xFF;
|
|
7
12
|
return [command, lengthL, lengthH, data];
|
|
8
13
|
}
|
|
14
|
+
static shiftOutBytes(command, length, data) {
|
|
15
|
+
if (length <= 0) {
|
|
16
|
+
throw new RangeError('can not read zero length');
|
|
17
|
+
}
|
|
18
|
+
const lengthMinusOne = length - 1;
|
|
19
|
+
const lengthL = lengthMinusOne & 0xFF;
|
|
20
|
+
const lengthH = (lengthMinusOne >> 8) & 0xFF;
|
|
21
|
+
return [command, lengthL, lengthH, ...data];
|
|
22
|
+
}
|
|
9
23
|
static shiftInByte(command, length) {
|
|
10
|
-
|
|
11
|
-
|
|
24
|
+
if (length <= 0) {
|
|
25
|
+
throw new RangeError('can not read zero length');
|
|
26
|
+
}
|
|
27
|
+
const lengthMinusOne = length - 1;
|
|
28
|
+
const lengthL = lengthMinusOne & 0xFF;
|
|
29
|
+
const lengthH = (lengthMinusOne >> 8) & 0xFF;
|
|
12
30
|
return [command, lengthL, lengthH];
|
|
13
31
|
}
|
|
14
32
|
static shiftOutBits(command, length, data) {
|
|
15
|
-
|
|
33
|
+
if (length <= 0) {
|
|
34
|
+
throw new RangeError('can not read zero length');
|
|
35
|
+
}
|
|
36
|
+
const lengthMinusOne = length - 1;
|
|
37
|
+
return [command, lengthMinusOne, data];
|
|
16
38
|
}
|
|
17
39
|
static shiftInBits(command, length) {
|
|
18
|
-
|
|
40
|
+
if (length <= 0) {
|
|
41
|
+
throw new RangeError('can not read zero length');
|
|
42
|
+
}
|
|
43
|
+
const lengthMinusOne = length - 1;
|
|
44
|
+
return [command, lengthMinusOne];
|
|
19
45
|
}
|
|
20
46
|
static gpioSetHigh(pins, directions) {
|
|
21
47
|
return [
|
|
@@ -37,9 +63,9 @@ export class MPSSETemplate {
|
|
|
37
63
|
static gpioGetLow() {
|
|
38
64
|
return [PIN_STATE_COMMANDS.READ_DATA_BITS_LOW_BYTE];
|
|
39
65
|
}
|
|
40
|
-
static setClockDivisor(
|
|
41
|
-
const divisorL =
|
|
42
|
-
const divisorH = (
|
|
66
|
+
static setClockDivisor(divisor) {
|
|
67
|
+
const divisorL = divisor & 0xFF;
|
|
68
|
+
const divisorH = (divisor >> 8) & 0xFF;
|
|
43
69
|
return [
|
|
44
70
|
CLOCK_DIVISOR_COMMANDS.SET_CLK_DIVISOR,
|
|
45
71
|
divisorL,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mpsse-template.js","sourceRoot":"","sources":["../../src/mpsse/mpsse-template.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"mpsse-template.js","sourceRoot":"","sources":["../../src/mpsse/mpsse-template.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,OAAO,EACN,sBAAsB,EACtB,oBAAoB,EACpB,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAElB,MAAM,cAAc,CAAA;AAGrB,MAAM,OAAO,aAAa;IACzB,MAAM,CAAC,YAAY,CAAC,OAAqB,EAAE,MAAc,EAAE,IAAY;QACtE,IAAG,MAAM,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,UAAU,CAAC,0BAA0B,CAAC,CAAA;QAAC,CAAC;QACpE,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,CAAA;QACjC,MAAM,OAAO,GAAG,cAAc,GAAG,IAAI,CAAA;QACrC,MAAM,OAAO,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;QAC5C,OAAO,CAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAE,CAAA;IAC3C,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,OAAqB,EAAE,MAAc,EAAE,IAAmB;QAC9E,IAAG,MAAM,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,UAAU,CAAC,0BAA0B,CAAC,CAAA;QAAC,CAAC;QACpE,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,CAAA;QACjC,MAAM,OAAO,GAAG,cAAc,GAAG,IAAI,CAAA;QACrC,MAAM,OAAO,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;QAC5C,OAAO,CAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAE,CAAA;IAC9C,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,OAAqB,EAAE,MAAc;QACvD,IAAG,MAAM,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,UAAU,CAAC,0BAA0B,CAAC,CAAA;QAAC,CAAC;QACpE,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,CAAA;QACjC,MAAM,OAAO,GAAG,cAAc,GAAG,IAAI,CAAA;QACrC,MAAM,OAAO,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;QAC5C,OAAO,CAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAE,CAAA;IACrC,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAqB,EAAE,MAAc,EAAE,IAAY;QACtE,IAAG,MAAM,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,UAAU,CAAC,0BAA0B,CAAC,CAAA;QAAC,CAAC;QACpE,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,CAAA;QACjC,OAAO,CAAE,OAAO,EAAE,cAAc,EAAE,IAAI,CAAE,CAAA;IACzC,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,OAAqB,EAAE,MAAc;QACvD,IAAG,MAAM,IAAI,CAAC,EAAE,CAAC;YAAC,MAAM,IAAI,UAAU,CAAC,0BAA0B,CAAC,CAAA;QAAC,CAAC;QACpE,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,CAAA;QACjC,OAAO,CAAE,OAAO,EAAE,cAAc,CAAE,CAAA;IACnC,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,IAAY,EAAE,UAAkB;QAClD,OAAO;YACN,kBAAkB,CAAC,uBAAuB;YAC1C,IAAI;YACJ,UAAU;SACV,CAAA;IACF,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,IAAY,EAAE,UAAkB;QACjD,OAAO;YACN,kBAAkB,CAAC,sBAAsB;YACzC,IAAI;YACJ,UAAU;SACV,CAAA;IACF,CAAC;IAED,MAAM,CAAC,WAAW;QACjB,OAAO,CAAE,kBAAkB,CAAC,wBAAwB,CAAE,CAAA;IACvD,CAAC;IAED,MAAM,CAAC,UAAU;QAChB,OAAO,CAAE,kBAAkB,CAAC,uBAAuB,CAAE,CAAA;IACtD,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,OAAe;QACrC,MAAM,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAA;QAC/B,MAAM,QAAQ,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;QAEtC,OAAO;YACN,sBAAsB,CAAC,eAAe;YACtC,QAAQ;YACR,QAAQ;SACR,CAAA;IACF,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI;QAClC,IAAG,MAAM,EAAE,CAAC;YAAC,OAAO,CAAE,iBAAiB,CAAC,OAAO,CAAE,CAAA;QAAC,CAAC;QACnD,OAAO,CAAE,iBAAiB,CAAC,OAAO,CAAE,CAAA;IACrC,CAAC;IAED,MAAM,CAAC,oBAAoB,CAAC,MAAM,GAAG,IAAI;QACxC,IAAG,MAAM,EAAE,CAAC;YAAC,OAAO,CAAE,UAAU,CAAC,2BAA2B,CAAE,CAAA;QAAC,CAAC;QAChE,OAAO,CAAE,UAAU,CAAC,4BAA4B,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,MAAM,GAAG,IAAI;QAC5C,IAAG,MAAM,EAAE,CAAC;YAAC,OAAO,CAAE,UAAU,CAAC,2BAA2B,CAAE,CAAA;QAAC,CAAC;QAChE,OAAO,CAAE,UAAU,CAAC,4BAA4B,CAAE,CAAA;IACnD,CAAC;IAED,MAAM,CAAC,sBAAsB,CAAC,MAAM,GAAG,IAAI;QAC1C,IAAG,MAAM,EAAE,CAAC;YAAC,OAAO,CAAE,UAAU,CAAC,wBAAwB,CAAE,CAAA;QAAC,CAAC;QAC7D,OAAO,CAAE,UAAU,CAAC,yBAAyB,CAAE,CAAA;IAChD,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,OAAe,EAAE,QAAgB;QACxD,OAAO;YACN,oBAAoB,CAAC,qBAAqB;YAC1C,OAAO;YACP,QAAQ;SACR,CAAA;IACF,CAAC;CACD"}
|
package/lib/mpsse/mpsse.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** biome-ignore-all lint/style/useConsistentArrayType:
|
|
1
|
+
/** biome-ignore-all lint/style/useConsistentArrayType: miss-classified */
|
|
2
2
|
import type { FTDIDevice } from '../ftdi.ts';
|
|
3
3
|
export declare class MPSSE {
|
|
4
4
|
#private;
|
|
@@ -9,7 +9,7 @@ export declare class MPSSE {
|
|
|
9
9
|
setGpioLow(pins: number, directions: number): Promise<void>;
|
|
10
10
|
getGpioHigh(): Promise<void>;
|
|
11
11
|
getGpioLow(): Promise<void>;
|
|
12
|
-
setClockDivisor(
|
|
12
|
+
setClockDivisor(divisor: number): Promise<void>;
|
|
13
13
|
enableClockDivideBy5(enable?: boolean): Promise<void>;
|
|
14
14
|
enableThreePhaseClocking(enable?: boolean): Promise<void>;
|
|
15
15
|
enableAdaptiveClocking(enable?: boolean): Promise<void>;
|
package/lib/mpsse/mpsse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mpsse.d.ts","sourceRoot":"","sources":["../../src/mpsse/mpsse.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"mpsse.d.ts","sourceRoot":"","sources":["../../src/mpsse/mpsse.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAK5C,qBAAa,KAAK;;IAGjB,YAAY,MAAM,EAAE,UAAU,EAE7B;IAEK,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,GAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAInE;IAEK,aAAa,CAAC,OAAO,SAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAS3D;IAEK,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjE;IAEK,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhE;IAEK,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAGjC;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAGhC;IAGK,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpD;IAOK,oBAAoB,CAAC,MAAM,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvD;IAEK,wBAAwB,CAAC,MAAM,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3D;IAQK,sBAAsB,CAAC,MAAM,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAGzD;IAQK,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE;CACD"}
|
package/lib/mpsse/mpsse.js
CHANGED
|
@@ -42,8 +42,8 @@ export class MPSSE {
|
|
|
42
42
|
const command = MPSSETemplate.gpioGetLow();
|
|
43
43
|
return this.executeCommands(command);
|
|
44
44
|
}
|
|
45
|
-
async setClockDivisor(
|
|
46
|
-
const command = MPSSETemplate.setClockDivisor(
|
|
45
|
+
async setClockDivisor(divisor) {
|
|
46
|
+
const command = MPSSETemplate.setClockDivisor(divisor);
|
|
47
47
|
return this.executeCommands(command);
|
|
48
48
|
}
|
|
49
49
|
// async waitIOHigh(): Promise<void> {s
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** biome-ignore-all lint/style/noNestedTernary: we like them */
|
|
2
|
+
import type { SPIBus, SPIOptions, TransferRequest, TransferResult } from '@johntalton/and-other-delights';
|
|
3
|
+
import type { FTDIDevice } from '../ftdi.ts';
|
|
4
|
+
export declare const delayMs: (ms: number) => Promise<void>;
|
|
5
|
+
export interface FT232HSPIOptions extends SPIOptions {
|
|
6
|
+
chipSelect1?: [boolean];
|
|
7
|
+
ledRxTx?: [boolean];
|
|
8
|
+
}
|
|
9
|
+
export declare class FTDISPIBus implements SPIBus {
|
|
10
|
+
#private;
|
|
11
|
+
constructor(device: FTDIDevice, options?: Partial<FT232HSPIOptions>);
|
|
12
|
+
transfer(request: TransferRequest, options?: Partial<FT232HSPIOptions>): Promise<TransferResult>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/spi/index.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,KAAK,EACX,MAAM,EACN,UAAU,EACV,eAAe,EACf,cAAc,EACd,MAAM,gCAAgC,CAAA;AAEvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAuB5C,eAAO,MAAM,OAAO,OAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAAoD,CAAA;AAErG,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IACnD,WAAW,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;IACvB,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;CACnB;AAED,qBAAa,UAAW,YAAW,MAAM;;IAIxC,YAAY,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAGlE;IAEK,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CA+DrG;CAED"}
|
package/lib/spi/index.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { DEFAULT_SPI_MODE, MODE_0 } from '@johntalton/and-other-delights';
|
|
2
|
+
import { CLOCK_BASE_60, CLOCK_DEFAULT_STANDARD_MODE_100_kHz, Clock } from '../mpsse/clock.js';
|
|
3
|
+
import { H_COMMANDS, HOST_AND_MPSSE_MODE_COMMANDS, SHIFT_COMMAND } from '../mpsse/command.js';
|
|
4
|
+
import { MPSSETemplate } from '../mpsse/mpsse-template.js';
|
|
5
|
+
import { Util } from '../util.js';
|
|
6
|
+
// const CLOCK_PIN_MASK = 0b0000_0001
|
|
7
|
+
// const MOSI_PIN_MASK = 0b0000_0010 // host out
|
|
8
|
+
// const MISO_PIN_MASK = 0b0000_0100 // host in
|
|
9
|
+
const CS0_PIN_MASK = 0b0000_1000;
|
|
10
|
+
// const CS1_PIN_MASK = 0b0001_0000
|
|
11
|
+
// const LED_TX_PIN_MASK = 0b0010_0000
|
|
12
|
+
// const LED_RX_PIN_MASK = 0b0100_0000
|
|
13
|
+
// const CLOCK_MONITOR_PIN_MASK = 0b1000_0000
|
|
14
|
+
const SPI_PIN_DIRECTION = 0b0000_1011;
|
|
15
|
+
export const delayMs = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
16
|
+
export class FTDISPIBus {
|
|
17
|
+
#device;
|
|
18
|
+
#options;
|
|
19
|
+
constructor(device, options) {
|
|
20
|
+
this.#device = device;
|
|
21
|
+
this.#options = options ?? {};
|
|
22
|
+
}
|
|
23
|
+
async transfer(request, options) {
|
|
24
|
+
const { mode, speedHz } = {
|
|
25
|
+
mode: DEFAULT_SPI_MODE,
|
|
26
|
+
speedHz: CLOCK_DEFAULT_STANDARD_MODE_100_kHz,
|
|
27
|
+
...this.#options,
|
|
28
|
+
...(options ?? {})
|
|
29
|
+
};
|
|
30
|
+
const { sendBuffer, receiveBufferLength } = request;
|
|
31
|
+
if (mode !== MODE_0) {
|
|
32
|
+
throw new Error('currently mode 0 only');
|
|
33
|
+
}
|
|
34
|
+
const writeLength = sendBuffer?.byteLength ?? 0;
|
|
35
|
+
const sendBufferU8 = (sendBuffer === undefined) ?
|
|
36
|
+
[] :
|
|
37
|
+
ArrayBuffer.isView(sendBuffer) ?
|
|
38
|
+
new Uint8Array(sendBuffer.buffer, sendBuffer.byteOffset, sendBuffer.byteLength) :
|
|
39
|
+
new Uint8Array(sendBuffer);
|
|
40
|
+
// calc clock divider for non-div-5
|
|
41
|
+
const divisor = Clock.clockDivisor(speedHz, CLOCK_BASE_60);
|
|
42
|
+
const totalBytesWritten = await this.#device.sendData(Uint8Array.from([
|
|
43
|
+
// preamble to set state
|
|
44
|
+
H_COMMANDS.DISABLE_CLOCK_DIVIDE_BY_FIVE,
|
|
45
|
+
...MPSSETemplate.setClockDivisor(divisor),
|
|
46
|
+
H_COMMANDS.DISABLE_THREE_PHASE_CLOCKING,
|
|
47
|
+
H_COMMANDS.DISABLE_ADAPTIVE_CLOCKING,
|
|
48
|
+
// prep pins
|
|
49
|
+
...MPSSETemplate.gpioSetLow(CS0_PIN_MASK, SPI_PIN_DIRECTION), // CS High / Clock Low
|
|
50
|
+
...MPSSETemplate.gpioSetLow(0, SPI_PIN_DIRECTION), // CS Low / Clock Low
|
|
51
|
+
// transfer data
|
|
52
|
+
...MPSSETemplate.shiftOutBytes(SHIFT_COMMAND.OUT_MSB_BYTES_NEGATIVE_VE, writeLength, [...sendBufferU8]),
|
|
53
|
+
...((receiveBufferLength === 0) ? [] : MPSSETemplate.shiftInByte(SHIFT_COMMAND.IN_MSB_BYTES_POSITIVE_VE, receiveBufferLength)),
|
|
54
|
+
// return pins to idle state
|
|
55
|
+
...MPSSETemplate.gpioSetLow(CS0_PIN_MASK, SPI_PIN_DIRECTION), // CS high / Clock Low
|
|
56
|
+
HOST_AND_MPSSE_MODE_COMMANDS.SEND_IMMEDIATE // do it now
|
|
57
|
+
]));
|
|
58
|
+
if (totalBytesWritten === 0) {
|
|
59
|
+
throw new Error('no bytes written');
|
|
60
|
+
}
|
|
61
|
+
if (receiveBufferLength === 0) {
|
|
62
|
+
return {
|
|
63
|
+
bytesWritten: writeLength
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// consume buffer
|
|
67
|
+
const result = await Util.pollData(this.#device, receiveBufferLength);
|
|
68
|
+
return {
|
|
69
|
+
bytesWritten: writeLength,
|
|
70
|
+
readBuffer: result
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/spi/index.ts"],"names":[],"mappings":"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"}
|
package/lib/util.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/** biome-ignore-all lint/performance/noAwaitInLoops:
|
|
2
|
-
/** biome-ignore-all lint/style/useConsistentArrayType:
|
|
3
|
-
import type { FTDIDevice } from
|
|
1
|
+
/** biome-ignore-all lint/performance/noAwaitInLoops: simplifies code */
|
|
2
|
+
/** biome-ignore-all lint/style/useConsistentArrayType: miss-classified */
|
|
3
|
+
import type { FTDIDevice } from './ftdi.ts';
|
|
4
4
|
export interface ChipInfo {
|
|
5
5
|
major: number;
|
|
6
6
|
minor: number;
|
|
@@ -21,6 +21,6 @@ export declare const DEFAULT_DATA_READ_SIZE = 64;
|
|
|
21
21
|
export declare const DEFAULT_MAX_POLL_ATTEMPTS = 5;
|
|
22
22
|
export declare class Util {
|
|
23
23
|
static chip(major: number, minor: number): ChipInfo | undefined;
|
|
24
|
-
static pollData(device: FTDIDevice, attempts?: number): Promise<Uint8Array<ArrayBuffer>>;
|
|
24
|
+
static pollData(device: FTDIDevice, length?: number, attempts?: number): Promise<Uint8Array<ArrayBuffer>>;
|
|
25
25
|
}
|
|
26
26
|
//# sourceMappingURL=util.d.ts.map
|
package/lib/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,0EAA0E;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAG3C,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IAEZ,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IAEnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,iBAAiB,IAAI,CAAA;AAClC,eAAO,MAAM,oBAAoB,IAAI,CAAA;AACrC,eAAO,MAAM,gBAAgB,IAAI,CAAA;AACjC,eAAO,MAAM,oBAAoB,IAAI,CAAA;AACrC,eAAO,MAAM,oBAAoB,IAAI,CAAA;AACrC,eAAO,MAAM,mBAAmB,IAAI,CAAA;AAEpC,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,QAAQ,CAsBrC,CAAA;AAGD,eAAO,MAAM,sBAAsB,KAAK,CAAA;AACxC,eAAO,MAAM,yBAAyB,IAAI,CAAA;AAE1C,qBAAa,IAAI;IAChB,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAI9D;IAED,OAAa,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,SAAyB,EAAE,QAAQ,SAA4B,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAYjJ;CACD"}
|
package/lib/util.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { STATUS_PREFIX_LENGTH } from
|
|
1
|
+
import { STATUS_PREFIX_LENGTH } from './status.js';
|
|
2
2
|
export const USB_MAJOR_TYPE_BM = 4;
|
|
3
3
|
export const USB_MAJOR_TYPE_2232C = 5;
|
|
4
4
|
export const USB_MAJOR_TYPE_R = 6;
|
|
@@ -38,18 +38,19 @@ export class Util {
|
|
|
38
38
|
}
|
|
39
39
|
return info;
|
|
40
40
|
}
|
|
41
|
-
static async pollData(device, attempts = DEFAULT_MAX_POLL_ATTEMPTS) {
|
|
41
|
+
static async pollData(device, length = DEFAULT_DATA_READ_SIZE, attempts = DEFAULT_MAX_POLL_ATTEMPTS) {
|
|
42
|
+
// console.log('pollData', length)
|
|
42
43
|
for (let i = 0; i < attempts; i += 1) {
|
|
43
|
-
const response = await device.readData(
|
|
44
|
-
if (response.byteLength === STATUS_PREFIX_LENGTH) {
|
|
45
|
-
continue;
|
|
46
|
-
}
|
|
44
|
+
const response = await device.readData(STATUS_PREFIX_LENGTH + length);
|
|
47
45
|
if (response === undefined) {
|
|
48
46
|
throw new Error('no response');
|
|
49
47
|
}
|
|
48
|
+
if (response.byteLength === STATUS_PREFIX_LENGTH) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
50
51
|
// const status = DeviceStatus.parse(response)
|
|
51
|
-
// console.log('attempts', i)
|
|
52
|
-
return new Uint8Array(response.buffer, STATUS_PREFIX_LENGTH);
|
|
52
|
+
// console.log('attempts', i, status)
|
|
53
|
+
return new Uint8Array(response.buffer, response.byteOffset + STATUS_PREFIX_LENGTH);
|
|
53
54
|
}
|
|
54
55
|
throw new Error('no valid data acquired');
|
|
55
56
|
}
|
package/lib/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@johntalton/ftdi",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"FTDI",
|
|
8
|
+
"I²C",
|
|
9
|
+
"FT232H",
|
|
10
|
+
"EEPROM",
|
|
11
|
+
"GPIO",
|
|
12
|
+
"MPSSE",
|
|
13
|
+
"WebUSB",
|
|
14
|
+
"USB"
|
|
15
|
+
],
|
|
6
16
|
"exports": {
|
|
7
17
|
".": "./lib/index.js",
|
|
8
18
|
"./i2c": "./lib/i2c/index.js",
|
|
19
|
+
"./spi": "./lib/spi/index.js",
|
|
9
20
|
"./mpsse": "./lib/mpsse/index.js",
|
|
10
21
|
"./eeprom": "./lib/eeprom.js"
|
|
11
22
|
},
|
|
@@ -27,12 +38,12 @@
|
|
|
27
38
|
"coverage": "c8 --src src --check-coverage --statements 95 --branches 95 --functions 95 --lines 95 -r lcovonly -r text node --test test/**/*.test.js"
|
|
28
39
|
},
|
|
29
40
|
"devDependencies": {
|
|
30
|
-
"@biomejs/biome": "^2.
|
|
41
|
+
"@biomejs/biome": "^2.6.2",
|
|
31
42
|
"@types/w3c-web-usb": "^1.0.14",
|
|
32
43
|
"c8": "^12.0.0",
|
|
33
44
|
"typescript": "^7.0.2"
|
|
34
45
|
},
|
|
35
46
|
"dependencies": {
|
|
36
|
-
"@johntalton/and-other-delights": "^8.6.
|
|
47
|
+
"@johntalton/and-other-delights": "^8.6.7"
|
|
37
48
|
}
|
|
38
49
|
}
|
package/src/eeprom.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/** biome-ignore-all lint/performance/noAwaitInLoops:
|
|
2
|
-
/** biome-ignore-all lint/nursery/noMisleadingReturnType:
|
|
3
|
-
/** biome-ignore-all lint/style/useConsistentArrayType:
|
|
4
|
-
/** biome-ignore-all lint/style/noExcessiveLinesPerFile:
|
|
5
|
-
/** biome-ignore-all lint/style/useDestructuring:
|
|
1
|
+
/** biome-ignore-all lint/performance/noAwaitInLoops: simplifies code */
|
|
2
|
+
/** biome-ignore-all lint/nursery/noMisleadingReturnType: false positive */
|
|
3
|
+
/** biome-ignore-all lint/style/useConsistentArrayType: miss-classified */
|
|
4
|
+
/** biome-ignore-all lint/style/noExcessiveLinesPerFile: parser for all chips */
|
|
5
|
+
/** biome-ignore-all lint/style/useDestructuring: explicity word index for array */
|
|
6
6
|
import type { FTDIDevice } from './ftdi.ts'
|
|
7
7
|
import {
|
|
8
8
|
type ChipInfo,
|
|
@@ -74,7 +74,7 @@ export const CBUS_FUNC_NAME_R: Record<number, string> = {
|
|
|
74
74
|
9: 'CLK6',
|
|
75
75
|
10: 'IOMODE',
|
|
76
76
|
11: 'BB_WR',
|
|
77
|
-
12: 'BB_RD
|
|
77
|
+
12: 'BB_RD'
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
export const GROUP_DRIVE_MASK = 0b0000_0011
|
|
@@ -126,7 +126,7 @@ export interface EEPROMInfo {
|
|
|
126
126
|
selfPowered: boolean
|
|
127
127
|
remoteWake: boolean
|
|
128
128
|
maxPower: number
|
|
129
|
-
}
|
|
129
|
+
}
|
|
130
130
|
|
|
131
131
|
chipConfig: {
|
|
132
132
|
isInIsochronous: boolean
|
|
@@ -134,7 +134,7 @@ export interface EEPROMInfo {
|
|
|
134
134
|
suspendPullDowns: boolean
|
|
135
135
|
useSerial: boolean
|
|
136
136
|
useUSBVersion: boolean
|
|
137
|
-
}
|
|
137
|
+
}
|
|
138
138
|
|
|
139
139
|
manufacture: string|undefined
|
|
140
140
|
product: string|undefined
|
|
@@ -181,7 +181,7 @@ export interface EEPROMInfo232H {
|
|
|
181
181
|
flowcontrol: boolean
|
|
182
182
|
powersave: boolean
|
|
183
183
|
|
|
184
|
-
group: [ GroupItem, GroupItem ]
|
|
184
|
+
group: [ GroupItem, GroupItem ]
|
|
185
185
|
|
|
186
186
|
cbusFunction: Array<string|undefined>
|
|
187
187
|
|
|
@@ -543,6 +543,7 @@ export class FTDIEEPROM {
|
|
|
543
543
|
return undefined
|
|
544
544
|
}
|
|
545
545
|
|
|
546
|
+
// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: does heavy lifting
|
|
546
547
|
static parseEEPROM(buffer: ArrayBufferView<ArrayBuffer|ArrayBuffer>, chipInfo: ChipInfo): EEPROMInfo|undefined {
|
|
547
548
|
const u16 = ArrayBuffer.isView(buffer) ?
|
|
548
549
|
new Uint16Array(buffer.buffer, buffer.byteOffset) :
|