Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update SerialPort && Firmata type definitions #15524

Merged
merged 9 commits into from Apr 14, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
112 changes: 59 additions & 53 deletions types/firmata/index.d.ts
Expand Up @@ -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|((error: any) => void), callback?: (error: any) => void)
MODES: Board.PinModes;
STEPPER: Board.StepperConstants;
I2C_MODES: Board.I2cModes;
Expand All @@ -32,77 +32,77 @@ 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,
stepsPerRev: number,
dirOrMotor1Pin: number,
stepOrMotor2Pin: number,
motor3Pin?: number,
motor4Pin?: number): void
motor4Pin?: number): void;
stepperStep(
deviceNum: number,
direction: Board.STEPPER_DIRECTION,
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand All @@ -270,58 +276,58 @@ 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,
RUN = 3,
}

// 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,
STOP_READING = 3
}

// 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,
Expand All @@ -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,
Expand Down
131 changes: 83 additions & 48 deletions types/serialport/index.d.ts
Expand Up @@ -3,52 +3,87 @@
// Definitions by: Jeremy Foster <https://github.com/codefoster>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped

declare module 'serialport' {
class SerialPort {
//openImmediately already removed in 4.0.7
constructor(path: string, options?: Object, 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;
}

interface setOptions {
brk?: boolean;
cts?: boolean;
dsr?: boolean;
dtr?: boolean;
rts?: boolean;
}

interface updateOptions {
baudRate?: number;
}
}

export = SerialPort;
/// <reference types="node" />
/// <reference types="streamjs" />

export = SerialPort;

declare class SerialPort extends Stream<any> {
// 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;
};
}
}