5. About the eteeDongle Serial Communicationο
Data received from an eteeDongle can be either an etee data packet or lines of text written as a response to a user command or a hardware/firmware event. A data packet ends with a sequence 0xFFFF, while lines of text end with \r\n. These sequences should be used as delimiters when reading data from an etee serial.
The user can communicate with the eteeControllers through commands. An example of etee commands is starting and stopping data streams.
5.1. etee Packet Elementsο
Each etee packet corresponds to one reading of data from left or right eteeController. One packet of data is 44 bytes long in total. This includes 42 bytes for eteeController data and 2 delimiter bytes at the end of the packet. The packet delimiter is the sequence x0FFFF. A data packet contains tactile data, IMU measurements and device state information.
The following list describes the etee packet with parts grouped logically. The table below shows how and where the data appears in the packet. For more details on the sensor locations within the device, see 1. Overview.
5.1.1. Tactile Dataο
Finger data β For each of thumb, index, middle, ring, pinky:
{finger}_pull (uint) β First analog range corresponding to softer pressure of a finger, usually indicative of finger flexion.
{finger}_force (uint) β Second analog range corresponding to harder pressure of a finger, usually indicating finger squeeze.
{finger}_touched (bool) β Boolean indicating a light touch of a finger on the eteeController.
{finger}_clicked (bool) β Boolean indicating a harder press of a finger on the eteeController.
Trackpad:
trackpad_x (uint) β X (horizontal) coordinate of the estimated thumb position on a trackpad.
trackpad_y (uint) β Y (vertical) coordinate of the estimated thumb position on a trackpad.
trackpad_pull (uint) β First analog pressure value corresponding to light pressure of a thumb on the trackpad.
trackpad_force (uint) β Second analog pressure value corresponding to hard press of a thumb on the trackpad.
trackpad_touched (bool) β Boolean indicating a light touch of a thumb on the trackpad.
trackpad_clicked (bool) β Boolean indicating a harder press of a thumb on the trackpad.
Slider (Integrated under the LED light):
slider_value (uint) β Y (vertical) coordinate of the estimated touch position on the slider.
slider_touched (bool) β Boolean indicating that the slider (any part) was touched.
slider_up_touched (bool) β Boolean indicating that the upper part of the slider was touched.
slider_down_touched (bool) β Boolean indicating that the lower part of the slider was touched.
Tracker β Optional: If a tracker is attached to a eteeController:
tracker_on (bool) β Boolean indicating that a tracker is connected to the eteeController.
proximity_value (uint) β Analog value corresponding to proximity to the trackerβs sensor.
proximity_touched (bool) β Boolean indicating that a trackerβs proximity sensor is at touch level.
proximity_clicked (bool) β Boolean indicating that a trackerβs proximity sensor is at click level.
5.1.2. Gesturesο
Grip Gesture β Gesture triggered when squeezing all fingers around the eteeController. A grip gesture is defined by:
grip_pull (uint) β First analog pressure range corresponding to light grip.
grip_force (uint) β Second analog pressure range corresponding to hard grip.
grip_touched (bool) β Light grip around the eteeController.
grip_clicked (bool) β Grip gesture triggered.
Pinch Gesture β Gesture with trackpad/thumb and index fingers closed on the eteeController. There are 2 variations of pinch: trackpad (pinch with trackpad and index finger) and thumbfinger (pinch with thumb finger and index finger). A pinch gesture is defined by:
pinch_{variation}_pull (uint) β Analog pressure range for the pinch gesture.
pinch_{variation}_clicked (bool) β Pinch gesture variation triggered.
Point Gesture β Gesture with index finger extended and the others closed on the eteeController. There are 2 variations of point: exclude_trackpad (trackpad must not be touched) and independent (trackpad can be used alongside the gesture). A point gesture is defined by:
point_{variation}_clicked (bool) β Point gesture variation triggered.
5.1.3. Inertial Measuring Units (IMU)ο
IMU Data β For each of x, y and z components:
accel_{component} (int) β Acceleration data from the accelerometer.
gyro_{component} (int) β Angular acceleration data from the gyroscope.
mag_{component} (int) β Magnetic flux density data from the magnetometer.
5.1.4. Device Stateο
is_right_hand (bool) β Boolean indicating whether the data packet comes from the right (1) or the left (0) eteeController.
system_button (bool) β System button pressed.
5.1.5. Battery Stateο
battery_level (uint) β Battery fuel gauge level.
battery_charging (bool) β Boolean indicating if the device is plugged in and charging (true) or not (false).
battery_charging_complete (bool) β Boolean indicating if the device has finished charging (true) or not (false).
5.2. Data Packet Structureο
The location of the parameters in the data packet can be found in the table below.
Note: When parsing the data, the parameter location within the data packet is given as follows: bit_offset (byte, bit), length_in_bits.
Location |
Name |
Type |
Range |
---|---|---|---|
0 (0, 0), 1 |
system_button |
bool |
0 β 1 |
1 (0, 1), 1 |
trackpad_clicked |
bool |
0 β 1 |
2 (0, 2), 1 |
trackpad_touched |
bool |
0 β 1 |
3 (0, 3), 1 |
thumb_clicked |
bool |
0 β 1 |
4 (0, 4), 1 |
index_clicked |
bool |
0 β 1 |
5 (0, 5), 1 |
middle_clicked |
bool |
0 β 1 |
6 (0, 6), 1 |
ring_clicked |
bool |
0 β 1 |
7 (0, 7), 1 |
pinky_clicked |
bool |
0 β 1 |
8 (1, 0), 1 |
thumb_touched |
bool |
0 β 1 |
9 (1, 1), 7 |
thumb_pull |
uint |
0 β 126 |
16 (2, 0), 1 |
index_touched |
bool |
0 β 1 |
17 (2, 1), 7 |
index_pull |
uint |
0 β 126 |
24 (3, 0), 1 |
middle_touched |
bool |
0 β 1 |
25 (3, 1), 7 |
middle_pull |
uint |
0 β 126 |
32 (4, 0), 1 |
ring_touched |
bool |
0 β 1 |
33 (4, 1), 7 |
ring_pull |
uint |
0 β 126 |
40 (5, 0), 1 |
pinky_touched |
bool |
0 β 1 |
41 (5, 1), 7 |
pinky_pull |
uint |
0 β 126 |
48 (6, 0), 8 |
trackpad_x |
int |
0 β 255 |
56 (7, 0), 8 |
trackpad_y |
uint |
0 β 255 |
64 (8, 0), 1 |
proximity_touch |
bool |
0 β 1 |
65 (8, 1), 7 |
proximity_value |
uint |
0 β 126 |
72 (9, 0), 1 |
slider_touched |
bool |
0 β 1 |
72 (9, 1), 7 |
slider_value |
uint |
0 β 126 |
80 (10, 0), 1 |
grip_touched |
bool |
0 β 1 |
80 (10, 1), 7 |
grip_pull |
uint |
0 β 126 |
88 (11, 0), 1 |
grip_clicked |
bool |
0 β 1 |
89 (11, 1), 1 |
proximity_clicked |
bool |
0 β 1 |
90 (11, 2), 1 |
tracker_on |
bool |
0 β 1 |
91 (11, 3), 1 |
is_right_hand |
bool |
0 β 1 |
92 (11, 4), 1 |
battery_charging |
bool |
0 β 1 |
93 (11, 5), 1 |
slider_up_touched |
bool |
0 β 1 |
94 (11, 6), 1 |
slider_down_touched |
bool |
0 β 1 |
96 (12, 0), 1 |
battery_charge_complete |
bool |
0 β 1 |
97 (12, 1), 7 |
battery_level |
uint |
0 β 100 |
104 (13, 0), 1 |
point_exclude_trackpad_clicked |
bool |
0 β 1 |
105 (13, 1), 7 |
trackpad_pull |
uint |
0 β 126 |
112 (14, 0), 1 |
point_independent_clicked |
bool |
0 β 1 |
113 (14, 1), 7 |
grip_force |
uint |
0 β 126 |
120 (15, 0), 1 |
pinch_trackpad_clicked |
bool |
0 β 1 |
121 (15, 1), 7 |
pinch_trackpad_pull |
uint |
0 β 126 |
128 (16, 0), 1 |
pinch_thumbfinger_clicked |
bool |
0 β 1 |
129 (16, 1), 7 |
pinch_thumbfinger_pull |
uint |
0 β 126 |
137 (17, 1), 7 |
trackpad_force |
uint |
0 β 126 |
145 (18, 1), 7 |
thumb_force |
uint |
0 β 126 |
153 (19, 1), 7 |
index_force |
uint |
0 β 126 |
161 (20, 1), 7 |
middle_force |
uint |
0 β 126 |
169 (21, 1), 7 |
ring_force |
uint |
0 β 126 |
177 (22, 1), 7 |
pinky_force |
uint |
0 β 126 |
184 (23, 0), 16 |
accel_x |
int |
-32768 β 32767 |
200 (25, 0), 16 |
accel_y |
int |
-32768 β 32767 |
216 (27, 0), 16 |
accel_z |
int |
-32768 β 32767 |
232 (29, 0), 16 |
mag_x |
int |
-32768 β 32767 |
248 (31, 0), 16 |
mag_y |
int |
-32768 β 32767 |
264 (33, 0), 16 |
mag_z |
int |
-32768 β 32767 |
280 (35, 0), 16 |
gyro_x |
int |
-32768 β 32767 |
296 (37, 0), 16 |
gyro_y |
int |
-32768 β 32767 |
312 (39, 0), 16 |
gyro_z |
int |
-32768 β 32767 |
328 (41, 0), 8 |
unused_byte |
n/a |
n/a |
The location of specific values in the data packet is defined in a YAML file inside of the etee Python API package.
5.3. Commandsο
Commands are sent to etee in the format PF
+ CM
[=PM]
. Where PF is a prefix of the command which can be one of the following
BP β command is directed to both left and right eteeControllers.
LP β command is directed to the left etee only.
RP β command is directed to the right etee only.
CM is a command name. The optional PM are the command parameters. The table below lists commands supported by the API library.
Command |
Description |
Response |
---|---|---|
AG |
Start etee data stream |
OK |
AS |
Stop etee data stream |
OK |
RB |
Quick calibration - Resets the signal baselines for all sensors. See 4.6. Resetting Sensor Baselines. |
OK |
For example, to start a data stream in the left controller, the command would be: LP+AG
.
5.4. Event Printsο
Event prints are lines of text written to serial as a response to hardware/firmware events. The API library provides the following event prints.
Event |
|
---|---|
L connection complete |
Left eteeController detected |
R connection complete |
Right eteeController detected |
L disconnected |
Left eteeController disconnected |
R disconnected |
Right eteeController disconnected |