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)

238 lines (211 loc) 7.29 kB
// Type definitions for oled-rpi-i2c-bus-async // Project: https://github.com/grevelle/oled-rpi-i2c-bus-async // Definitions by: GitHub Copilot declare module 'oled-rpi-i2c-bus-async' { import { PromisifiedBus } from 'i2c-bus'; /** * Font object type definition */ export interface Font { width: number; height: number; lookup: string; fontData: number[]; } /** * RGBA Image interface */ export interface RGBAImage { width: number; height: number; data: Uint8Array | Buffer; } /** * Configuration options for OLED display */ export interface OledOptions { /** Display width in pixels (default: 128) */ width?: number; /** Display height in pixels (default: 64) */ height?: number; /** I2C address of the display (default: 0x3c) */ address?: number; /** I2C bus number */ bus?: number; /** Driver type ('SSD1306' or 'SH1106') (default: 'SSD1306') */ driver?: 'SSD1306' | 'SH1106'; /** Logging level ('debug', 'info', 'warn', 'error', 'silent') */ logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'silent'; /** Line spacing for text (default: 1) */ linespacing?: number; /** Letter spacing for text (default: 1) */ letterspacing?: number; } /** * Main OLED driver class that delegates to specific hardware implementations */ export default class Oled { /** Display width in pixels */ WIDTH: number; /** Display height in pixels */ HEIGHT: number; /** Display driver type */ DRIVER: string; /** * Creates a new OLED display instance * @param i2c - I2C bus instance * @param opts - Configuration options */ constructor(i2c: PromisifiedBus, opts?: OledOptions); /** * Turn on the display */ turnOnDisplay(): Promise<void>; /** * Turn off the display */ turnOffDisplay(): Promise<void>; /** * Dim the display * @param bool - Whether to dim the display */ dimDisplay(bool: boolean): Promise<void>; /** * Invert pixels on oled * @param bool - Whether to invert display colors */ invertDisplay(bool: boolean): Promise<void>; /** * Activate scrolling for rows start through stop * @param dir - Scroll direction ('left' or 'right') * @param start - Start row * @param stop - End row */ startScroll(dir: 'left' | 'right' | 'left diagonal' | 'right diagonal', start: number, stop: number): Promise<void>; /** * Stop scrolling display contents */ stopScroll(): Promise<void>; /** * Send the entire framebuffer to the oled */ update(): Promise<void>; /** * Clear all pixels on the display * @param sync - Whether to update display immediately */ clearDisplay(sync?: boolean): Promise<void>; /** * Set starting position of a text string on the oled * @param x - X coordinate * @param y - Y coordinate */ setCursor(x: number, y: number): Promise<void>; /** * Draw a column of a page on the oled * @param page - Page number * @param col - Column number * @param byte - Byte value to write */ drawPageCol(page: number, col: number, byte: number): 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>; /** * Draw one or many pixels on oled * @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 * @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 oled * @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 at the specified coordinates * @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 an image pixel array on the screen * @param pixels - Array of pixel data * @param sync - Whether to update display immediately */ drawBitmap(pixels: Uint8Array | Buffer | number[], sync?: boolean): Promise<void>; /** * Draw a battery icon on the oled with parallel operations * @param x - X coordinate * @param y - Y coordinate * @param percentage - Battery percentage */ battery(x: number, y: number, percentage: number): Promise<void>; /** * Draw a bluetooth icon on the oled with parallel operations * @param x - X coordinate * @param y - Y coordinate */ bluetooth(x: number, y: number): Promise<void>; /** * Draw a wifi icon on the oled with parallel operations * @param x - X coordinate * @param y - Y coordinate * @param percentage - Signal strength percentage */ wifi(x: number, y: number, percentage: number): Promise<void>; /** * Draw or animate an image * @param x - X coordinate * @param y - Y coordinate * @param image - Image path or object * @param font - Font object * @param clear - Whether to clear the display before drawing * @param reset - Whether to reset the animation * @param animated - Whether the image is animated * @param wrapping - Whether to wrap text */ image( x: number, y: number, image: string, font: Font, clear?: boolean, reset?: boolean, animated?: boolean, wrapping?: boolean ): Promise<void>; } }