Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
en:dev:tailcontrol-command-protocol [2024/10/19 16:21] – [Directly Set Servo Position] darkgrueen:dev:tailcontrol-command-protocol [2024/11/09 17:09] (current) darkgrue
Line 6: Line 6:
 All commands are case-sensitive. Trailing whitespace (e.g., `NULL`, `CR`, etc.) are ignored. The space between a command keyword and the parameters is mandatory. All commands are case-sensitive. Trailing whitespace (e.g., `NULL`, `CR`, etc.) are ignored. The space between a command keyword and the parameters is mandatory.
  
-<WRAP round todo>+<WRAP round todo 90%>
 **IMPORTANT NOTICE:** TailCoNTROL and the TailCoNTROL Protocol is still under development. Some commands and features described here relate to a future release and are subject to change at this time, especially EarGear 2 features. **IMPORTANT NOTICE:** TailCoNTROL and the TailCoNTROL Protocol is still under development. Some commands and features described here relate to a future release and are subject to change at this time, especially EarGear 2 features.
 </WRAP> </WRAP>
Line 28: Line 28:
   * TX Characteristic is ''c6612b64-0087-4974-939e-68968ef294b0'', and the   * TX Characteristic is ''c6612b64-0087-4974-939e-68968ef294b0'', and the
   * Battery Voltage is ''b08fed02-0584-40ef-b006-aff7e0d24e13''.   * Battery Voltage is ''b08fed02-0584-40ef-b006-aff7e0d24e13''.
- 
-<WRAP round important> 
-For tail-series v3.6 controller hardware, the battery charging characteristic is unset (charging state is not available). 
-</WRAP> 
- 
  
 The BLE Device Service for the EarGear 2 is ''927dee04-ddd4-4582-8e42-69dc9fbfae66'': The BLE Device Service for the EarGear 2 is ''927dee04-ddd4-4582-8e42-69dc9fbfae66'':
Line 39: Line 34:
   * Battery Voltage is ''54fa919d-e8a8-4841-b280-c5461161304f''.   * Battery Voltage is ''54fa919d-e8a8-4841-b280-c5461161304f''.
  
 +<WRAP round todo 90%>
 +TailCoNTROL will use a new Service and Characteristics UUIDs going forward, to distinguish it from previous firmwares (and to further enforce the “forklift upgrade” required).
 +
 +The BLE Device Service for TailCoNTROL is ''19F8ADE2-D0C6-4C0A-912A-30601D9B3060'':
 +  * RX Characteristic is ''5E4D86AC-EF2F-466F-A857-8776D45FFBC2'' and
 +  * TX Characteristic is ''567A99D6-A442-4AC0-B676-4993BF95F805''.
 +  * Under the standard Device Information Service (DIS, ''0x180A'') is
 +    * Manufacturer Name ''0x2A29'' (''The Mechanical Tail Company Limited''),
 +    * Model Number ''0x2A24'',
 +    * Firmware Revision ''0x2A26'', and
 +    * Hardware Revision ''0x2A27''.
 +  * Under the standard Battery Service UUID (''0x180F'') is
 +    * Battery Percentage ''0x2A19'',
 +    * Battery Voltage is ''E818BDA3-88A7-43C0-8509-6E0BBB6F55D9'', and the
 +    * Charging State (if hardware supported) is ''5073792e-4fc0-45a0-b0a5-78b6c1756c91''.
 +</WRAP>
 +
 +<WRAP round important 90%>
 +For tail-series (MiTail, MiTail Mini, and FlutterWings) v3.6 controller hardware, the battery charging characteristic is unset (charging state is not available).
 +</WRAP>
  
 ===== TailCoNTROL Device Indicators ===== ===== TailCoNTROL Device Indicators =====
Line 220: Line 235:
 ^ Prefix ^ Parameter Type  ^ Range of Values for Moves  ^ ^ Prefix ^ Parameter Type  ^ Range of Values for Moves  ^
 | **U** | User preset number | <1 ... 4> | | **U** | User preset number | <1 ... 4> |
-| **E** | Easing function to apply to Servo 1 | Default is Linear, if not specified.\\ As per [[https://github.com/ArminJo/ServoEasing/blob/bb19cd4cfd9e92fed3b0f91b90a7b2f7dd83094a/src/ServoEasing.h#L296|EaseTypes]];\\ e.g., 0 = Linear (no easing), 129 = Quadratic, 130 = Cubic,  131 = Quartic |+| **E** | Easing function to apply to Servo 1 | Default is Linear (no easing), if not specified.\\ This is the decimal representation of the (hexadecimal) easing type enumeration, as per [[https://github.com/ArminJo/ServoEasing/blob/bb19cd4cfd9e92fed3b0f91b90a7b2f7dd83094a/src/ServoEasing.h#L296|EaseTypes]] (e.g., 0 = Linear, 129 = Quadratic in/out, 130 = Cubic in/out,  131 = Quartic in/out). |
 | **F** | Easing function to apply to Servo 2 | (Same as **E**) | | **F** | Easing function to apply to Servo 2 | (Same as **E**) |
 | **A** | Point for Servo 1 | <0 ... 8>\\ 0 -> 25 degrees\\ 1 -> 41 degrees\\ 2 -> 58 degrees\\ ...\\ 8 -> 160 degrees | | **A** | Point for Servo 1 | <0 ... 8>\\ 0 -> 25 degrees\\ 1 -> 41 degrees\\ 2 -> 58 degrees\\ ...\\ 8 -> 160 degrees |
Line 233: Line 248:
 | **U** | User preset number | <1 ... 4> | | **U** | User preset number | <1 ... 4> |
 | **P** | Number of points in the Glow Tip pattern | <1 ... 32> | | **P** | Number of points in the Glow Tip pattern | <1 ... 32> |
-| **N** | Number of cycles (times the pattern will be repeated) | <0 ... 255> |+| **N** | Number of cycles (times the pattern will be performed) | <0 ... 255> |
 | **A** | Brightness point for Glow Tip | <0 ... 8>\\ 0 -> LEDs off\\ ...\\ 4 -> 50% intensity\\ ...\\ 8-> LEDs max intensity | | **A** | Brightness point for Glow Tip | <0 ... 8>\\ 0 -> LEDs off\\ ...\\ 4 -> 50% intensity\\ ...\\ 8-> LEDs max intensity |
 | **S/L** | Time between the current point and the next (in 20 ms increments)\\ **S** will wait in the current position, then move to the next when the time has elapsed\\ **L** will gradually move from the current position to the next, over the time specified | 0 ... 127 (time * 20 ms) | | **S/L** | Time between the current point and the next (in 20 ms increments)\\ **S** will wait in the current position, then move to the next when the time has elapsed\\ **L** will gradually move from the current position to the next, over the time specified | 0 ... 127 (time * 20 ms) |
Line 257: Line 272:
   * **U1** Store into user preset 1     * **U1** Store into user preset 1  
   * **P2** The move consists of 2 points     * **P2** The move consists of 2 points  
-  * **N3** Repeat the sequence 3 times  +  * **N3** Perform the sequence 3 times  
   * **E0E66** Servo 1 move to Position 1 has no easing, move to Position 2 uses EASE_CUBIC_OUT (0x42)   * **E0E66** Servo 1 move to Position 1 has no easing, move to Position 2 uses EASE_CUBIC_OUT (0x42)
   * **F0F66** Servo 2 move to Position 1 has no easing, move to Position 2 uses EASE_CUBIC_OUT (0x42)   * **F0F66** Servo 2 move to Position 1 has no easing, move to Position 2 uses EASE_CUBIC_OUT (0x42)
Line 275: Line 290:
   * **U2** Store into user preset 2     * **U2** Store into user preset 2  
   * **P4** The move consists of 4 points     * **P4** The move consists of 4 points  
-  * **N3** Repeat the sequence 3 times  +  * **N3** Perform the sequence 3 times  
   * **A0A4A8A4** Move Servo 1 90° at a time, starting from 0°     * **A0A4A8A4** Move Servo 1 90° at a time, starting from 0°  
   * **B4B8B4B0** Move Servo 2 90° at a time, starting from 90°     * **B4B8B4B0** Move Servo 2 90° at a time, starting from 90°  
Line 282: Line 297:
   * **H1** Home at end of move   * **H1** Home at end of move
  
-<WRAP round info>+<WRAP round info 90%>
 Because no easing parameters (''E'' or ''F'') are specified, no easing is used by default. Because no easing parameters (''E'' or ''F'') are specified, no easing is used by default.
 </WRAP> </WRAP>
Line 297: Line 312:
   * **U1** Store into user preset 1     * **U1** Store into user preset 1  
   * **P2** The pattern consists of 2 brightness points     * **P2** The pattern consists of 2 brightness points  
-  * **N5** Repeat pattern 5 times  +  * **N5** Perform the pattern 5 times  
   * **A8A0** Start at full brightness, then turn off     * **A8A0** Start at full brightness, then turn off  
   * **S5S95** On for 5 * 20 ms = 100 ms; off for 50 * 20ms = 1 s     * **S5S95** On for 5 * 20 ms = 100 ms; off for 50 * 20ms = 1 s  
Line 303: Line 318:
 === Example 2 – Fade in/out (similar to ''LEDTRI'') === === Example 2 – Fade in/out (similar to ''LEDTRI'') ===
  
-The Glow Tip LEDs light up slowly, then dim until completely off; this is repeated 3 times.+The Glow Tip LEDs light up slowly, then dim until completely off; this is performed 3 times.
  
 **USERLEDS U2 P2 N3 A0A8 L100L100** **USERLEDS U2 P2 N3 A0A8 L100L100**
Line 309: Line 324:
   * **U2** Store into user preset 2     * **U2** Store into user preset 2  
   * **P2** The pattern consists of 2 brightness points     * **P2** The pattern consists of 2 brightness points  
-  * **N3** Repeat pattern 3 times  +  * **N3** Perform the pattern 3 times  
   * **A0A8** Start off, finish at full brightness     * **A0A8** Start off, finish at full brightness  
   * **L100L100** Each brightness point is reached in 100 * 20 ms = 2 s   * **L100L100** Each brightness point is reached in 100 * 20 ms = 2 s
Line 379: Line 394:
       - Ten seconds after the triple-flash (13 seconds total of continuous holding), the blue LED will blink quickly continuously, release to perform the factory reset. The blue LED will go solid, then the ESP will restart, with the blue LED flashing slowly (ready to connect).       - Ten seconds after the triple-flash (13 seconds total of continuous holding), the blue LED will blink quickly continuously, release to perform the factory reset. The blue LED will go solid, then the ESP will restart, with the blue LED flashing slowly (ready to connect).
  
-<WRAP round info>+<WRAP round info 90%>
 The bond will also need to be removed on the phone or other device as well, or it will attempt to continue to use the bond (which will fail, because those stored credentials will no longer be valid). The bond will also need to be removed on the phone or other device as well, or it will attempt to continue to use the bond (which will fail, because those stored credentials will no longer be valid).
  
Line 390: Line 405:
 ===== iOS Casual Mode ===== ===== iOS Casual Mode =====
  
-<WRAP round todo>+<WRAP round todo 90%>
 This feature is pending removal in a future release. This feature is pending removal in a future release.
 </WRAP> </WRAP>
Back to top