/**
 * Represents a base data type, as defined in ETG.1020 Protocol Enhancements (24 Base Data Types).
 */
export interface BaseDataType {
    /** The unique index identifying the data type. */
    index: number;
    /** The name of the data type. */
    name: string;
    /** The base data type category (e.g., "BIT", "SINT"). */
    baseDataType: string;
    /** The size of the data type in bits. */
    bitSize: number;
    /** An optional description providing additional details about the data type. */
    description?: string;
    /** An optional range specifying the minimum and maximum allowable values. */
    range?: [number, number];
}
/**
 * List of base data types as defined in ETG.1020 Protocol Enhancements, Table 98.
 */
export declare const baseDataTypes: BaseDataType[];
/**
 * List of base data types with variable length, as specified in ETG.1020 Protocol Enhancements, Table 99.
 */
export declare const baseDataTypesWithVariableLength: BaseDataType[];
export declare const preDefinedRecords: BaseDataType[];
/**
 * Combines all base data types, including those from Table 98 and Table 99.
 */
export declare const allBaseDataTypes: BaseDataType[];
/**
 * Finds a base data type that matches the specified index.
 * @param index - The index to search for.
 * @returns The matching base data type, or undefined if not found.
 */
export declare function findBaseDataTypeByIndex(index: number): BaseDataType | undefined;
/**
 * Enum for object code definitions, based on ETG.1000.6 EtherCAT Specification - Part 6, Table 62.
 */
export declare enum ObjectCodeDefinition {
    DOMAIN = 2,
    DEFTYPE = 5,
    DEFSTRUCT = 6,
    VAR = 7,
    ARRAY = 8,
    RECORD = 9
}
/**
 * Flags used to describe object access rights, mapping, and startup behavior.
 * These can be combined using bitwise OR to form compound flags.
 */
/**
 * Flags used to describe object access rights, mapping, and startup behavior.
 * These can be combined using bitwise OR to form compound flags.
 */
export declare enum ObjectFlags {
    /**
     * No flags set.
     */
    NONE = 0,
    /**
     * Pre-operational read access.
     */
    PO_RD = 1,
    /**
     * Safe-operational read access.
     */
    SO_RD = 2,
    /**
     * Operational read access.
     */
    OP_RD = 4,
    /**
     * All read access (pre-op, safe-op, operational).
     */
    ALL_RD = 7,
    /**
     * Pre-operational write access.
     */
    PO_WR = 8,
    /**
     * Safe-operational write access.
     */
    SO_WR = 16,
    /**
     * Operational write access.
     */
    OP_WR = 32,
    /**
     * All write access (pre-op, safe-op, operational).
     */
    ALL_WR = 56,
    /**
     * Pre-operational read/write access.
     */
    PO_RDWR = 9,
    /**
     * Safe-operational read/write access.
     */
    SO_RDWR = 18,
    /**
     * Operational read/write access.
     */
    OP_RDWR = 36,
    /**
     * All read/write access (pre-op, safe-op, operational).
     */
    ALL_RDWR = 63,
    /**
     * Mapped to Receive PDO.
     */
    RXPDO_MAP = 64,
    /**
     * Mapped to Transmit PDO.
     */
    TXPDO_MAP = 128,
    /**
     * Mapped to both Receive and Transmit PDO.
     */
    RXTXPDO_MAP = 192,
    /**
     * Include in device backup.
     */
    BACKUP = 256,
    /**
     * Set on device startup.
     */
    STARTUP = 512,
    /**
     * All list flags (mapping, backup, and startup).
     */
    ALL_LIST_FLAGS = 960
}
/**
 * Returns the names of individual base flags that are set in a given bitmask.
 *
 * This function filters out composite flags (e.g., `ALL_RD`, `PO_RDWR`)
 * and returns only the names of "base" flags — flags that represent a single bit.
 *
 * @param flagsValue - The bitmask containing one or more `ObjectFlags`.
 * @returns An array of `ObjectFlags` key names corresponding to individual set flags.
 *
 * @example
 * ```ts
 * const flags = ObjectFlags.PO_RD | ObjectFlags.SO_WR | ObjectFlags.TXPDO_MAP;
 * const names = getObjectFlagNames(flags);
 * // names => ["PO_RD", "SO_WR", "TXPDO_MAP"]
 * ```
 */
export declare function getObjectFlagNames(flagsValue: number): string[];
/**
 * Returns the name of any flag (base or compound) that exactly matches the given value.
 *
 * This includes both single-bit flags (e.g., `PO_RD`) and combined flags (e.g., `ALL_RDWR`, `RXTXPDO_MAP`).
 *
 * @param flagsValue - The exact value to match.
 * @returns The matching flag name, or `undefined` if no exact match exists.
 *
 * @example
 * ```ts
 * getExactFlagName(ObjectFlags.PO_RD);       // "PO_RD"
 * getExactFlagName(ObjectFlags.ALL_RDWR);    // "ALL_RDWR"
 * getExactFlagName(ObjectFlags.PO_RD | ObjectFlags.SO_WR); // undefined
 * ```
 */
export declare function getExactObjectFlagName(flagsValue: number): string | undefined;
/**
 * Represents the EtherCAT State Machine (ESM) states.
 * These states define the different phases in the EtherCAT communication process,
 * determining the level of access and functionality available at each stage.
 */
export declare enum EthercatState {
    /** No specific state assigned; the device is inactive or uninitialized. */
    NONE = 0,
    /** Initialization state. Only EtherCAT Slave Controller (ESC) registers are accessible. */
    INIT = 1,
    /** Pre-operational state. Mailbox communication is available, but cyclic process data exchange is disabled. */
    PREOP = 2,
    /** Boot state, primarily used for firmware updates or special configurations. */
    BOOT = 3,
    /** Safe-operational state. Inputs are updated cyclically, but outputs are held in a safe (inactive) state. */
    SAFEOP = 4,
    /** Operational state. Full duplex process data exchange is active; device is fully functional. */
    OP = 8
}
