View Full Version : RoboDS Android 2015 Driverstation
raystubbs
08-04-2015, 17:42
RoboDS is a project that I've been working on since the Hub City Regionals. I almost have all I need to release the alpha version. I've figured out almost all I need of the driverstation communication protocol; all I lack is to reverse engineer the DS connection packet, if anyone is willing to help with this I would really appreciate it, and I'd be able to release the app much sooner.
virtuald
08-04-2015, 18:25
RoboDS is a project that I've been working on since the Hub City Regionals. I almost have all I need to release the alpha version. I've figured out almost all I need of the driverstation communication protocol; all I lack is to reverse engineer the DS connection packet, if anyone is willing to help with this I would really appreciate it, and I'd be able to release the app much sooner.
Use the source, Luke! (https://github.com/robotpy/allwpilib/blob/master/driver-station/src/main/java/edu/wpi/first/driverstation/robotcoms/RobotComm.java#L167)
Thad House
08-04-2015, 18:59
Use the source, Luke! (https://github.com/robotpy/allwpilib/blob/master/driver-station/src/main/java/edu/wpi/first/driverstation/robotcoms/RobotComm.java#L167)
Is that the actual driver station source code? I always assumed it was closed source, plus I thought it was written in LV.
EDIT: Nevermind looks like its just a driver station simulator. Still interesting though, because it looks like it has the packet format for the FMS as well.
virtuald
08-04-2015, 19:36
Is that the actual driver station source code? I always assumed it was closed source, plus I thought it was written in LV.
EDIT: Nevermind looks like its just a driver station simulator. Still interesting though, because it looks like it has the packet format for the FMS as well.
You're correct that the DS is closed source and written in LV. I believe it is a test harness used for running the WPILib integration tests, which needs to be able to speak the DS protocol.
raystubbs
08-04-2015, 22:18
Use the source, Luke! (https://github.com/robotpy/allwpilib/blob/master/driver-station/src/main/java/edu/wpi/first/driverstation/robotcoms/RobotComm.java#L167)
Thanks a lot for this, it should work perfect. If I'd known about it sooner I could have saved a LOT of work.
EDIT: Ok, I take that back, after reviewing the source I realized that this is for the pre-2015 protocol. The 2015 control system uses a new protocol and I've figured out most of it but I don't know much about the connection packet. The connection packet is sent after the DS receives its first packet from the RoboRio, it is the normal communications packet with a ~21 byte extension that I presume contains connection information. I know that it contains a time zone in some of its bytes but that does not account for the full length of the packet. Any and all help is appreciated, thanks.
raystubbs
08-04-2015, 22:47
Use the source, Luke! (https://github.com/robotpy/allwpilib/blob/master/driver-station/src/main/java/edu/wpi/first/driverstation/robotcoms/RobotComm.java#L167)
Even if the source you gave me is outdated, it gave me an idea of where to find the current version. I never even looked because I assumed it was closed and protected. But here is the 2015 FRCComm.h file if anyone is interested.
https://github.com/Dreadbot/WPILib/blob/master/NetworkCommunication/FRCComm.h
Thanks.
EDIT: Except I can't find an FRCComm.cpp so I may still be stuck.
virtuald
08-04-2015, 23:10
Heh, I hadn't noticed that it was pre-2015. Good to know.
As a developer for the Cross Platform DriverStation.js (https://github.com/gluxon/DriverStation.js) we too have been working to reverse engineer the 2015 protocol, not that we have made it too far...
What we DO have is here: https://github.com/gluxon/node-driverstation15/wiki/2015-Protocol
raystubbs
13-04-2015, 12:26
As a developer for the Cross Platform DriverStation.js (https://github.com/gluxon/DriverStation.js) we too have been working to reverse engineer the 2015 protocol, not that we have made it too far...
What we DO have is here: https://github.com/gluxon/node-driverstation15/wiki/2015-Protocol
I don't have my notes with me right now but here is what comes after your general packet data, according to my memory:
The rest of the data is divided into joystick structures, each structure has the following:
1 byte: Size, in bytes, of the joystick structure
1 byte: Unknown, according to my memory it has always been 12, 0x0c in hex.
1 byte: 'a' the number of axis' available on the joystick.
'a' bytes: The values of each of the axis'.
1 byte: 'b' the number of buttons on the joystick.
'b'/8 rounded up, bytes: The state of every button, one per bit, button 1 is far right and button 'b' is far left.
3 bytes: Unknown, always seems to be 01-ff-ff.
The data for any other joysticks follows.
This may be slightly wrong, I do not have a perfect memory but I think this is mostly correct. If you want details or clarifications then contact me and I'll find my notes. If you find anything new with the 'Connection Packet' structure please let me know, thanks.
vBulletin® v3.6.4, Copyright ©2000-2017, Jelsoft Enterprises Ltd.