import type { NobjcObject } from "objc-js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSData } from "../Foundation/NSData.js";
import type { _NSDictionary } from "../Foundation/NSDictionary.js";
import type { _NSError } from "../Foundation/NSError.js";
import type { _NSMutableDictionary } from "../Foundation/NSMutableDictionary.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _NSString } from "../Foundation/NSString.js";
import type { _ICDeviceDelegate } from "./ICDeviceDelegate.js";
import type { ICDeviceType } from "./ICDeviceType.js";
export declare class _ICDevice extends _NSObject {
    static alloc(): _ICDevice;
    static new(): _ICDevice;
    init(): _ICDevice;
    /**
     * @method requestOpenSession @abstract This message requests to open a session on the device. @discussion Make sure the receiver's delegate is set prior to sending this message; otherwise this message will be ignored. This request is completed when the delegate receives a "device:didOpenSessionWithError:" message. @note Execution of the delegate callback will occur on the main thread.
     */
    requestOpenSession(): void;
    /**
     * @method requestCloseSession @abstract This message requests to close a previously opened session on this device. @discussion This request is completed when the delegate receives a "device:didCloseSessionWithError:" message. @note Execution of the delegate callback will occur on the main thread.
     */
    requestCloseSession(): void;
    /**
     * @method requestEject @abstract Eject the media if permitted by the device, or disconnect from a remote device.
     */
    requestEject(): void;
    /**
     * @method requestOpenSessionWithOptions:completion @abstract This message requests to open a session on the device. @discussion This request will execute the completion handler provided upon return. @note The completion block will execute on an any available queue, often this will not be the main queue.
     */
    requestOpenSessionWithOptions$completion$(options: _NSDictionary | null, completion: ((error: _NSError) => void) | null): void;
    /**
     * @method requestCloseSessionWithOptions:completion @abstract This message requests to close a previously opened session on this device. @discussion This request will execute the completion handler provided upon return. @note The completion block will execute on an any available queue, often this will not be the main queue.
     */
    requestCloseSessionWithOptions$completion$(options: _NSDictionary | null, completion: ((error: _NSError) => void) | null): void;
    /**
     * @method requestEjectWithCompletion: @abstract Eject the media, or disconnect the device - if permitted by the device. @discussion This request will execute the completion handler provided upon return. @note The completion block will execute on an any available queue, often this will not be the main queue.
     */
    requestEjectWithCompletion$(completion: ((error: _NSError) => void) | null): void;
    /**
     * @method requestSendMessage:outData:maxReturnDataSize:sendMessageDelegate:didSendMessageSelector:contextInfo: @abstract This method asynchronously sends an arbitrary message with optional data to a device. @discussion This method allows developers to send a private message from a client application to a device module. The response to this command will be delivered using didSendMessageSelector of sendMessageDelegate. The didSendMessageSelector should have the same signature as: - (void)didSendMessage:(UInt32)messageCode inData:(NSData*)data error:(NSError*)error contextInfo:(void*)contextInfo. The content of error returned should be examined to determine if the request completed successfully. @note This method should not be used to send PTP pass-through commands to a PTP camera. Please refer to 'requestSendPTPCommand:outData:sendCommandDelegate:sendCommandDelegate:contextInfo:' defined in ICCameraDevice.h for sending PTP pass-through commands. @note Execution of the delegate callback will occur on the main thread.
     */
    requestSendMessage$outData$maxReturnedDataSize$sendMessageDelegate$didSendMessageSelector$contextInfo$(messageCode: number, data: _NSData, maxReturnedDataSize: number, sendMessageDelegate: NobjcObject, selector: string, contextInfo: Uint8Array | null): void;
    /**
     * @method requestEjectOrDisconnect @abstract Eject the media if permitted by the device, or disconnect from a remote device.
     */
    requestEjectOrDisconnect(): void;
    /**
     * @method requestYield @abstract This message requests the device module in control of this device to yield control. @discussion This message should be used only if the client is planning on communicating with the device directly. The device module may not yield control of the device if it has an open session.
     */
    requestYield(): void;
    /**
     * @property delegate @abstract The delegate to receive messages once a session is opened on the device. @discussion The delegate must conform ICDeviceDelegate protocol. In addition it should respond to selectors defined in ICCameraDeviceDelegate protocol in order to effectively interact with the device object. The messages this delegate can expect to receive are described by these protocols.
     */
    delegate(): _ICDeviceDelegate | null;
    setDelegate$(value: _ICDeviceDelegate | null): void;
    /**
     * @property type @abstract ￼The type of the device as defined by ICDeviceType OR'd with its ICDeviceLocationType. @note The type of this device can be obtained by AND'ing the value retuned by this property with an appropriate ICDeviceTypeMask. @note The location type of this device can be obtained by AND'ing the value retuned by this property with an appropriate ICDeviceLocationTypeMask.
     */
    type(): ICDeviceType;
    /**
     * @property capabilities @abstract ￼The capabilities of the device as reported by the device module.
     */
    capabilities(): _NSArray;
    /**
     * @property name @abstract ￼Name of the device as reported by the device module or by the device transport when a device module is not in control of this device. @note This name may change if the device module overrides the default name of the device reported by the device's transport, or if the name of the filesystem volume mounted by the device is changed by the user.
     */
    name(): _NSString | null;
    /**
     * @property productKind @abstract ￼Type of the device. Possible values are: @"iPhone", @"iPod", @"iPad", @"Camera", @"Scanner"
     */
    productKind(): _NSString | null;
    /**
     * @property icon @abstract ￼Icon image for the device class. If there is no custom icon present from a device manufacturer, this will be a rendered version of the system symbol for the device class. Using a rendered system symbol instead of the systemSymbolName is discouraged.
     */
    icon(): NobjcObject;
    /**
     * @property systemSymbolName @abstract ￼Standard system symbol used to represent the device class. Using the symbol to render an appropriate device icon will ensure proper scaling for high resolution devices.
     */
    systemSymbolName(): _NSString | null;
    /**
     * @property transportType @abstract ￼The transport type used by the device. The possible values are: ICTransportTypeUSB or ICTransportTypeMassStorage.
     */
    transportType(): _NSString | null;
    /**
     * @property UUIDString @abstract ￼A string representation of the Universally Unique ID of the device.
     */
    UUIDString(): _NSString | null;
    /**
     * @property locationDescription @abstract ￼A non-localized location description string for the device. @discussion The value returned in one of the location description strings defined above, or location obtained from the Bonjour TXT record of a network device.
     */
    locationDescription(): NobjcObject;
    /**
     * @property hasOpenSession @abstract ￼Indicates whether the device has an open session.
     */
    hasOpenSession(): boolean;
    /**
     * @property userData @abstract ￼Client convenience bookkeeping object retained by the framework.
     */
    userData(): _NSMutableDictionary | null;
    /**
     * @property modulePath @abstract ￼Filesystem path of the device module that is associated with this device. Camera-specific capabilities are defined in ICCameraDevice.h and scanner-specific capabilities are defined in ICScannerDevice.h.
     */
    modulePath(): NobjcObject;
    /**
     * @property moduleVersion @abstract ￼The bundle version of the device module associated with this device. @note This may change if an existing device module associated with this device is updated or a new device module for this device is installed.
     */
    moduleVersion(): NobjcObject;
    /**
     * @property serialNumberString @abstract ￼The serial number of the device. This will be NULL if the device does not provide a serial number.
     */
    serialNumberString(): NobjcObject;
    /**
     * @property usbLocationID @abstract ￼The USB location of which the device is occupying.
     */
    usbLocationID(): number;
    /**
     * @property usbProductID @abstract ￼The USB PID associated with the device attached.
     */
    usbProductID(): number;
    /**
     * @property usbVendorID @abstract ￼The USB VID associated with the device attached.
     */
    usbVendorID(): number;
    /**
     * @property autolaunchApplicationPath @abstract ￼Filesystem path of an application that is to be automatically launched when this device is added. @discussion This property is unavailable for devices of ICTransportTypeProximity.
     */
    autolaunchApplicationPath(): NobjcObject;
    setAutolaunchApplicationPath$(value: NobjcObject): void;
    /**
     * @property remote @abstract ￼Indicates whether the device is a remote device published by Image Capture device sharing facility. @property name @discussion ￼Name of the device as reported by the device module or by the device transport when a device module is not in control of this device. @note This name may change if the device module overrides the default name of the device reported by the device's transport, or if the name of the filesystem volume mounted by the device is changed by the user.
     */
    remote(): boolean;
    /**
     * @property persistentIDString @abstract ￼A string representation of the persistent ID of the device.
     */
    persistentIDString(): NobjcObject;
    /**
     * @property moduleExecutableArchitecture @abstract Reports the device module servicing the requests executable architecture.
     */
    moduleExecutableArchitecture(): number;
}
