lvgl / lv_binding_micropython

LVGL binding for MicroPython
MIT License
255 stars 163 forks source link

ST7789 #77

Closed jdtsmith closed 4 years ago

jdtsmith commented 4 years ago

This project implements a LittlevGL compatible display driver for the popular ST7789 display. Haven't tested it in C, but it would be wonderful to have that ported for use with the lvgl Micropython bindings.

amirgon commented 4 years ago

@jdtsmith would you like to port it and contribute it to lvgl?
That would be greatly appreciated! Feel free to open a PR and let me know if you need any help.

btw, the difference between st7789 and ili9341 might be small enough such that it would make sense to have the same driver for both. Currently supported driver for ili9341 is the hybrid python driver ili9341.py.

jdtsmith commented 4 years ago

Not in my ready skill set; is there a guide anywhere? BTW, now that MP on ESP32 supports viper, are high speed pure python drivers possible?

embeddedt commented 4 years ago

From my limited understanding it should be possible, it's just not implemented yet in the existing drivers. I believe @amirgon has a note for it in #56.

amirgon commented 4 years ago

now that MP on ESP32 supports viper, are high speed pure python drivers possible?

Viper is most useful when making some transformation on RAM by looping over many bytes.
A good example is imagetools.py which helps decoding PNG files. When decoding PNG file, we usually need to convert all pixels to another RGB format by looping over them and doing some arithmetic. This is where Viper really shines. But in other cases, such as in the case of a display driver, we want to do something a bit different. We want to prepare DMA message and call architecture specific functions to drive DMA. Viper can help to some extent, but best results would be to do that in C.

ili9341.py works by default in "hybrid" mode, where the "slowpath" flows are implemented in Python (initializing the display controller, configuring and initializating SPI, DMA etc.), and the "fastpath" flows are in C (the "flush" function implementation).

My guess is that if anyone ever wants to use ili9341.py for other display controllers, in many cases this can be achieved without touching the C side, only by changing the Python side.

Not in my ready skill set; is there a guide anywhere?

A guide for porting the display driver? Not really. Basically, you need to read the datasheet of your display driver and modify ili9341.py to support it. The skills you would need are: reading datasheets + writing python.

stale[bot] commented 4 years ago

This issue or pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.