From 9e9ed74e03a1cce4469fdfe3fb00760638b2622e Mon Sep 17 00:00:00 2001 From: Troy Weber Date: Thu, 30 Mar 2017 12:57:48 -0700 Subject: [PATCH 1/6] improve definitions --- types/firmata/index.d.ts | 32 +++++++++++++++++++------------- types/serialport/index.d.ts | 21 ++++++++++++++++++++- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/types/firmata/index.d.ts b/types/firmata/index.d.ts index a24fae435b..60a1284c4f 100644 --- a/types/firmata/index.d.ts +++ b/types/firmata/index.d.ts @@ -16,7 +16,7 @@ export = Board; * guarantee that it cannot be improved. */ declare class Board extends NodeJS.EventEmitter { - constructor(serialPort: string, callback?: (error: any) => void) + constructor(serialPort: string, optionsOrCallback:Board.Options, callback?: (error: any) => void) MODES: Board.PinModes; STEPPER: Board.StepperConstants; I2C_MODES: Board.I2cModes; @@ -151,6 +151,13 @@ declare class Board extends NodeJS.EventEmitter { } declare namespace Board { + // https://github.com/firmata/firmata.js/blob/master/lib/firmata.js#L429-L451 + interface Options { + reportVersionTimeout: number, + samplingInterval: number, + serialport: SerialPort.options + } + interface PinModes { INPUT: PIN_MODE; OUTPUT: PIN_MODE; @@ -251,9 +258,8 @@ declare namespace Board { minor: number; } - // TODO these enums could actually be non-const in the future (provides some benefits) --- TWW // https://github.com/firmata/firmata.js/blob/v0.15.0/lib/firmata.js#L449-L464 - const enum PIN_MODE { + enum PIN_MODE { INPUT = 0x00, OUTPUT = 0x01, ANALOG = 0x02, @@ -270,30 +276,30 @@ declare namespace Board { UNKNOWN = 0x10, } - const enum PIN_STATE { + enum PIN_STATE { LOW = 0, HIGH = 1 } - const enum REPORTING { + enum REPORTING { ON = 1, OFF = 0, } - const enum PULLUP_STATE { + enum PULLUP_STATE { ENABLED = 1, DISABLED = 0, } // https://github.com/firmata/firmata.js/blob/v0.15.0/lib/firmata.js#L474-L478 - const enum STEPPER_TYPE { + enum STEPPER_TYPE { DRIVER = 1, TWO_WIRE = 2, FOUR_WIRE = 4, } // https://github.com/firmata/firmata.js/blob/v0.15.0/lib/firmata.js#L479-L484 - const enum STEPPER_RUN_STATE { + enum STEPPER_RUN_STATE { STOP = 0, ACCEL = 1, DECEL = 2, @@ -301,13 +307,13 @@ declare namespace Board { } // https://github.com/firmata/firmata.js/blob/v0.15.0/lib/firmata.js#L485-L488 - const enum STEPPER_DIRECTION { + enum STEPPER_DIRECTION { CCW = 0, CW = 1, } // https://github.com/firmata/firmata.js/blob/v0.15.0/lib/firmata.js#L466-L471 - const enum I2C_MODE { + enum I2C_MODE { WRITE = 0, READ = 1, CONTINUOUS_READ = 2, @@ -315,13 +321,13 @@ declare namespace Board { } // https://github.com/firmata/firmata.js/blob/v0.15.0/lib/firmata.js#L491-L494 - const enum SERIAL_MODE { + enum SERIAL_MODE { CONTINUOUS_READ = 0x00, STOP_READING = 0x01, } // https://github.com/firmata/firmata.js/blob/v0.15.0/lib/firmata.js#L497-L512 - const enum SERIAL_PORT_ID { + enum SERIAL_PORT_ID { HW_SERIAL0 = 0x00, HW_SERIAL1 = 0x01, HW_SERIAL2 = 0x02, @@ -334,7 +340,7 @@ declare namespace Board { } // https://github.com/firmata/firmata.js/blob/v0.15.0/lib/firmata.js#L515-L524 - const enum SERIAL_PIN_TYPE { + enum SERIAL_PIN_TYPE { RES_RX0 = 0x00, RES_TX0 = 0x01, RES_RX1 = 0x02, diff --git a/types/serialport/index.d.ts b/types/serialport/index.d.ts index 5b284cc669..3a1a45d19c 100644 --- a/types/serialport/index.d.ts +++ b/types/serialport/index.d.ts @@ -6,7 +6,7 @@ declare module 'serialport' { class SerialPort { //openImmediately already removed in 4.0.7 - constructor(path: string, options?: Object, callback?: (err: any) => void) + constructor(path: string, options?: SerialPort.options, callback?: (err: any) => void) isOpen(): boolean; on(event: string, callback?: (data?: any) => void): void; open(callback?: (err: any) => void): void; @@ -48,6 +48,25 @@ declare module 'serialport' { interface updateOptions { baudRate?: number; } + + // https://github.com/EmergingTechnologyAdvisors/node-serialport/blob/4.0.7/README.md#user-content-serialport-path-options-opencallback + interface options { + autoOpen?: boolean, + lock?: boolean, + baudRate?: 115200|57600|38400|19200|9600|4800|2400|1800|1200|600|300|200|150|134|110|75|50|number, + dataBits?: 8|7|6|5, + stopBits?: 1|2, + parity?: 'none'|'even'|'mark'|'odd'|'space', + rtscts?: boolean, + xon?: boolean, + xoff?: boolean, + bufferSize?: number, + parser?: Function, + platformOptions?: { + vmin?: number, + vtime?: number + } + } } export = SerialPort; From f96d7d94b5caa65cd4d3ab2a9f3b135f5de9d0b0 Mon Sep 17 00:00:00 2001 From: Troy Weber Date: Thu, 30 Mar 2017 13:15:54 -0700 Subject: [PATCH 2/6] changes to past compile --- types/serialport/index.d.ts | 4 ++-- types/serialport/serialport-tests.ts | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/types/serialport/index.d.ts b/types/serialport/index.d.ts index 3a1a45d19c..3c16de3a35 100644 --- a/types/serialport/index.d.ts +++ b/types/serialport/index.d.ts @@ -6,7 +6,7 @@ declare module 'serialport' { class SerialPort { //openImmediately already removed in 4.0.7 - constructor(path: string, options?: SerialPort.options, callback?: (err: any) => void) + constructor(path: string, options?: SerialPort.options|((err: any) => void), callback?: (err: any) => void) isOpen(): boolean; on(event: string, callback?: (data?: any) => void): void; open(callback?: (err: any) => void): void; @@ -61,7 +61,7 @@ declare module 'serialport' { xon?: boolean, xoff?: boolean, bufferSize?: number, - parser?: Function, + parser?: any, platformOptions?: { vmin?: number, vtime?: number diff --git a/types/serialport/serialport-tests.ts b/types/serialport/serialport-tests.ts index 60ca6f119c..3e799f2ee1 100644 --- a/types/serialport/serialport-tests.ts +++ b/types/serialport/serialport-tests.ts @@ -12,10 +12,9 @@ function test_basic_connect() { function test_connect_config() { let port = new SerialPort("", { - baudrate: 0, - disconnectedCallback: function () { }, + baudRate: 0, parser: SerialPort.parsers.readline("\n") - }); + }, function(err:any) { }); } function test_write() { From 34ce3dbb31cfe3ddbe3eabd326d9be21422ebc82 Mon Sep 17 00:00:00 2001 From: Troy Weber Date: Thu, 30 Mar 2017 13:25:07 -0700 Subject: [PATCH 3/6] lint issues --- types/firmata/index.d.ts | 88 ++++++++++++++++++++-------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/types/firmata/index.d.ts b/types/firmata/index.d.ts index 60a1284c4f..a4c6d96d71 100644 --- a/types/firmata/index.d.ts +++ b/types/firmata/index.d.ts @@ -16,7 +16,7 @@ export = Board; * guarantee that it cannot be improved. */ declare class Board extends NodeJS.EventEmitter { - constructor(serialPort: string, optionsOrCallback:Board.Options, callback?: (error: any) => void) + constructor(serialPort: string, optionsOrCallback?: Board.Options|((error: any) => void), callback?: (error: any) => void) MODES: Board.PinModes; STEPPER: Board.StepperConstants; I2C_MODES: Board.I2cModes; @@ -32,69 +32,69 @@ declare class Board extends NodeJS.EventEmitter { firmware: Board.Firmware; settings: Board.Settings; protected transport: SerialPort; - reportVersion(callback: () => void): void - queryFirmware(callback: () => void): void - analogRead(pin: number, callback: (value: number) => void): void - analogWrite(pin: number, value: number): void - pwmWrite(pin: number, value: number): void - servoConfig(pin: number, min: number, max: number): void - servoWrite(pin: number, value: number): void - pinMode(pin: number, mode: Board.PIN_MODE): void - digitalWrite(pin: number, val: Board.PIN_STATE): void - digitalRead(pin: number, callback: (val: Board.PIN_STATE) => void): void - queryCapabilities(callback: () => void): void - queryAnalogMapping(callback: () => void): void - queryPinState(pin: number, callback: () => void): void + reportVersion(callback: () => void): void; + queryFirmware(callback: () => void): void; + analogRead(pin: number, callback: (value: number) => void): void; + analogWrite(pin: number, value: number): void; + pwmWrite(pin: number, value: number): void; + servoConfig(pin: number, min: number, max: number): void; + servoWrite(pin: number, value: number): void; + pinMode(pin: number, mode: Board.PIN_MODE): void; + digitalWrite(pin: number, val: Board.PIN_STATE): void; + digitalRead(pin: number, callback: (val: Board.PIN_STATE) => void): void; + queryCapabilities(callback: () => void): void; + queryAnalogMapping(callback: () => void): void; + queryPinState(pin: number, callback: () => void): void; // TODO untested --- TWW - sendString(str: string): void + sendString(str: string): void; // TODO untested --- TWW - sendI2CConfig(delay: number): void + sendI2CConfig(delay: number): void; // TODO untested --- TWW - i2cConfig(options: number|{ delay: number }): void + i2cConfig(options: number|{ delay: number }): void; // TODO untested --- TWW - sendI2CWriteRequest(slaveAddress: number, bytes: number[]): void + sendI2CWriteRequest(slaveAddress: number, bytes: number[]): void; // TODO untested --- TWW - i2cWrite(address: number, register: number, inBytes: number[]): void - i2cWrite(address: number, data: number[]): void + i2cWrite(address: number, register: number, inBytes: number[]): void; + i2cWrite(address: number, data: number[]): void; // TODO untested --- TWW - i2cWriteReg(address: number, register: number, byte: number): void + i2cWriteReg(address: number, register: number, byte: number): void; // TODO untested --- TWW - sendI2CReadRequest(address: number, numBytes: number, callback: () => void): void + sendI2CReadRequest(address: number, numBytes: number, callback: () => void): void; // TODO untested --- TWW - i2cRead(address: number, register: number, bytesToRead: number, callback: (data: number[]) => void): void - i2cRead(address: number, bytesToRead: number, callback: (data: number[]) => void): void + i2cRead(address: number, register: number, bytesToRead: number, callback: (data: number[]) => void): void; + i2cRead(address: number, bytesToRead: number, callback: (data: number[]) => void): void; // TODO untested --- TWW - i2cStop(options: number|{ bus: number, address: number }): void + i2cStop(options: number|{ bus: number, address: number }): void; // TODO untested --- TWW - i2cReadOnce(address: number, register: number, bytesToRead: number, callback: (data: number[]) => void): void - i2cReadOnce(address: number, bytesToRead: number, callback: (data: number[]) => void): void + i2cReadOnce(address: number, register: number, bytesToRead: number, callback: (data: number[]) => void): void; + i2cReadOnce(address: number, bytesToRead: number, callback: (data: number[]) => void): void; // TODO untested --- TWW - sendOneWireConfig(pin: number, enableParasiticPower: boolean): void + sendOneWireConfig(pin: number, enableParasiticPower: boolean): void; // TODO untested --- TWW - sendOneWireSearch(pin: number, callback: () => void): void + sendOneWireSearch(pin: number, callback: () => void): void; // TODO untested --- TWW - sendOneWireAlarmsSearch(pin: number, callback: () => void): void + sendOneWireAlarmsSearch(pin: number, callback: () => void): void; // TODO untested --- TWW - sendOneWireRead(pin: number, device: number, numBytesToRead: number, callback: () => void): void + sendOneWireRead(pin: number, device: number, numBytesToRead: number, callback: () => void): void; // TODO untested --- TWW - sendOneWireReset(pin: number): void + sendOneWireReset(pin: number): void; // TODO untested --- TWW - sendOneWireWrite(pin: number, device: number, data: number|number[]): void + sendOneWireWrite(pin: number, device: number, data: number|number[]): void; // TODO untested --- TWW - sendOneWireDelay(pin: number, delay: number): void + sendOneWireDelay(pin: number, delay: number): void; // TODO untested --- TWW sendOneWireWriteAndRead( pin: number, device: number, data: number|number[], numBytesToRead: number, - callback: (error?: Error, data?: number) => void): void - setSamplingInterval(interval: number): void - getSamplingInterval(): number - reportAnalogPin(pin: number, value: Board.REPORTING): void - reportDigitalPin(pin: number, value: Board.REPORTING): void + callback: (error?: Error, data?: number) => void): void; + setSamplingInterval(interval: number): void; + getSamplingInterval(): number; + reportAnalogPin(pin: number, value: Board.REPORTING): void; + reportDigitalPin(pin: number, value: Board.REPORTING): void; // TODO untested/incomplete --- TWW - pingRead(opts: any, callback: () => void): void + pingRead(opts: any, callback: () => void): void; stepperConfig( deviceNum: number, type: number, @@ -102,7 +102,7 @@ declare class Board extends NodeJS.EventEmitter { dirOrMotor1Pin: number, stepOrMotor2Pin: number, motor3Pin?: number, - motor4Pin?: number): void + motor4Pin?: number): void; stepperStep( deviceNum: number, direction: Board.STEPPER_DIRECTION, @@ -153,9 +153,9 @@ declare class Board extends NodeJS.EventEmitter { declare namespace Board { // https://github.com/firmata/firmata.js/blob/master/lib/firmata.js#L429-L451 interface Options { - reportVersionTimeout: number, - samplingInterval: number, - serialport: SerialPort.options + reportVersionTimeout: number; + samplingInterval: number; + serialport: SerialPort.options; } interface PinModes { From 0c1560db95027fb9cc1261ebf0163cf27eec926c Mon Sep 17 00:00:00 2001 From: Troy Weber Date: Thu, 30 Mar 2017 13:27:09 -0700 Subject: [PATCH 4/6] minor fubb --- types/firmata/index.d.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/types/firmata/index.d.ts b/types/firmata/index.d.ts index a4c6d96d71..f18294d110 100644 --- a/types/firmata/index.d.ts +++ b/types/firmata/index.d.ts @@ -153,9 +153,9 @@ declare class Board extends NodeJS.EventEmitter { declare namespace Board { // https://github.com/firmata/firmata.js/blob/master/lib/firmata.js#L429-L451 interface Options { - reportVersionTimeout: number; - samplingInterval: number; - serialport: SerialPort.options; + reportVersionTimeout?: number; + samplingInterval?: number; + serialport?: SerialPort.options; } interface PinModes { From 5d6a823493251c364ddf96f811608be3d760346c Mon Sep 17 00:00:00 2001 From: Troy Weber Date: Fri, 31 Mar 2017 12:18:25 -0700 Subject: [PATCH 5/6] bring serialport up to speed --- types/serialport/index.d.ts | 146 +++++++++++++++------------ types/serialport/serialport-tests.ts | 55 +++++++--- types/serialport/tsconfig.json | 2 +- types/serialport/tslint.json | 1 + 4 files changed, 125 insertions(+), 79 deletions(-) create mode 100644 types/serialport/tslint.json diff --git a/types/serialport/index.d.ts b/types/serialport/index.d.ts index 3c16de3a35..ba632b7322 100644 --- a/types/serialport/index.d.ts +++ b/types/serialport/index.d.ts @@ -3,71 +3,87 @@ // Definitions by: Jeremy Foster // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -declare module 'serialport' { - class SerialPort { - //openImmediately already removed in 4.0.7 - constructor(path: string, options?: SerialPort.options|((err: any) => void), callback?: (err: any) => void) - isOpen(): boolean; - on(event: string, callback?: (data?: any) => void): void; - open(callback?: (err: any) => void): void; - write(buffer: any, callback?: (err: any, bytesWritten: number) => void): void - pause(): void; - resume(): void; - disconnected(err: Error): void; - close(callback?: (err: any) => void): void; - flush(callback?: (err: any) => void): void; - set(options: SerialPort.setOptions, callback: (err: any) => void): void; - drain(callback?: (err: any) => void): void; - update(options: SerialPort.updateOptions, callback?: (err: any) => void): void; - static list(callback: (err: any, ports: SerialPort.portConfig[]) => void): void; - static parsers: { - readline: (delimiter: string) => void, - raw: (emitter: any, buffer: string) => void - }; - } +/// +/// - namespace SerialPort { - interface portConfig { - comName: string; - manufacturer: string; - serialNumber: string; - pnpId: string; - locationId: string; - vendorId: string; - productId: string; - } +export = SerialPort; - interface setOptions { - brk?: boolean; - cts?: boolean; - dsr?: boolean; - dtr?: boolean; - rts?: boolean; - } - - interface updateOptions { - baudRate?: number; - } - - // https://github.com/EmergingTechnologyAdvisors/node-serialport/blob/4.0.7/README.md#user-content-serialport-path-options-opencallback - interface options { - autoOpen?: boolean, - lock?: boolean, - baudRate?: 115200|57600|38400|19200|9600|4800|2400|1800|1200|600|300|200|150|134|110|75|50|number, - dataBits?: 8|7|6|5, - stopBits?: 1|2, - parity?: 'none'|'even'|'mark'|'odd'|'space', - rtscts?: boolean, - xon?: boolean, - xoff?: boolean, - bufferSize?: number, - parser?: any, - platformOptions?: { - vmin?: number, - vtime?: number - } - } - } - - export = SerialPort; +declare class SerialPort extends Stream { + // openImmediately already removed in 4.0.7 + constructor(path: string, options?: SerialPort.options|SerialPort.callback, callback?: SerialPort.callback); + isOpen(): boolean; + on(event: string, callback?: (data?: any) => void): void; + open(callback?: SerialPort.callback): void; + write(buffer: any, callback?: (err: any, bytesWritten: number) => void): void; + pause(): void; + resume(): void; + disconnected(err: Error): void; + close(callback?: SerialPort.callback): void; + flush(callback?: SerialPort.callback): void; + set(options: SerialPort.setOptions, callback: SerialPort.callback): void; + drain(callback?: SerialPort.callback): void; + update(options: SerialPort.updateOptions, callback?: SerialPort.callback): void; + static list(callback: (err: any, ports: SerialPort.portConfig[]) => void): void; + // https://github.com/EmergingTechnologyAdvisors/node-serialport/blob/4.0.7/lib/parsers.js + static parsers: SerialPort.parsers; +} + +declare namespace SerialPort { + interface portConfig { + comName: string; + manufacturer: string; + serialNumber: string; + pnpId: string; + locationId: string; + vendorId: string; + productId: string; + } + + interface setOptions { + brk?: boolean; + cts?: boolean; + dsr?: boolean; + dtr?: boolean; + rts?: boolean; + } + + interface updateOptions { + baudRate?: number; + } + + type serialParser = (emitter: NodeJS.EventEmitter, buffer: Buffer|string) => void; + + type readlineParser = (delimiter: string, encoding?: 'ascii'|'utf8'|'utf16le'|'ucs2'|'base64'|'binary'|'hex') => serialParser; + + type byteLengthParser = (delimiter: number) => serialParser; + + type byteDelimiterParser = (delimiter: number[]) => serialParser; + + type callback = (error: any) => void; + + interface parsers { + raw: serialParser; + readline: readlineParser; + byteLength: byteLengthParser; + byteDelimiter: byteDelimiterParser; + } + + // https://github.com/EmergingTechnologyAdvisors/node-serialport/blob/4.0.7/README.md#user-content-serialport-path-options-opencallback + interface options { + autoOpen?: boolean; + lock?: boolean; + baudRate?: 115200|57600|38400|19200|9600|4800|2400|1800|1200|600|300|200|150|134|110|75|50|number; + dataBits?: 8|7|6|5; + stopBits?: 1|2; + parity?: 'none'|'even'|'mark'|'odd'|'space'; + rtscts?: boolean; + xon?: boolean; + xoff?: boolean; + bufferSize?: number; + parser?: serialParser; + platformOptions?: { + vmin?: number; + vtime?: number; + }; + } } diff --git a/types/serialport/serialport-tests.ts b/types/serialport/serialport-tests.ts index 3e799f2ee1..58d39cb1d6 100644 --- a/types/serialport/serialport-tests.ts +++ b/types/serialport/serialport-tests.ts @@ -7,29 +7,58 @@ import * as SerialPort from 'serialport'; function test_basic_connect() { - let port = new SerialPort(""); + let port = new SerialPort(''); } function test_connect_config() { - let port = new SerialPort("", { - baudRate: 0, - parser: SerialPort.parsers.readline("\n") - }, function(err:any) { }); + let port1 = new SerialPort('', { + baudRate: 0, + parser: SerialPort.parsers.raw + }, (err: any) => {}); + + let port2 = new SerialPort('', { + baudRate: 0, + parser: SerialPort.parsers.readline('\n', 'ascii') + }, (err: any) => {}); + + let port3 = new SerialPort('', { + baudRate: 0, + parser: SerialPort.parsers.byteLength(7) + }, (err: any) => {}); + + let port4 = new SerialPort('', { + baudRate: 0, + parser: SerialPort.parsers.byteDelimiter([3, 4, 5]) + }, (err: any) => {}); + + let port5 = new SerialPort('', { + autoOpen: false, + lock: false, + baudRate: 115200, + dataBits: 5, + stopBits: 2, + parity: 'odd', + rtscts: true, + xon: true, + xoff: true, + bufferSize: 1024, + platformOptions: { + vmin: 1, + vtime: 1 + } + }, (err: any) => {}); } function test_write() { - let port = new SerialPort(""); - port.write("main screen turn on", (err, bytesWritten) => { - }); + let port = new SerialPort(''); + port.write('main screen turn on', (err, bytesWritten) => {}); } function test_events() { - let port = new SerialPort(""); - port.on("open", function () { }); + let port = new SerialPort(''); + port.on('open', () => {}); } function test_list_ports() { - SerialPort.list( (err: string, ports: SerialPort.portConfig[]) => { - - }); + SerialPort.list((err: string, ports: SerialPort.portConfig[]) => {}); } diff --git a/types/serialport/tsconfig.json b/types/serialport/tsconfig.json index f70ef60163..72f0329252 100644 --- a/types/serialport/tsconfig.json +++ b/types/serialport/tsconfig.json @@ -6,7 +6,7 @@ ], "noImplicitAny": true, "noImplicitThis": true, - "strictNullChecks": false, + "strictNullChecks": true, "baseUrl": "../", "typeRoots": [ "../" diff --git a/types/serialport/tslint.json b/types/serialport/tslint.json new file mode 100644 index 0000000000..2221e40e4a --- /dev/null +++ b/types/serialport/tslint.json @@ -0,0 +1 @@ +{ "extends": "../tslint.json" } \ No newline at end of file From 7bcfa77f05b0c8813b681d0d4c5e8905f7c5c19a Mon Sep 17 00:00:00 2001 From: Troy Weber Date: Fri, 31 Mar 2017 12:22:17 -0700 Subject: [PATCH 6/6] removed unnecessary header --- types/serialport/serialport-tests.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/types/serialport/serialport-tests.ts b/types/serialport/serialport-tests.ts index 58d39cb1d6..7b1c69bf74 100644 --- a/types/serialport/serialport-tests.ts +++ b/types/serialport/serialport-tests.ts @@ -1,7 +1,3 @@ -// Tests for serialport.d.ts -// Project: https://github.com/EmergingTechnologyAdvisors/node-serialport -// Definitions by: Jeremy Foster -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // Tests taken from documentation samples. import * as SerialPort from 'serialport';