3#ifdef VRPN_INCLUDE_THALMICLABSMYO
22vrpn_Tracker_ThalmicLabsMyo::vrpn_Tracker_ThalmicLabsMyo(
const char *name,
vrpn_Connection *c,
bool useLock, ARMSIDE armSide) :
36 hub->setLockingPolicy(useLock ? myo::Hub::lockingPolicyStandard : myo::Hub::lockingPolicyNone);
37 hub->addListener(
this);
46 catch (
const std::exception& e) {
47 std::cerr <<
"Error: " << e.what() << std::endl;
52vrpn_Tracker_ThalmicLabsMyo::~vrpn_Tracker_ThalmicLabsMyo()
58 fprintf(stderr,
"vrpn_Tracker_ThalmicLabsMyo::~vrpn_Tracker_ThalmicLabsMyo(): delete failed\n");
64void vrpn_Tracker_ThalmicLabsMyo::mainloop() {
79 _analogChanged =
false;
83void vrpn_Tracker_ThalmicLabsMyo::_report_lock() {
91void vrpn_Tracker_ThalmicLabsMyo::onPair(myo::Myo* myo, uint64_t timestamp, myo::FirmwareVersion firmwareVersion)
93 std::cout <<
"Paired with Myo." << std::endl;
94 myo->vibrate(myo->vibrationShort);
97void vrpn_Tracker_ThalmicLabsMyo::onConnect(myo::Myo* myo, uint64_t timestamp, myo::FirmwareVersion firmwareVersion)
99 std::cout <<
"Myo Connected." << std::endl;
100 myo->vibrate(myo->vibrationShort);
103void vrpn_Tracker_ThalmicLabsMyo::onDisconnect(myo::Myo* myo, uint64_t timestamp)
105 std::cout <<
"Myo disconnected." << std::endl;
110void vrpn_Tracker_ThalmicLabsMyo::onPose(myo::Myo* myo, uint64_t timestamp, myo::Pose pose)
121 buttons[0] = _locked;
123 for (
int i = 1; i < libmyo_num_poses + 1; ++i)
125 buttons[pose.type() + 1] = 1;
130void vrpn_Tracker_ThalmicLabsMyo::onArmSync(myo::Myo* myo, uint64_t timestamp, myo::Arm arm, myo::XDirection xDirection)
132 std::cout <<
"Myo on arm : " << (arm == myo::armLeft ?
"Left." :
"Right.") << std::endl;
133 if (_armSide == ARMSIDE::ANY || (_armSide == ARMSIDE::RIGHT && arm == myo::armRight) || (_armSide == ARMSIDE::LEFT && arm == myo::armLeft))
135 std::cout <<
"Myo : " << d_servicename <<
" accepted" << std::endl;
136 myo->vibrate(myo->vibrationShort);
141 std::cout <<
"Myo : " << d_servicename <<
" NOT accepted : wrong arm detected" << std::endl;
146void vrpn_Tracker_ThalmicLabsMyo::onArmUnsync(myo::Myo* myo, uint64_t timestamp)
150 std::cout <<
"Myo : " << d_servicename <<
" removed from arm."<< std::endl;
151 myo->vibrate(myo->vibrationLong);
155void vrpn_Tracker_ThalmicLabsMyo::onUnlock(myo::Myo* myo, uint64_t timestamp)
163void vrpn_Tracker_ThalmicLabsMyo::onLock(myo::Myo* myo, uint64_t timestamp)
171void vrpn_Tracker_ThalmicLabsMyo::onOrientationData(myo::Myo* myo, uint64_t timestamp,
const myo::Quaternion<float>& rotation)
183 d_quat[0] = rotation.x();
184 d_quat[1] = rotation.y();
185 d_quat[2] = rotation.z();
186 d_quat[3] = rotation.w();
191 q_to_euler(euler, d_quat);
192 channel[ANALOG_ROTATION_X] = euler[Q_ROLL];
193 channel[ANALOG_ROTATION_Y] = euler[Q_PITCH];
194 channel[ANALOG_ROTATION_Z] = euler[Q_YAW];
200 fprintf(stderr,
"Thalmic Lab's myo tracker: can't write message: tossing\n");
203 _analogChanged =
true;
206void vrpn_Tracker_ThalmicLabsMyo::onAccelerometerData(myo::Myo* myo, uint64_t timestamp,
const myo::Vector3<float>& accel)
223 channel[ANALOG_ACCEL_X] = accel[0];
224 channel[ANALOG_ACCEL_Y] = accel[1];
225 channel[ANALOG_ACCEL_Z] = accel[2];
228 int len = encode_acc_to(msgbuf);
230 fprintf(stderr,
"Thalmic Lab's myo tracker: can't write message: tossing\n");
232 _analogChanged =
true;
235void vrpn_Tracker_ThalmicLabsMyo::onGyroscopeData(myo::Myo* myo, uint64_t timestamp,
const myo::Vector3<float>& gyro)
244 channel[ANALOG_GYRO_X] = gyro[0];
245 channel[ANALOG_GYRO_Y] = gyro[1];
246 channel[ANALOG_GYRO_Z] = gyro[2];
248 _analogChanged =
true;
virtual void report_changes(vrpn_uint32 class_of_service=vrpn_CONNECTION_LOW_LATENCY, const struct timeval time=vrpn_ANALOG_NOW)
Send a report only if something has changed (for servers) Optionally, tell what time to stamp the val...
Generic connection class not specific to the transport mechanism.
virtual int encode_to(char *buf)
const vrpn_uint32 vrpn_CONNECTION_LOW_LATENCY
double vrpn_TimevalDurationSeconds(struct timeval endT, struct timeval startT)
Return the number of seconds between startT and endT as a floating-point value.
#define vrpn_gettimeofday