When the client connects to the RMS1 the following frame is sent (#1 & #2 are just captured at different times, it did a lot of testing and the behavior is always the same):
- The first byte represents the length of the data, in our case 0x30 = 48 bytes
- 2nd Byte 0x80 seems the magic number for most of the WiFi commands. It works like 0x55 when we you use the serial connection 192.168.42.1 – 192.168.42.3, this explains why tools like DUMLdore are able to get the S1 into update mode... however RedHerring, aka "July 4th Independence Day exploit" will not work with the S1
 - The next two byte look like a session ID, the RMS1 will answer with the same ID
- Bytes 5-7: Don't know
- Byte 8 looks like a checksum for the first 7 bytes. I was unlucky to recalculate it, even with use of the DJI method implemented in the duml_crc.py. Some help & ideas are highly appreciated
The RMS1 always answers with the following sequence:
As you can see it follows the same rules as mentioned above. Byte 8 changed, because in byte 7 the value also changed.
After that we have to keep the connection alive. It's a bit more difficult to find the right frames which are send from the application, because the S1 sends signal strengths, battery power and so on. I have not identified the magic heartbeat package from the RMS1 application yet. At ~ frame 279 the Client Application also started so send a list of the current firmware files, versions & checksum. I hope this is not needed to keep the connection alive...
Cheers
|