orchetect/MIDIKit

HUI Protocol Support

orchetect opened this issue · 0 comments

Features

  • HUI text value types: add static constructors (.lossy(String) etc.)

Fixes

  • HUICoreEvent.largeDisplay(slices:) is open-ended array of chars. When sending this event, the MIDI event encoder could validate this to pad/trim to exactly 10 chars.
  • fix: remote presence works most of the time but sometimes thinks remote is present when it's not

Pre-Release

  • HUITest example project:
    • update V-Pots and faders to use AudioKit’s Controls library
    • change local MIDIKit package linking over to remote SPM dependency
    • add text labels to HUITest project Fader view to match dbVU scale that is marked on the HUI device surface
  • update MIDIKit docs, publish to docs branch
  • unit tests

Done

  • add MIDI Device Inquiry SysEx response to HUISurface
  • V-Pot LEDs: add UnitInterval (0.0...1.0) value static constructors / translation methods for
  • HUITest example project: rename HUIHostHelper to HUIHostModel
  • test with ABAction/Arbiter to see if API changes make sense
  • jog wheel API
  • HUICoreEvent is slightly abstracted but should it be?
    • large display and time display cases carry their full display contents but should probably only carry the atomic changes (mirroring the actual MIDI encoded data)
      • maybe only HUIEvent (model change event) should carry these full strings, and when sending/receiving HUI only delta (partial) change messages should be sent when invoking transmitLargeDisplay() on HUIHostBank
    • should HUICoreEvent be internal and not public?
  • HUIHostBank: rename translator: HUIModel to model: and make it public? Allow more interactivity with the model for the host bank? Tricky part is causing updates to the model to be transmit to the bank’s midiOut handler.
  • how is V-Pot aboslute value (UInt7) being dealt with vs. delta change messages?
  • V Pot encoding: surface→host sends delta change value, but sending LED preset host→surface is an index number
  • Add CustomStringConvertible to ChannelStripComponent, and any other enums that need it
  • HUIHost should handle MIDI system reset msg 0xFF - add a HUICoreEvent case for it
  • HUI: run HUISwitch.allCases through a forEach {} unit test to see if they all encode and decode successfully
  • HUI: factor out calls to Logger.debug() - or have a Bool setting to enable logging? It only logs in DEBUG builds any way.
  • nomenclature consistency: all enum case/type names referring to HUI text/char displays should be named as their respective Display

Deferred / Cancelled

  • add HUISurface full state push?
    (not to host of course, there's nothing to push. but to the handler that is subscribed to hui surface change notifications)
    • by way of generating static model change notifications for all state members?
  • HUIHostBank additions
    • add model
    • add full model state push
      (to client surface, ie: when a client appears after a break in ping message stream (loss of surface presence))
    • have to find out if HUI surfaces understand receiving 0xFF system reset and can reset themselves to a known state, then HUISurface could simply do a diff of its model state against known default state and only push the diff'd state elements