Repository navigation
Releases: Charles5150/midi-commander-custom
Release list
1.13 — USB MIDI output comes back after a bus reset
1.13 — USB MIDI output comes back after a bus reset. If the USB bus was reset while a packet the pedal had sent was still unread, for example when the computer sleeps with the pedal powered behind a hub, wakes, or recovers from a USB error, the pedal sent nothing more over USB MIDI until it was unplugged: no notes or CCs, and no SysEx answers, so the configurators could not connect. The pedal now starts its USB MIDI output afresh each time the computer configures it. Tried on the pedal with ten bus resets while it sent all the time; the hang itself was not seen on a Mac. See the CHANGELOG. Closes #153.
Install midi-commander-custom-1.13.dfu over any earlier version with python/Update_Firmware.py or the configurator; the configuration stays as it is.
1.12 — A note's release through the MIDI map lets go of the note
1.12 — A note's release through the MIDI map lets go of the note. The MIDI map ran a Note Off through the entry's value ranges as a Note On of velocity 0, so a note held and let go on the keyboard could hang on the device on the DIN output: with an output range the release went out as a second Note On, with a velocity split it matched no entry and went out unmapped, and a Note mapped to a PC sent the PC again. A note's release, a Note Off or a velocity 0, now reaches every entry for its note whatever its range, and comes out as a Note Off of the note the entry plays; a CC, Pressure or PitchBend gets the bottom of its output range, and a PC nothing. Tried on the pedal, with its DIN output read on an audio interface. See Translating what comes in and the CHANGELOG. Closes #152.
Install midi-commander-custom-1.12.dfu over any earlier version with python/Update_Firmware.py or the configurator; the configuration stays as it is.
1.11 — A tap waiting for its double press stays in its bank
1.11 — A tap waiting for its double press stays in its bank. A tap on a button with a double press list waits for a second one, and a press of a button with a long press list waits to see how long it is held. If the bank changed meanwhile, by Bank Up or Down, a Bank command on another button or a bank change from the computer, the press was decided in the new bank: the tap went out as the new bank's button in the same place, or not at all, and "switch this off, then the next song" lost the switching off. A press still waiting is now settled in the bank it was made in, as a short press, before the bank or page changes; a press of the same button after the change is one of the new bank's. A button held for its long press when the bank changes gets its short press instead. Tried on the pedal. See Short, long and double press. Closes #154.
Also since 1.10, with no firmware change: Meris templates for the Enzo X, LVX and MercuryX; a section on following a MOD Dwarf; the Python tools working with pandas 2 on Python 3.10, where the demo and several templates failed to pack; and the ST-Link build fixed. See the CHANGELOG.
Install midi-commander-custom-1.11.dfu over any earlier version with python/Update_Firmware.py or the configurator; the configuration stays as it is.
1.10 — A box of switches on an expression jack
1.10 — A box of switches on an expression jack. An expression jack's Output (Sends in both configurators) takes a new value, Switches: the jack then holds a small box of up to three footswitches instead of a pedal, giving the pedal three more switches with nothing changed inside it. New columns Box_1, Box_2 and Box_3 of Expression_Settings say what each of the box's switches holds down: a switch 1–4 or A–D, or Bank Down or Up. Wired like an expression pedal, with four equal resistors across the two outer contacts and each switch from the wiper contact to a joint of them, switch 1 puts the jack a quarter of the way along its calibrated travel, switch 2 halfway and switch 3 three quarters. The nearest level, read the same twice running so a bouncing contact presses nothing, holds that switch down as a foot would: long and double presses, a momentary hold and a Bank Up held to jump all work, in the current bank. Tried on the pedal with the jacks moved from the computer and with an expression pedal standing in for the box; not yet with a real box. See A box of switches on the jack. Closes #81.
Install midi-commander-custom-1.10.dfu over any earlier version with python/Update_Firmware.py or the configurator; the configuration stays as it is. To set a jack to Switches, use the configurator from this version.
1.09 — Two way with a GT-1000
1.09 — Two way with a GT-1000. Only a Kemper could be asked about itself. A new global setting, GT1000_Mode (Talk to a GT-1000 in both configurators, TWO WAY GT-1000 in the on-pedal editor), has the pedal talk to a Boss GT-1000 or GT-1000CORE in Roland's own RQ1 and DT1 messages: it asks for the patch number every second, and on each patch it lands on, for its name, shown beside the bank name, and its sixteen ASSIGNs. Every ASSIGN that switches an effect from a CC tells the pedal which CC that effect answers to, and the effect's switch, asked for every second and reported at once by the unit as it changes, is handed to the LED feedback as that CC, so the buttons sending it are lit or dark like the unit, however the effect was switched. The two share the byte Kemper_Mode used, so one of them is on at a time; the on-pedal editor's KEMPER became TWO WAY, with Off, Kemper and GT-1000. Since the GT-1000's USB is a device like the pedal's, the two meet on a computer or a USB MIDI host box. New python/GT1000_Sim.py, a GT-1000 of make believe, which the pedal was tested against: the patch name on the display, the LED following an effect switched on the unit, and a press switching the effect with both staying in step. It has not been tried on a real unit yet. See Two way with a GT-1000. Closes #79.
Install midi-commander-custom-1.09.dfu over any earlier version with python/Update_Firmware.py or the configurator; the configuration stays as it is. To turn the mode on, use the configurator from this version.
1.08 — Ten switches on the screen
1.08 — Ten switches on the screen. With Bank_Switch_Mode at MIDI only the pedal is a ten switch controller, but the screen showed eight labels, and what Bank Down and Bank Up did had to be remembered. Each of them now takes a label, in a new Label column of BankSwitch_Settings on its short press row, and in the Bank Switch tab of both configurators; once either has one, the screen shows ten cells, five to a row as the switches are laid out: 1 2 3 4 and Bank Up on top, A B C D and Bank Down below. A cell is then 25 pixels wide and its label is in the 6x8 font, so four characters still fit, and a switch left without one shows UP or DN. One label a switch, the same in every bank, like its command lists; with no label, or with the switches changing bank, the screen is as it was. The labels take 16 bytes after the long press labels in the second extension area, which the tools now read and write 16 bytes longer; a CSV without the column, and a configuration written before, have none. Reading a slot back now takes the bank switches from the whole image, which is where their labels are. The demo labels its bank switches BK- and BK+, shown when its Bank switches is set to MIDI only. 73,232 bytes, 4,592 free. Seven new tests, and one for the simulated pedal drawing the ten cells. Tried on the pedal with the demo at MIDI only: the ten cells as the screen read back over USB, and Bank Up / Down leaving the bank as it was. See What the bank switches send. Closes #150.
Install midi-commander-custom-1.08.dfu over any earlier version with python/Update_Firmware.py or the configurator; the configuration stays as it is. To give the bank switches labels, use the configurator from this version, which reads and writes the 16 bytes they take.
1.07 — The Kemper's tuner on the pedal
1.07 — The Kemper's tuner on the pedal. With Kemper_Mode on, the tuner was a button that opened the amp's own, which then had to be read on the amp. While the amp's tuner is up the pedal now draws its own from the readings the amp reports: the note in letters twice the large size, and a scale under it with a needle and an arrow pointing the way to turn; in tune the note is boxed in and the needle filled in. It opens and closes with the amp's tuner however that is done, a button sending CC 31 (the Kemper Player template's TUNR) is lit while it is up, and the bank screen comes back as it was, or after three seconds of silence from an amp that has gone. The readings are the Profiler's mode (page 7F, 7E), note (7D, 54) and deviance (7C, 0F), as the open PySwitch controller reads them; the beacon already asked for them only while the tuner is up. python/Kemper_Sim.py gains tuner, tune and sweep to try it without an amp, and it has not been tried on a real Kemper yet. Four new tests: the firmware's numbers against the tools', the messages byte for byte, the make believe amp's tuner, and the simulated pedal drawing it. Tried on the pedal against Kemper_Sim: opened, flat, sharp, in tune, a sweep, closed from the amp and closed by silence, each as the screen read back over USB. See Two way with a Kemper. 72,932 bytes, 4,892 free. Closes #80.
Also since 1.06, in the tools only: twelve new templates under python/templates/ — Neural DSP Quad Cortex, Eventide H90, Strymon TimeLine, BigSky, Volante and Iridium, Hotone Ampero II and Boss RC-600, and MainStage, Gig Performer, Cantabile and Ableton Live on the computer — and the arrow, Home, End, Page Up / Down and Delete keys for the Key command (#82); see the changelog.
Install midi-commander-custom-1.07.dfu over any earlier version with python/Update_Firmware.py or the configurator; the configuration stays as it is.
1.06 — Saving from the pedal, safe from a power cut and on time
1.06 — Saving from the pedal, safe from a power cut and on time. A scene saved with the feet (Scene Save) or a change made in the on-pedal editor rewrites the 2 kB flash page it lives in: erased, then written again from a copy in RAM. A power cut in between lost the whole page, 2 kB of configuration, a bank's commands or labels. The new page is now written to a spare page first, with a note of where it goes, marked done once the page is in place; at power on a note not done is finished from the spare page. And while flash is erased or written the processor, which runs from it, stands still with its 1 ms tick, so the clock, the LFOs and every timer lost that time for good: measured with 1.05 at 120 BPM, each scene saved left 99 ms without a clock and lost about four, 37 in ten saves. The cycle counter goes on counting meanwhile, so the time is now given back after each erase or write, the clocks owed going out at once, and the patch goes in steps with the clocks sent between them: with 1.06, 80 ms at most without a clock and none lost, 940 of 941 in the same ten saves. The same goes for the state journal's erase, which 0.96 put off until the music stops, a banner stored over SysEx and the erase before an upload. See Keeps time while it saves. Tried on the pedal with the demo: a build that restarted the pedal right after erasing the page, before writing it back, came back with the scene saved and the rest of the slot byte for byte as it was, 5 of 5; the stress test 13 of 13, latency 4 of 4. The spare page and the note's page are two of the three free pages above the second extension areas, 0x0803E800 and 0x0803F000. No configuration bytes. 72,312 bytes, 5,512 free. One more test for the simulated pedal. Closes #109.
Also since 1.05, in the tools only: launchers to install and open the configurator on Windows, macOS and Linux (#125), and the manual's configurator screenshots taken again (#124); see the changelog.
Install midi-commander-custom-1.06.dfu over any earlier version with python/Update_Firmware.py or the configurator; the configuration stays as it is.
1.05 — An hour on its own
1.05 — An hour on its own. A one minute stress test cannot catch a slow leak or a hang that takes half an hour to come. New python/Endurance_Test.py leaves the pedal playing by itself for an hour, or as long as --minutes says, at a gig's pace, under what a computer sends on a gig: a clock at 125 BPM, CCs and notes no button of the demo uses, a text now and then and the state read every second. In rounds of about two minutes it plays the stress test's sequence, which must send what it sent in the first round, in the same order, and leave the same banks and toggles; sweeps expression pedal 1 heel to toe and back twice from the computer; counts the pedal's own clock set to 120 BPM for 10 seconds, within 0.5 %; and after a rest checks the pedal answers, is awake, has every SysEx answered, has stack to spare and has not been restarted. That last one needed the firmware: since 0.76 a restart by the watchdog puts everything back as it was, so a test could not see one. GET_STATE now ends with whether this start was the watchdog's, the seconds since start and the least stack the pedal has had left, the RAM above its variables being filled with a pattern at start and counted from the bottom (nothing is allocated at run time, so the stack is the one thing that can run short). See the command line tools and CONTRIBUTING. Run on the pedal with the demo for 61 minutes, 34 rounds of 34 and 373 checks of 373: every sequence the same 62 messages, the tempo 119.74–120.25 BPM (one clock either way in the 10 s counted), no restart, and of about 41 KB of stack at most 564 bytes ever used, the last 12 of them in the eighth round and none after. A build that hung on purpose was caught in the round it hung, the time since start going from 126 s to 20. The stress test 13 of 13, latency 4 of 4. No configuration bytes. 71,548 bytes, 6,276 free. One new test, 507 in all. Closes #87.
Install midi-commander-custom-1.05.dfu over any earlier version with python/Update_Firmware.py or the configurator; the configuration stays as it is.
1.04 — Three USB ports
The pedal was one USB MIDI port, which did two jobs badly: a program playing the gear behind the pedal through its thru also reached the pedal, which could change bank or press switches on what was meant for a synth; and on Windows, where only one program at a time opens a port, the configurator could not connect while a DAW held it. A new global setting, USB_Ports (USB MIDI ports in the USB MIDI group, 3 PORTS in the on-pedal editor), at 3 makes the pedal three ports from its next start: Pedal, the pedal as before; DIN, which goes straight out of the MIDI OUT socket as it came, SysEx and clock included, with the pedal never seeing it, so it is a plain USB MIDI interface for the gear behind; and Config, the pedal again, sending what it sends on Pedal too and answering on the port it was asked on, for a second program. The tools, the Tk configurator and the web page choose Config when it is there and never DIN, whose SysEx would go out to the device plugged in. One port stays the default, as the names change and a DAW would need its ports choosing again. macOS kept the one port it remembered for the pedal even with the new layout, so with three ports the pedal gives its own USB serial number and device release (2.30), and macOS and Windows set it up as a new device. See Three USB ports. Tried on the pedal on macOS, 18 of 18, with its DIN output on an interface's MIDI IN: a version asked on Config answered on Config alone and one on Pedal on Pedal alone, bank changes from either port with the same enter list on both, presses from Config coming out on both and on DIN, eleven messages sent to DIN (a bank change CC, a remote press, notes, a PC, pitch bend, two SysEx, Start, Stop, Song Position) arriving on the DIN output in order with nothing back on USB and the bank unchanged, and the thru from Pedal to DIN as before; the stress test 13 of 13 and latency 4 of 4 through Config. Not yet tried on Windows or Linux, whose port names the tools know from their documentation. Stored as bit 1 of global byte 6, beside USB_MIDI_Thru in bit 0; firmware before 1.04 takes a byte of 2 or 3 as the thru off. 71,384 bytes, 6,440 free. Four new tests, 506 in all, and two more for the simulated pedal. Closes #135.
Flash with python/Update_Firmware.py or the web configurator. No configuration changes: it installs over any earlier version, and the pedal stays one USB port until USB_Ports is set to 3.