UNPKG

oled-rpi-i2c-bus-async

Version:

Asynchronous NodeJS module for controlling oled devices on the Raspbery Pi (including the SSD1306 and SH1106 OLED screens)

236 lines (209 loc) 7.8 kB
// Type definitions for oled-rpi-i2c-bus-async base OLED driver // Project: https://github.com/grevelle/oled-rpi-i2c-bus-async // Definitions by: GitHub Copilot declare module '../drivers/base-oled.mjs' { import { PromisifiedBus } from 'i2c-bus'; import { Font, OledOptions, RGBAImage } from '../types/oled'; /** * Base OLED driver implementation * Contains shared functionality for SSD1306 and SH1106 drivers */ export default class BaseOLED { /** Display height in pixels */ HEIGHT: number; /** Display width in pixels */ WIDTH: number; /** I2C address of the display */ ADDRESS: number; /** Maximum number of pages (HEIGHT / 8) */ MAX_PAGE_COUNT: number; /** Line spacing for text */ LINESPACING: number; /** Letter spacing for text */ LETTERSPACING: number; /** Display buffer */ buffer: Buffer; /** Array of dirty bytes to update */ dirtyBytes: number[]; /** I2C bus interface */ wire: PromisifiedBus; /** X cursor position */ cursor_x: number; /** Y cursor position */ cursor_y: number; /** OLED command: Display off */ DISPLAY_OFF: number; /** OLED command: Display on */ DISPLAY_ON: number; /** OLED command: Set display clock div */ SET_DISPLAY_CLOCK_DIV: number; /** OLED command: Set multiplex */ SET_MULTIPLEX: number; /** OLED command: Set display offset */ SET_DISPLAY_OFFSET: number; /** OLED command: Set contrast */ SET_CONTRAST: number; /** OLED command: Set precharge */ SET_PRECHARGE: number; /** OLED command: Set VCOM detect */ SET_VCOM_DETECT: number; /** OLED command: Display all on resume */ DISPLAY_ALL_ON_RESUME: number; /** OLED command: Normal display */ NORMAL_DISPLAY: number; /** OLED command: Invert display */ INVERT_DISPLAY: number; /** OLED command: Set contrast control mode */ SET_CONTRAST_CTRL_MODE: number; /** * Creates a new OLED driver instance * @param i2c - I2C bus instance * @param opts - Configuration options */ constructor(i2c: PromisifiedBus, opts?: OledOptions); /** * Turn OLED on */ turnOnDisplay(): Promise<void>; /** * Turn OLED off */ turnOffDisplay(): Promise<void>; /** * Dim display by adjusting contrast * @param bool - Whether to dim the display */ dimDisplay(bool: boolean): Promise<void>; /** * Invert display pixels * @param bool - Whether to invert display colors */ invertDisplay(bool: boolean): Promise<void>; /** * Set cursor position for text * @param x - X coordinate * @param y - Y coordinate */ setCursor(x: number, y: number): void; /** * Optimized method to clear all pixels on the display * @param sync - Whether to update display immediately */ clearDisplay(sync?: boolean): Promise<void>; /** * Draw a segment of a page on the oled * @param page - Page number * @param seg - Segment number * @param byte - Byte value to write * @param sync - Whether to update display immediately */ drawPageSeg(page: number, seg: number, byte: number, sync?: boolean): Promise<void>; /** * Optimized method to draw one or many pixels * @param pixels - Array of pixel data [x, y, color] or [[x, y, color], ...] * @param sync - Whether to update display immediately */ drawPixel(pixels: [number, number, number] | Array<[number, number, number]>, sync?: boolean): Promise<void>; /** * Draw a line using Bresenham's line algorithm * @param x0 - Starting X coordinate * @param y0 - Starting Y coordinate * @param x1 - Ending X coordinate * @param y1 - Ending Y coordinate * @param color - Line color (0 for black, 1 for white) * @param sync - Whether to update display immediately */ drawLine(x0: number, y0: number, x1: number, y1: number, color: 0 | 1, sync?: boolean): Promise<void>; /** * Draw a filled rectangle * @param x - X coordinate * @param y - Y coordinate * @param w - Width * @param h - Height * @param color - Rectangle color (0 for black, 1 for white) * @param sync - Whether to update display immediately */ fillRect(x: number, y: number, w: number, h: number, color: 0 | 1, sync?: boolean): Promise<void>; /** * Write text to the display * @param font - Font object * @param size - Font size * @param string - Text string * @param color - Text color (0 for black, 1 for white) * @param wrap - Whether to wrap text * @param sync - Whether to update display immediately */ writeString(font: Font, size: number, string: string, color: 0 | 1, wrap?: boolean, sync?: boolean): Promise<void>; /** * Draw an RGBA image (optimized) * @param image - Image object * @param dx - X coordinate * @param dy - Y coordinate * @param sync - Whether to update display immediately */ drawRGBAImage(image: RGBAImage, dx: number, dy: number, sync?: boolean): Promise<void>; /** * Draw a bitmap efficiently * @param pixels - Array of pixel data * @param sync - Whether to update display immediately */ drawBitmap(pixels: Uint8Array | Buffer | number[], sync?: boolean): Promise<void>; /** * Draw an individual character to the screen * @param byteArray - Byte array containing character data * @param charHeight - Character height * @param size - Font size * @param sync - Whether to update display immediately */ _drawChar(byteArray: number[][], charHeight: number, size: number, sync?: boolean): Promise<void>; /** * Get character bytes from the supplied font object * @param byteArray - Byte array containing font data * @param charHeight - Character height * @returns Array of character bytes */ _readCharBytes(byteArray: number[], charHeight: number): number[][]; /** * Find where the character exists within the font object * @param font - Font object * @param c - Character to find * @returns Character buffer */ _findCharBuf(font: Font, c: string): number[]; /** * Writes both commands and data buffers to this device * @param type - Type of data ('cmd' or 'data') * @param val - Value to write */ _transfer(type: 'cmd' | 'data', val: number): Promise<void>; /** * Batch multiple commands or data values into a single I2C transfer for better efficiency * @param type - Type of data ('cmd' or 'data') * @param values - Values to write */ _transferBatch(type: 'cmd' | 'data', values: number[] | Uint8Array | Buffer): Promise<void>; /** * Read a byte from the oled * @returns Read byte */ _readI2C(): Promise<number>; /** * Sometimes the oled gets a bit busy with lots of bytes. * Read the response byte to see if this is the case */ _waitUntilReady(): Promise<void>; /** * Initialize the display (must be implemented by derived classes) */ _initialise(): Promise<void>; /** * Send the entire framebuffer to the oled (must be implemented by derived classes) */ update(): Promise<void>; /** * Update dirty bytes (must be implemented by derived classes) * @param dirtyByteArray - Array of dirty byte indices */ _updateDirtyBytes(dirtyByteArray: number[]): Promise<void>; } }