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; } } } }
void Hub::onDeviceEvent(SimEvent simEvent) { std::vector<DeviceListener*>::iterator it; uint64_t timestamp = simEvent.getEventTimestamp(); Myo* myo = lookupMyo(simEvent.getMyoIdentifier()); if (!myo) { return; } FirmwareVersion version; version.firmwareVersionHardwareRev = 1; version.firmwareVersionMajor = 1; version.firmwareVersionMinor = 0; version.firmwareVersionPatch = 1; for (it = listeners.begin(); it != listeners.end(); it++) { DeviceListener* listener = *it; switch (simEvent.getEventType()) { case myoSimEvent::paired: listener->onPair(myo, timestamp, version); break; case myoSimEvent::unpaired: listener->onUnpair(myo, timestamp); break; case myoSimEvent::connected: listener->onConnect(myo, timestamp, version); break; case myoSimEvent::disconnected: listener->onDisconnect(myo, timestamp); break; case myoSimEvent::armRecognized: listener->onArmRecognized(myo, timestamp, simEvent.getArm(), simEvent.getXDirection()); break; case myoSimEvent::armLost: listener->onArmLost(myo, timestamp); break; case myoSimEvent::orientation: { myo::Quaternion<float> orientation = myo::Quaternion<float>(simEvent.getXOrientation(), simEvent.getYOrientation(), simEvent.getZOrientation(), simEvent.getWOrientation()); listener->onOrientationData(myo, timestamp, orientation); myo::Vector3<float> accelerometerData = myo::Vector3<float>(simEvent.getAccelerometerX(), simEvent.getAccelerometerY(), simEvent.getAccelerometerZ()); listener->onAccelerometerData(myo, timestamp, accelerometerData); myo::Vector3<float> gyroData = myo::Vector3<float>(simEvent.getGyroscopeYawPerSecond(), simEvent.getGyroscopePitchPerSecond(), simEvent.getGyroscopeRollPerSecond()); listener->onGyroscopeData(myo, timestamp, gyroData); break; } case myoSimEvent::pose: listener->onPose(myo, timestamp, simEvent.getPose()); break; case myoSimEvent::rssi: listener->onRssi(myo, timestamp, simEvent.getRssi()); break; default: 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; } } }