[{"data":1,"prerenderedAt":33},["ShallowReactive",2],{"project-libdiginet-":3},{"page":4,"others":23},{"slug":5,"src":6,"title":7,"source":8,"toc":9,"html":22},"","README.md","libdiginet","https:\u002F\u002Fgithub.com\u002FFreeMixer\u002Flibdiginet\u002Fblob\u002F084e09f8eaea72a275f583b8ae148b565aa6a548\u002FREADME.md",[10,13,16,19],{"id":11,"title":12},"network","Network",{"id":14,"title":15},"status","Status",{"id":17,"title":18},"safety","Safety",{"id":20,"title":21},"licence","Licence","\u003Ch1 id=\"libdiginet\">libdiginet\u003C\u002Fh1>\n\u003Cp>A C library for the Ethernet protocol of the Digidesign \u003Cstrong>Control|24\u003C\u002Fstrong> and \u003Cstrong>ProControl\u003C\u002Fstrong> control surfaces, so that any Linux mixer or DAW can drive one again: motor faders, V-Pots and their LED rings, buttons and lamps, scribble strips, meters, the counter and the jog wheel.\u003C\u002Fp>\n\u003Cp>The surfaces talk raw Ethernet (EtherType \u003Ccode>0x885F\u003C\u002Fcode>), not MIDI or IP. libdiginet holds the protocol: frame and session grammar, encoders and decoders for every control, and one personality per desk. A small transport layer holds the wire: the packet socket, discovery, the online handshake, acknowledgements, keepalive, retransmit and pacing. A host links the library, or runs a thin daemon that holds the one capability raw sockets need (\u003Ccode>cap_net_raw\u003C\u002Fcode>) and hands the desk's commands to an unprivileged application.\u003C\u002Fp>\n\u003Cp>What is known about the protocol, and what is still open, is in \u003Ca href=\"\u002Fprojects\u002Flibdiginet\u002Fprotocol\">docs\u002Fprotocol.md\u003C\u002Fa>, every claim cited to its source.\u003C\u002Fp>\n\u003Ch2 id=\"network\">Network\u003C\u002Fh2>\n\u003Cp>The desk broadcasts its announce (about every 7 s while idle, measured on a ProControl); after that every frame is unicast between the desk's MAC and the host's MAC. A switch forwards these frames like any other, and machines that speak only IP ignore them, so the desk can share a segment with ordinary IP clients. What the link needs:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>The desk and the host on the same layer-2 segment. There is no IP header, so no router can sit between them.\u003C\u002Fli>\n\u003Cli>The desk on the untagged (native) VLAN of the host's port: it sends no VLAN tag.\u003C\u002Fli>\n\u003Cli>A wired path from the desk to the host. Some Wi-Fi bridges drop an EtherType they do not know; IP clients on Wi-Fi are not affected.\u003C\u002Fli>\n\u003Cli>Not on an interface that carries other real-time traffic, such as a REAC stagebox link.\u003C\u002Fli>\n\u003Cli>The ProControl's port runs at 10 Mbit\u002Fs half duplex. If a modern NIC will not settle on that, put a small unmanaged 10\u002F100 switch between them.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>DigiNet has no authentication: the desk takes a session with whichever host answers its announce. On a LAN shared with other people, give the desk and its host a segment of their own.\u003C\u002Fp>\n\u003Ch2 id=\"status\">Status\u003C\u002Fh2>\n\u003Cp>Early, and not yet tried on a desk. In the tree:\u003C\u002Fp>\n\u003Col>\n\u003Cli>\u003Ccode>protocol\u002Fdiginet.ksy\u003C\u002Fcode>, the formal byte grammar, with golden-frame tests.\u003C\u002Fli>\n\u003Cli>The codecs and the Control|24 \u002F ProControl personalities.\u003C\u002Fli>\n\u003Cli>The transport: session state machine, ack window, keepalive, retransmit, latest-wins coalescing, all tested against a desk emulator.\u003C\u002Fli>\n\u003Cli>One packet socket for every interface, and a desk mux that runs a session per desk over it, with appeared and gone notices, so a host hears every desk on every NIC, one plugged in later included. The socket can come from \u003Ccode>diginet-packet-helper\u003C\u002Fcode>, so the host itself needs no capability.\u003C\u002Fli>\n\u003Cli>\u003Ccode>diginet-probe\u003C\u002Fcode>, a command-line tool for a first test on a real desk: wake it, move a fader, light a lamp, write a scribble strip, log every press. See \u003Ca href=\"\u002Fprojects\u002Flibdiginet\u002Fprobe\">docs\u002Fprobe.md\u003C\u002Fa>.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Building and testing: \u003Ca href=\"\u002Fprojects\u002Flibdiginet\u002Fbuilding\">BUILDING.md\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"safety\">Safety\u003C\u002Fh2>\n\u003Cp>The desk's system and diagnostic message family (\u003Ccode>F0 13 xx 70 …\u003C\u002Fcode>) can write to the desk's own memory. The library refuses to encode it.\u003C\u002Fp>\n\u003Ch2 id=\"licence\">Licence\u003C\u002Fh2>\n\u003Cp>GPL-3.0-or-later. See \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FFreeMixer\u002Flibdiginet\u002Fblob\u002F084e09f8eaea72a275f583b8ae148b565aa6a548\u002FLICENSE\">LICENSE\u003C\u002Fa>.\u003C\u002Fp>\n",[24,27,30],{"slug":25,"title":26},"building","Building libdiginet",{"slug":28,"title":29},"protocol","The DigiNet surface protocol (Control|24, ProControl)",{"slug":31,"title":32},"probe","diginet-probe: the first test on a real desk",1793954996769]