import { BDObject } from '../generic/object.js';
import { BDArrayProperty, BDSingletProperty } from '../../properties/index.js';
import { ApplicationTag, Segmentation, DeviceStatus } from '@innovation-system/node-bacnet';
import { type BDDeviceOpts, type BDDeviceEvents } from './types.js';
import { AsyncEventEmitter } from '../../events.js';
/**
 * Implements a BACnet Device object
 *
 * The Device object is a specialized BACnet object that represents the BACnet device itself.
 * It serves as a container for all other BACnet objects and provides device-level properties
 * and services. Each BACnet node hosts exactly one Device object.
 *
 * According to the BACnet specification, the Device object includes standard properties:
 * - Object_Identifier (automatically added by BACnetObject)
 * - Object_Name (automatically added by BACnetObject)
 * - Object_Type (automatically added by BACnetObject)
 * - System_Status
 * - Vendor_Name
 * - Vendor_Identifier
 * - Model_Name
 * - Firmware_Revision
 * - Application_Software_Version
 * - Protocol_Version
 * - Protocol_Revision
 * - Protocol_Services_Supported
 * - Protocol_Object_Types_Supported
 * - Object_List
 * - And other properties related to device capabilities and configuration
 *
 * @extends BDObject
 */
export declare class BDDevice extends BDObject implements AsyncEventEmitter<BDDeviceEvents> {
    #private;
    readonly objectList: BDArrayProperty<ApplicationTag.OBJECTIDENTIFIER>;
    readonly structuredObjectList: BDArrayProperty<ApplicationTag.OBJECTIDENTIFIER>;
    readonly protocolVersion: BDSingletProperty<ApplicationTag.UNSIGNED_INTEGER>;
    readonly protocolRevision: BDSingletProperty<ApplicationTag.UNSIGNED_INTEGER>;
    readonly protocolServicesSupported: BDSingletProperty<ApplicationTag.BIT_STRING>;
    readonly protocolObjectTypesSupported: BDSingletProperty<ApplicationTag.BIT_STRING>;
    readonly activeCovSubscriptions: BDArrayProperty<ApplicationTag.COV_SUBSCRIPTION>;
    readonly vendorIdentifier: BDSingletProperty<ApplicationTag.UNSIGNED_INTEGER>;
    readonly vendorName: BDSingletProperty<ApplicationTag.CHARACTER_STRING>;
    readonly modelName: BDSingletProperty<ApplicationTag.CHARACTER_STRING>;
    readonly firmwareRevision: BDSingletProperty<ApplicationTag.CHARACTER_STRING>;
    readonly applicationSoftwareVersion: BDSingletProperty<ApplicationTag.CHARACTER_STRING>;
    readonly databaseRevision: BDSingletProperty<ApplicationTag.UNSIGNED_INTEGER>;
    readonly deviceAddressBinding: BDArrayProperty<ApplicationTag.NULL>;
    readonly location: BDSingletProperty<ApplicationTag.CHARACTER_STRING>;
    readonly serialNumber: BDSingletProperty<ApplicationTag.CHARACTER_STRING>;
    readonly maxApduLengthAccepted: BDSingletProperty<ApplicationTag.UNSIGNED_INTEGER>;
    readonly apduTimeout: BDSingletProperty<ApplicationTag.UNSIGNED_INTEGER>;
    readonly numberOfApduRetries: BDSingletProperty<ApplicationTag.UNSIGNED_INTEGER>;
    readonly apduSegmentTimeout: BDSingletProperty<ApplicationTag.UNSIGNED_INTEGER>;
    readonly segmentationSupported: BDSingletProperty<ApplicationTag.ENUMERATED, Segmentation>;
    readonly maxSegmentsAccepted: BDSingletProperty<ApplicationTag.UNSIGNED_INTEGER>;
    readonly utcOffset: BDSingletProperty<ApplicationTag.SIGNED_INTEGER>;
    readonly localDate: BDSingletProperty<ApplicationTag.DATE>;
    readonly localTime: BDSingletProperty<ApplicationTag.TIME>;
    readonly daylightSavingsStatus: BDSingletProperty<ApplicationTag.BOOLEAN>;
    readonly systemStatus: BDSingletProperty<ApplicationTag.ENUMERATED, DeviceStatus>;
    /**
     * Creates a new BACnet Device object
     *
     * This constructor initializes a Device object with all required properties
     * according to the BACnet specification, including support for basic BACnet
     * services and object types.
     *
     * @param opts - Configuration options for this device
     */
    constructor(opts: BDDeviceOpts);
    /**
     * Adds a BACnet object to this device
     *
     * This method registers a new BACnet object with the device and adds it to the
     * device's object list. The object must have a unique identifier (type and instance).
     *
     * @param object - The BACnet object to add to this device
     * @returns The added object
     * @throws Error if an object with the same identifier already exists
     * @typeParam T - The specific BACnet object type
     */
    addObject<T extends BDObject>(object: T): T;
}
//# sourceMappingURL=device.d.ts.map