Hi all,
I read stuff about CAN these last days as i want to use it to interconnect my future MB’s four cores and my computer. I’ve also read about MBNet and this raised me a lot thoughts and questions, especially about the MBNet HLP and its request/reply and master/slave design.
Disclaimer: By posting this topic, i don’t want to offend anyone. I’ve got lot of respect for the work of the MB community and I am also very thankful for that. I hope those comments and questions don’t arrive too late. I’ll try to sum that up in the most ordered way i can. Please apologize for the length of the post.
Use Case 1: MidiBox Extension thru CAN port (a la CiA)
I think providing an standard way for extending the midibox via a CAN port would be a very good thing. Lots of people have made extension ports for their midibox, all of which are quite incompatible. A CAN port could make an easy way to connect and extend MidiBoxes, provided that the extension requires itself a new core.
If such a thing is made possible with the new PICs, it seems to me that the MBNet HLP request/reply design and master/slave model is quite limited in that respect.
For instance for hot-pluging new devices, Masters are forced to poll regularly the network to see if new devices are connected. More over, it has to ping all the devices by their id.
Regular discovery protocols uses advertisement messages (new devices on the network advertises themselves at plug time). This design avoid the overhead of having to ping the potentially existing devices addresses. With a CAN port, plug time could be easily detected by the MB extension thanks to the incoming current. But the HLP must permit any node to post advertisement messages.
Also why correlate the node id to the PIC ids ? Imagine person X comes at Y’s home wants to connect its midibox on Y’s one and realize they have the same PIC ids ??
Use Case 2: Different cores with different responsibilities
In my future midibox, i would like to have three different types of nodes.
Node CS1 and CS2: 8 channel strip (with motor-fader and encoders)
Node P: Paging (or layering if you prefer) system with paging control buttons and navigation control
Node S: Storage of the fader positions for the different pages.
User press a “Next page” button on node P, P sends a page change event on the CAN bus. S observes the page change event and accordingly sends the corresponding fader position change events on the CAN bus. CS1 and CS2 observes the fader position change events and react accordingly.
(I gave the example of fader positions as I have no LCDs on CS1 and CS2. But i could have wanted to display the track names with some LCDs and send the track names the same way.)
I don’t see how i can make my protocol fit in the MBNet HLP. Who is master and who is slave ?
Use Case 3: DMX Connector Node (or whatever protocol PIC is not able to handle)
Let’s say we want to extend a midibox with a node that handles another protocol than MIDI, let’s say DMX. I want that node to be remote configurable. For instance, i would tell him that fader changes of one other node is to be transformed in changes of the x DMX circuit, and so forth…
However, the node that owns the fader do not know that new node. Neither should he know the other node that currently transmits fader changes as MIDI CCs. This uses case shows that if we want extensibility, we need multi-cast if not broadcast capabilities with the MBNet HLP.
I would like to propose for an extension of the MBNet HLP to enable such use cases. In fact, I think restricting the protocol to a request/reply and master/slave design really limits the future potential use of the CAN interface. Maybe we could make the existing HLP a subset of a more versatile HLP.
I don’t know if implementing an existing HLP would be so much work. I’m currently reading the CanKingdom spec and will have a better view of that later. It seems however that CanKingdom is the existing HLP that is the best suited for control.
Here are some thoughts of my whishlist for the HLP:
-
Dynamic allocation of node ids at startup and after hotplugs.
-
Core communication routines (request/reply, publish/subscribe and broadcast)
-
Core services (such as discovery protocol, ping protocol, application upgrade, remote control and configuration)
-
Dynamic allocation of application-specific services’ CAN message identifiers
Ok, sorry for all that. I hope i didn’t bother everyone…
Best regards,
Didier. (MidiBox rocks!)