This commit is contained in:
Joshua King
2026-10-17 17:26:25 -04:00
parent 19adc71fef
commit f672de484e
14 changed files with 2946 additions and 1661 deletions
+26 -1
View File
@@ -26,7 +26,7 @@ class FleetTests(unittest.TestCase):
extra.update(id=f'printer_{index}', entity_prefix=f'new_printer_{index}')
self.printers.append(extra)
package = generate(self.printers)
self.assertEqual(len(package['lvgl']['pages']), 7)
self.assertEqual(len([page for page in package['lvgl']['pages'] if not page.get('skip')]), 7)
self.assertEqual(len(package['script']), 7)
subscriptions = {entry['id']: entry['entity_id'] for entry in package['sensor']}
self.assertEqual(subscriptions['printer_7_progress'], 'sensor.new_printer_7_print_progress')
@@ -62,6 +62,31 @@ class FleetTests(unittest.TestCase):
self.assertLessEqual(props.get('x', 0) + props.get('width', 0), 800)
self.assertLessEqual(props.get('y', 0) + props.get('height', 0), 480)
def test_rgb565_primaries_reach_the_correct_panel_bits(self):
# mipi_rgb emits named RGB data pins with bytes exchanged, then copies
# LVGL RGB565 bytes straight into the ESP32 little-endian framebuffer.
# Exercise red, green, blue and combined primaries through that path.
class Loader(yaml.SafeLoader):
pass
for tag in ('!secret', '!include'):
Loader.add_constructor(tag, lambda loader, node: loader.construct_scalar(node))
config = yaml.load((HERE.parent / 'bambu-printer-display.yaml').read_text(), Loader=Loader)
display = config['display'][0]
pins = display['data_pins']
natural = pins['blue'] + pins['green'] + pins['red']
driver = natural[8:] + natural[:8]
order = {'big_endian': 'big', 'little_endian': 'little'}[config['lvgl']['byte_order']]
for color in (0xF800, 0x07E0, 0x001F, 0xFFFF, 0x07FF, 0xF81F):
memory_word = int.from_bytes(color.to_bytes(2, order), 'little')
panel_word = sum(((memory_word >> i) & 1) << natural.index(pin)
for i, pin in enumerate(driver))
self.assertEqual(panel_word, color, f'RGB565 color {color:#06x} is wired incorrectly')
def test_diagnostic_color_page_is_skipped_during_normal_navigation(self):
package = generate(self.printers)
page = next(page for page in package['lvgl']['pages'] if page['id'] == 'color_test_page')
self.assertTrue(page['skip'])
if __name__ == '__main__':
unittest.main()