@johntalton/ftdi 1.0.0

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 (82) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +89 -0
  3. package/lib/consts.d.ts +33 -0
  4. package/lib/consts.d.ts.map +1 -0
  5. package/lib/consts.js +42 -0
  6. package/lib/consts.js.map +1 -0
  7. package/lib/eeprom.d.ts +129 -0
  8. package/lib/eeprom.d.ts.map +1 -0
  9. package/lib/eeprom.js +495 -0
  10. package/lib/eeprom.js.map +1 -0
  11. package/lib/ft232h.d.ts +37 -0
  12. package/lib/ft232h.d.ts.map +1 -0
  13. package/lib/ft232h.js +204 -0
  14. package/lib/ft232h.js.map +1 -0
  15. package/lib/ftdi.d.ts +37 -0
  16. package/lib/ftdi.d.ts.map +1 -0
  17. package/lib/ftdi.js +204 -0
  18. package/lib/ftdi.js.map +1 -0
  19. package/lib/i2c/i2c-template.d.ts +10 -0
  20. package/lib/i2c/i2c-template.d.ts.map +1 -0
  21. package/lib/i2c/i2c-template.js +122 -0
  22. package/lib/i2c/i2c-template.js.map +1 -0
  23. package/lib/i2c/i2c.d.ts +29 -0
  24. package/lib/i2c/i2c.d.ts.map +1 -0
  25. package/lib/i2c/i2c.js +169 -0
  26. package/lib/i2c/i2c.js.map +1 -0
  27. package/lib/i2c/index.d.ts +5 -0
  28. package/lib/i2c/index.d.ts.map +1 -0
  29. package/lib/i2c/index.js +5 -0
  30. package/lib/i2c/index.js.map +1 -0
  31. package/lib/i2c/range.d.ts +2 -0
  32. package/lib/i2c/range.d.ts.map +1 -0
  33. package/lib/i2c/range.js +6 -0
  34. package/lib/i2c/range.js.map +1 -0
  35. package/lib/index.d.ts +9 -0
  36. package/lib/index.d.ts.map +1 -0
  37. package/lib/index.js +9 -0
  38. package/lib/index.js.map +1 -0
  39. package/lib/mpsse/clock.d.ts +16 -0
  40. package/lib/mpsse/clock.d.ts.map +1 -0
  41. package/lib/mpsse/clock.js +34 -0
  42. package/lib/mpsse/clock.js.map +1 -0
  43. package/lib/mpsse/command.d.ts +66 -0
  44. package/lib/mpsse/command.d.ts.map +1 -0
  45. package/lib/mpsse/command.js +89 -0
  46. package/lib/mpsse/command.js.map +1 -0
  47. package/lib/mpsse/index.d.ts +7 -0
  48. package/lib/mpsse/index.d.ts.map +1 -0
  49. package/lib/mpsse/index.js +7 -0
  50. package/lib/mpsse/index.js.map +1 -0
  51. package/lib/mpsse/mpsse-template.d.ts +19 -0
  52. package/lib/mpsse/mpsse-template.d.ts.map +1 -0
  53. package/lib/mpsse/mpsse-template.js +81 -0
  54. package/lib/mpsse/mpsse-template.js.map +1 -0
  55. package/lib/mpsse/mpsse.d.ts +18 -0
  56. package/lib/mpsse/mpsse.d.ts.map +1 -0
  57. package/lib/mpsse/mpsse.js +77 -0
  58. package/lib/mpsse/mpsse.js.map +1 -0
  59. package/lib/status.d.ts +39 -0
  60. package/lib/status.d.ts.map +1 -0
  61. package/lib/status.js +62 -0
  62. package/lib/status.js.map +1 -0
  63. package/lib/util.d.ts +26 -0
  64. package/lib/util.d.ts.map +1 -0
  65. package/lib/util.js +57 -0
  66. package/lib/util.js.map +1 -0
  67. package/package.json +38 -0
  68. package/src/consts.ts +57 -0
  69. package/src/eeprom.ts +663 -0
  70. package/src/ftdi.ts +215 -0
  71. package/src/i2c/i2c-template.ts +156 -0
  72. package/src/i2c/i2c.ts +210 -0
  73. package/src/i2c/index.ts +4 -0
  74. package/src/i2c/range.ts +6 -0
  75. package/src/index.ts +8 -0
  76. package/src/mpsse/clock.ts +36 -0
  77. package/src/mpsse/command.ts +113 -0
  78. package/src/mpsse/index.ts +6 -0
  79. package/src/mpsse/mpsse-template.ts +96 -0
  80. package/src/mpsse/mpsse.ts +95 -0
  81. package/src/status.ts +94 -0
  82. package/src/util.ts +72 -0
@@ -0,0 +1,29 @@
1
+ /** biome-ignore-all lint/style/noNestedTernary: preserve const assign */
2
+ /** biome-ignore-all lint/performance/noAwaitInLoops: simplify impl */
3
+ /** biome-ignore-all lint/style/useConsistentArrayType: <explanation> */
4
+ import type { I2CAddress, I2CBufferSource, I2CBus, I2CCommand, I2CReadResult, I2CWriteResult } from '@johntalton/and-other-delights';
5
+ import type { FTDIDevice } from '../ftdi.ts';
6
+ export declare function checkAck(data: Uint8Array<ArrayBuffer>): boolean;
7
+ export declare function sendAndReadACK(device: FTDIDevice, transaction: Uint8Array<ArrayBuffer>): Promise<boolean>;
8
+ export declare function readData(device: FTDIDevice, length: number, targetBuffer?: I2CBufferSource): Promise<I2CBufferSource>;
9
+ export declare function writeData(device: FTDIDevice, length: number, buffer: I2CBufferSource): Promise<void>;
10
+ export interface FT232HBusOptions {
11
+ enableClockDivideBy5?: boolean;
12
+ targetClockHz?: number;
13
+ }
14
+ export declare class FT232HBus implements I2CBus {
15
+ #private;
16
+ readonly name = "FT232H";
17
+ readonly supportsScan = true;
18
+ readonly supportsMultiByteDataAddress = false;
19
+ static init(device: FTDIDevice, options?: FT232HBusOptions): Promise<void>;
20
+ constructor(device: FTDIDevice);
21
+ close(): void;
22
+ scan(): Promise<I2CAddress[]>;
23
+ sendByte(_address: I2CAddress, _byteValue: number): Promise<void>;
24
+ readI2cBlock(address: I2CAddress, cmd: I2CCommand, length: number, targetBuffer?: I2CBufferSource): Promise<I2CReadResult>;
25
+ writeI2cBlock(address: I2CAddress, cmd: I2CCommand, length: number, buffer: I2CBufferSource): Promise<I2CWriteResult>;
26
+ i2cRead(address: I2CAddress, length: number, targetBuffer?: I2CBufferSource): Promise<I2CReadResult>;
27
+ i2cWrite(address: I2CAddress, length: number, buffer: I2CBufferSource): Promise<I2CWriteResult>;
28
+ }
29
+ //# sourceMappingURL=i2c.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i2c.d.ts","sourceRoot":"","sources":["../../src/i2c/i2c.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,sEAAsE;AACtE,wEAAwE;AACxE,OAAO,KAAK,EACX,UAAU,EACV,eAAe,EACf,MAAM,EACN,UAAU,EACV,aAAa,EACb,cAAc,EACd,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAO5C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,OAAO,CAS/D;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAI/G;AAED,wBAAsB,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAwB3H;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAY1G;AAED,MAAM,WAAW,gBAAgB;IAChC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,qBAAa,SAAU,YAAW,MAAM;;IACvC,QAAQ,CAAC,IAAI,YAAW;IACxB,QAAQ,CAAC,YAAY,QAAO;IAC5B,QAAQ,CAAC,4BAA4B,SAAQ;IAI7C,OAAa,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ/E;IAED,YAAY,MAAM,EAAE,UAAU,EAE7B;IAGD,KAAK,IAAI,IAAI,CAEZ;IAEK,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAelC;IAGK,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE;IAEK,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAuB/H;IAEK,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAqB1H;IAEK,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAezG;IAEK,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAepG;CACD"}
package/lib/i2c/i2c.js ADDED
@@ -0,0 +1,169 @@
1
+ import { CLOCK_DEFAULT_STANDARD_MODE_100_kHz } from '../mpsse/clock.js';
2
+ import { DeviceStatus } from '../status.js';
3
+ import { DEFAULT_DATA_READ_SIZE, Util } from '../util.js';
4
+ import { I2CTemplate } from './i2c-template.js';
5
+ import { range } from './range.js';
6
+ export function checkAck(data) {
7
+ if (data.byteLength !== 1) {
8
+ console.log('more ack', data);
9
+ // throw new Error('not just an ack')
10
+ }
11
+ const [byte] = data;
12
+ if (byte === undefined) {
13
+ return false;
14
+ }
15
+ return (byte & 0b0000_0001) === 0;
16
+ }
17
+ export async function sendAndReadACK(device, transaction) {
18
+ await device.sendData(transaction);
19
+ const response = await Util.pollData(device);
20
+ return checkAck(response);
21
+ }
22
+ export async function readData(device, length, targetBuffer) {
23
+ const buffer = (targetBuffer === undefined) ?
24
+ new Uint8Array(length) :
25
+ (ArrayBuffer.isView(targetBuffer) ?
26
+ new Uint8Array(targetBuffer.buffer, targetBuffer.byteOffset, length) :
27
+ new Uint8Array(targetBuffer, 0, length));
28
+ // c0 low - RX-LED-emulation
29
+ // await device.mpsse.setGpioHigh(0b0000_0000, 0b0000_0001)
30
+ for (let offset = 0; offset < length; offset += 1) {
31
+ const ack = offset + 1 < length; // is last byte
32
+ const readByteTransaction = I2CTemplate.readData(ack);
33
+ await device.sendData(readByteTransaction);
34
+ const byteReadResponse = await Util.pollData(device);
35
+ buffer.set(new Uint8Array(byteReadResponse.buffer, byteReadResponse.byteOffset, 1), offset);
36
+ }
37
+ // c0 high - RX-LED-emulation
38
+ // await device.mpsse.setGpioHigh(0b0000_0001, 0b0000_0001)
39
+ return buffer;
40
+ }
41
+ export async function writeData(device, length, buffer) {
42
+ const u8 = ArrayBuffer.isView(buffer) ?
43
+ new Uint8Array(buffer.buffer, buffer.byteOffset, length) :
44
+ new Uint8Array(buffer, 0, length);
45
+ for (let i = 0; i < length; i += 1) {
46
+ const data = u8[i];
47
+ if (data === undefined) {
48
+ throw new Error('data byte undefined');
49
+ }
50
+ const writeAck = await sendAndReadACK(device, I2CTemplate.writeByte(data));
51
+ if (!writeAck) {
52
+ throw new Error('write data nack');
53
+ }
54
+ }
55
+ }
56
+ export class FT232HBus {
57
+ name = 'FT232H';
58
+ supportsScan = true;
59
+ supportsMultiByteDataAddress = false;
60
+ #device;
61
+ static async init(device, options) {
62
+ const transaction = I2CTemplate.initI2C(options?.targetClockHz ?? CLOCK_DEFAULT_STANDARD_MODE_100_kHz, options?.enableClockDivideBy5 ?? false);
63
+ await device.sendData(transaction);
64
+ // todo this is direct read, not pollData
65
+ const result = await device.readData(DEFAULT_DATA_READ_SIZE);
66
+ const status = DeviceStatus.parse(result);
67
+ console.log('init status', status);
68
+ }
69
+ constructor(device) {
70
+ this.#device = device;
71
+ }
72
+ // biome-ignore lint/nursery/useThisInClassMethods: close is a noop
73
+ close() {
74
+ // noop
75
+ }
76
+ async scan() {
77
+ const result = [];
78
+ const I2C_RANGE_START = 0x08;
79
+ const I2C_RANGE_END = 0x77;
80
+ for (const addr of range(I2C_RANGE_START, I2C_RANGE_END)) {
81
+ //
82
+ const startAck = await sendAndReadACK(this.#device, I2CTemplate.startWithAddress(addr, true));
83
+ if (startAck) {
84
+ result.push(addr);
85
+ }
86
+ // todo reset or send stop?
87
+ }
88
+ return result;
89
+ }
90
+ // biome-ignore lint/nursery/useThisInClassMethods: no impl
91
+ async sendByte(_address, _byteValue) {
92
+ throw new Error('Method not implemented.');
93
+ }
94
+ async readI2cBlock(address, cmd, length, targetBuffer) {
95
+ //
96
+ const startAck = await sendAndReadACK(this.#device, I2CTemplate.startWithAddress(address, true));
97
+ if (!startAck) {
98
+ throw new Error('start with address nack');
99
+ }
100
+ //
101
+ const cmdBuffer = Uint8Array.from(Array.isArray(cmd) ? cmd : [cmd]);
102
+ await writeData(this.#device, cmdBuffer.byteLength, cmdBuffer);
103
+ //
104
+ const repeatStartAck = await sendAndReadACK(this.#device, I2CTemplate.repeatStartWithAddress(address));
105
+ if (!repeatStartAck) {
106
+ throw new Error('repeat start nack');
107
+ }
108
+ //
109
+ const buffer = await readData(this.#device, length, targetBuffer);
110
+ //
111
+ await this.#device.sendData(I2CTemplate.stop());
112
+ return {
113
+ bytesRead: length,
114
+ buffer
115
+ };
116
+ }
117
+ async writeI2cBlock(address, cmd, length, buffer) {
118
+ if (Array.isArray(cmd)) {
119
+ throw new Error('single command byte only');
120
+ }
121
+ //
122
+ const startAck = await sendAndReadACK(this.#device, I2CTemplate.startWithAddress(address, true));
123
+ if (!startAck) {
124
+ throw new Error('start with address nack');
125
+ }
126
+ //
127
+ const cmdBuffer = Uint8Array.from(Array.isArray(cmd) ? cmd : [cmd]);
128
+ await writeData(this.#device, cmdBuffer.byteLength, cmdBuffer);
129
+ //
130
+ await writeData(this.#device, length, buffer);
131
+ //
132
+ await this.#device.sendData(I2CTemplate.stop());
133
+ return {
134
+ bytesWritten: length,
135
+ buffer
136
+ };
137
+ }
138
+ async i2cRead(address, length, targetBuffer) {
139
+ //
140
+ const startAck = await sendAndReadACK(this.#device, I2CTemplate.startWithAddress(address));
141
+ if (!startAck) {
142
+ throw new Error('start with address nack');
143
+ }
144
+ //
145
+ const buffer = await readData(this.#device, length, targetBuffer);
146
+ //
147
+ await this.#device.sendData(I2CTemplate.stop());
148
+ return {
149
+ bytesRead: length,
150
+ buffer
151
+ };
152
+ }
153
+ async i2cWrite(address, length, buffer) {
154
+ //
155
+ const startAck = await sendAndReadACK(this.#device, I2CTemplate.startWithAddress(address, true));
156
+ if (!startAck) {
157
+ throw new Error('start with address nack');
158
+ }
159
+ //
160
+ await writeData(this.#device, length, buffer);
161
+ //
162
+ await this.#device.sendData(I2CTemplate.stop());
163
+ return {
164
+ bytesWritten: length,
165
+ buffer
166
+ };
167
+ }
168
+ }
169
+ //# sourceMappingURL=i2c.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i2c.js","sourceRoot":"","sources":["../../src/i2c/i2c.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** biome-ignore-all lint/performance/noBarrelFile: barrel */
2
+ /** biome-ignore-all lint/performance/noReExportAll: barrel */
3
+ export * from './i2c.ts';
4
+ export * from './i2c-template.ts';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/i2c/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,8DAA8D;AAC9D,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,5 @@
1
+ /** biome-ignore-all lint/performance/noBarrelFile: barrel */
2
+ /** biome-ignore-all lint/performance/noReExportAll: barrel */
3
+ export * from './i2c.js';
4
+ export * from './i2c-template.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i2c/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,8DAA8D;AAC9D,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function range(start: number, end: number, step?: number): Generator<number>;
2
+ //# sourceMappingURL=range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../../src/i2c/range.ts"],"names":[],"mappings":"AACA,wBAAiB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAI9E"}
@@ -0,0 +1,6 @@
1
+ export function* range(start, end, step = 1) {
2
+ for (let i = start; i <= end; i += step) {
3
+ yield i;
4
+ }
5
+ }
6
+ //# sourceMappingURL=range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.js","sourceRoot":"","sources":["../../src/i2c/range.ts"],"names":[],"mappings":"AACA,MAAM,SAAS,CAAC,CAAC,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,IAAI,GAAG,CAAC;IAC1D,KAAI,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QACxC,MAAM,CAAC,CAAA;IACR,CAAC;AACF,CAAC"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ /** biome-ignore-all lint/performance/noBarrelFile: barrel */
2
+ /** biome-ignore-all lint/performance/noReExportAll: barrel */
3
+ export * from './consts.ts';
4
+ export * from './eeprom.ts';
5
+ export * from './ftdi.ts';
6
+ export * from './mpsse/index.ts';
7
+ export * from './status.ts';
8
+ export * from './util.ts';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,8DAA8D;AAC9D,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA"}
package/lib/index.js ADDED
@@ -0,0 +1,9 @@
1
+ /** biome-ignore-all lint/performance/noBarrelFile: barrel */
2
+ /** biome-ignore-all lint/performance/noReExportAll: barrel */
3
+ export * from './consts.js';
4
+ export * from './eeprom.js';
5
+ export * from './ftdi.js';
6
+ export * from './mpsse/index.js';
7
+ export * from './status.js';
8
+ export * from './util.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,8DAA8D;AAC9D,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA"}
@@ -0,0 +1,16 @@
1
+ export declare const CLOCK_BASE_12 = 12000000;
2
+ export declare const CLOCK_BASE_60 = 60000000;
3
+ export declare const DIVISOR_MIN = 0;
4
+ export declare const DIVISOR_MAX = 65535;
5
+ export declare const CLOCK_DEFAULT_STANDARD_MODE_100_kHz: number;
6
+ export declare const CLOCK_DEFAULT_FAST_MODE_400_kHz: number;
7
+ export declare const CLOCK_DEFAULT_FAST_MODE_PLUS_1_MHz: number;
8
+ export declare const CLOCK_DEFAULT_HIGH_SPEED_MODE_3_4_MHz: number;
9
+ export declare const CLOCK_DEFAULT_ULTRA_FAST_MODE_5_MHz: number;
10
+ export type ClockBase = typeof CLOCK_BASE_12 | typeof CLOCK_BASE_60;
11
+ export declare class Clock {
12
+ static clockHz(divisor: number, base: ClockBase): number;
13
+ static clockDivisor(hertz: number, base: ClockBase): number;
14
+ static hertzToHuman(hertz: number): string;
15
+ }
16
+ //# sourceMappingURL=clock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../src/mpsse/clock.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,WAAa,CAAA;AACvC,eAAO,MAAM,aAAa,WAAa,CAAA;AAEvC,eAAO,MAAM,WAAW,IAAI,CAAA;AAC5B,eAAO,MAAM,WAAW,QAAU,CAAA;AAGlC,eAAO,MAAM,mCAAmC,QAAa,CAAA;AAC7D,eAAO,MAAM,+BAA+B,QAAa,CAAA;AACzD,eAAO,MAAM,kCAAkC,QAAkB,CAAA;AACjE,eAAO,MAAM,qCAAqC,QAAoB,CAAA;AACtE,eAAO,MAAM,mCAAmC,QAAkB,CAAA;AAGlE,MAAM,MAAM,SAAS,GAAG,OAAO,aAAa,GAAG,OAAO,aAAa,CAAA;AAEnE,qBAAa,KAAK;IACjB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAEvD;IAED,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAM1D;IAED,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIzC;CACD"}
@@ -0,0 +1,34 @@
1
+ export const CLOCK_BASE_12 = 12_000_000; // 91 Hz - 6 MHz
2
+ export const CLOCK_BASE_60 = 60_000_000; // 457 Hz - 30 MHz
3
+ export const DIVISOR_MIN = 0;
4
+ export const DIVISOR_MAX = 0xFF_FF;
5
+ export const CLOCK_DEFAULT_STANDARD_MODE_100_kHz = 100 * 1000;
6
+ export const CLOCK_DEFAULT_FAST_MODE_400_kHz = 400 * 1000;
7
+ export const CLOCK_DEFAULT_FAST_MODE_PLUS_1_MHz = 1 * 1000 * 1000;
8
+ export const CLOCK_DEFAULT_HIGH_SPEED_MODE_3_4_MHz = 3.4 * 1000 * 1000;
9
+ export const CLOCK_DEFAULT_ULTRA_FAST_MODE_5_MHz = 5 * 1000 * 1000;
10
+ export class Clock {
11
+ static clockHz(divisor, base) {
12
+ return (base / ((1 + divisor) * 2));
13
+ }
14
+ static clockDivisor(hertz, base) {
15
+ const raw = Math.trunc(base / (hertz * 2)) - 1;
16
+ if (raw < DIVISOR_MIN) {
17
+ return DIVISOR_MIN;
18
+ }
19
+ if (raw > DIVISOR_MAX) {
20
+ return DIVISOR_MAX;
21
+ }
22
+ return raw;
23
+ }
24
+ static hertzToHuman(hertz) {
25
+ if (hertz >= (1000 * 1000)) {
26
+ return `${hertz / (1000 * 1000)} MHz`;
27
+ }
28
+ if (hertz >= (1000)) {
29
+ return `${hertz / (1000)} kHz`;
30
+ }
31
+ return `${hertz} Hz`;
32
+ }
33
+ }
34
+ //# sourceMappingURL=clock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.js","sourceRoot":"","sources":["../../src/mpsse/clock.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAA,CAAE,gBAAgB;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAA,CAAE,kBAAkB;AAE3D,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAA;AAC5B,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAA;AAGlC,MAAM,CAAC,MAAM,mCAAmC,GAAG,GAAG,GAAG,IAAI,CAAA;AAC7D,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,GAAG,IAAI,CAAA;AACzD,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AACjE,MAAM,CAAC,MAAM,qCAAqC,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAA;AACtE,MAAM,CAAC,MAAM,mCAAmC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AAKlE,MAAM,OAAO,KAAK;IACjB,MAAM,CAAC,OAAO,CAAC,OAAe,EAAE,IAAe;QAC9C,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IACpC,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,KAAa,EAAE,IAAe;QACjD,MAAM,GAAG,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAE/C,IAAG,GAAG,GAAG,WAAW,EAAE,CAAC;YAAC,OAAO,WAAW,CAAA;QAAC,CAAC;QAC5C,IAAG,GAAG,GAAG,WAAW,EAAE,CAAC;YAAC,OAAO,WAAW,CAAA;QAAC,CAAC;QAC5C,OAAO,GAAG,CAAA;IACX,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,KAAa;QAChC,IAAG,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YAAC,OAAO,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAA;QAAA,CAAC;QACnE,IAAG,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,OAAO,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,CAAA;QAAA,CAAC;QACrD,OAAO,GAAG,KAAK,KAAK,CAAA;IACrB,CAAC;CACD"}
@@ -0,0 +1,66 @@
1
+ export declare const BAD_COMMAND = 175;
2
+ export declare const BAD_COMMAND_RESPONSE = 250;
3
+ export declare const SHIFT_COMMANDS_DEFINITION: {
4
+ WRITE_NEGATIVE_EDGE: number;
5
+ BIT_MODE: number;
6
+ READ_NEGATIVE_EDGE: number;
7
+ LSB_FIRST: number;
8
+ WRITE_TDI: number;
9
+ READ_TDO: number;
10
+ WRITE_TMS: number;
11
+ };
12
+ export type ShiftCommand = number;
13
+ export declare const SHIFT_COMMAND: {
14
+ OUT_MSB_BYTES_POSITIVE_VE: number;
15
+ OUT_MSB_BYTES_NEGATIVE_VE: number;
16
+ OUT_MSB_BITS_POSITIVE_VE: number;
17
+ OUT_MSB_BITS_NEGATIVE_VE: number;
18
+ IN_MSB_BYTES_POSITIVE_VE: number;
19
+ IN_MSB_BYTES_NEGATIVE_VE: number;
20
+ IN_MSB_BITS_POSITIVE_VE: number;
21
+ IN_MSB_BITS_NEGATIVE_VE: number;
22
+ IN_OUT_MSB_BYTES_OUT_NEGATIVE_IN_POSITIVE_VE: number;
23
+ IN_OUT_MSB_BYTES_OUT_POSITIVE_IN_NEGATIVE_VE: number;
24
+ IN_OUT_MSB_BITS_OUT_NEGATIVE_IN_POSITIVE_VE: number;
25
+ IN_OUT_MSB_BITS_OUT_POSITIVE_IN_NEGATIVE_VE: number;
26
+ OUT_LSB_BYTES_POSITIVE_VE: number;
27
+ OUT_LSB_BYTES_NEGATIVE_VE: number;
28
+ OUT_LSB_BITS_POSITIVE_VE: number;
29
+ OUT_LSB_BITS_NEGATIVE_VE: number;
30
+ IN_LSB_BYTES_POSITIVE_VE: number;
31
+ IN_LSB_BYTES_NEGATIVE_VE: number;
32
+ IN_LSB_BITS_POSITIVE_VE: number;
33
+ IN_LSB_BITS_NEGATIVE_VE: number;
34
+ IN_OUT_LSB_BYTES_OUT_NEGATIVE_IN_POSITIVE_VE: number;
35
+ IN_OUT_LSB_BYTES_OUT_POSITIVE_IN_NEGATIVE_VE: number;
36
+ IN_OUT_LSB_BITS_OUT_NEGATIVE_IN_POSITIVE_VE: number;
37
+ IN_OUT_LSB_BITS_OUT_POSITIVE_IN_NEGATIVE_VE: number;
38
+ };
39
+ export declare const PIN_STATE_COMMANDS: {
40
+ SET_DATA_BITS_LOW_BYTE: number;
41
+ SET_DATA_BITS_HIGH_BYTE: number;
42
+ READ_DATA_BITS_LOW_BYTE: number;
43
+ READ_DATA_BITS_HIGH_BYTE: number;
44
+ };
45
+ export declare const LOOPBACK_COMMANDS: {
46
+ ENABLED: number;
47
+ DISABLE: number;
48
+ };
49
+ export declare const CLOCK_DIVISOR_COMMANDS: {
50
+ SET_CLK_DIVISOR: number;
51
+ };
52
+ export declare const HOST_AND_MPSSE_MODE_COMMANDS: {
53
+ SEND_IMMEDIATE: number;
54
+ };
55
+ export declare const H_COMMANDS: {
56
+ DISABLE_CLOCK_DIVIDE_BY_FIVE: number;
57
+ ENABLE_CLOCK_DIVIDE_BY_FIVE: number;
58
+ ENABLE_THREE_PHASE_CLOCKING: number;
59
+ DISABLE_THREE_PHASE_CLOCKING: number;
60
+ ENABLE_ADAPTIVE_CLOCKING: number;
61
+ DISABLE_ADAPTIVE_CLOCKING: number;
62
+ };
63
+ export declare const FT232H_ONLY_COMMANDS: {
64
+ SET_IO_ONLY_DRIVE_LOW: number;
65
+ };
66
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +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;CAE3C,CAAA;AAYD,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"}
@@ -0,0 +1,89 @@
1
+ export const BAD_COMMAND = 0xAF; // suggested bad command
2
+ export const BAD_COMMAND_RESPONSE = 0xFA; // first response byte when any bad command sent
3
+ // Shifting commands IN MPSSE Mode
4
+ export const SHIFT_COMMANDS_DEFINITION = {
5
+ WRITE_NEGATIVE_EDGE: 0b0000_0001, // -ve CLK on write
6
+ BIT_MODE: 0b0000_0010, // bit mode = 1 else byte mode
7
+ READ_NEGATIVE_EDGE: 0b0000_0100, // -ve CLK on read
8
+ LSB_FIRST: 0b0000_1000, // LSB first = 1 else MSB first
9
+ WRITE_TDI: 0b0001_0000, // Do write TDI
10
+ READ_TDO: 0b0010_0000, // Do read TDO
11
+ WRITE_TMS: 0b0100_0000 // Do writeTMS
12
+ };
13
+ export const SHIFT_COMMAND = {
14
+ OUT_MSB_BYTES_POSITIVE_VE: 0x10, // WRITE_TDI
15
+ OUT_MSB_BYTES_NEGATIVE_VE: 0x11, // WRITE_TDI | WRITE_NEGATIVE_EDGE
16
+ OUT_MSB_BITS_POSITIVE_VE: 0x12, // WRITE_TDI | BIT_MODE
17
+ OUT_MSB_BITS_NEGATIVE_VE: 0x13, // WRITE_TDI | BIT_MODE | WRITE_NEGATIVE_EDGE
18
+ IN_MSB_BYTES_POSITIVE_VE: 0x20, // READ_TDO
19
+ IN_MSB_BYTES_NEGATIVE_VE: 0x24, // READ_TDO | READ_NEGATIVE_EDGE
20
+ IN_MSB_BITS_POSITIVE_VE: 0x22, // READ_TDO | BIT_MODE
21
+ IN_MSB_BITS_NEGATIVE_VE: 0x26, // READ_TDO | BIT_MODE | READ_NEGATIVE_EDGE
22
+ IN_OUT_MSB_BYTES_OUT_NEGATIVE_IN_POSITIVE_VE: 0x31,
23
+ IN_OUT_MSB_BYTES_OUT_POSITIVE_IN_NEGATIVE_VE: 0x34,
24
+ IN_OUT_MSB_BITS_OUT_NEGATIVE_IN_POSITIVE_VE: 0x33,
25
+ IN_OUT_MSB_BITS_OUT_POSITIVE_IN_NEGATIVE_VE: 0x36,
26
+ //
27
+ OUT_LSB_BYTES_POSITIVE_VE: 0x18, // LSB_FIRST | WRITE_TDI
28
+ OUT_LSB_BYTES_NEGATIVE_VE: 0x19, // LSB_FIRST | WRITE_TDI | WRITE_NEGATIVE_EDGE
29
+ OUT_LSB_BITS_POSITIVE_VE: 0x1A, // LSB_FIRST | WRITE_TDI | BIT_MODE
30
+ OUT_LSB_BITS_NEGATIVE_VE: 0x1B, // LSB_FIRST | WRITE_TDI | BIT_MODE | WRITE_NEGATIVE_EDGE
31
+ IN_LSB_BYTES_POSITIVE_VE: 0x28, // LSB_FIRST | READ_TDI
32
+ IN_LSB_BYTES_NEGATIVE_VE: 0x2C, // LSB_FIRST | READ_TDI | READ_NEGATIVE_EDGE
33
+ IN_LSB_BITS_POSITIVE_VE: 0x2A, // LSB_FIRST | READ_TDI | BIT_MODE
34
+ IN_LSB_BITS_NEGATIVE_VE: 0x2E, // LSB_FIRST | READ_TDI | BIT_MODE | READ_NEGATIVE_EDGE
35
+ IN_OUT_LSB_BYTES_OUT_NEGATIVE_IN_POSITIVE_VE: 0x39,
36
+ IN_OUT_LSB_BYTES_OUT_POSITIVE_IN_NEGATIVE_VE: 0x3C,
37
+ IN_OUT_LSB_BITS_OUT_NEGATIVE_IN_POSITIVE_VE: 0x3B,
38
+ IN_OUT_LSB_BITS_OUT_POSITIVE_IN_NEGATIVE_VE: 0x3E,
39
+ };
40
+ // export const LSB_FIRST_TMS_COMMANDS = {
41
+ // CLOCK_DATA_NO_READ_POSITIVE_VE: 0x4A,
42
+ // CLOCK_DATA_NO_READ_NEGATIVE_VE: 0x4B,
43
+ // CLOCK_DATA_WITH_READ_ON_POSITIVE_VE_READ_POSITIVE_VE: 0x6A,
44
+ // CLOCK_DATA_WITH_READ_ON_NEGATIVE_VE_READ_POSITIVE_VE: 0x6B,
45
+ // CLOCK_DATA_WITH_READ_ON_POSITIVE_VE_READ_NEGATIVE_VE: 0x6E,
46
+ // CLOCK_DATA_WITH_READ_ON_NEGATIVE_VE_READ_NEGATIVE_VE: 0x6F
47
+ // }
48
+ export const PIN_STATE_COMMANDS = {
49
+ SET_DATA_BITS_LOW_BYTE: 0x80,
50
+ SET_DATA_BITS_HIGH_BYTE: 0x82,
51
+ READ_DATA_BITS_LOW_BYTE: 0x81,
52
+ READ_DATA_BITS_HIGH_BYTE: 0x83
53
+ };
54
+ export const LOOPBACK_COMMANDS = {
55
+ ENABLED: 0x84,
56
+ DISABLE: 0x85
57
+ };
58
+ export const CLOCK_DIVISOR_COMMANDS = {
59
+ SET_CLK_DIVISOR: 0x86
60
+ };
61
+ export const HOST_AND_MPSSE_MODE_COMMANDS = {
62
+ SEND_IMMEDIATE: 0x87,
63
+ // WAIT_IO_HIGH: 0x88,
64
+ // WAIT_IO_LOW: 0x89
65
+ };
66
+ // export const HOST_EMULATION_MODE_COMMANDS = {
67
+ // READ_SHORT_ADDRESS: 0x90,
68
+ // READ_EXTENDED_ADDRESS: 0x91,
69
+ // WRITE_SHORT_ADDRESS: 0x92,
70
+ // WRITE_EXTENDED_ADDRESS: 0x93
71
+ // }
72
+ export const H_COMMANDS = {
73
+ DISABLE_CLOCK_DIVIDE_BY_FIVE: 0x8A,
74
+ ENABLE_CLOCK_DIVIDE_BY_FIVE: 0x8B,
75
+ ENABLE_THREE_PHASE_CLOCKING: 0x8C,
76
+ DISABLE_THREE_PHASE_CLOCKING: 0x8D,
77
+ // CLOCK_N_BITS_NO_TRANSFER: 0x8E,
78
+ // CLOCK_N_EIGHT_BITS_NO_TRANSFER: 0x8F,
79
+ // CLOCK_WAIT_IO_HIGH: 0x94,
80
+ // CLOCK_WAIT_IO_LOW: 0x95,
81
+ ENABLE_ADAPTIVE_CLOCKING: 0x96,
82
+ DISABLE_ADAPTIVE_CLOCKING: 0x97,
83
+ // CLOCK_N_BITS_NO_TRANSFER_OR_UNTIL_HIGH: 0x9C,
84
+ // CLOCK_N_EIGHT_BITS_NO_TRANSFER_OR_UNTIL_LOW: 0x9D
85
+ };
86
+ export const FT232H_ONLY_COMMANDS = {
87
+ SET_IO_ONLY_DRIVE_LOW: 0x9E
88
+ };
89
+ //# sourceMappingURL=command.js.map
@@ -0,0 +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;IAC5B,yBAAyB,EAAE,IAAI,EAAE,YAAY;IAC7C,yBAAyB,EAAE,IAAI,EAAE,kCAAkC;IACnE,wBAAwB,EAAG,IAAI,EAAE,uBAAuB;IACxD,wBAAwB,EAAG,IAAI,EAAE,6CAA6C;IAE9E,wBAAwB,EAAE,IAAI,EAAE,WAAW;IAC3C,wBAAwB,EAAE,IAAI,EAAE,gCAAgC;IAChE,uBAAuB,EAAG,IAAI,EAAE,sBAAsB;IACtD,uBAAuB,EAAG,IAAI,EAAE,2CAA2C;IAE3E,4CAA4C,EAAE,IAAI;IAClD,4CAA4C,EAAE,IAAI;IAClD,2CAA2C,EAAE,IAAI;IACjD,2CAA2C,EAAE,IAAI;IAEjD,EAAE;IACF,yBAAyB,EAAE,IAAI,EAAE,wBAAwB;IACzD,yBAAyB,EAAE,IAAI,EAAE,8CAA8C;IAC/E,wBAAwB,EAAE,IAAI,EAAE,mCAAmC;IACnE,wBAAwB,EAAE,IAAI,EAAE,yDAAyD;IAEzF,wBAAwB,EAAE,IAAI,EAAE,uBAAuB;IACvD,wBAAwB,EAAE,IAAI,EAAE,4CAA4C;IAC5E,uBAAuB,EAAE,IAAI,EAAE,kCAAkC;IACjE,uBAAuB,EAAE,IAAI,EAAE,uDAAuD;IAEtF,4CAA4C,EAAE,IAAI;IAClD,4CAA4C,EAAE,IAAI;IAClD,2CAA2C,EAAE,IAAI;IACjD,2CAA2C,EAAE,IAAI;CAEjD,CAAA;AAED,0CAA0C;AAC1C,yCAAyC;AACzC,yCAAyC;AAEzC,+DAA+D;AAC/D,+DAA+D;AAC/D,+DAA+D;AAC/D,8DAA8D;AAC9D,IAAI;AAEJ,MAAM,CAAC,MAAM,kBAAkB,GAAG;IACjC,sBAAsB,EAAE,IAAI;IAC5B,uBAAuB,EAAE,IAAI;IAE7B,uBAAuB,EAAE,IAAI;IAC7B,wBAAwB,EAAE,IAAI;CAC9B,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;CACb,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACrC,eAAe,EAAE,IAAI;CACrB,CAAA;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC3C,cAAc,EAAE,IAAI;IACpB,sBAAsB;IACtB,oBAAoB;CACpB,CAAA;AAED,gDAAgD;AAChD,6BAA6B;AAC7B,gCAAgC;AAChC,8BAA8B;AAC9B,gCAAgC;AAChC,IAAI;AAEJ,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,4BAA4B,EAAE,IAAI;IAClC,2BAA2B,EAAE,IAAI;IAEjC,2BAA2B,EAAE,IAAI;IACjC,4BAA4B,EAAE,IAAI;IAElC,kCAAkC;IAClC,wCAAwC;IAExC,4BAA4B;IAC5B,2BAA2B;IAE3B,wBAAwB,EAAE,IAAI;IAC9B,yBAAyB,EAAE,IAAI;IAE/B,gDAAgD;IAChD,oDAAoD;CACpD,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG;IACnC,qBAAqB,EAAE,IAAI;CAC3B,CAAA"}
@@ -0,0 +1,7 @@
1
+ /** biome-ignore-all lint/performance/noBarrelFile: barrel */
2
+ /** biome-ignore-all lint/performance/noReExportAll: barrel */
3
+ export * from './clock.ts';
4
+ export * from './command.ts';
5
+ export * from './mpsse.ts';
6
+ export * from './mpsse-template.ts';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mpsse/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,8DAA8D;AAC9D,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,7 @@
1
+ /** biome-ignore-all lint/performance/noBarrelFile: barrel */
2
+ /** biome-ignore-all lint/performance/noReExportAll: barrel */
3
+ export * from './clock.js';
4
+ export * from './command.js';
5
+ export * from './mpsse.js';
6
+ export * from './mpsse-template.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mpsse/index.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,8DAA8D;AAC9D,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,19 @@
1
+ /** biome-ignore-all lint/style/useConsistentArrayType: <explanation> */
2
+ import { type ShiftCommand } from './command.ts';
3
+ export declare class MPSSETemplate {
4
+ static shiftOutByte(command: ShiftCommand, length: number, data: number): Array<number>;
5
+ static shiftInByte(command: ShiftCommand, length: number): Array<number>;
6
+ static shiftOutBits(command: ShiftCommand, length: number, data: number): Array<number>;
7
+ static shiftInBits(command: ShiftCommand, length: number): Array<number>;
8
+ static gpioSetHigh(pins: number, directions: number): Array<number>;
9
+ static gpioSetLow(pins: number, directions: number): Array<number>;
10
+ static gpioGetHigh(): Array<number>;
11
+ static gpioGetLow(): Array<number>;
12
+ static setClockDivisor(divider: number): Array<number>;
13
+ static enableLoopback(enable?: boolean): Array<number>;
14
+ static enableClockDivideBy5(enable?: boolean): Array<number>;
15
+ static enableThreePhaseClocking(enable?: boolean): Array<number>;
16
+ static enableAdaptiveClocking(enable?: boolean): Array<number>;
17
+ static setDriveOnlyZero(pinsLow: number, pinsHigh: number): Array<number>;
18
+ }
19
+ //# sourceMappingURL=mpsse-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mpsse-template.d.ts","sourceRoot":"","sources":["../../src/mpsse/mpsse-template.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,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,CAItF;IAED,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAIvE;IAED,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAEtF;IAED,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAEvE;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"}