Commit Graph

46 Commits

Author SHA1 Message Date
Dale Whinham
f1eaf2f43c Update copyright notices 2023-02-02 13:32:48 +00:00
nikitalita
d923423eda Add option to mirror display horizontally 2022-03-08 14:08:19 +00:00
Dale Whinham
07004eac54 Update copyright notices 2022-01-06 17:35:40 +00:00
Dale Whinham
e5b4403c7a Add support for Yamaha SysEx text/bitmap messages 2021-12-12 23:17:13 +00:00
Dale Whinham
f958bb8d80 Rework GM/GS/XG SysEx parsing, fix SC-55 text 2021-08-01 21:59:54 +01:00
Dale Whinham
11034a013a Add immediate image drawing 2021-06-26 00:00:46 +01:00
Dale Whinham
34fb0d5555 Add mt32-pi pixel-art logo conversion by Sparkman 2021-06-26 00:00:46 +01:00
Dale Whinham
545569f34b Center short messages on LCD 2021-06-25 23:57:13 +01:00
Dale Whinham
484dacd42f Major refactor of all LCD-related code
Previously, the LCD code needed to be aware of each synthesizer to know
how to draw their respective displays, which wasn't very maintainable.

Introduce a UI class where generic drawing utility functions and
"system" drawing code can be implemented, and move synth-specific
drawing to the synth classes themselves. This simplifies the LCD/OLED
drivers to just being interfaces to the hardware.

Also introduce a "MIDI monitor" class which tracks the state of all MIDI
activity per-synth for level meter drawing purposes. This ensures we
never miss a note; previously we were simply polling each synth engine
for its note velocities per LCD update, which was prone to missing fast
notes and also didn't account for channel volume or expression pedal.

Finally, enable support for 16-character wide displays (closes #58).
2021-06-25 23:57:13 +01:00
Dale Whinham
c49b22f613 Replace part level code with rect drawing function 2021-03-19 23:53:26 +00:00
Dale Whinham
22dc67e540 Add support for SH1106 OLED displays 2021-02-03 05:06:40 +00:00
Dale Whinham
126d04f2dc Minor cleanups in ssd1306 2021-02-03 05:06:40 +00:00
Dale Whinham
7cab781fa6 Move HD44780 pin definitions to .cpp file 2021-02-03 05:06:40 +00:00
Dale Whinham
59cf085d1c Update copyright notices 2021-02-03 05:06:40 +00:00
Dale Whinham
248d4e95e1 Fix backlight switching for I2C HD44780 LCDs 2021-01-04 00:28:48 +00:00
Dale Whinham
46a59f8de6 Fix part level rendering issues with HD44780
This fixes missing bar segments, missing bar bases, and "glitchy"
rendering of the part level meters when using a character LCD.
2021-01-04 00:28:48 +00:00
Dale Whinham
8fd2fdf270 Display MiSTer logo when MiSTer is detected 2020-12-20 20:42:19 +00:00
Dale Whinham
ea8f2b7164 Add support for SC-55 "graphics" SysEx messages 2020-12-19 16:46:57 +00:00
Dale Whinham
1134d6d251 Only update SSD1306 if framebuffer has changed
Avoid transferring the framebuffer over I2C if the contents haven't
changed. For now this is just implemented with two framebuffers and a
memcmp().
2020-12-19 15:04:35 +00:00
Dale Whinham
fe498765e1 Minor cleanups to SSD1306 driver 2020-12-19 15:04:35 +00:00
Dale Whinham
8deb330709 Print message on LCD before entering power save 2020-12-19 15:04:35 +00:00
Dale Whinham
51275f0358 Add WriteCommand() function to SSD1306 2020-12-19 15:02:47 +00:00
Dale Whinham
f8d5c41724 Display animated spinner when loading SoundFonts 2020-12-19 15:02:47 +00:00
Dale Whinham
6eef13de19 Add placeholder width parameter to SSD1306
Not used yet, only 128 pixels wide supported.
2020-11-26 01:19:47 +00:00
Dale Whinham
bfa040d027 Add bases to part level meters in SoundFont mode 2020-11-26 01:19:47 +00:00
Dale Whinham
dc77ecc790 Add wide/narrow bar character sets for HD44780 2020-11-22 23:16:44 +00:00
Dale Whinham
f6d76ec2f2 Rework bar drawing, implement for SoundFont synth 2020-11-22 23:16:44 +00:00
Dale Whinham
3630dc4c17 Combine HD44780 level drawing into single function 2020-11-22 23:16:44 +00:00
Dale Whinham
b711b89e74 Add SoundFontSynth LCD update stub method 2020-11-22 23:16:44 +00:00
Dale Whinham
78db034a9a Rename MT32LCD class to SynthLCD 2020-11-22 23:16:44 +00:00
Dale Whinham
a5fc1a9b79 Enable LCD backlight off on power save mode 2020-11-10 20:18:09 +00:00
Dale Whinham
16f0f7db22 Improve layout of 4-line HD44780 LCD 2020-11-08 18:24:32 +00:00
Dale Whinham
588adbf658 Allow LCDs to show temporary system messages
Improve status/error logging on the LCD.

Also fix clearing the screen on reboot by moving the call to Clear() to
the UI core and waiting for the UI core to be done before rebooting.
2020-11-08 18:24:32 +00:00
Dale Whinham
c4cf9a62c4 Allow deferred SSD1306 framebuffer write on clear 2020-11-08 18:24:32 +00:00
Dale Whinham
aad39d4716 Use timer delay loops for HD44780
Now that the LCD updates are done from a secondary core, the scheduler
is unavailable for implementing timing delays.

Replace them with simple delay loops from the CTimer class.
2020-11-08 18:24:32 +00:00
Dale Whinham
16b42f10e7 Move audio rendering to another CPU core
Refactor synth code to decouple it from the audio driver and instead use
the drivers' Write() methods to insert rendered audio into a queue from
CPU core 2.
2020-11-08 18:24:32 +00:00
Dale Whinham
aa73c3e5dd Bring up additional CPU cores 2020-11-08 18:24:32 +00:00
Dale Whinham
e7a8a70fe1 Add support for 64 pixel high SSD1306 displays
Changes to the velocity scaling logic were also made; mt32lcd now
normalizes the MT-32 part velocity to a floating point number between 0
and 1. The LCD driver can then translate this into a bar pixel height as
required.
2020-11-08 18:24:32 +00:00
Dale Whinham
e79897eb9a Add ability to invert display on SSD1306 2020-11-08 18:24:32 +00:00
Dale Whinham
2f7b5bf91f Update font to match real MT-32 (Sanyo DM2011) 2020-10-14 19:34:58 +01:00
Dale Whinham
8ba9c8a06a General code cleanup
Rename enums, functions parameters and class member variables so that
they match the Circle coding style more closely.

Replace /* ... */ comments with // comments.

Fixup some indentation issues/trailing whitespace.

Remove undefined functions and unused #defines.
2020-10-04 23:28:40 +01:00
Dale Whinham
86be95e103 Move level meters to upper row of LCD
Closes #15.
2020-10-03 18:53:32 +01:00
Dale Whinham
95d2ad52e4 Fix some cppcheck recommendations 2020-09-22 00:31:41 +01:00
Dale Whinham
c3c38c9ac9 Rename LCD class function parameters
Try to follow the Circle coding style more closely with regards to
function parameter names.
2020-09-19 21:53:43 +01:00
Dale Whinham
061ececf1e Refactor LCD code, add patch change/volume updates 2020-09-19 21:53:21 +01:00
Dale Whinham
8800729da6 Reorganize sources into src and include subdirs 2020-08-09 18:55:39 +01:00