///
import { EventEmitter } from 'events';
import { Transport } from '../transport';
import { DAPPort, DAPTransferMode, DAPProtocol, DAPInfoRequest } from './enums';
import { Proxy, DAPOperation } from './';
/**
* @hidden
*/
export declare const DEFAULT_CLOCK_FREQUENCY = 10000000;
/**
* CMSIS-DAP class
* https://www.keil.com/pack/doc/CMSIS/DAP/html/group__DAP__Commands__gr.html
*/
export declare class CmsisDAP extends EventEmitter implements Proxy {
private transport;
private mode;
private clockFrequency;
/**
* Whether the device has been opened
*/
connected: boolean;
/**
* The maximum DAPOperations which can be transferred
*/
operationCount: number;
/**
* The maximum block size which can be transferred
*/
blockSize: number;
private sendMutex;
/**
* CMSIS-DAP constructor
* @param transport Debug transport to use
* @param mode Debug mode to use
* @param clockFrequency Communication clock frequency to use (default 10000000)
*/
constructor(transport: Transport, mode?: DAPProtocol, clockFrequency?: number);
private bufferSourceToUint8Array;
/**
* Switches the CMSIS-DAP unit to use SWD
* http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0316d/Chdhfbhc.html
*/
protected selectProtocol(protocol: DAPProtocol): Promise;
/**
* Send a command
* @param command Command to send
* @param data Data to use
* @returns Promise of DataView
*/
protected send(command: number, data?: BufferSource): Promise;
/**
* Clears the abort register of all error flags
* @param abortMask Optional AbortMask to use, otherwise clears all flags
*/
protected clearAbort(abortMask?: number): Promise;
/**
* Get DAP information
* @param request Type of information to get
* @returns Promise of number or string
*/
dapInfo(request: DAPInfoRequest): Promise;
/**
* Send an SWJ Sequence
* https://www.keil.com/pack/doc/CMSIS/DAP/html/group__DAP__SWJ__Sequence.html
* @param sequence The sequence to send
* @returns Promise
*/
swjSequence(sequence: BufferSource, bitLength?: number): Promise;
/**
* Send an SWJ Clock value
* https://www.keil.com/pack/doc/CMSIS/DAP/html/group__DAP__SWJ__Clock.html
* @param clock The SWJ clock value to send
* @returns Promise
*/
swjClock(clock: number): Promise;
/**
* Read/Write SWJ Pins
* https://www.keil.com/pack/doc/CMSIS/DAP/html/group__DAP__SWJ__Pins.html
* @param pinsOut Pin values to write
* @param pinSelect Maske to select output pins to change
* @param pinWait Time in microseconds to wait for output pin value to stabilize (0 - no wait, 1..3000000)
* @returns Promise
*/
swjPins(pinsOut: number, pinSelect: number, pinWait: number): Promise;
/**
* Send Delay Command
* https://www.keil.com/pack/doc/CMSIS/DAP/html/group__DAP__Delay.html
* @param delay Time to delay in microseconds
* @returns Promise
*/
dapDelay(delay: number): Promise;
/**
* Configure Transfer
* https://www.keil.com/pack/doc/CMSIS/DAP/html/group__DAP__TransferConfigure.html
* @param idleCycles Number of extra idle cycles after each transfer
* @param waitRetry Number of transfer retries after WAIT response
* @param matchRetry Number of retries on reads with Value Match in DAP_Transfer
* @returns Promise
*/
configureTransfer(idleCycles: number, waitRetry: number, matchRetry: number): Promise;
/**
* Connect to target device
* @returns Promise
*/
connect(): Promise;
/**
* Disconnect from target device
* @returns Promise
*/
disconnect(): Promise;
/**
* Reconnect to target device
* @returns Promise
*/
reconnect(): Promise;
/**
* Reset target device
* @returns Promise of whether a device specific reset sequence is implemented
*/
reset(): Promise;
/**
* Transfer data with a single read or write operation
* @param port Port type (debug port or access port)
* @param mode Whether to read or write
* @param register The register to use
* @param value Any value to write
* @returns Promise of any value read
*/
transfer(port: DAPPort, mode: DAPTransferMode, register: number, value?: number): Promise;
/**
* Transfer data with multiple read or write operations
* @param operations The operations to use
* @returns Promise of any values read
*/
transfer(operations: DAPOperation[]): Promise;
/**
* Read a block of data from a single register
* @param port Port type (debug port or access port)
* @param register The register to use
* @returns Promise of values read
*/
transferBlock(port: DAPPort, register: number, count: number): Promise;
/**
* Write a block of data to a single register
* @param port Port type (debug port or access port)
* @param register The register to use
* @param values The values to write
* @returns Promise
*/
transferBlock(port: DAPPort, register: number, values: Uint32Array): Promise;
}