diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2020-06-08 22:04:24 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2020-06-09 08:09:59 -0400 |
commit | 7713986ae1a349b7270d50191f47a7ffae94ac1b (patch) | |
tree | 275168244b5d536881b7a75038eb53aa0fe6f2f3 /klippy/extras/display/display.py | |
parent | 1a7e4e51b32bb4eead6eab111293ced012871414 (diff) | |
download | kutter-7713986ae1a349b7270d50191f47a7ffae94ac1b.tar.gz kutter-7713986ae1a349b7270d50191f47a7ffae94ac1b.tar.xz kutter-7713986ae1a349b7270d50191f47a7ffae94ac1b.zip |
display: Make hd44780 glyphs configurable
Allow the 20x4 hd44780 screen glyphs to be customizable from the
config file.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'klippy/extras/display/display.py')
-rw-r--r-- | klippy/extras/display/display.py | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/klippy/extras/display/display.py b/klippy/extras/display/display.py index 78d6667c..ccf7c391 100644 --- a/klippy/extras/display/display.py +++ b/klippy/extras/display/display.py @@ -104,6 +104,18 @@ class PrinterLCD: self.screen_update_timer = self.reactor.register_timer( self.screen_update_event) # Configurable display + def _parse_glyph(self, config, glyph_name, data, width, height): + glyph_data = [] + for line in data.split('\n'): + line = line.strip().replace('.', '0').replace('*', '1') + if not line: + continue + if len(line) != width or line.replace('0', '').replace('1', ''): + raise config.error("Invalid glyph line in %s" % (glyph_name,)) + glyph_data.append(int(line, 2)) + if len(glyph_data) != height: + raise config.error("Glyph %s incorrect lines" % (glyph_name,)) + return glyph_data def load_config(self, config): # Load default display config file pconfig = self.printer.lookup_object('configfile') @@ -145,18 +157,15 @@ class PrinterLCD: if c.get_name() not in dg_main_names] for dg in dg_main + dg_def: glyph_name = dg.get_name()[len(dg_prefix):] - glyph_data = [] - for line in dg.get('data').split('\n'): - line = line.strip().replace('.', '0').replace('*', '1') - if not line: - continue - if len(line) != 16 or line.replace('0', '').replace('1', ''): - raise config.error("Invalid glyph line in %s" - % (glyph_name,)) - glyph_data.append(int(line, 2)) - if len(glyph_data) != 16: - raise config.error("Glyph %s must be 16 lines" % (glyph_name,)) - icons[glyph_name] = glyph_data + data = dg.get('data', None) + if data is not None: + idata = self._parse_glyph(config, glyph_name, data, 16, 16) + icons.setdefault(glyph_name, {})['icon16x16'] = idata + data = dg.get('hd44780_data', None) + if data is not None: + slot = dg.getint('hd44780_slot', minval=0, maxval=7) + idata = self._parse_glyph(config, glyph_name, data, 5, 8) + icons.setdefault(glyph_name, {})['icon5x8'] = (slot, idata) self.lcd_chip.set_glyphs(icons) # Initialization def handle_ready(self): |