UNPKG

myo-ts

Version:

Typescript and Javascript bindings for Myo, refactored to provide a clean interface

233 lines (202 loc) 5.25 kB
import { Vector3, IIMUData, Quaternion } from "./util" import { Myo } from "./Myo" // This stands for in which direction the thalmic logo on the device is pointing. export type Direction = "toward_elbow" | "toward_wrist" | undefined export const enum Arm { Left = "left", Right = "right" } export const enum VibrationDuration { Short = "short", Medium = "medium", Long = "long" } export const enum WarmupState { Warm = "warm" } export const enum LockingPolicy { Standard = "standard", None = "none" } export 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 // connectIndex } 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 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 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 const enum MMEvent { // Manager Events Ready = "ready", SocketClosed = "socket_closed", // Device Events 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" } const statusEvents = new Set<string>([ MMEvent.Status, MMEvent.WarmupCompleted, MMEvent.Paired, MMEvent.Disconnected, MMEvent.Connected, MMEvent.Locked, MMEvent.ArmSynced, MMEvent.ArmUnsynced ]) export function isMMStatusEvent(event: string) { return statusEvents.has(event) } export type MMStatusEvent = | MMEvent.Status | MMEvent.WarmupCompleted | MMEvent.Paired | MMEvent.Disconnected | MMEvent.Connected | MMEvent.Locked | MMEvent.ArmSynced | MMEvent.ArmUnsynced export type MMPoseOffEvent = | MMEvent.PoseDoubleTapOff | MMEvent.PoseFingersSpreadOff | MMEvent.PoseWaveInOff | MMEvent.PoseWaveOutOff | MMEvent.PoseFistOff export type MCBEmpty = (myo: Myo | undefined) => void export type MCBPose = (myo: Myo | undefined, pose: Pose) => void export type MCBEvent = (myo: Myo | undefined, ev: Event) => void export type MCBCloseEvent = (myo: Myo | undefined, ev: CloseEvent) => void export type MCBOrientation = ( myo: Myo | undefined, orientation: Quaternion, t: number ) => void export type MCBAcceleration = ( myo: Myo | undefined, acceleration: Vector3, t: number ) => void export type MCBGyroscope = ( myo: Myo | undefined, gyroscope: Vector3, t: number ) => void export type MCBIMU = ( myo: Myo | undefined, imuData: IIMUData, t: number ) => void export type MCBEMG = ( myo: Myo | undefined, emg: EMGPodsTuple, t: number ) => void export type MCBBluetoothStrength = ( myo: Myo | undefined, strength: number, t: number ) => void export type MCBRSSI = (myo: Myo | undefined, rssi: number, t: number) => void export type MCBBatteryLevel = ( myo: Myo | undefined, level: number, t: number ) => void export type MCBStatus = (myo: Myo | undefined, data: IMyoDto, t: number) => void export type MyoCallback = (myo: Myo | undefined, ...args: any[]) => void // tslint:disable-line:no-any