import { AbstractSerialDevice } from './AbstractSerialDevice.js';
/**
 * Global registry for serial device instances and port locks.
 *
 * Maintains:
 * - A `Set` of all registered {@link AbstractSerialDevice} instances.
 * - A `WeakMap` from `SerialPort` to the device instance that currently owns it.
 *
 * All methods are static; this class acts as a module-level singleton.
 */
export declare class SerialRegistry {
    private static instances;
    private static portInstanceMap;
    /**
     * Returns all currently registered device instances.
     *
     * @returns An array snapshot of all registered devices.
     */
    static getInstances(): AbstractSerialDevice<unknown>[];
    /**
     * Registers a device instance so it appears in `getInstances()`.
     *
     * @param instance - The device to register.
     */
    static register(instance: AbstractSerialDevice<unknown>): void;
    /**
     * Removes a device instance from the registry.
     *
     * @param instance - The device to unregister.
     */
    static unregister(instance: AbstractSerialDevice<unknown>): void;
    /**
     * Returns `true` if the port is held by a **different** device instance.
     *
     * @param port - The serial port to check.
     * @param instance - The device requesting access.
     * @returns `true` if the port is locked by another device.
     */
    static isPortInUse(port: SerialPort, instance: AbstractSerialDevice<unknown>): boolean;
    /**
     * Assigns exclusive ownership of a port to an instance.
     *
     * @param port - The port to lock.
     * @param instance - The device claiming the port.
     */
    static lockPort(port: SerialPort, instance: AbstractSerialDevice<unknown>): void;
    /**
     * Releases the exclusive lock on a port.
     *
     * @param port - The port to unlock.
     */
    static unlockPort(port: SerialPort): void;
}
