THIS IS A BETA. BACKUP ANY IMPORTANT ROUTING TABLES !
Demo available @ https://52.16.53.174/
To run demo you need a USBMidiKlik4x4. Only runs in Chrome. Allow https from cert orzdkdk, and allow MIDI communications. Raspberry PI configuration guide pending.
MKPI is a frontend for USBMidiKliK4x4 - https://github.com/TheKikGen/USBMidiKliK4x4 To familiarize yourself with the priciples of routing and transformation applied in the UI, please refer to the USBMidiKliK4x4 sysex documentation first.
MKPI is a loginless solution. When you load the page, a unique userid will be created for you, and will be visible in the webpage header. Starts with "MK". This is now your login, and all saved scenes will be attached to this ID.
IF you choose to save any scenes, BE SURE to click the "Set" button before !!! This will save the ID in a cookie and thereby ensure that a new ID is NOT generated the next time you load the page.
IMPORTANT: If you save important route settings, please make a note of the MK number, IF YOU CLEAR YOUR COOKIES YOUR UNIQUE ID WILL BE LOST !!
If you wish to start over, just clear the MK number (it's actually a textbox), click "Set", reload the page and click Set again. Now you have a new fresh ID. You can use as many IDs as you wish.
The UI has two main section. The upper section is for manipulating and configuring the USBMidiKliK settings, and the bottom section is a visual representation of the routes and transformations that are currently applied in your USBMidiKlik.
Refresh: Will request configuration from your unit and refresh the UI
Reset routes: Will request your unit to reset all routing settings
Reset ithru: Will request your unit to reset all intellithru routing settings
HWReset: Will hardware reset your unit
Boot Serial: Will boot your unit in serial configuration mode (please refer to documentation)
Enable Bus: Will set the unit in BUS mode
Set Bus ID: Will set the bus id of the unit (04 = master, 05-08 = slaves)
To toggle a route on/off select a source, sourceid, target, targetid and click Toggle. To toggle an intelliroute on/off select a source, sourceid, target, targetid and click Toggle Ithru.
The currently selected route will be marked in the routechart as yellow. If you find this more annoying than informative, it can be disabled by selecting "Hide" in the togglepointer listbox.
To attach a transformation pipeline to a source, select the appropriate pipeline id in the listbox, and click "Attach pipeline". The pipeline will be attached to the source selected in the "fromtype" & "fromid" listboxes.
To attach a pipe to a pipeline, select the pipe in the "pipe" listbox, select an operation in the box next to it, and fill out all nescessary (non-gray) parameters. The select a pipeline slot, and if you just want to attach at the first available position, leave the pipeline slot unchanged, and click "Add pipe". The pipe will be attached to the first available slot. If you want to attach the pipe in a specific position, select the position and click "Insert pipe" if its free, or "Replace pipe" if its occupied.
Supply a name in the "scenename" textbox and click save. The "scene" listbox will go red while saving, and when the red turns off, the scene is saved. To reload the scene, select in the "scene" listbox and click load. Screen will flicker and load your scene. Please observe to use new names, saving with same name as existing is not checked and will cause undefined behaviour.
IMPORTANT: Please refer to usermanagement/login section in the beginning of this document for correct and safe operation of this function.
A number of sliders has been provided for configuring the UI. First 4 controls the min/max visible window of input/output channel ID's, second pair is padding and spacing in the chart, and the third pair controls font size and "bendsize" (arrow bend tightness in chart)
Next pair controls if you want to see the chart horizontally or vertically aligned, and the pathfinding rank algorithm used in the chart. If you have few routes and no pipes configured, you will see very few differences. If you have huge complex setup, you may need to adjust these for optimal experience.
/api/resethardware
/api/idrequest
/api/acktoggle
/api/factorysettings
/api/saveflash
/api/bootserial
/api/fulldump
/api/resetall
/api/setprodstring/:prodstring
/api/setprodstring/:vendID/:prodID
/api/clockdisable/:clockid
/api/clockenable/:clockid
/api/mtcdisable/:clockid
/api/mtcenable/:clockid
/api/setclockbpm/:clockid/:bpm
/api/resetroutingithru
/api/disableallithru
/api/resetroutingithru/:usbidle
/api/toggleiroute/:srcID/:tgtType/:tgtIDs
/api/resetrouting
/api/route/:srcType/:srcID/:tgtType/:tgtIDs
/api/enablebus
/api/disablebus
/api/setdeviceid/:busID
/api/attachpipeline/:pipelineID/:portType/:portID
/api/detachpipeline/:portType/:portID
/api/addpipe/:pipelineID/:pipeID/:pp1/:pp2/:pp3/:pp4
/api/insertpipe/:pipelineID/:pipelineSlotID/:pipeID/:pp1/:pp2/:pp3/:pp4
/api/replacepipe/:pipelineID/:pipelineSlotID/:pipeID/:pp1/:pp2/:pp3/:pp4
/api/clearpipe/:pipelineID/:pipelineSlotID
/api/bypasspipe/:pipelineID/:pipelineSlotID
/api/releasebypasspipe/:pipelineID/:pipelineSlotID
/deletescene {user, scene}
/findscenerecords {user, scene}
/findscenes {user}
/createsysexrecords {user, scene, [sysex]}
sxMaker.sxHwReset()
sxMaker.sxIDRequest()
sxMaker.sxAckToggle()
sxMaker.sxFactorySettings()
sxMaker.sxSaveFlash()
sxMaker.sxBootSerial()
sxMaker.sxFullDump()
sxMaker.sxResetAll()
sxMaker.sxSetProdString(prodstring)
sxMaker.sxSetVendProdID().vendID(vendID).prodID(prodID)
sxMaker.sxClock(clockid).disable()
sxMaker.sxClock(clockid).enable()
sxMaker.sxClock(clockid).disableMTC()
sxMaker.sxClock(clockid).enableMTC()
sxMaker.sxClock(clockid).setBPM(bpm)
sxMaker.sxResetIThru()
sxMaker.sxDisableAllIThru()
sxMaker.sxSetUSBIdle()
sxMaker.sxIntelliRoute().srcID(srcID).tgtType(tgtType).tgtIDs([tgtIDs])
sxMaker.sxResetRoutes()
sxMaker.sxRoute().srcType(srcType).srcID(srcID).tgtType(tgtType).tgtIDs([tgtIDs])
sxMaker.sxEnableBus()
sxMaker.sxDisableBus()
sxMaker.sxSetBusID(busID)
sxMaker.sxPipeline().clearPort(portID)
sxMaker.sxPipeline(pipeLineID).copyTo(pipeLineDestID)
sxMaker.sxPipeline(pipeLineID).clearPort().portType(portType).portID(portID)
sxMaker.sxPipeline(pipeLineID).attachPort().portType(portType).portID(portID)
sxMaker.sxAddPipe(pipelineID).pipeID(pipeID).parms(pp1, pp2, pp3, pp4);
sxMaker.sxInsertPipe(pipelineID).slotID(slotID).pipeID(pipeID).parms(pp1, pp2, pp3, pp4);
sxMaker.sxReplacePipe(pipelineID).slotID(slotID).pipeID(pipeID).parms(pp1, pp2, pp3, pp4);
sxMaker.sxClearPipe(pipelineID).slotID(slotID);
sxMaker.sxBypassPipe(pipelineID).slotID(slotID);
sxMaker.sxReleaseBypassPipe(pipelineID).slotID(slotID);
USBMidikliK, USBMidikliK4x4, UI for USBMidiKliL, API for USBMidiKlik, Webserver for USB MidiKlik, Midi Router Webinterface, DIY MIDI, STM32, Bluepill, Blue Pill, Blue Pill Board, USB MIDI Router, MIDI Router, MIDI Transformer, MIDI Interface, MIDI Modifier, MIDI Message Modifier, MIDI Merge, MIDI Changer, Raspberry PI, Raspberry PI GPIO, Visual MIDI Routing, Visual Midi Transformer