- Reverse-engineering of the firmware
- Useful tools:
Last firmware info available here.
Version as of writing - 4.0.11, md5: 27311fac5443d865a5d2ac2db6de38db
- Android - written in Qt5 (whyyy ;_;), https://github.com/OpenTails/CRUMPET-Android
- iOS - written in Swift, https://github.com/MasterTailer/CRUMPET-iOS
just use https://github.com/OpenTails/CRUMPET-Android/wiki/Tail-Command-Protocol, idk why i didn't google for that
0x1800
- Generic Access0x2A00
- Device Name; READ;mitail
0x2A01
- Appearence; READ;0
?
0x1801
- Generic Attribute0x2A05
- Service Changed; INDICATE
3af2108b-d066-42da-a7d4-55648fa0a9b6
c6612b64-0087-4974-939e-68968ef294b0
- Command responses; NOTIFY, READ;TAILS1 END
/TAILS1 BEGIN
5bfd6484-ddee-4723-bfe6-b653372bbfd6
- Command requests; INDICATE, WRITE;TAILS1
0x180F
- Battery Service0x2A19
- Battery Level; NOTIFY, READ;0x4D
(77%)b08fed02-0584-40ef-b006-aff7e0d24e13
- Battery Voltage; NOTIFY, READ;0x8F1E
(?)5073792e-4fc0-45a0-b0a5-78b6c1756c91
- Charging state; NOTIFY, READ;CHARGE OFF
/CHARGE FULL
/CHARGE ON
(orCHARGING
?)
TAILS1
- Slow wag 1TAILS2
- Slow wag 2TAILS3
- Slow wag 3TAILEP
- High WagTAILER
- Stand Up!TAILET
- Tremble ErectTAILFA
- Fast wagTAILHA
- Happy wagTAILHM
- Home PositionTAILSH
- Short wagTAILT1
- Tremble 1TAILT2
- Tremble 2TAILU1
/TAILU2
/TAILU3
/TAILU4
- user presetsVERA
- Request firmware version- Response:
VER 4.0.11 GT0
- Response:
SHUTDOWN
- Power off the gearLEDOFF
- Stop Lights (for Glow Tip)PING
- responds withPONG
STOPAUTO
- Stop Casual ModeAUTOMODE
- Start Casual Mode:- Example:
AUTOMODEG1 G2 G3 G4 T29 T98 T240
- G - categories, joined by space
G1
- Calm and RelaxedG2
- Fast and ExcitedG3
- Frustrated and TenseG4
- EarGear Poses
- T - timings
- First - minimal pause
- Second - maximum pause
- Third - ?, seems to be constant, 240
- Example:
SPEED SLOW
/SPEED FAST
- commands for EarGear, "Be Calm"/"Be Excited"
USERMOVE
USERLEDS
LOWBATT
- not sure if this is an actual commandOTA
HWVER
GLOWTIP TRUE
/GLOWTIP FALSE
- probably toggles the glowing tip of the tail, can't test due to the model that doesn't have oneTASKU
STOPNPM
CONFRD
- reading the configurationCONFWR
- writing the configuration- Configuration:
Received config: ver %hhu, minsToSleep %hhu, minsToNPM %hhu, minNPMPauseSec %hhu, maxNPMPauseSec %hhu, groupsNPM %hhu.
- what does NPM stand for?
- Configuration: