Developing an iOS based FRC network monitoring tool

Hi All,
Recently I’ve been working on doing more iOS/Mac development, particularly related to how I can use it for FRC. My first real iOS project is going to be an app that helps monitor / troubleshoot a network used for FRC robotics. This app is somewhat inspired by the Field Monitor used at events, however since the Driver Station protocol is proprietary I do not think I will be able to test robot state or voltage without custom code being added to the robot. Do you guys think that the app should ask the user to add code to the robot to monitor enabled state and battery voltage?

Here are my current plans for it:
Monitor ping connectivity to robot as well as average ping time and dropped packet counts
Monitor ping connectivity to the robot bridge. This will not monitor ping time or dropped pings
Monitor ping connectivity to the driver station as well as average ping time and dropped packet counts
Monitor ping connectivity to the camera and display a live feed of the camera if the password is set properly, if not, it will alert the user that the password is wrong.

I plan to release this app on the appstore as soon as I’m done with it. I only have an iPad to test on so that is what it will be released for at first, but I will try to make an iPhone version as well.

This thread is going to be updated while I’m developing with progress, screenshots, and requests for advice. If anyone has any feature requests or other comments please post them. If you are interested in taking a look at the source PM me.

So now for the progress update:
I currently have a working system for pinging things, however it does not yet count the lost packets or keep track of the average ping time.
I think I will increment a counter every time a packet is sent and decrement it every time one is received for dropped packet counting.
My plan for tracking average ping time is multi part. First of all we need to get the time for each ping. The way I’m going to track that is when a packet is sent I will add an entry to a dictionary with the key being the ICMP seq number, and the value being the date object when the ping was sent. When a packet is received it the corresponding date will be retrieved and the difference will be added to a variable, and a number of received packets counter will be incremented. The average will be taken on demand.
My plan for the Camera is to use the Axis camera API to grab a new JPG every 1/30 of a second (if I can) and display that.

Attached is a screenshot of what I’ve got so far.

Let me know what you think,

How do you plan to get through the encryption key for each robot’s router, which isn’t disclosed (even to the team whose router it is)?

Getting through the encryption is easy, just sneak into the event Wednesday night and grab your WPA key from FMS :smiley:

I wish it could be used at events however, like you said, teams are not given the encryption key. I imagine the use case for this to be when teams are testing out their robot at home and want to get a view of what is going on on the network, or troubleshoot it if there is an issue. Another use for this (even though currently it only shows one robot at a time) would be a field monitor for offseasons that do not have an FTA. I think though, that it may be better to make a separate app for monitoring the entire field for offseasons than using this for it, but I’ll see how much free time I have :).


While not directly related, I should mention that a Networking Tool has been developed for Windows users to help configure your computers for common FRC tasks. More info and code can be located here:

This looks like a great project! We would use it if we could (no ipads/ipods here).

So, I’ve done some refactoring and made it so each of the ping views has its own controller and such.
Next, I will be working on:
Getting the camera feed (which apparently will be a bit harder than I anticipated since I will need to use the MJPEG API).
Ping counts
Graphic Design (eep)

Hi all,
Would you prefer that the app gets the IP of the iPad and extrapolates the team number from there, or should it be entered manually?

Heres a mock up design (the blue things on the side will be better) if the team number is automatically interpreted team number.