-
Notifications
You must be signed in to change notification settings - Fork 0
/
SupperwareInterface.cpp
125 lines (104 loc) · 3.47 KB
/
SupperwareInterface.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
//
// m1-orientationmanager
// Copyright © 2022 Mach1. All rights reserved.
//
#include <JuceHeader.h>
#include "SupperwareInterface.h"
//==============================================================================
SupperwareInterface::SupperwareInterface() :
listener(nullptr),
trackerDriver(this),
headMatrix(),
midiState(Midi::State::Unavailable)
{
}
SupperwareInterface::~SupperwareInterface()
{
}
const Midi::TrackerDriver& SupperwareInterface::getTrackerDriver() const
{
return trackerDriver;
}
//----------------------------------------------------------------------
const HeadMatrix& SupperwareInterface::getHeadMatrix() const
{
return headMatrix;
}
//----------------------------------------------------------------------
void SupperwareInterface::trackerMidiConnectionChanged(Midi::State newState)
{
if (newState != midiState)
{
midiState = newState;
if ((midiState == Midi::State::Connected) || (midiState == Midi::State::Bootloader))
{
}
else if (midiState == Midi::State::Available)
{
headMatrix.zero();
}
else // Unavailable
{
headMatrix.zero();
}
//if (listener) listener->trackerChanged(headMatrix);
}
}
//----------------------------------------------------------------------
void SupperwareInterface::trackerOrientation(float yawRadian, float pitchRadian, float rollRadian)
{
headMatrix.setOrientationYPR(yawRadian, pitchRadian, rollRadian);
//if (listener) listener->trackerChanged(headMatrix);
//update public orientation
currentOrientation.clear();
currentOrientation.push_back(juce::radiansToDegrees(yawRadian));
currentOrientation.push_back(juce::radiansToDegrees(pitchRadian));
currentOrientation.push_back(juce::radiansToDegrees(rollRadian));
}
void SupperwareInterface::trackerOrientationQ(float qw, float qx, float qy, float qz)
{
headMatrix.setOrientationQuaternion(qw, qx, qy, qz);
//if (listener) listener->trackerChanged(headMatrix);
//update public orientation
currentOrientation.clear();
currentOrientation.push_back(qw);
currentOrientation.push_back(qx);
currentOrientation.push_back(qy);
currentOrientation.push_back(qz);
}
void SupperwareInterface::setChirality(bool isRightEarChirality)
{
// Used to indicate how the IMU is mounted on the head
// chirality = true | USB connector is on the right side
// chirality = false | USB connector is on the left side
trackerDriver.setChirality(isRightEarChirality);
}
void SupperwareInterface::calibrateCompass()
{
// Used to calibrate the compass, ideally called while still and facing "forward"
trackerDriver.calibrateCompass();
}
void SupperwareInterface::trackerZero()
{
trackerDriver.zero();
}
//----------------------------------------------------------------------
void SupperwareInterface::connectSupperware()
{
// connect/disconnect
if (midiState == Midi::State::Available || midiState == Midi::State::Bootloader) {
trackerDriver.connect();
trackerDriver.turnOn(true, true);
} else if (midiState == Midi::State::Connected) {
trackerDriver.turnOn(true, true);
} else {
// Error: not available
}
}
void SupperwareInterface::setListener(Listener* l)
{
listener = l;
}
void SupperwareInterface::timerCallback()
{
}