Subversion Repositories svn.mios


Rev 1200 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

HEADER 3 ChangeLog of MIDIbox NG

<CENTER><H1>MIDIbox NG Change Log</H1></CENTER>
<CENTER><H3>Last Release: 2016-02-08</H3></CENTER>

<P CLASS=DESC>Current firmware, schematics, additional infos are located at <A HREF="midibox_ng.html"></A>.</P>

<IMG SRC="images/1x1dot.gif" height=10 ALT=""><BR>


<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> Support for secure keyboard handling if patch is switched: keep original
     MIDI port, note, channel when playing Note Off
     (this feature is not supported for LPC17 due to high memory consumption)

    <LI> Fixed encoder incrementer in absolute mode

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> Support for interpolation tables:<BR>
     MAPs can now apply linear interpolation between data points.<BR>
     This allows to quickly define curves without the need to enter the values for the complete range.
     E.g. previously it was required to enter 128 values to create a curve for a CC controller,
     now it's mostly sufficient to define the same with 3..4 data points. MBNG will interpolate
     the values between these points.<BR>

     Interpolation tables can be defined with following commands:
     MAP&lt;n&gt;/BYTEI and MAP&lt;n&gt;/HWORDI<BR>

     A BYTEI map can define up to 64 datapoints with 8bit resultion,
     and a HWORDI map can define up to 32 datapoints with 16bit resolution.<BR>

     Usage examples can be found under cfg/test/map* and cfg/test/kb_2.ngc<BR>

     See the user manual for further explanations.

   <LI> Support for 16bit maps: with MAP&lt;n&gt;/HWORD 16bit values can be mapped.

   <LI> label "std_rgbled" renamed to "std_rgb" to avoid error message

   <LI> Cursor handling on SysEx based GLCD output should now work correctly if the big font is activated

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> with this release, .NGR scripts running on a STM32F4 are directly executed from RAM in a compressed
     format, and therefore they are significantly faster, so that they could even be used for timing
     critical operations.</LI>

   <LI> added basic support for SPI_MIDI<BR>
     This feature requires an update to MIOS32 bootloader v1.018<BR>
     In the bootloader update app, enter "set spi_midi 1" to enable the SPI MIDI device at J16 (RC2 chip select line).
     This will also disable the OSC ports via MBHP_ETH module, which is normally connected to this port.</LI>

   <LI> support for WS2812 LED strips (currently only for the MBHP_CORE_STM32F4 module).<BR>
     The data input has to be connected to J4B.SC, ground to J4B.VS and +5V to an external PSU (required, since
     each RGB LED can consume up to 20 mA!)<BR>

     Following meta event commands are available:
     <UL CLASS=CL>
       <LI> RgbLedClearAll (clears all LEDs)
       <LI> RgbLedSetRgb:&lt;led&gt;:&lt;r&gt;:&lt;g&gt;:&lt;b&gt; (led=1..64, r/g/b=0..255)
       <LI> RgbLedSetHsv:&lt;led&gt;:&lt;h&gt;:&lt;s&gt;:&lt;v&gt; (led=1..64, h=0..359, s=0..100, v=0..100)
       <LI> RgbLedRainbow:&lt;speed&gt;:&lt;brightness&gt; (speed=1..255, brightness=0..100)

    Most simple way to test a LED strip: enter following command in MIOS Terminal<BR>
       ngr exec_meta RgbLedRainbow:9:100<BR>
    (don't forget to wear sunglasses, or start with brightness 20!!! ;-)

   <LI> added EVENT_RGBLED<BR>
     See cfg/test/rgbled_1.ngc for usage examples

   <LI> .NGR file: added "set_hsv" command which allows to control the hue parameters of a RGBLED

   <LI> SRIO num_sr=<value> reconfiguration works correctly with DIN/DOUT matrices now

   <LI> added "inverted=1" to EVENT_BUTTON and EVENT_LED

   <LI> .NGR file: added "load <setup>" command which allows to switch to another setup (.NGC, .NGS, .NGR, ... files)

   <LI> implemented new meta command "SendEvent" which allows to remote control one or more events from a single event
     within a given value range and direction.<BR>
     See cfg/test/metalrn.ngc for a usage example

   <LI> implemented new meta command "LearnEvent" which allows to learn SendEvent based controller assignments during runtime.
     See cfg/test/metalrn.ngc for a usage example

   <LI> added new meta command "SaveDelayedSnapshot:<seconds>"<BR>
     It will request to store a snapshot after at least the given seconds.

   <LI> added new event type "NoteOnOff", which will send a NoteOff event immediately after NoteOn (resp. actually it will
     send Note On with velocity 0 for runtime event optimisation)

   <LI> added possibility to calibrate the delay_slowest values for each individual key of a keyboard.<BR>
     New terminal commands:
     <UL CLASS=CL>
       <LI> set kb <1|2> key_calibration on: delay values will be measured (method described at the MIDIbox KB webpage)
       <LI> set kb <1|2> key_calibration off: captured delay values will be used: (<measured-delay> * delay_slowest / 1000)
       <LI> set kb <1|2> key_calibration clean: shows the captured measurement values
       <LI> set kb <1|2> key_calibration_value <key> <value>: allows to modify a calibration value directly
       <LI> kb <1|2> delays: shows the measured delay values

   <LI> keyboard calibration values are stored in a new file: .NGK, and can also be edited there

   <LI> bugfix for DELAY_MS

   <LI> bugfix for fwd_id to a non-existing ID with specific value

   <LI> bugfix for maps with duplicated values

   <LI> bugfix for sporadic file access errors reported during snapshot restore

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> support for mathematical operations in .NGR script.
     They have to be surrounded with square-brackets ([...])<BR>
     Syntax: [&lt;left-operand&gt;&lt;operator&gt;&lt;right-operand&gt;]<BR>
     <UL CLASS=CL>
        <LI> set LED:2000 [LED:2000 + 1]<BR>
          will increment the value stored in LED:2000
        <LI> set LED:2000 [LED:2000 - 1]
          will decrement the value stored in LED:2000

     Note that nested operations are supported as well, such as:
     <UL CLASS=CL>
        <LI> send CC USB1 1 [LED:2000 + [LED:2001 + [LED:2002 + LED:2003]]]

     More examples in cfg/tests/runscr5.ngc<BR>
     Support operators: + - * / % &amp; | ^

   <LI> number of scanned SRIOs now configurable in .NGC file
     with 'SRIO num_sr=&lt;1..32&gt;'<BR>

     By default 32 DIN and DOUT shift registers are scanned, which
     result into an update rate of ca. 420 uS on a STM32F4 based core.<BR>

     With (for example) 'sr_num=8' only up to 8 DIN and 8 DOUT SRs will
     be scanned anymore, but the update rate is reduced to ca. 110..120 uS
     (a little bit more than a quarter due to SR handling overhead)

    <LI> corrected DebounceCtr parameter (value was not passed to MIOS32).<BR>
      Now also part of the SRIO configuration, use: SRIO debounce_cycles=&lt;1..255&gt;

    <LI> added new meta event "KbBreakIsMake:&lt;keyboard-number&gt;" which will
      already trigger a note event when the break contact is activated
      (nice for playing organ style).<BR>
      Trigger it from a toggle button function as shown in cfg/test/kb_5.ngc
      Can be optionally set from the terminal as well with following
      command: "set kb &lt;keyboard-number&gt; break_is_make &lt;on|off&gt;"
      (e.g. "set kb 1 break_is_make on")

   <LI> added ain_mode=Toggle for AIN and AINSER events.<BR>
     Similar to ain_mode=Switch it can be used if buttons are connected to analog inputs.
     The event will toggle between the min and max value.

   <LI> .NGR: added "set_no_dump" command. It allows to change the "no_dump" flag
     which specifies if an EVENT_xxx should be sent during a DumpSnapshot.<BR>
     This feature can be used to handle different snapshot setups.

   <LI> STM32F4: support for bootloader "enforce_usb_device" flag

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI>the STM32F4 variant of the firmware supports USB Host mode!<BR>
     See also <A HREF="" TARGET="_blank">this forum article</A>.

   <LI> MIDI clock input ports now disabled by default to avoid feedback loops
     in various setups

   <LI> improved "ain_filter_delay_ms" implementation to support sensors (experimental stage)

   <LI> Covered new use case which allows to transform velocity values of incoming notes.
     See cfg/test/conev_6.ngc<BR>
     EVENT_RECEIVER and EVENT_SENDER have to be specified with "key=any", so that any
     key will be received and sent.

   <LI> support for DIN/DOUT emulation on digital IO ports J10A/J10B (LPC17: J10/J28)<BR>
     See examples in cfg/test/diocfg_1.ngc and cfg/test/diocfg_2.ngc

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> increased event pool size to 64k for MBHP_CORE_STM32F4

   <LI> added ain_mode=Switch for AIN and AINSER events.<BR>
     Can be used if buttons are connected to analog inputs. The event will send the
     min value if a 30% threshold is reached, and the max value if a 70% threshold
     is reached.<BR>
     Schematic:  Ground |----o Button o-----> analog input + 10k Pull-Up resistor to 3.3V (AIN) resp. 5V (AINSER)

   <LI> .ngr: added "change" command. It works similar to the "set" command, but
     only changes the value, and doesn't generate a MIDI event.

   <LI> .ngr: added "set_min" and "set_max" command which allows to modify the
     min/max range of a EVENT

   <LI> added new meta events to control the internal MIDI clock generator:
     MClkPlay, MClkStop, MClkPlayStop, MClkPause, MClkDecTempo, MClkIncTempo, MClkSetTempo.<BR>
     Example can be found under cfg/test/midiclk.ngc

   <LI> added new string formatting items:
     <LI>%t to display MIDI clock state (Play/Stop)
     <LI>%T to display tempo (BPM)

   <LI> added new MClk menu page to SCS to control the tempo w/o dedicated controllers

   <LI> fixed AOUT_NG module communication issue if AINSER was used in addition

   <LI> added new meta events:
     <UL CLASS=CL>
       <LI> CvPitchBend14Bit:<cv-channel>
       <LI> CvPitchBend7Bit:<cv-channel>
       <LI> CvPitchRange:<cv-channel>
       <LI> CvTransposeOctave:<cv-channel>
       <LI> CvTransposeSemitones:<cv-channel>
     see cfg/test/cvtransp.ngc for usage examples

   <LI> BUTTON toggle function can now also handle with inverted and reduced value ranges

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> added USB MIDI workaround for Windows

   <LI> if a EVENT_SENDER is part of a radio group, and got a new value, it will only
     send the MIDI event if the new value is matching with the specified range.<BR>
     Usage example: cfg/templates/pg300.ngc

     send also MIDI event.<BR>
     Usage example: cfg/templates/pg300.ngc

   <LI> support for MBHP_CORE_STM32F4 module

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> DOUT_MATRIX n=8 properly supported

   <LI> now up to 16 DOUT_MATRIX and DIN_MATRIX can be configured

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> .NGR: added "set_active" command. It can be alternatively used
     instead of the bank mechanism to activate/deactivate events,
     e.g. if the same events should be activated in multiple banks under
     certain conditions.<BR>
     A demo can be found under cfg/tests/multibnk.*

   <LI> it's now possible to set a static forward value independent from the
     actual value of the event which initiates the forwarding.<BR>

     E.g. with<BR>
<TT><PRE style="margin-left:20px; font-size:8pt">
     EVENT_xxx fwd_id=SENDER:1:42
     the SENDER:1 will always get value 42 for additional processing

   <LI> support for multiple MBHP_MF_NG modules in a chain.<BR>
     See cfg/test/mf_multi.ngc for a configuration example

   <LI> support for Logic Control Meters.<BR>
     Configuration example: see cfg/templates/logictrl.ngc
     (search for "meter")

   <LI> added new GLCD fonts (provided by Pcbatterij): Inverted and Tiny.<BR>
     In order to test these fonts, try following commands in the MIOS Terminal:<BR>
<TT><PRE style="margin-left:20px; font-size:8pt">
     lcd %C&t@(1:1:1)Tiny Font
     lcd %C&i@(1:1:1)Inverted Font

   <LI> fixed OSC receiver (avoided stack overflow)

   <LI> various minor bugfixes

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI>support for nrpn_format=MsbOnly (e.g. for MBSEQ V4 NRPNs)

   <LI> new EVENT parameter ain_sensor_mode:
     <UL CLASS=CL>
       <LI>With ain_sensor_mode=NoteOnOff, AIN and AINSER events, which are 
         assigned to Note events, send velocity 0 before a new Note is sent
         with velocity > 0 to avoid hanging notes.
       <LI>With ain_sensor_mode=None (default if no sensor mode specified),
         Note events will be generated as a continuous stream like CCs

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> new terminal commands:
     <LI> ngc: allows to execute a .NGC command directly
     <LI> ngr: allows to execute a .NGR command directly
     <LI> ngr_section: sets the ^section for .NGR execution
     <LI> ngr_value: sets the ^value for .NGR execution
     <LI> run: can now also executed without specified &lt;section&gt; &lt;value&gt;<BR>
       (the previously set values will be taken in this case)

   <LI> inofficial support for MAX72xx chains - see cfg/tests/max72xx.ngc for
     a configuration example (no schematic available yet)

   <LI> .NGR: fixed "delay statements in if branches" issue

   <LI> .NGR: added "set_lock" command. It allows to prevent, that received
     events will overwrite a value of an event.

   <LI> .NGR: the "set" command now also allows to change variables, e.g.:<BR>
       set ^value 1<BR>
       set ^section 2<BR>
       set ^bank 3<BR>
     the last one (^bank) will also switch MBNG to the specified bank

   <LI> .NGR: added variables ^dev, ^pat, ^bnk, ^ins, ^chn<BR>
     These are the same which can be used in SysEx strings, and which can
     be changed in a SCS page (e.g. the variables could also be used for
     different purposes)

   <LI> added new SCS menu page to execute the .NGR file with given
     ^section and ^value

   <LI> the AIN command now supports the "resolution" parameter

   <LI> the AINSER command now supports the "muxed" parameter.<BR>
     Use muxed=1 for the AINSER64 module (default), and muxed=0 for the AINSER8 module.

   <LI> AIN and AINSER events, which are assigned to Note events, send velocity 0
     before a new Note is sent with velocity > 0 to avoid hanging notes.

   <LI> added "ain_filter_delay_ms" to support sensors (experimental stage)

   <LI> EVENT_RECEIVER in conjunction with ^txt or ^txt56: if ^cursor is not specified
     in the SysEx stream, it will start at offset 0 from the specified lcd_pos=<device>:<x>:<y>

   <LI> EVENT ... syxdumppos now supports the full receiver range 1..4095 (previously
     only 1..15)

   <LI> the MIDI router forwards SysEx messages regardless if channels are filtered,
     or "All" is used. It's ensured that messages are only sent once if multiple
     router nodes forward to the same destination port.

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> bugfix for "single_usb" option

   <LI> support for LED Digits (7-segment displays).<BR>
     Configuration examples can be found under cfg/tests/leddig*.ngc

   <LI> the DIN_MATRIX and DOUT_MATRIX configuration command now allows to
     mirror the row pattern with "mirrored_row=1"

   <LI> added EVENT_RECEIVER emu_enc_mode and emu_enc_hw_id parameters.<BR>
     See cfg/tests/emu_enc.ngc for an usage example

   <LI> .NGR now allows to cast the ID type: (id) or (hw_id).<BR>
     E.g. (id)LED:1 will search for the EVENT specified with id=1, and
     (hw_id)LED:1 will search for the EVENT specified with hw_id=1<BR>

     if (hw_id) is used (default if no type specified), and no EVENT with
     a matching hw_id can be found, a virtual event will access the control
     element directly. This is currently only relevant for the SET command.<BR>

     This matches with the behaviour of the "EVENT ... fwd_id=<id>" function.

   <LI> added RunStop meta event to stop the execution of a .NGR file

   <LI> added "runstop" terminal command

   <LI> new .NGR command: set_rgb <id> <r:g:b><BR>
     E.g. "set_rgb (id)LED:1001 15:8:4"

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> the current AIN/AINSER pot values can now be taken over by the meta events
     RetrieveAinValues and RetrieveAinserValues
   <LI> new .NGR command: EXEC_META

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> support for run scripts.<BR>
     See also the <A HREF="midibox_ng_manual_ngr.html">new manual page</A>.

   <LI> the new SysEx command ^label has been added. It allows to insert the ASCII code
     of a label string into a SysEx stream.<BR>
     See also cfg/tests/syxlabel.ngc

   <LI> big GLCD font now correctly handled by ^txt and ^txt56 SysEx command

   <LI> line number now displayed on errors in .NGC, .NGL or .NGR file

   <LI> various bugfixes and improvements

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> support for the "single_usb" option, which can be enabled with the
     bootloader update application V1.012 ("set usb_single 1")<BR>

     Use this option if you are working with a Windows PC which can't handle
     the 4 USB ports correctly (e.g. stucking MIDI, Filebrowser operations are failing, etc.)

   <LI> added .NGS file which allows to store and restore values into
     up to 128 snapshots (0..127).<BR>
     The snapshot can be changed in the "Snap" menu in the SCS

   <LI> the "Snap" menu also allows to dump all events (e.g. after a new
     snapshot has been loaded)

   <LI> added new (hopefully selfexplaining) meta events:<BR>
     SetSnapshot, DecSnapshot, IncSnapshot, CycleSnapshot, LoadSnapshot,
     SaveSnapshot and DumpSnapshot<BR>
     Note that multiple meta commands can be assigned to an event, e.g.
     to set, auto-load and dump a snapshot from an encoder write:<BR>
     EVENT_ENC ... type=Meta meta=SetSnapshot meta=LoadSnapshot meta=DumpSnapshot

   <LI> added "no_dump" parameter to EVENT_xxx<BR>
     It specifies if an EVENT_xxx should be sent during a DumpSnapshot.<BR>

     no_dump=1 is set for EVENT_RECEIVER and EVENT_KB and events which are using
     type=Meta by default.<BR>
     If such events should be part of the dump, set no_dump=0

     For all other events/types no_dump=0 is set by default, set no_dump=1 if
     they shouldn't send MIDI events on a snapshot dump.

   <LI> new label printf-control "%S" prints the snapshot number 0..127

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
  <LI>added "rgb" parameter.<BR>
     See cfg/tests/rgb_*.ngc for various examples.

  <LI>added "spread_center" option to AIN/AINSER calibration.<BR>
     See cfg/tests/kb_1.ngc for an usage example.

  <LI>reduced memory consumption of EVENT_* definitions

  <LI>added MIOS Terminal commands: "show id" and "show hw_id"

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> added "Autoload" function: whenever a .NGC file has been uploaded via the
     MIOS Filebrowser, it will be automatically loaded, so that "load &lt;file&gt;" 
     doesn't need to be entered in the MIOS Terminal anymore.

   <LI> EVENT_LED_MATRIX: now expects the 'colour' parameter to address the
     red (colour=0), green (colour=1) or blue (colour=2) LED.<BR>

     Note that it's still possible to control the LEDs from a single incoming
     MIDI message, e.g. by assigning the 3 EVENT_LED_MATRIX entries to the
     same CC number.

     But now it's also possible to address the LEDs independent from each other.

   <LI> LEDs can now be dimmed with 16 brightness levels over the value range.<BR>
     This feature has to be enabled with dimmed=1 in the EVENT_* definition.<BR>
     Configuration example: cfg/tests/dimled.ngc

   <LI> LEDs in a matrix configuration can be dimmed as well. The dim range is the
     same (0..15), but the effective dim level is limited by the number of 
     scanned rows:
     <UL CLASS=CL>
        <LI> 4  rows: only 8 levels (0..1, 2..3, 4..5, 6..7, 8..9, 10..11, 12..13, 14..15)
        <LI> 8  rows: only 4 levels (0..3, 4..7, 8..11, 12..15)
        <LI> 16 rows: only 2 levels (0..7, 8..15)
     Configuration example: cfg/tests/dimled_m.ngc

   <LI> the new MIOS Terminal command "lcd" allows to directly output a (formatted)
     string to the LCD(s).<BR>
     E.g. try "lcd @(1:1:1)Hello World!"<BR>

     Note that terminal strings can also be sent via SysEx from a DAW:<BR>
     F0 00 00 7E 32 00 0D 00 &lt;ascii-text&gt; 0A F7

     Accordingly, this SysEx string will print "Hello World!" as well:<BR>
     F0 00 00 7E 32 00 0D 00 6C 63 64 20 40 28 31 3A 31 3A 31 29 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 0A F7

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> added EVENT_KB. See cfg/tests/kb_*.ngc for usage examples

   <LI> new LCD formats: %N prints the note name based on the specified MIDI event,
     and %n based on the event value

   <LI> new meta event: SwapValues - it swaps the primary and secondary value of an event.<BR>
     E.g. on a note event, velocity can be swapped with the key value.<BR>
     A usage example can be found in cfg/tests/kb_4.ngc, where the key and velocity
     value should be output by separate CV channels

   <LI> AIN/AINSER configuration: added pinrange parameter.<BR>
     It allows to specify individual ranges for the connected pots to calibrate
     the physical min/max limits.

   <LI> SCS configuration: added SCS num_items and lcd_pos parameters

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> it's now possible to use the same hw_id in multiple event definitions.
     This allows for example to send multiple MIDI events from a single
     control element (e.g. from a single button)

   <LI> the fwd_id now forwards to the event(s) with the given hw_id
     (which is the same like the "normal id" if not explicitely specified)

   <LI> implemented "conditional events".<BR>
     See the <A HREF="midibox_ng_manual_ngc.html">User Manual</A> for details and examples.

   <LI> the new meta event UpdateLcd allows to force a refresh of the complete
     LCD content. This is especially useful in conjunction with conditional
     events: whenever a source value has been changed (e.g. a button state),
     all events which have this value in their condition will print out the
     label if the specified condition matches.

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> LPC17: robustness of LCD driver has been improved

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> support for GLCD_SSD1306_ROTATED

   <LI> the ^txt and ^txt56 SysEx command now allows to map incoming characters to
     different cursor positions. An example can be found in cfg/templates/logictrl.ngc

   <LI> independent from this map feature, ^txt and ^txt56 now also take lcd_pos=... and
     label=... into account to set the initial LCD and cursor position, at which the
     message will start. The label can be used to change the GLCD font before the
     characters will be print.<BR>
     An example can be found in cfg/templates/logictrl.ngc as well.

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> the keyboard handler of MIDIbox KB has been integrated.
     The configuration commands are identical "set kb..." as documented at
     the <A HREF="">MIDIbox KB page</A>.

   <LI> keyboard parameters are also stored in the .NGC file, and can be
     configured from there.

   <LI> please note that the latency is 10 times higher than in the MIDIbox KB
     application! Each row is scanned in 320 uS (instead of 32 uS).<BR>
     This has to be considered in the velocity delay configuration.
     delay_slowest should be 100 (instead of 1000), and delay_fastest should
     be 5 (instead of 50)

   <LI> DOGM and SSD1306 GLCDs: support for more than 12 displays via DOUT shift
     registers connected to J28

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> overworked LCD handling: there is no buffer limitation anymore, any LCD and GLCD size
     is accepted, which especially means that GLCD fonts are displayed correctly
     independent from the specified number of connected devices.

   <LI> this change has freed some RAM which can be used for other purposes in future

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> The application boots a little bit faster now

   <LI> support for more than 2 LCDs.<BR>
     A documentation can be found in the <A HREF="midibox_ng_manual_lcd.html">User Manual</A>.

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> EVENT_SENDER and EVENT_RECEIVER can now also be assigned to a radio_group.<BR>
     This can not only be used in conjunction with BUTTON/LED radio groups, but also
     to distribute MIDI events to from receiver to multiple senders without
     forwarding chains (which then can be used for a different purpose)

   <LI> the "sdcard_format" command allows to format the connected SD Card with FAT32
     from the MIOS Terminal

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> SysEx: added ^cursor, ^txt and ^txt56 identifiers.<BR>
     They allow to send messages to the LCD via SysEx.<BR>
     A usage example can be found under cfg/templates/logictrl.ngc

   <LI> Labels: ^# allows to terminate a label.<BR>
     E.g. "^label^#MyText" prints "MyText" directly after the specified ^label

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> with a button assigned to 'type=Meta meta=MidiLearn range=0:1' it's now possible
     to activate a MIDI Learn mode which allows to assign an incoming MIDI event to any
     control element

   <LI> with 'type=Meta meta=MidiLearn range=0:2' also NRPN events can be learned (in this case,
     CC#62 and CC#63 will be ignored!)

   <LI> MIDI Learn mode can also be activated in the SCS menu

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> DIN_MATRIX with rows=4 now properly supported

   <LI> DIN_MATRIX/DOUT_MATRIX: it's now possible to invert the rows as well:<BR>
     inverted=1 or inverted_sel=1 will invert the selection lines<BR>
     inverted_row=1 will invert the row pattern

   <LI> configuration examples for the 16x4 Button/Duo-LED matrix are now
     available under cfg/tests/blm16x4*.ngc

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   o changed bank concept: the BANK command has been removed, instead the EVENT
     command got a new "hw_id" and "bank" parameter.<BR>
     A simple configuration example can be found under cfg/tests/encbanks.ngc<BR>
     More complex configuration examples under cfg/tests/bnk*.ngc

   <LI> added meta=CycleBank (increments bank, resets to 1 if last bank reached)<BR>

   <LI> additional new metas: SetBankOfHwId, DecBankOfHwId, IncBankOfHwId, CycleBankOfHwId

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> corrected LED pattern output for the case that the selection lines are inverted.

   <LI> the new SCS command allows to assign emulated button/encoder functions if the SCS
     shows the mainpage.<BR>
     A usage example can be found under cfg/templates/lre8x2.ngc

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> support for value MAPs.<BR>
     Various examples can be found under cfg/tests/map*.ngc

   <LI> support for EVENT_CV<BR>
     Various examples can be found under cfg/tests/cv*.ngc

   <LI> AINSER modules now disabled after RESET_HW<BR>
     They have to be explicitely enabled with the AINSER command

   <LI> the AINSER command now supports the "resolution" and "num_pins" parameters

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI>some minor code cleanup

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI>added "enc_speed_mode" parameter to EVENT_ENC<BR>
     Valid modes are:
     <UL CLASS=CL>
       <LI>Auto (speed automatically adapted according to the value range),
       <LI>Slow:0 .. Slow:7 (divides the increments),
       <LI>Normal (no special measure) and
       <LI>Fast:0 .. Fast:7 (accelerates the increments)
     A configuration example can be found under cfg/tests/encspeed.ngc

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> the patterns specified with LED_MATRIX_PATTERN are now reversed so that the
     bit orientation matches with the hardware.

   <LI> reversed value ranges (min value greater than max value) now properly supported

   <LI> support for ain_mode Direct/Snap/Relative/Parallax

   <LI> incoming MIDI values can now trigger the output of EVENT labels if the "fwd_to_lcd"
     option is set to 1 in the related EVENT_* definitions.

   <LI> support for "Radio Groups": button and LEDs can now be assigned to groups, which
     handle the same value over multiple elements.<BR>
     A configuration example can be found under: cfg/tests/radiogrp.ngc

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
   <LI> maximum length of DIN/DOUT shift register chain increased to 32.<BR>
     This means that up to 256 digital inputs, and 256 digital outputs are available.

   <LI> Number of virtual button and LED functions increased to 1024

   <LI> New meta event for speeding up ENC movements (EncFast, see .NGC documentation)

   <LI> New meta events for emulating SCS buttons/encoder (see .NGC documentation)

   <LI> Ethernet and OSC setup now stored with ETH/OSC commands in .NGC file

   <LI> SysEx variables are now stored with a SYSEX_VAR command in .NGC file

   <LI> EVENT_BUTTON_MATRIX and EVENT_LED_MATRIX now properly supported<BR>
     See cfg/tests/blm8x8.ngc for a simple configuration example

<IMG SRC="images/1x1dot.gif" height=20 ALT=""><BR>
    <LI>initial version</LI>