Exemplo n.º 1
0
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;
        }
        }
    }
}
Exemplo n.º 2
0
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;
        }
    }
}
Exemplo n.º 3
0
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;
        }
    }
}