import { EventEmitter } from "events";
import { Debugger } from "debug";
import { HCPClient, SerialHCPClient, SerialOptions, STATUS_RESPONSE_BYTE0_BITFIELD } from "./serialHCPClient";
import { PacketFilterParams } from "./parser";
export { MockHCPClient } from "./mockHCPClient";
export { HCPClient, SerialHCPClient, SerialOptions, PacketFilterParams };
export declare enum CurrentDoorState {
    OPEN = 0,
    CLOSED = 1,
    OPENING = 2,
    CLOSING = 3,
    STOPPED = 4,
    VENTING = 5
}
export declare enum TargetDoorState {
    OPEN = 0,
    CLOSED = 1,
    VENTING = 5
}
export interface GarageState {
    door: CurrentDoorState;
    light: boolean;
}
declare abstract class GarageDoorOpener extends EventEmitter {
    readonly name: string;
    protected manufacturer: string;
    protected model: string;
    protected currentState: CurrentDoorState | null;
    protected targetState: TargetDoorState | null;
    protected lightState: boolean | null;
    constructor(name: string);
    abstract getCurrentState(): CurrentDoorState;
    abstract getTargetState(): TargetDoorState;
    abstract setTargetState(newState: TargetDoorState): Promise<void>;
    abstract getLightOnState(): boolean;
    abstract setLightOnState(newState: boolean): Promise<void>;
}
export declare class HormannGarageDoorOpener extends GarageDoorOpener {
    hcpClient: HCPClient;
    logger: Debugger;
    broadcastStatus: Uint8Array;
    constructor(name: string | undefined, hcpClient: HCPClient);
    static targetStateToRequest(targetState: TargetDoorState): {
        flags: STATUS_RESPONSE_BYTE0_BITFIELD[];
        emergencyStop?: boolean;
    };
    static broadcastToCurrentState(status: Uint8Array): GarageState | Error;
    private onBroadcast;
    getCurrentState(): CurrentDoorState;
    getTargetState(): TargetDoorState;
    setTargetState(newState: TargetDoorState): Promise<void>;
    getLightOnState(): boolean;
    setLightOnState(newState: boolean): Promise<void>;
}
export declare function createHormannGarageDoorOpener(
/** factory function to create a serial enabled Hormann garage door opener */
name: string | undefined, { path, ...rest }: SerialOptions, { packetTimeout, filterBreaks, filterMaxLength }?: PacketFilterParams): HormannGarageDoorOpener;
