Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lovense: add more information and make formatting consistent #145

Open
wants to merge 13 commits into
base: master
Choose a base branch
from

Conversation

teledildonics69
Copy link
Contributor

No description provided.

@teledildonics69
Copy link
Contributor Author

I intend to do more research and work on these docs. However, last time I told myself that I got distracted and never submitted my changes, so here's a start, with hopefully more to follow.

@teledildonics69
Copy link
Contributor Author

teledildonics69 commented Sep 28, 2021

Irritatingly, Lovense appears to have renamed "Quake" to "Dolce" as of today (for trademark reasons): https://www.xbiz.com/news/261947/lovense-renames-new-dual-motor-stimulator-quake-to-dolce. But as all of the products that people currently have say "Quake" on them, I think it's okay to leave this as-is for now. It can be addressed in a follow-up PR.

@teledildonics69
Copy link
Contributor Author

teledildonics69 commented Sep 29, 2021

Unvetted observations:

  • Firmware updates work by running the DFU; command (in-band), which then enables this separate Bluetooth service with DFU operations: https://developer.nordicsemi.com/nRF5_SDK/nRF51_SDK_v4.x.x/doc/html/group__dfu__ble__service__spec.html
    • After running DFU on a Domi, it shuts the service and opens a new one advertising itself as DfuDomi
  • The Gsensor and BeginMove commands seems to have been replaced with BM ([B]egin[M]ove).
  • The StopMove command appears to have been replaced with EM ([E]nd[M]ove).
  • The AW ([A]larm[W]rite) command can be used to set alarms (delayed activations of the toy). Up to ten alarms can be stored. The first argument is the alarm ID (0-9). The second is the vibration strenght of the alarm (0-20). The third is how many seconds away the alarm is. The fourth is how many seconds the alarm should run for.
  • The AG ([A]larm[G]et) command a list of digits corresponding the IDs of pending alarms, or null if none are pending.
  • The AC ([A]larm[C]ancel) and AD ([A]larm[D]elete) commands both delete the alarm with the specified index from the device.
  • AIW writes some kind of value that AI returns. It must contain at least one colon. My best guess is that it's used for some kind-of alarm metadata (ordering?) that isn't relevant to the on-device behaviour but is useful to maintain across apps, but I could be way off.
  • Remove:N deletes a pattern saved on the device, by index, returns what looks like it might be the number of bytes of preset storage now available on the device.
  • Pl commands can be used to set patterns in the same format as GetPatten returns them, except with Pl instead of P. Patterns can consist of up to 100 segments each of 10 half-second levels from 0 to 9. If all 100 segments are used, 100 is indicated with a j instead of 100 to save characters.
  • The "s" in the battery prefix when there is high power draw might be for "skip", because the result value seems to be a lot less accurate in these cases.

edit: I see that some of this was already discussed in #70 (comment)

@teledildonics69
Copy link
Contributor Author

teledildonics69 commented Oct 7, 2021

The fully-detailed g-sensor data appears to be gone (or at least, I can't figure out where it is), replaced with a stream of simple values from 0 to 4 indicating amount of motion, formatted as M:S0 to M:S4 for Max, and the same but with ,O1 appended for non-0 values from Nora. (These after after BM is sent, until EM is sent.)

@qdot
Copy link
Member

qdot commented Oct 7, 2021

The fully-detailed g-sensor data appears to be gone (or at least, I can't figure out where it is), replaced with a stream of simple values from 0 to 4 indicating amount of motion, formatted as M:S0 to M:S4. (These after after BM is sent, until EM is sent.)

Yeah from what I heard, this happened quite a while ago? Not exactly sure when, might be nice to at least bound it by firmware versions, but we'd have to find the switch point. Worse comes to worse, can just ask Lovense heh.

@teledildonics69
Copy link
Contributor Author

teledildonics69 commented Oct 7, 2021

Aha! It looks like BT:On and BT:Off give us the raw accelerometer data on Nora (prefixed with BT: instead of G:), but on Max it seems to just return one bit of motion information, BT0 or BT1.

There appears to be some Max-specific command for integration with the game https://www.mirrorlife.com/. Mirr:1 and Mirr:0 are valid commands. I'm not sure exactly what we do, but the game seems to use the toy's buttons as controls for the game itself, so... let's see...

while enabled, the buttons on the Max send MirLife:1 and MirLife:2 instead of controlling the toy.

@qdot
Copy link
Member

qdot commented Oct 7, 2021

So just checking: Should I hold off on bringing this branch PR in until you finish doing research? :)

@teledildonics69
Copy link
Contributor Author

@qdot Doesn't really matter, but I suggest going ahead and merging at your convenience.

I think it would be nice to have the formatting/consistency merged so that the next PR's substance changes are easier to see on their own.

I'm just shoving notes in this thread so they're findable by others.

@teledildonics69
Copy link
Contributor Author

...hah, there are official docs for the web API whose command names give us more bluetooth command names: https://www.lovense.com/sextoys/developer/doc

AVibrate:1:2 will vibrate at level 1 for duration 2 seconds
There are similar device-specific ARotate, AAirLevel, AVibRotate, AVibAir, AVibrate1, AVibrate2

@teledildonics69
Copy link
Contributor Author

teledildonics69 commented Oct 8, 2021

The Flash command flashes the light on the toy three times. This occurs even if the light has been disabled with Light:off.

Here are some example sessions testing commands for compatibility across devices: https://gist.github.com/teledildonics-dev/03a861302270c8eaaa1a2a76c95a4ffd

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants