Multi-player linked Arduboys via a USB host (PC)


(Josh Goebel) #41

Talking ethernet networks… in the early days hubs were everywhere… they just forwarded all packets… so if you sniffed you could see all the local traffic… then switches started to get cheap and they kept MAC tables so that when something was addressed to you it was ONLY sent to you - not all the other computers on the local segment. That’s what I was referring to.


(Scott) #42

So what does that have to do with USB connected Arduboys?


(Josh Goebel) #43

Talking about communication protocol.


(Scott) #44

Does it apply to linking Arduboys in any way?


(Chris Smith) #45

It’s just the idea that you plug any number of Arduboys into USB ports on one device/machine/whatever, and a single program acccepts messages from each Arduboy. And, rather than try to figure out what traffic goes from where, to where, every message from a single Arduboy is forwarded to all other connected Arduboys, with a header saying “came from port X”.

After that, it’s up to the individual devices to figure out if the traffic is relevant to them, and act accordingly.

It’s a “software Arduboy message forwarding hub”. It’s likely to be on an actual USB hub, since that’s just easier to deal with if you are connecting six small devices via USB.

The advantage would be that the “software hub” no longer needs any application smarts. It will work for any Arduboy game that wants messaging. The “software hub” and a small API for game developers means that they can just write and distribute Arduboy code.

For more capability, reserve “port 0” to be a virtual port wherever the software hub itself is running, and that becomes a point where local (non-Arduboy) software can join the messaging to create multi-Arduboy + server setups.


(Josh Goebel) #46

Uh, if they are going to talk to each other in any type of network then you need a communication protocol - which is what I was discussing.


(Scott) #47

OK, I apologise for my misunderstanding.
When you said:

I thought you were suggesting replacing the computer, used as a hub, with some kind of simpler device and I wasn’t sure what that device was.

I now see that you were just trying to describe that having all devices receive what one sends is similar to how an old Ethernet hub behaves.


Multiplayer implementation ideas and stream of consciousness for Speed Snake
(Kevin) #48

This would be nice to test, I can try it when I get to the office in 2 weeks. This would be really nice because this might also mean we could possibly output sound using a custom connector.

My thought at this point is also to tie 2 of the unused gpio to the D+ and D- if they cannot be directly controlled. This way with a custom cable you can do multiplayer and/or sound depending on how its wired up.


(Chris Smith) #49

Reassure me that you are not thinking of this for the first Arduboy, are you?


(Chris Smith) #50

First, please, please, reassure me that you are not thinking of this for the first Arduboy. Sound output on a connector has never been part of the promised capability, and this is definitely not the time in the cycle to consider new functionality.

If you want to output sound, I think whatever solution you propose should output the sound that people are already generating. I think you would be far better off routing the existing audio connections to a new connector.

A: surface mount 3.5mm closed circuit stereo - http://www.switchcraft.com/productsummary.aspx?Parent=529
B: surface mount 2.5mm closed circuit stereo - http://www.switchcraft.com/productsummary.aspx?Parent=21

Although the 3.5 mm jack would be compatible with regular headphones, the 2.5 mm one is only 4mm high. From the reference drawing, it appears to have only plastic and ground exposed on the top, so the 4mm height could be placed inside an “edge cutout” in the top cover, rather than completely covered in clear plastic.

My reading of USB specs in general says “do not do this at all”. USB lines are tightly controlled in terms of resistance and capacitance, and adding anything to them that can’t be unplugged is likely to cause problems for actual USB connections. You can also never really test this - it may be that this would interfere with an existing USB host that would normally function just fine, but since there are likely thousands of distinct USB solutions out there already that you can never test, this is one of those cases where it really is necessary to design as conservatively as possible.

Secondly, USB lines have voltage protections distinct from regular chip lines. It might very well be the case that even some normal voltages on a USB port could cause problems for pins on the Atmel chip.


(Kevin) #51

Just thinking out loud general, we are having the first 20 units built by the factory right now so there is still a little bit of time to make a small update before we go full scale.

But as you suggested I think its dangerous to mess with the USB port.

Really things are pretty locked down but I don’t want to push the go button and be like “oops why didn’t I think about that!”.


(Chris Smith) #52

“Act in haste, repent at leisure”.


(Max) #53

So, any chance to find a solution ? Some unused pad for solder any cable ?
Hope to play pong with my girlfriend :smile:


(Scott) #54

The latest board layout that @bateske showed us brings all unused I/O signals to pads close the the edge of the board. If you want to connect two Arduboys over a fairly long distance, I’d suggest connecting RS232 signal converters to the unused TX and RX signals, as I described earlier in this thread.


(Max) #55

Sounds good !! Cross cable should do the job!
If any TX/rx/vcc/gnd are available so we can easily use Bluetooth module too, nice !


(Chris Smith) #56

Once my bunch of the production run arrives, I will be experimenting with plain USB cable cross-connects (use an OTG cable).

But it’s way out of the box stuff for USB, so it can’t really be simulated or tested without live devices. And - there’s a really good chance that what I try just won’t work, so - zero promises. Call me a month after live Arduboys arrive.


(Scott) #57

If you want to write some experimental code in advance, I can test it on my home made Dev Kit equivalent. I could also use a Pro Micro as a second device.

I have an oscilloscope, multimeters and other test gear that I could use to look at the signals and help debug.

My career is in embedded microprocessor systems sofware and hardware, specialising in communications protocols, so I expect I would be able to understand any code you come up with.


(Kevin) #58

My guess the best bet is to write a program on PC to act as a server for several serial ports. I would really love to do a game similar to smash brothers that can be multiplayer. It would be awesome to have at events like maker faire. It would even be possible to have the host PC to output a “master view” on the display or even a giant LED matrix!


#59

I did have some “communication” working between 2 devices using a simple python server on a PC. However I didn’t develop it any further than displaying a random pixel on the other device as a quick prototype. It’s super simple to set something up in Python.


(Kevin) #60

Hey @Wozza any chance you’ve got that code laying around I might try to do something with it? I imagine it was super simple, I was looking at doing it in processing but wanted to see how you got it done in python since I’m still learning it and wanted to try it out on a raspi.

Thanks!