-
Notifications
You must be signed in to change notification settings - Fork 54
Home
Andrey Voroshkov edited this page Apr 6, 2017
·
39 revisions
Welcome to the Chorus-RF-Laptimer wiki!
Each Solo device Receives and Transmits data. Here's how the communication flow is organized from a Solo device standpoint.
- Each Solo device connected into a Chorus has its ID (order number), which is assigned dynamically upon initialization of the Chorus device from a communicating application. Normally enumeration starts with 0.
- Each data chunk is a plain string terminated with "\n" character (ASCII=10) and having a predefined structure.
- There are 3 types of data chunks:
- Requests
- Responses
- Pass-through data
- Almost each Request produces a Response
- Pass-through data is either a request to a different Solo device, or response which needs to pass through current device to reach the Bluetooth dongle and be transmitted to App.
There are 3 types of requests:
- Device enumeration: (3 characters)
"N" + <first_ID> + "\n"
. Example:"N0\n"
- Command/Request: (4 characters)
"R" + <device_ID> + <command> + "\n"
. Example:"R1T\n"
- Calibration: (11 characters)
"C" + <device_ID> + <time_long_HEX_value> + "\n"
. Example:"C00000010A\n"
In any "R" request: <device_ID>
may be set to "*"
, which means the request is addressed to all devices (broadcast), and each should provide a response. Example: "R*A\n"
Note: for broadcast requests the order of responses from different devices is not defined. Example: "S1R1\nS0R1\nS2R1\n"
Response structure: "S" + <device_ID> + <response_type> + <data> + "\n"
Each response type has its own predefined length depending on size of data to be transmitted.
Description | Request | Response | Description | Example (request -> response) |
---|---|---|---|---|
Enumeration | ----- | ----- | ----- | ----- |
Enumerate Devices | N |
N |
Number of Devices |
N0\n -> N3\n (3 devices found) |
Calibration | ----- | ----- | ----- | ----- |
Set Calibration Value | C |
i |
Calibration State (half-byte, 1 = Calibrated, 0 = Not Calibrated) |
C100000006\n -> S1i1\n
|
Commands | ----- | ----- | ----- | ----- |
Start Race | R |
R |
Race Status (half-byte; 1 = On, 0 = Off) |
R*R\n -> S0R1\nS1R1\n...
|
End Race | r |
R |
Race Status (half-byte; 1 = On, 0 = Off) |
R*r\n -> S0R0\nS1R0\n...
|
Increase Min Lap Time | M |
M |
Minimal Lap Time (1 byte, in seconds) |
R0M\n -> S0M0A\n
|
Decrease Min Lap Time | m |
M |
Minimal Lap Time (1 byte, in seconds) |
R1m\n -> S1M0A\n
|
Next RF Band | B |
B |
Current Band (half-byte; 0 - 5) |
R0B\n -> S0B5\n
|
Previous RF Band | b |
B |
Current Band (half-byte; 0 - 5) |
R0b\n -> S0B4\n
|
Next Channel | C |
C |
Current Channel (half-byte; 0 - 7) |
R0C\n -> S0C5\n
|
Previous Channel | c |
C |
Current Channel (half-byte; 0 - 7) |
R0c\n -> S0C4\n
|
Increase Threshold | T |
T |
Current Threshold (2 bytes) |
R0T\n -> S0T010A\n
|
Decrease Threshold | t |
T |
Current Threshold (2 bytes) |
R0t\n -> S0T0109\n
|
Set/Clear Threshold | S |
T |
Current Threshold (2 bytes) |
R0S\n -> S0T0000\n
|
Enable/Disable Sounds | D |
D |
Sound State (half-byte; 1 = On, 0 = Off) |
R1D\n -> S1D0\n
|
Start Calibration | I |
No Response |
R*I\n -> |
|
End Calibration | i |
I |
Calibration Time (4 bytes) |
R*i\n -> S1I00002710\nS0I00002715\n...
|
RSSI Monitor On | V |
V |
RSSI Monitor State (half-byte; 1 = On, 0 = Off) |
R0V\n -> S0V1\n
|
RSSI Monitor Off | v |
V |
RSSI Monitor State (half-byte; 1 = On, 0 = Off) |
R0v\n -> S0V0\n
|
Skip/Enable First Lap | F |
F |
First Lap State (half-byte; 1 = Skip, 0 = Count) |
R*F\n -> S0F1\nS1F0\n...
|
--- | --- | S |
Current RSSI Value; sent each 100ms when RSSI Monitor is On (2 bytes) | -> S0S0111\n
|
--- | --- | L |
Lap Time; last Lap Time is automatically sent in race mode when drone passes the gate; All Lap Times sent as a response to Bulk Device State (see below); Format: (1 byte: lap number + 4 bytes: lap time) | -> L010000025C\n |
Bulk Device State | A |
CRMTSLDBVF + X
|
All states corresponding to specified letters (see above) plus 'X' meaning the end of state transmission for each device |
R0A\n -> S0C2\nS0R1\nS0M10\n...S0X1\n
|