This appears to be the initial blog entry. It will be used to discuss the state of the firmware.

Things the firmware does well

  • Runs tasks asynchronously. The event and messaging system is well-vetted. There are still outstanding feature and efficiency gripes, but those can wait, as they are minor.
  • Manages bus operations for SPI/i2c/UART. All i/o is either DMA-driven, or interrupt-driven in the rare cases where DMA doesn't make sense.
  • Recovers from critical failures. WWDG timer and bootloader jump routine work well. I've only had to open the wrist unit once since October.
  • Abstracts types. Types are transparently handled in the messaging system. There are no crossed wires in that machinery.
  • Manages the bluetooth module. The two channels over the UART are being multiplexed without problems. Data for the counterparty is never confused with data for the module itself.
  • Deals with sessions. Converts messages into outbound messages, respecting all types and even interconverting types where appropriate.
  • Handles heap safely. There is one known leak in one of the Measurement buffers. But other than that, the firmware runs for days without crashing.

Things the firmware does badly

  • Parses Arguments from inbound messages.
  • Isolates inscrutable type knowledge from counter-parties.
  • Reads IMU data.
  • Responds to CPLD-driven interrupts.
  • Handles the realtime clock peripheral. Still having a crash on init of RTC with external oscillator. Internal oscillator works fine. Might have chosen wrong cap values for bias...

Things the firmware doesn't do at all

  • Validates grammatical forms for messages. This might be ok if those messages were confined to our own system. Since we are exchanging these messages with the outside world, we should stick to the definition of those messages that we told them we are using.
  • Uses the OLED display.
  • Uses the microphones.
  • Uses the SD card.
  • Uses any of the ancillary sensors. The sensors are all validated to work. But there is a problem in the i2c read code that has prevented idle development time from going into ancillary sensor class improvement.

Short term goals

Assist Brent and Josh with bootstrapping the website. Make glove wearable.

Representation problems with IMU data ought to be fixed now. So the next problem is reading them reliably and fixing the memory-usage sins that cause the crash when too many reads occur.