inline void Hub::onDeviceEvent(libmyo_event_t event) { libmyo_myo_t opaqueMyo = libmyo_event_get_myo(event); Myo* myo = lookupMyo(opaqueMyo); if (!myo && libmyo_event_get_type(event) == libmyo_event_paired) { myo = addMyo(opaqueMyo); } if (!myo) { // Ignore events for Myos we don't know about. return; } for (std::vector<DeviceListener*>::iterator I = _listeners.begin(), IE = _listeners.end(); I != IE; ++I) { DeviceListener* listener = *I; listener->onOpaqueEvent(event); uint64_t time = libmyo_event_get_timestamp(event); switch (libmyo_event_get_type(event)) { case libmyo_event_paired: { FirmwareVersion version = {libmyo_event_get_firmware_version(event, libmyo_version_major), libmyo_event_get_firmware_version(event, libmyo_version_minor), libmyo_event_get_firmware_version(event, libmyo_version_patch), libmyo_event_get_firmware_version(event, libmyo_version_hardware_rev)}; listener->onPair(myo, time, version); break; } case libmyo_event_unpaired: listener->onUnpair(myo, time); break; case libmyo_event_connected: { FirmwareVersion version = {libmyo_event_get_firmware_version(event, libmyo_version_major), libmyo_event_get_firmware_version(event, libmyo_version_minor), libmyo_event_get_firmware_version(event, libmyo_version_patch), libmyo_event_get_firmware_version(event, libmyo_version_hardware_rev)}; listener->onConnect(myo, time, version); break; } case libmyo_event_disconnected: listener->onDisconnect(myo, time); break; case libmyo_event_arm_synced: listener->onArmSync(myo, time, static_cast<Arm>(libmyo_event_get_arm(event)), static_cast<XDirection>(libmyo_event_get_x_direction(event)), libmyo_event_get_rotation_on_arm(event), static_cast<WarmupState>(libmyo_event_get_warmup_state(event))); break; case libmyo_event_arm_unsynced: listener->onArmUnsync(myo, time); break; case libmyo_event_unlocked: listener->onUnlock(myo, time); break; case libmyo_event_locked: listener->onLock(myo, time); break; case libmyo_event_orientation: listener->onOrientationData(myo, time, Quaternion<float>(libmyo_event_get_orientation(event, libmyo_orientation_x), libmyo_event_get_orientation(event, libmyo_orientation_y), libmyo_event_get_orientation(event, libmyo_orientation_z), libmyo_event_get_orientation(event, libmyo_orientation_w))); listener->onAccelerometerData(myo, time, Vector3<float>(libmyo_event_get_accelerometer(event, 0), libmyo_event_get_accelerometer(event, 1), libmyo_event_get_accelerometer(event, 2))); listener->onGyroscopeData(myo, time, Vector3<float>(libmyo_event_get_gyroscope(event, 0), libmyo_event_get_gyroscope(event, 1), libmyo_event_get_gyroscope(event, 2))); break; case libmyo_event_pose: listener->onPose(myo, time, Pose(static_cast<Pose::Type>(libmyo_event_get_pose(event)))); break; case libmyo_event_rssi: listener->onRssi(myo, time, libmyo_event_get_rssi(event)); break; case libmyo_event_battery_level: listener->onBatteryLevelReceived(myo, time, libmyo_event_get_battery_level(event)); break; case libmyo_event_emg: { int8_t emg[] = { libmyo_event_get_emg(event, 0), libmyo_event_get_emg(event, 1), libmyo_event_get_emg(event, 2), libmyo_event_get_emg(event, 3), libmyo_event_get_emg(event, 4), libmyo_event_get_emg(event, 5), libmyo_event_get_emg(event, 6), libmyo_event_get_emg(event, 7) }; listener->onEmgData(myo, time, emg); break; } case libmyo_event_warmup_completed: { listener->onWarmupCompleted(myo, time, static_cast<WarmupResult>(libmyo_event_get_warmup_result(event))); break; } } } }
inline void Hub::onDeviceEvent(libmyo_event_t event) { libmyo_myo_t opaqueMyo = libmyo_event_get_myo(event); Myo* myo = lookupMyo(opaqueMyo); if (!myo && libmyo_event_get_type(event) == libmyo_event_paired) { myo = addMyo(opaqueMyo); } if (!myo) { // Ignore events for Myos we don't know about. return; } for (std::vector<DeviceListener*>::iterator I = _listeners.begin(), IE = _listeners.end(); I != IE; ++I) { DeviceListener* listener = *I; listener->onOpaqueEvent(event); uint64_t time = libmyo_event_get_timestamp(event); switch (libmyo_event_get_type(event)) { case libmyo_event_paired: { FirmwareVersion version = {libmyo_event_get_firmware_version(event, libmyo_version_major), libmyo_event_get_firmware_version(event, libmyo_version_minor), libmyo_event_get_firmware_version(event, libmyo_version_patch), libmyo_event_get_firmware_version(event, libmyo_version_hardware_rev)}; listener->onPair(myo, time, version); break; } case libmyo_event_connected: { FirmwareVersion version = {libmyo_event_get_firmware_version(event, libmyo_version_major), libmyo_event_get_firmware_version(event, libmyo_version_minor), libmyo_event_get_firmware_version(event, libmyo_version_patch), libmyo_event_get_firmware_version(event, libmyo_version_hardware_rev)}; listener->onConnect(myo, time, version); break; } case libmyo_event_disconnected: listener->onDisconnect(myo, time); break; case libmyo_event_arm_recognized: listener->onArmRecognized(myo, time, static_cast<Arm>(libmyo_event_get_arm(event)), static_cast<XDirection>(libmyo_event_get_x_direction(event))); break; case libmyo_event_arm_lost: listener->onArmLost(myo, time); break; case libmyo_event_orientation: listener->onOrientationData(myo, time, Quaternion<float>(libmyo_event_get_orientation(event, libmyo_orientation_x), libmyo_event_get_orientation(event, libmyo_orientation_y), libmyo_event_get_orientation(event, libmyo_orientation_z), libmyo_event_get_orientation(event, libmyo_orientation_w))); listener->onAccelerometerData(myo, time, Vector3<float>(libmyo_event_get_accelerometer(event, 0), libmyo_event_get_accelerometer(event, 1), libmyo_event_get_accelerometer(event, 2))); listener->onGyroscopeData(myo, time, Vector3<float>(libmyo_event_get_gyroscope(event, 0), libmyo_event_get_gyroscope(event, 1), libmyo_event_get_gyroscope(event, 2))); break; case libmyo_event_pose: listener->onPose(myo, time, Pose(static_cast<Pose::Type>(libmyo_event_get_pose(event)))); break; case libmyo_event_rssi: listener->onRssi(myo, time, libmyo_event_get_rssi(event)); break; } } }