import { Vector3, IIMUData, Quaternion } from "./util";
import { Myo } from "./Myo";
export declare type Direction = "toward_elbow" | "toward_wrist" | undefined;
export declare const enum Arm {
    Left = "left",
    Right = "right",
}
export declare const enum VibrationDuration {
    Short = "short",
    Medium = "medium",
    Long = "long",
}
export declare const enum WarmupState {
    Warm = "warm",
}
export declare const enum LockingPolicy {
    Standard = "standard",
    None = "none",
}
export declare const enum MyoDataType {
    Paired = "paired",
    Pose = "pose",
    Orientation = "orientation",
    EMG = "emg",
    Unlocked = "unlocked",
    Locked = "locked",
    RSSI = "rssi",
    BatteryLevel = "battery_level",
    ArmSynced = "arm_synced",
    ArmUnsynced = "arm_unsynced",
    Connected = "connected",
    Disconnected = "disconnected",
    WarmupCompleted = "warmup_completed",
}
export interface IMyoDto {
    type: MyoDataType;
    timestamp: number;
    mac_address: string;
    name: string;
    myo: string;
}
export interface IBatteryDto extends IMyoDto {
    type: MyoDataType.BatteryLevel;
    battery_level: number;
    timestamp: number;
}
export interface IRssiDto extends IMyoDto {
    type: MyoDataType.RSSI;
    rssi: number;
    timestamp: number;
}
export interface IVersionDto extends IMyoDto {
    type: MyoDataType.Connected;
    version: string[] | number[];
}
export interface IArmDto extends IMyoDto {
    type: MyoDataType.ArmSynced;
    arm: Arm;
    x_direction: Direction;
    warmup_state: string;
}
export declare type EMGPodsTuple = [number, number, number, number, number, number, number, number];
export interface IEmgDto extends IMyoDto {
    type: MyoDataType.EMG;
    timestamp: number;
    emg: EMGPodsTuple;
}
export interface IOrientationDto extends IMyoDto {
    type: MyoDataType.Orientation;
    timestamp: number;
    orientation: Quaternion;
    accelerometer: [number, number, number];
    gyroscope: [number, number, number];
}
export declare const enum Pose {
    Rest = "rest",
    FingersSpread = "fingers_spread",
    WaveIn = "wave_in",
    WaveOut = "wave_out",
    Fist = "fist",
    DoubleTap = "double_tap",
}
export interface IPoseDto extends IMyoDto {
    type: MyoDataType.Pose;
    pose: Pose;
}
export interface ICommand {
    command: string;
    myo?: string;
    type?: string;
}
export declare const enum MMEvent {
    Ready = "ready",
    SocketClosed = "socket_closed",
    PoseRest = "rest",
    PoseFingersSpreadOff = "fingers_spread_off",
    PoseWaveInOff = "wave_in_off",
    PoseWaveOutOff = "wave_out_off",
    PoseFistOff = "fist_off",
    PoseDoubleTapOff = "double_tap_off",
    PoseEnter = "pose",
    PoseLeave = "pose_off",
    Orientation = "orientation",
    Accelerometer = "accelerometer",
    Gyroscope = "gyroscope",
    IMU = "imu",
    ZeroOrientation = "zero_orientation",
    EMG = "emg",
    BluetoothStrength = "bluetooth_strength",
    RSSI = "rssi",
    BatteryLevel = "battery_level",
    Status = "status",
    WarmupCompleted = "warmup_completed",
    Paired = "paired",
    Disconnected = "disconnected",
    Connected = "connected",
    Locked = "locked",
    ArmSynced = "arm_synced",
    ArmUnsynced = "arm_unsynced",
}
export declare function isMMStatusEvent(event: string): boolean;
export declare type MMStatusEvent = MMEvent.Status | MMEvent.WarmupCompleted | MMEvent.Paired | MMEvent.Disconnected | MMEvent.Connected | MMEvent.Locked | MMEvent.ArmSynced | MMEvent.ArmUnsynced;
export declare type MMPoseOffEvent = MMEvent.PoseDoubleTapOff | MMEvent.PoseFingersSpreadOff | MMEvent.PoseWaveInOff | MMEvent.PoseWaveOutOff | MMEvent.PoseFistOff;
export declare type MCBEmpty = (myo: Myo | undefined) => void;
export declare type MCBPose = (myo: Myo | undefined, pose: Pose) => void;
export declare type MCBEvent = (myo: Myo | undefined, ev: Event) => void;
export declare type MCBCloseEvent = (myo: Myo | undefined, ev: CloseEvent) => void;
export declare type MCBOrientation = (myo: Myo | undefined, orientation: Quaternion, t: number) => void;
export declare type MCBAcceleration = (myo: Myo | undefined, acceleration: Vector3, t: number) => void;
export declare type MCBGyroscope = (myo: Myo | undefined, gyroscope: Vector3, t: number) => void;
export declare type MCBIMU = (myo: Myo | undefined, imuData: IIMUData, t: number) => void;
export declare type MCBEMG = (myo: Myo | undefined, emg: EMGPodsTuple, t: number) => void;
export declare type MCBBluetoothStrength = (myo: Myo | undefined, strength: number, t: number) => void;
export declare type MCBRSSI = (myo: Myo | undefined, rssi: number, t: number) => void;
export declare type MCBBatteryLevel = (myo: Myo | undefined, level: number, t: number) => void;
export declare type MCBStatus = (myo: Myo | undefined, data: IMyoDto, t: number) => void;
export declare type MyoCallback = (myo: Myo | undefined, ...args: any[]) => void;
