ngc6589 / ILI9341_lvgl_driver_for_RP2040

LVGL ILI9341 Generic Driver for Raspberry Pi Pico(RP2040)
MIT License
1 stars 0 forks source link

lvgl master branch(v9-dev) で画面が表示されない #1

Closed ngc6589 closed 8 months ago

ngc6589 commented 10 months ago

git checkout e820dacd5 (2023年6月頃)のコミットでは当サンプルは動きますが、 2023年8月の lvgl 開発ブランチでは画面表示ができません。

lv_disp_set_flush_cb(disp, lcd_Flash_CB);

の液晶描画コールバック関数を登録するプロトタイプ宣言のうち

typedef void (*lv_disp_flush_cb_t)(struct _lv_disp_t * disp, const lv_area_t * area, lv_color_t * px_map);

lv_color_t * が uint8_t に変更されている。また lv_conf_template.h の修正が多く現状では何が原因かわからず。 少なくとも、現状で lv_conf_template.h を lv_conf.h にコピーし、#ifdef で有効にしただけでは Raspberry Pi Pico(RP2040) ではビルド時にメモリサイズが不足のメッセージが出てコンパイルに失敗します。 また、メモリサイズに関すると思われるところの値を修正するとビルドは通りますが、画面のデーターがデバッガで見る限り渡されていないように見え、液晶画面の描画行われていないように見える。 コールバック関数は呼ばれているけど描画データーが違うように見える。 原因が分かるまでは、LVGL を6月くらいのところで使用するのが今の回避策。

ngc6589 commented 9 months ago

おそらく、f753265a799bdd910881238cb36f8d731f6d8727 のコミット番号から動かないハズ。lv_micropython の描画は v9-dev を使用していますが、このコミット番号2日前の de97dba59b0ed0ff1213ece872d0397c3bd82880 で lvgl の更新追従を止めています。

commit f753265a799bdd910881238cb36f8d731f6d8727
Author: Gabor Kiss-Vamosi <kisvegabor@gmail.com>
Date:   Wed Jul 5 13:05:19 2023 +0200

    arch(draw): add parallel rendering architecture

    BREAKING CHANGE

    This is a huge update which introduces parallel rendering. lv_conf.h needs to be updated too.

commit 08870996d15e4bf4e8f3ca976991d35a76c7054e
Author: zhbi98 <1523022952@qq.com>
Date:   Tue Jul 4 05:39:31 2023 +0800

    chore(switch): use lv_obj_get_content_coords to calculate the indicator coordinates (#4336)

commit de97dba59b0ed0ff1213ece872d0397c3bd82880
Author: Joseph An <52297896+enyoukai@users.noreply.github.com>
Date:   Mon Jul 3 01:39:37 2023 -0700

    docs(st): updating get-started documentation (#4327)

commit 9783f2632e0911cfb9551dc422ae41969d559ab3
Author: Amir Gonnen <amirgonnen@gmail.com>
Date:   Mon Jul 3 11:25:18 2023 +0300

    fix(example): Remove struct cast (#4330)

commit 242654adb89d3ea2a47f59f5c746e57c1e7b2024
Author: Benign X <1341398182@qq.com>
Date:   Mon Jul 3 15:59:13 2023 +0800

    chore: fix warning build on macOS (#4334)

commit 123ea43dfcef2d46da0dd7ec26fc41714e6c10bb
Author: Gabor Kiss-Vamosi <kisvegabor@gmail.com>
Date:   Mon Jul 3 09:50:08 2023 +0200

    Update ROADMAP.rst

commit c4d91ca1bc70bcaedbaf034177f51c8d1a5df026
Author: Man, Jianting (Meco) <920369182@qq.com>
Date:   Mon Jun 26 16:13:16 2023 -0400

    doc(rt-thread): add new rt-thread support BSPs (#4320)

commit 987572b1edc6eadf8a79821138fb6fe516bdacf7
:

最終リリースは v8.3.9 なので、C言語版は v8 で動かすのもアリかと思います。修正点はわずかです。

#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/spi.h"
#include "hardware/dma.h"
#include "hardware/pio.h"
#include "ili9341.h"
#include "xpt2046.h"
#include "lvgl.h"

void lv_example_btn_1(void);
void lv_example_btn_3(void);

/*A static or global variable to store the buffers*/
static lv_disp_draw_buf_t disp_buf;
/*Static or global buffer(s). The second buffer is optional*/
static lv_color_t buf_1[280 * 10];
static lv_color_t buf_2[280 * 10];

static lv_obj_t *scr1;

int main()
{
        stdio_init_all();
        ili9341_Init(LCD_INV_LANDSCAPE, 1);
        xpt2046_Init(TP_INV_LANDSCAPE);

        lv_init();
        static lv_disp_drv_t disp_drv;
        lv_disp_drv_init(&disp_drv);
        disp_drv.draw_buf = &disp_buf;
        lv_disp_draw_buf_init(&disp_buf, buf_1, buf_2, 280 * 10);
        disp_drv.flush_cb = lcd_Flash_CB;
        disp_drv.hor_res = 320;
        disp_drv.ver_res = 240;
        lv_disp_t *disp;
        disp = lv_disp_drv_register(&disp_drv);

        /* Initialize the (dummy) input device driver */
        static lv_indev_drv_t indev_drv;
        lv_indev_drv_init(&indev_drv);
        indev_drv.type = LV_INDEV_TYPE_POINTER;
        indev_drv.read_cb = xpt2046_read_cb; // ADDED THIS LINE
        lv_indev_drv_register(&indev_drv);

lvgl の初期化を以前の方法に戻す。あとは ili9341.h ili9341.c のコールバック引数の型が

void lcd_Flash_CB(lv_disp_t *disp, const lv_area_t *area, lv_color_t *buf);
が
void lcd_Flash_CB(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *buf);

に変わるだけ。あとは v8 のコーディングをすれば使用可能です。

ngc6589 commented 8 months ago

https://github.com/lvgl/lvgl/issues/4752#issue-1977121445 こちらの修正をしてもらったので、v9-dev で表示できるようになりました。

ngc6589 commented 8 months ago

この Issue は Close します。