import type { BuffaloZcl } from "../buffaloZcl";
import type { Command, StructuredSelector } from "./tstype";
export type FoundationCommandName = "read" | "readRsp" | "write" | "writeUndiv" | "writeRsp" | "writeNoRsp" | "configReport" | "configReportRsp" | "readReportConfig" | "readReportConfigRsp" | "report" | "defaultRsp" | "discover" | "discoverRsp" | "readStructured" | "writeStructured" | "writeStructuredRsp" | "discoverCommands" | "discoverCommandsRsp" | "discoverCommandsGen" | "discoverCommandsGenRsp" | "discoverExt" | "discoverExtRsp";
export interface FoundationDefinition<T extends Record<string, any> | Record<string, any>[] = Record<string, any> | Record<string, any>[]> extends Pick<Command, "ID" | "name" | "response"> {
    parse: (buffalo: BuffaloZcl) => T;
    write: (buffalo: BuffaloZcl, payload: T) => void;
}
export declare const Foundation: {
    /** Read Attributes */
    read: {
        name: string;
        ID: number;
        response: number;
        parse(buffalo: BuffaloZcl): {
            attrId: number;
        }[];
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Read Attributes Response */
    readRsp: {
        name: string;
        ID: number;
        parse(buffalo: BuffaloZcl): {
            attrId: number;
            status: number;
            dataType?: number;
            attrData?: unknown;
        }[];
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Write Attributes */
    write: {
        name: string;
        ID: number;
        response: number;
        parse(buffalo: BuffaloZcl): {
            attrId: number;
            dataType: number;
            attrData: unknown;
        }[];
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Write Attributes Undivided */
    writeUndiv: {
        name: string;
        ID: number;
        parse(buffalo: BuffaloZcl): {
            attrId: number;
            dataType: number;
            attrData: unknown;
        }[];
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Write Attributes Response */
    writeRsp: {
        name: string;
        ID: number;
        /**
         * Note that write attribute status records are not included for successfully written attributes, to save bandwidth.
         * In the case of successful writing of all attributes, only a single write attribute status record SHALL be included in the command,
         * with the status field set to SUCCESS and the attribute identifier field omitted.
         */
        parse(buffalo: BuffaloZcl): {
            status: number;
            attrId?: number;
        }[];
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Write Attributes No Response */
    writeNoRsp: {
        name: string;
        ID: number;
        parse(buffalo: BuffaloZcl): {
            attrId: number;
            dataType: number;
            attrData: unknown;
        }[];
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Configure Reporting */
    configReport: {
        name: string;
        ID: number;
        response: number;
        parse(buffalo: BuffaloZcl): {
            direction: number;
            attrId: number;
            dataType?: number;
            /**
             * - If this value is set to 0x0000, then there is no minimum limit,
             *   unless one is imposed by the specification of the cluster using this reporting mechanism or by the application.
             */
            minRepIntval?: number;
            /**
             * - If this value is set to 0xffff, then the device SHALL not issue reports for the specified attribute,
             *   and the configuration information for that attribute need not be maintained.
             * - If this value is set to 0x0000, and the minimum reporting interval field does not equal 0xffff
             *   there SHALL be no periodic reporting, but change based reporting SHALL still be operational.
             * - If this value is set to 0x0000 and the Minimum Reporting Interval Field equals 0xffff,
             *   then the device SHALL revert to its default reporting configuration.
             *   The reportable change field, if present, SHALL be set to zero.
             */
            maxRepIntval?: number;
            /**
             * - If the Maximum Reporting Interval Field is set to 0xffff (terminate reporting configuration),
             *   or the Maximum Reporting Interval Field is set to 0x0000 and the Minimum Reporting Interval Field equals 0xffff,
             *   indicating a (default reporting configuration) then if this field is present,
             *   it SHALL be set to zero upon transmission and ignored upon reception.
             */
            repChange?: number;
            /**
             * - If this value is set to 0x0000, reports of the attribute are not subject to timeout.
             */
            timeout?: number;
        }[];
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Configure Reporting Response */
    configReportRsp: {
        name: string;
        ID: number;
        /**
         * Note that attribute status records are not included for successfully configured attributes, to save bandwidth.
         * In the case of successful configuration of all attributes, only a single attribute status record SHALL be included in the command,
         * with the status field set to SUCCESS and the direction and attribute identifier fields omitted.
         */
        parse(buffalo: BuffaloZcl): {
            status: number;
            direction?: number;
            attrId?: number;
        }[];
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Read Reporting Configuration */
    readReportConfig: {
        name: string;
        ID: number;
        response: number;
        parse(buffalo: BuffaloZcl): {
            direction: number;
            attrId: number;
        }[];
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Read Reporting Configuration Response */
    readReportConfigRsp: {
        name: string;
        ID: number;
        parse(buffalo: BuffaloZcl): {
            status: number;
            direction: number;
            attrId: number;
            dataType?: number;
            minRepIntval?: number;
            maxRepIntval?: number;
            repChange?: number;
            timeout?: number;
        }[];
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Report attributes */
    report: {
        name: string;
        ID: number;
        parse(buffalo: BuffaloZcl): {
            attrId: number;
            dataType: number;
            attrData: unknown;
        }[];
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Default Response */
    defaultRsp: {
        name: string;
        ID: number;
        parse(buffalo: BuffaloZcl): {
            cmdId: number;
            statusCode: number;
        };
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Discover Attributes */
    discover: {
        name: string;
        ID: number;
        parse(buffalo: BuffaloZcl): {
            startAttrId: number;
            maxAttrIds: number;
        };
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Discover Attributes Response */
    discoverRsp: {
        name: string;
        ID: number;
        parse(buffalo: BuffaloZcl): {
            discComplete: number;
            attrInfos: {
                attrId: number;
                dataType: number;
            }[];
        };
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Read Attributes Structured */
    readStructured: {
        name: string;
        ID: number;
        parse(buffalo: BuffaloZcl): {
            attrId: number;
            selector: StructuredSelector;
        }[];
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Write Attributes Structured */
    writeStructured: {
        name: string;
        ID: number;
        response: number;
        parse(buffalo: BuffaloZcl): {
            attrId: number;
            selector: StructuredSelector;
            dataType: number;
            elementData: unknown;
        }[];
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Write Attributes Structured response */
    writeStructuredRsp: {
        name: string;
        ID: number;
        /**
         * Note that write attribute status records are not included for successfully written attributes, to save bandwidth.
         * In the case of successful writing of all attributes, only a single write attribute status record SHALL be included in the command,
         * with the status field set to SUCCESS and the attribute identifier and selector fields omitted.
         */
        parse(buffalo: BuffaloZcl): {
            status: number;
            attrId?: number;
            selector?: StructuredSelector;
        }[];
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Discover Commands Received */
    discoverCommands: {
        name: string;
        ID: number;
        parse(buffalo: BuffaloZcl): {
            startCmdId: number;
            maxCmdIds: number;
        };
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Discover Commands Received Response */
    discoverCommandsRsp: {
        name: string;
        ID: number;
        parse(buffalo: BuffaloZcl): {
            discComplete: number;
            commandIds: number[];
        };
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Discover Commands Generated */
    discoverCommandsGen: {
        name: string;
        ID: number;
        parse(buffalo: BuffaloZcl): {
            startCmdId: number;
            maxCmdIds: number;
        };
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Discover Commands Generated Response */
    discoverCommandsGenRsp: {
        name: string;
        ID: number;
        parse(buffalo: BuffaloZcl): {
            discComplete: number;
            commandIds: number[];
        };
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Discover Attributes Extended */
    discoverExt: {
        name: string;
        ID: number;
        parse(buffalo: BuffaloZcl): {
            startAttrId: number;
            maxAttrIds: number;
        };
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
    /** Discover Attributes Extended Response */
    discoverExtRsp: {
        name: string;
        ID: number;
        parse(buffalo: BuffaloZcl): {
            discComplete: number;
            attrInfos: {
                attrId: number;
                dataType: number;
                access: number;
            }[];
        };
        write(buffalo: BuffaloZcl, payload: Record<string, any>[] | Record<string, any>): void;
    };
};
//# sourceMappingURL=foundation.d.ts.map