/// type I2CDeviceId = { manufacturer: number; product: number; name: string }; type BytesWritten = { bytesWritten: number; buffer: Buffer }; type BytesRead = { bytesRead: number; buffer: Buffer }; type CompletionCallback = (error: any) => any; type BufferCallback = (error: any, bytesReadOrWritten: number, buffer: Buffer) => any; type ResultCallback = (error: any, result: T) => any; type OpenOptions = { /** A boolean value specifying whether access to devices on the I2C bus should be allowed even if they are already in use by a kernel driver/module. Corresponds to I2C_SLAVE_FORCE on Linux. The valid values for forceAccess are true and false. Optional, the default value is false. */ forceAccess: boolean; }; export interface I2CFuncs { i2c: boolean; tenBitAddr: boolean; protocolMangling: boolean; smbusPec: boolean; smbusBlockProcCall: boolean; smbusQuick: boolean; smbusReceiveByte: boolean; smbusSendByte: boolean; smbusReadByte: boolean; smbusWriteByte: boolean; smbusReadWord: boolean; smbusWriteWord: boolean; smbusProcCall: boolean; smbusReadBlock: boolean; smbusWriteBlock: boolean; smbusReadI2cBlock: boolean; smbusWriteI2cBlock: boolean; } export interface I2CBus { /** * Asynchronous close. * * @param {CompletionCallback} callback * Completion callback */ close(callback: CompletionCallback): void; /** * Synchronous close. */ closeSync(): void; /** * Determine functionality of the bus/adapter asynchronously. * * @param {ResultCallback} callback * Callback that will recieve a frozen I2cFuncs object describing the I2C functionality available. */ i2cFuncs(callback: ResultCallback): void; /** * Determine functionality of the bus/adapter synchronously. * * @return {I2CFuncs} * A frozen I2cFuncs object describing the I2C functionality available. */ i2cFuncsSync(): I2CFuncs; /** * Scans the I2C bus asynchronously for devices. The default address range 0x03 through 0x77 is the same as the default address range used by the i2cdetect command line tool. * * @param {ResultCallback} callback * Callback that will recieve an array of numbers where each number represents the I2C address of a device which was detected. */ scan(callback: ResultCallback): void; /** * Scans the I2C bus asynchronously for devices. The default address range 0x03 through 0x77 is the same as the default address range used by the i2cdetect command line tool. * * @param {number} address * An integer specifying the address of the scan. * @param {ResultCallback} callback * Callback that will recieve an array of numbers where each number represents the I2C address of a device which was detected. */ scan(address: number, callback: ResultCallback): void; /** * Scans the I2C bus asynchronously for devices. The default address range 0x03 through 0x77 is the same as the default address range used by the i2cdetect command line tool. * * @param {number} startAddr * An integer specifying the start address of the scan range. * @param {number} endAddr * An integer specifying the end address of the scan range. * @param {ResultCallback} callback * Callback that will recieve an array of numbers where each number represents the I2C address of a device which was detected. */ scan(startAddr: number, endAddr: number, callback: ResultCallback): void; /** * Scans the I2C bus synchronously for devices. The default address range 0x03 through 0x77 is the same as the default address range used by the i2cdetect command line tool. * * @param {number} [address] * An integer specifying the address of the scan. * @return {number[]} * An array of numbers where each number represents the I2C address of a device which was detected. */ scanSync(address?: number): number[]; /** * Scans the I2C bus synchronously for devices. The default address range 0x03 through 0x77 is the same as the default address range used by the i2cdetect command line tool. * * @param {number} [startAddr] * An integer specifying the start address of the scan range. * @param {number} [endAddr] * An integer specifying the end address of the scan range. * @return {number[]} * An array of numbers where each number represents the I2C address of a device which was detected. */ scanSync(startAddr: number, endAddr: number): number[]; /** * Asynchronous I2C device Id. * * @param {number} address * I2C device address * @param {ResultCallback} callback * The callback gets two arguments (err, id). id is an object with the properties manufacturer, product and if known a human readable name for the associated manufacturer. */ deviceId(address: number, callback: ResultCallback): void; /** * Synchronous I2C device Id. * * @param {number} address * I2C device address * @return {I2CDeviceId} * An object with the properties manufacturer, product and if known a human readable name for the associated manufacturer. */ deviceIdSync(address: number): I2CDeviceId; /** * Asynchronous plain I2C read. * * @param {number} address * I2C device address. * @param {number} length * The number of bytes to read. * @param {Buffer} buffer * The buffer that the data will be written to (must be at least {length} bytes long). * @param {BufferCallback} callback * Callback that will recieve the number of bytes read and the given buffer. */ i2cRead(address: number, length: number, buffer: Buffer, callback: BufferCallback): void; /** * Synchronous plain I2C read. * * @param {number} address * I2C device address. * @param {number} length * The number of bytes to read. * @param {Buffer} buffer * The buffer that the data will be written to (must be at least {length} bytes long). * @return {number} * The number of bytes read. */ i2cReadSync(address: number, length: number, buffer: Buffer): number; /** * Asynchronous plain I2C write. * * @param {number} address * I2C device address. * @param {number} length * The number of bytes to write. * @param {Buffer} buffer * The buffer that the data to write (must contain at least {length} bytes). * @param {BufferCallback} callback * Callback that will recieve the number of bytes written and the given buffer. */ i2cWrite(address: number, length: number, buffer: Buffer, callback: BufferCallback): void; /** * Synchronous plain I2C write. * * @param {number} address * I2C device address. * @param {number} length * The number of bytes to write. * @param {Buffer} buffer * The buffer that the data will to write (must contain at least {length} bytes). * @return {number} * The number of bytes written. */ i2cWriteSync(address: number, length: number, buffer: Buffer): number; /** * Asynchronous SMBus read byte. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {ResultCallback} callback * Callback that will recieve the byte read. */ readByte(address: number, command: number, callback: ResultCallback): void; /** * Synchronous SMBus read byte. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @return {number} * The byte read. */ readByteSync(address: number, command: number): number; /** * Asynchronous SMBus read word. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {ResultCallback} callback * Callback that will recieve the word read. */ readWord(address: number, command: number, callback: ResultCallback): void; /** * Synchronous SMBus read word. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @return {number} * The word read. */ readWordSync(address: number, command: number): number; /** * Asynchronous I2C block read (not defined by the SMBus * specification). Reads a block of bytes from a device, from a * designated register that is specified by cmd. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {number} length * The number of bytes to read (max 32). * @param {Buffer} buffer * The buffer that the data will be written to (must be at least {length} bytes long). * @param {BufferCallback} callback * Callback that will recieve the number of bytes read and the given buffer. */ readI2cBlock(address: number, command: number, length: number, buffer: Buffer, callback: BufferCallback): void; /** * Synchronous I2C block read (not defined by the SMBus * specification). Reads a block of bytes from a device, from a * designated register that is specified by cmd. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {number} length * The number of bytes to read (max 32). * @param {Buffer} buffer * The buffer that the data will be written to (must be at least {length} bytes long). * @return {number} * The number of bytes read. */ readI2cBlockSync(address: number, command: number, length: number, buffer: Buffer): number; /** * Asynchronous SMBus receive byte. * * @param {number} address * I2C device address. * @param {ResultCallback} callback * Callback that will recieve the byte received. */ receiveByte(address: number, callback: ResultCallback): void; /** * Synchronous SMBus receive byte. * * @param {number} address * I2C device address. * @return {number} * The byte received. */ receiveByteSync(address: number): number; /** * Asynchronous SMBus send byte. * * @param {number} address * I2C device address. * @param {number} byte * The data byte to send. * @param {CompletionCallback} callback * Completion callback */ sendByte(address: number, byte: number, callback: CompletionCallback): void; /** * Synchronous SMBus send byte. * * @param {number} address * I2C device address. * @param {number} byte * The data byte to send. */ sendByteSync(address: number, byte: number): void; /** * Asynchronous SMBus write byte. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {number} byte * The data byte to write. * @param {CompletionCallback} callback * Completion callback */ writeByte(address: number, command: number, byte: number, callback: CompletionCallback): void; /** * Synchronous SMBus write byte. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {number} byte * The data byte to write. */ writeByteSync(address: number, command: number, byte: number): void; /** * Asynchronous SMBus write word. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {number} word * The data word to write. * @param {CompletionCallback} callback * Completion callback */ writeWord(address: number, command: number, word: number, callback: CompletionCallback): void; /** * Synchronous SMBus write word. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {number} word * The data word to write. */ writeWordSync(address: number, command: number, word: number): void; /** * Asynchronous SMBus quick command. Writes a single bit to the device. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {number} bit * The data bit to write (0 or 1). * @param {CompletionCallback} callback * Completion callback */ writeQuick(address: number, command: number, bit: number, callback: CompletionCallback): void; /** * Synchronous SMBus quick command. Writes a single bit to the device. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {number} bit * The data bit to write (0 or 1). */ writeQuickSync(address: number, command: number, bit: number): void; /** * Asynchronous I2C block write (not defined by the SMBus * specification). Writes a block of bytes to a device, to a designated * register that is specified by {command}. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {number} length * The number of bytes to write (max 32). * @param {Buffer} buffer * The buffer that the data to write (must contain at least {length} bytes). * @param {BufferCallback} callback * Callback that will recieve the number of bytes written and the given buffer. */ writeI2cBlock(address: number, command: number, length: number, buffer: Buffer, callback: BufferCallback): void; /** * Synchronous I2C block write (not defined by the SMBus * specification). Writes a block of bytes to a device, to a designated * register that is specified by {command}. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {number} length * The number of bytes to write (max 32). * @param {Buffer} buffer * The buffer that the data will to write (must contain at least {length} bytes). * @return {number} * The number of bytes written. */ writeI2cBlockSync(address: number, command: number, length: number, buffer: Buffer): number; /** * Return the PromisifiedBus instance for this Bus instance. * * @return {PromisifiedBus} * The PromisifiedBus instance for this Bus instance. */ promisifiedBus(): PromisifiedBus; } export interface PromisifiedBus { /** * Asynchronous close. * * @return {Promise} * A Promise that will be resolved with no arguments once the underlying resources have been released, or will be rejected if an error occurs while closing. */ close(): Promise; /** * Determine functionality of the bus/adapter asynchronously. * * @return {Promise} * A Promise that on success will be resolved with a frozen I2cFuncs object describing the functionality available. The returned Promise will be rejected if an error occurs. See also [I2C functionality](https://www.kernel.org/doc/Documentation/i2c/functionality). */ i2cFuncs(): Promise; /** * Scans the I2C bus asynchronously for devices. The default address range 0x03 through 0x77 is the same as the default address range used by the i2cdetect command line tool. * * @param {number} [address] * An integer specifying the address of the scan. * @return {Promise} * A Promise that on success will be resolved with an array of numbers where each number represents the I2C address of a device which was detected. The returned Promise will be rejected if an error occurs. */ scan(address?: number): Promise; /** * Scans the I2C bus asynchronously for devices. The default address range 0x03 through 0x77 is the same as the default address range used by the i2cdetect command line tool. * * @param {number} [startAddr] * An integer specifying the start address of the scan range. * @param {number} [endAddr] * An integer specifying the end address of the scan range. * @return {Promise} * A Promise that on success will be resolved with an array of numbers where each number represents the I2C address of a device which was detected. The returned Promise will be rejected if an error occurs. */ scan(startAddr: number, endAddr: number): Promise; /** * Asynchronous I2C device Id. * * @param {number} address * I2C device address * @return {Promise} * A Promise that will be resolved with an id object on success, or will be rejected if an error occurs. id is an object with the properties manufacturer, product and if known a human readable name for the associated manufacturer. */ deviceId(address: number): Promise; /** * Asynchronous plain I2C read. * * @param {number} address * I2C device address. * @param {number} length * The number of bytes to read. * @param {Buffer} buffer * The buffer that the data will be written to (must be at least {length} bytes long). * @return {Promise} * A Promise that on success will be resolved with an object with a bytesRead property identifying the number of bytes read, and a buffer property that is a reference to the passed in buffer argument. The returned Promise will be rejected if an error occurs. */ i2cRead(address: number, length: number, buffer: Buffer): Promise; /** * Asynchronous plain I2C write. * * @param {number} address * I2C device address. * @param {number} length * The number of bytes to write. * @param {Buffer} buffer * The buffer that the data to write (must contain at least {length} bytes). * @return {Promise} * A Promise that on success will be resolved with an object with a bytesWritten property identifying the number of bytes written, and a buffer property that is a reference to the passed in buffer argument. The returned promise will be rejected if an error occurs. */ i2cWrite(address: number, length: number, buffer: Buffer): Promise; /** * Asynchronous SMBus read byte. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @return {Promise} * A Promise that will be resolved with a number representing the byte read on success, or will be rejected if an error occurs. byte is an unsigned integer in the range 0 to 255. */ readByte(address: number, command: number): Promise; /** * Asynchronous SMBus read word. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @return {Promise} * A Promise that will be resolved with a number representing the word read on success, or will be rejected if an error occurs. word is an unsigned integer in the range 0 to 65535. */ readWord(address: number, command: number): Promise; /** * Asynchronous I2C block read (not defined by the SMBus specification). * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {number} length * The number of bytes to read (max 32). * @param {Buffer} buffer * The buffer that the data will be written to (must be at least {length} bytes long). * @return {Promise} * A Promise that on success will be resolved with an object with a bytesRead property identifying the number of bytes read, and a buffer property that is a reference to the passed in buffer argument. The returned Promise will be rejected if an error occurs. */ readI2cBlock(address: number, command: number, length: number, buffer: Buffer): Promise; /** * Asynchronous SMBus receive byte. * * @param {number} address * I2C device address. * @return {Promise} * A Promise that will be resolved with a number representing the byte received on success, or will be rejected if an error occurs. byte is an unsigned integer in the range 0 to 255. */ receiveByte(address: number): Promise; /** * Asynchronous SMBus send byte. * * @param {number} address * I2C device address. * @param {number} byte * The data byte to send. * @return {Promise} * A Promise that will be resolved with no arguments on success, or will be rejected if an error occurs. */ sendByte(address: number, byte: number): Promise; /** * Asynchronous SMBus write byte. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {number} byte * The data byte to write. * @return {Promise} * A Promise that will be resolved with no arguments on success, or will be rejected if an error occurs. */ writeByte(address: number, command: number, byte: number): Promise; /** * Asynchronous SMBus write word. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {number} word * The data word to write. * @return {Promise} * A Promise that will be resolved with no arguments on success, or will be rejected if an error occurs. */ writeWord(address: number, command: number, word: number): Promise; /** * Asynchronous SMBus quick command. * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {number} bit * The data bit to write (0 or 1). * @return {Promise} * A Promise that will be resolved with no arguments on success, or will be rejected if an error occurs. */ writeQuick(address: number, command: number, bit: number): Promise; /** * Asynchronous I2C block write (not defined by the SMBus specification). * * @param {number} address * I2C device address. * @param {number} command * The command code. * @param {number} length * The number of bytes to write (max 32). * @param {Buffer} buffer * The buffer that the data to write (must contain at least {length} bytes). * @return {Promise} * A Promise that on success will be resolved with an object with a bytesWritten property identifying the number of bytes written, and a buffer property that is a reference to the passed in buffer argument. The returned promise will be rejected if an error occurs. */ writeI2cBlock(address: number, command: number, length: number, buffer: Buffer): Promise; /** * Return the Bus instance for this PromisifiedBus instance. * * @return {I2CBus} * The Bus instance for this PromisifiedBus instance. */ bus(): I2CBus; } /** * Asynchronous open. * * @param {number} busNumber * The number of the I2C bus/adapter to open, 0 for /dev/i2c-0, 1 for /dev/i2c-1, ... * @param {OpenOptions} [options] * An optional options object. * @param {CompletionCallback} callback * Completion callback. * @return {I2CBus} * A new Bus object. */ export function open(busNumber: number, callback: CompletionCallback): I2CBus; export function open(busNumber: number, options: OpenOptions, callback: CompletionCallback): I2CBus; /** * Synchronous open. * * @param {number} busNumber * The number of the I2C bus/adapter to open, 0 for /dev/i2c-0, 1 for /dev/i2c-1, ... * @param {OpenOptions} [options] * An optional options object. * @return {I2CBus} * A new Bus object. */ export function openSync(busNumber: number, options?: OpenOptions): I2CBus; /** * Asynchronous open. * * @param {number} busNumber * The number of the I2C bus/adapter to open, 0 for /dev/i2c-0, 1 for /dev/i2c-1, ... * @param {OpenOptions} [options] * An optional options object. * @return {Promise} * A Promise that, when resolved, yields a PromisifiedBus object. */ export function openPromisified(busNumber: number, options?: OpenOptions): Promise;