App:Library:LVGL:docs:Porting:Display interface

提供: robot-jp wiki
ナビゲーションに移動検索に移動

https://docs.lvgl.io/8.2/porting/display.html

Display interface

英文 自動翻訳

To set up a display an lv_disp_buf_t and an lv_disp_drv_t variable have to be initialized.

  • lv_disp_buf_t contains internal graphic buffer(s).
  • lv_disp_drv_t contains callback functions to interact with the display and manipulate drawing related things.


ディスプレイをセットアップするには、lv_disp_buf_tlv_disp_drv_tの変数を初期化する必要があります。

  • lv_disp_buf_t内部グラフィックバッファが含まれています。
  • lv_disp_drv_tディスプレイと対話し、描画関連のものを操作するためのコールバック関数が含まれています。
戻る : Previous


Display buffer

英文 自動翻訳
lv_disp_buf_t can be initialized like this:
/*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[MY_DISP_HOR_RES * 10];
static lv_color_t buf_2[MY_DISP_HOR_RES * 10];
 
/*Initialize `disp_buf` with the buffer(s). With only one buffer use NULL instead buf_2 */
lv_disp_buf_init(&disp_buf, buf_1, buf_2, MY_DISP_HOR_RES*10);
lv_disp_buf_tは次のように初期化できます。
 /*バッファを格納する静的変数またはグローバル変数*/ 
 static  lv_disp_draw_buf_t  disp_buf ;
  
 /*静的またはグローバルバッファ。2番目のバッファーはオプションです*/ 
 static  lv_color_t  buf_1 [ MY_DISP_HOR_RES  *  10 ]; 
 static  lv_color_t  buf_2 [ MY_DISP_HOR_RES  *  10 ];
  
 /*バッファで`disp_buf`を初期化します。バッファが1つしかない場合は、代わりにNULLを使用しますbuf_2 */ 
 lv_disp_buf_init (&disp_buf  buf_1  buf_2  MY_DISP_HOR_RES * 10 ;
There are 3 possible configurations regarding the buffer size:


1.

One buffer LVGL draws the content of the screen into a buffer and sends it to the display.

The buffer can be smaller than the screen.

In this case, the larger areas will be redrawn in multiple parts.

If only small areas changes (e.g. button press) then only those areas will be refreshed.


バッファ サイズに関しては、次の 3 つの構成が可能です。


1.

One buffer LVGL は、画面のコンテンツをバッファーに描画し、それをディスプレイに送信します。

バッファは画面よりも小さい場合があります。

この場合、より大きな領域が複数の部分に再描画されます。

小さな領域のみが変更された場合 (ボタンを押すなど)、それらの領域のみが更新されます。

2.

Two non-screen-sized buffers having two buffers LVGL can draw into one buffer while the content of the other buffer is sent to display in the background.

DMA or other hardware should be used to transfer the data to the display to let the CPU draw meanwhile.

This way the rendering and refreshing of the display become parallel.

Similarly to the One buffer, LVGL will draw the display's content in chunks if the buffer is smaller than the area to refresh.

2.

Two non-screen-sized buffers having two buffers LVGL(2つのバッファを持つ非スクリーンサイズのバッファ) は、一方のバッファに描画でき、他方の表示用バッファの内容はバックグラウンドで送信されます。

DMA またはその他のハードウェアを使用してデータをディスプレイに転送し、その間に CPU が描画できるようにする必要があります。

このようにして、ディスプレイのレンダリングとリフレッシュが並行して行われます。

One bufferと同様に、バッファがリフレッシュする領域よりも小さい場合、LVGL はディスプレイのコンテンツをまとめて描画します。

3.

Two screen-sized buffers.

In contrast to Two non-screen-sized buffers LVGL will always provide the whole screen's content not only chunks.

This way the driver can simply change the address of the frame buffer to the buffer received from LVGL.

Therefore this method works the best when the MCU has an LCD/TFT interface and the frame buffer is just a location in the RAM.

You can measure the performance of your display configuration using the benchmark example.

3.

Two screen-sized buffers.

2 つの非画面サイズのバッファとは対照的に、LVGL はまとまったデータだけでなく画面全体のコンテンツを常に提供します。

このようにして、ドライバはフレーム バッファのアドレスを LVGL から受信したバッファに簡単に変更できます。

したがって、この方法は、MCU に LCD/TFT インターフェイスがあり、フレーム バッファが RAM 内にある場合に最適です。

ベンチマークの例を使用して、ディスプレイ設定のパフォーマンスを測定できます。

戻る : Previous

Display driver

英文 自動翻訳
Once the buffer initialization is ready the display drivers need to be initialized. In the most simple case only the following two fields of lv_disp_drv_t needs to be set:
  • buffer pointer to an initialized lv_disp_buf_t variable.
  • flush_cb a callback function to copy a buffer's content to a specific area of the display. lv_disp_flush_ready() needs to be called when flushing is ready. LVGL might render the screen in multiple chunks and therefore call flush_cb multiple times. To see which is the last chunk of rendering use lv_disp_flush_is_last().
バッファの初期化の準備ができたら、ディスプレイドライバを初期化する必要があります。最も単純なケースでは、lv_disp_drv_t の以下の2つのフィールドを設定するだけでよい。
  • buffer 初期化された lv_disp_buf_t 変数へのポインタ。
  • flush_cb バッファの内容をディスプレイの特定の領域にコピーするためのコールバック関数です。LVGLは画面を複数のチャンクでレンダリングすることがあるので、flush_cbを複数回呼び出すことがあります。どのチャンクが最後のレンダリングであるかを確認するには、lv_disp_flush_is_last() を使用します。
There are some optional data fields:
  • hor_res horizontal resolution of the display. (LV_HOR_RES_MAX by default from lv_conf.h).
  • ver_res vertical resolution of the display. (LV_VER_RES_MAX by default from lv_conf.h).
  • color_chroma_key a color which will be drawn as transparent on chrome keyed images. LV_COLOR_TRANSP by default from lv_conf.h).
  • user_data custom user data for the driver. Its type can be modified in lv_conf.h.
  • anti-aliasing use anti-aliasing (edge smoothing). LV_ANTIALIAS by default from lv_conf.h.
  • rotated and sw_rotate See the rotation section below.
  • screen_transp if 1 the screen can have transparent or opaque style. LV_COLOR_SCREEN_TRANSP needs to enabled in lv_conf.h.
オプションのデータフィールドがいくつかあります。
  • hor_res ディスプレイの水平解像度。(LV_HOR_RES_MAX、デフォルトはlv_conf.h).
  • ver_res ディスプレイの垂直解像度。(デフォルトは LV_VER_RES_MAX (lv_conf.h))。
  • color_chroma_key クロームキーの画像で透過的に描画される色。LV_COLOR_TRANSP (デフォルト:lv_conf.h)。
  • user_data ドライバのカスタムユーザーデータ。このタイプは、lv_conf.hで変更することができます。
  • アンチエイリアス アンチエイリアス(エッジスムージング)を使用する。LV_ANTIALIAS は lv_conf.h のデフォルトです。
  • rotatedとsw_rotate 以下の回転のセクションを参照してください。
  • screen_transp 1の場合、スクリーンは透明または不透明のスタイルを持つことができます。LV_COLOR_SCREEN_TRANSPは、lv_conf.hで有効にする必要があります。
To use a GPU the following callbacks can be used:
  • gpu_fill_cb fill an area in memory with colors.
  • gpu_blend_cb blend two memory buffers using opacity.
  • gpu_wait_cb if any GPU function return, while the GPU is still working LVGL, will use this function when required the be sure GPU rendering is ready.
GPU を使用するために、以下コールバックが使用可能です。
  • gpu_fill_cb メモリ内の領域を色で塗りつぶします。
  • gpu_blend_cb 不透明度を使用して 2 つのメモリバッファをブレンドします。
  • gpu_wait_cb GPU がまだ LVGL を使用しているときに GPU 関数が返った場合、GPU レンダリングの準備ができたことを確認するために必要なときに、この関数を使用します。
Note that, these functions need to draw to the memory (RAM) and not your display directly.

Some other optional callbacks to make easier and more optimal to work with monochrome, grayscale or other non-standard RGB displays:

これらの関数は、ディスプレイではなくメモリ(RAM)に直接描画する必要があることに注意してください。

モノクロ、グレースケール、その他の非標準RGBディスプレイでの作業をより簡単に、より最適にするためのオプションのコールバックもあります。

  • rounder_cb round the coordinates of areas to redraw. E.g. a 2x2 px can be converted to 2x8. It can be used if the display controller can refresh only areas with specific height or width (usually 8 px height with monochrome displays).
  • set_px_cb a custom function to write the display buffer. It can be used to store the pixels more compactly if the display has a special color format. (e.g. 1-bit monochrome, 2-bit grayscale etc.) This way the buffers used in lv_disp_buf_t can be smaller to hold only the required number of bits for the given area size. set_px_cb is not working with Two screen-sized buffers display buffer configuration.
  • monitor_cb a callback function tells how many pixels were refreshed in how much time.
  • clean_dcache_cb a callback for cleaning any caches related to the display
  • rounder_cb 再描画する領域の座標を丸める。例えば、2x2 px は 2x8 に変換される。これは、ディスプレイコントローラが特定の高さまたは幅の領域のみを更新できる場合に使用できます (通常、モノクロディスプレイの高さは 8 px です)。
  • set_px_cb 表示バッファを書き込むためのカスタム関数です。これは、ディスプレイが特殊な色形式である場合に、ピクセルをよりコンパクトに格納するために使用することができます。(set_px_cb は、2画面サイズのバッファを持つディスプレイバッファの構成では動作しません。
  • monitor_cb コールバック関数で、どれだけのピクセルがどれだけの時間でリフレッシュされたかを伝えます。
  • clean_dcache_cb ディスプレイに関連するあらゆるキャッシュをクリーニングするためのコールバックです。
To set the fields of lv_disp_drv_t variable it needs to be initialized with lv_disp_drv_init(&disp_drv).

And finally to register a display for LVGL lv_disp_drv_register(&disp_drv) needs to be called.

変数lv_disp_drv_tのフィールドを設定するには、lv_disp_drv_init(&disp_drv)で初期化する必要があります。

最後に、LVGLにディスプレイを登録するために、 lv_disp_drv_register(&disp_drv) を呼び出す必要があります。

All together it looks like this:

 static lv_disp_drv_t disp_drv;          /*A variable to hold the drivers. Must be static or global.*/
 lv_disp_drv_init(&disp_drv);            /*Basic initialization*/
 disp_drv.buffer = &disp_buf;          /*Set an initialized buffer*/
 disp_drv.flush_cb = my_flush_cb;        /*Set a flush callback to draw to the display*/
 lv_disp_t * disp;
 disp = lv_disp_drv_register(&disp_drv); /*Register the driver and save the created display objects*/


全体として、次のようになります。

 static lv_disp_drv_t disp_drv;          /*ドライバーを保持する変数。静的またはグローバルである必要があります。*/ 
 lv_disp_drv_init(&disp_drv);            /*基本的な初期化*/ 
 disp_drv.buffer = &disp_buf;          /*初期化されたバッファを設定します*/ 
 disp_drv.flush_cb = my_flush_cb;        /*ディスプレイに描画するフラッシュコールバックを設定します*/ 
 lv_disp_t * disp;
 disp = lv_disp_drv_register(&disp_drv); /*ドライバーを登録し、作成した表示オ​​ブジェクトを保存します*/
Here are some simple examples of the callbacks:
 void my_flush_cb(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
 {
     /*The most simple case (but also the slowest) to put all pixels to the screen one-by-one*/
     int32_t x, y;
     for(y = area->y1; y <= area->y2; y++) {
         for(x = area->x1; x <= area->x2; x++) {
             put_px(x, y, *color_p);
             color_p++;
         }
     }
 
     /* IMPORTANT!!!
      * Inform the graphics library that you are ready with the flushing*/
     lv_disp_flush_ready(disp_drv);
 }
 
 void my_gpu_fill_cb(lv_disp_drv_t * disp_drv, lv_color_t * dest_buf, const lv_area_t * dest_area, const lv_area_t * fill_area, 
lv_color_t color);
 {
     /*It's an example code which should be done by your GPU*/
     uint32_t x, y;
     dest_buf += dest_width * fill_area->y1; /*Go to the first line*/
 
     for(y = fill_area->y1; y < fill_area->y2; y++) {
         for(x = fill_area->x1; x < fill_area->x2; x++) {
             dest_buf[x] = color;
         }
         dest_buf+=dest_width;    /*Go to the next line*/
     }
 }
 
 void my_gpu_blend_cb(lv_disp_drv_t * disp_drv, lv_color_t * dest, const lv_color_t * src, uint32_t length, lv_opa_t opa)
 {
     /*It's an example code which should be done by your GPU*/
     uint32_t i;
     for(i = 0; i < length; i++) {
         dest[i] = lv_color_mix(dest[i], src[i], opa);
     }
 } 

 void my_rounder_cb(lv_disp_drv_t * disp_drv, lv_area_t * area)
 {
   /* Update the areas as needed.
    * For example it makes the area to start only on 8th rows and have Nx8 pixel height.*/
    area->y1 = area->y1 & 0x07;
    area->y2 = (area->y2 & 0x07) + 8;
 }
 
 void my_set_px_cb(lv_disp_drv_t * disp_drv, uint8_t * buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y, lv_color_t color, lv_opa_t opa)
 {
    /* Write to the buffer as required for the display.
     * For example it writes only 1-bit for monochrome displays mapped vertically.*/
    buf += buf_w * (y >> 3) + x;
    if(lv_color_brightness(color) > 128) (*buf) |= (1 << (y % 8));
    else (*buf) &= ~(1 << (y % 8));
 }
 
 void my_monitor_cb(lv_disp_drv_t * disp_drv, uint32_t time, uint32_t px)
 {
   printf("%d px refreshed in %d ms\n", time, ms);
 }
 
 void my_clean_dcache_cb(lv_disp_drv_t * disp_drv, uint32)
 {
   /* Example for Cortex-M (CMSIS) */
   SCB_CleanInvalidateDCache();
 }

コールバックの簡単な例を次に示します。

  void  my_flush_cb lv_disp_drv_t  *  disp_drv  const  lv_area_t  *  area  lv_color_t  *  color_p 
  { 
      /*すべてのピクセルを1つずつ画面に配置する最も単純なケース(ただし最も遅いケース)
       *`put_px`は単なる例です。あなたが実装する必要があります。*/ 
      int32_t  x  y ; 
      for y  = 面積-> y1 ;  y  <= 面積-> y2 ;  y ++  { 
          for x  = 面積-> x1 ;  x  <= 面積-> x2 ;  x ++  { 
              put_px x  y  * color_p ; 
              color_p ++ ; 
          } 
      }
  
      /* 重要!!!
       *フラッシュの準備ができていることをグラフィックライブラリに通知します*/ 
      lv_disp_flush_ready disp_drv ; 
  }
  
  void  my_gpu_fill_cb lv_disp_drv_t  *  disp_drv  lv_color_t  *  dest_buf  const  lv_area_t  *  dest_area  const  lv_area_t  *  fill_area  lv_color_t  color ; 
  { 
      /*これはGPUで実行する必要のあるサンプルコードです*/ 
      uint32_t  x  y ; 
      dest_buf  + =  dest_width  *  fill_area- > y1 ;  /*最初の行に移動します*/
  
      for y  =  fill_area- > y1 ;  y  <  fill_area- > y2 ;  y ++  { 
          for x  =  fill_area- > x1 ;  x  <  fill_area- > x2 ;  x ++  { 
              dest_buf [ x ]  =  color ; 
          } 
          dest_buf + = dest_width ;     /*次の行に移動します*/ 
      } 
  }
  
 void my_gpu_blend_cb(lv_disp_drv_t * disp_drv, lv_color_t * dest, const lv_color_t * src, uint32_t length, lv_opa_t opa)
 {
     /*これはGPUで実行する必要があるサンプルコードです*/
     uint32_t i;
     for(i = 0; i < length; i++) {
         dest[i] = lv_color_mix(dest[i], src[i], opa);
     }
 }
  
  void  my_rounder_cb lv_disp_drv_t  *  disp_drv  lv_area_t  *  area 
  { 
    /*必要に応じて領域を更新します。
     *たとえば、領域は8行目から始まり、Nx8ピクセルの高さになります。*/ 
     area- > y1  =  area- > y1   0x07 ; 
     面積-> y2  =  (面積-> y2   0x07  +  8 ; 
  }
  
  void  my_set_px_cb lv_disp_drv_t  *  disp_drv  uint8_t  *  buf  lv_coord_t  buf_w  lv_coord_t  x  lv_coord_t  y  lv_color_t  color  lv_opa_t opa  { 
  / 
     *バッファに書き込む 
      *たとえば、垂直方向にマッピングされたモノクロディスプレイの場合は1ビットのみを書き込みます。*/ 
     buf  + =  buf_w  *  y  >>  3  +  x ; 
     if lv_color_brightness color  >  128  * buf  | =  1  <<  y   8 )); 
     else  * buf  =  〜(1  <<  y   8 )); 
  }
  
  void  my_monitor_cb lv_disp_drv_t  *  disp_drv  uint32_t  time  uint32_t  px 
  { 
    printf "%d pxが%d msで更新されました\n "  time  ms ; 
  }
  
  void  my_clean_dcache_cb lv_disp_drv_t  *  disp_drv  uint32 
  { 
    /* Cortex-M(CMSIS)の例 */ 
    SCB_CleanInvalidateDCache (); 
  }
戻る : Previous

Rotation

英文 自動翻訳
LVGL supports rotation of the display in 90 degree increments. You can select whether you'd like software rotation or hardware rotation.


If you select software rotation (sw_rotate flag set to 1), LVGL will perform the rotation for you. Your driver can and should assume that the screen width and height have not changed. Simply flush pixels to the display as normal. Software rotation requires no additional logic in your flush_cb callback.


There is a noticeable amount of overhead to performing rotation in software, which is why hardware rotation is also available.

In this mode, LVGL draws into the buffer as though your screen now has the width and height inverted.

You are responsible for rotating the provided pixels yourself.

LVGLは、90度刻みでのディスプレイの回転をサポートします。ソフトウェアローテーションまたはハードウェアローテーションのどちらを使用するかを選択できます。

ソフトウェアローテーション(sw_rotateフラグを1に設定)を選択すると、LVGLがローテーションを実行します。ドライバーは、画面の幅と高さが変更されていないと想定できます。通常どおり、ピクセルをディスプレイにフラッシュするだけです。ソフトウェアローテーションでは、flush_cbコールバックに追加のロジックは必要ありません。


ソフトウェアで回転を行うにはかなりのオーバーヘッドがあるため、ハードウェアでの回転も可能になっています。

このモードでは、LVGLは、あたかも画面の幅と高さが反転しているようにバッファに描画します。

提供されたピクセルを回転させるのはあなた自身の責任です。

The default rotation of your display when it is initialized can be set using the rotated flag.

The available options are LV_DISP_ROT_NONE, LV_DISP_ROT_90, LV_DISP_ROT_180, or LV_DISP_ROT_270. The rotation values are relative to how you would rotate the physical display in the clockwise direction.

Thus, LV_DISP_ROT_90 means you rotate the hardware 90 degrees clockwise, and the display rotates 90 degrees counterclockwise to compensate.


(Note for users upgrading from 7.10.0 and older: these new rotation enum values match up with the old 0/1 system for rotating 90 degrees, so legacy code should continue to work as expected. Software rotation is also disabled by default for compatibility.)


Display rotation can also be changed at runtime using the lv_disp_set_rotation(disp, rot) API.

Support for software rotation is a new feature, so there may be some glitches/bugs depending on your configuration.

If you encounter a problem please open an issue on GitHub.

初期化時のディスプレイのデフォルトの回転は、rotatedフラグを使用して設定できます。

使用可能なオプションは、LV_DISP_ROT_NONELV_DISP_ROT_90LV_DISP_ROT_180LV_DISP_ROT_270LV_DISP_ROT_90です。

回転値は、物理ディスプレイを時計回りに回転させる方法を基準にしています。

つまり、ハードウェアを時計回りに90度回転させ、ディスプレイを反時計回りに90度回転させて補正することを意味します。

(7.10.0以前からアップグレードするユーザーへの注意:これらの新しい回転列挙値は、90度回転する古い0/1システムと一致するため、レガシーコードは引き続き期待どおりに機能するはずです。互換性のために、ソフトウェアの回転もデフォルトで無効になっています。)


ディスプレイの回転は、lv_disp_set_rotation(disp, rot)APIを使用して実行時に変更することもできます。


ソフトウェアローテーションのサポートは新機能であるため、構成によっては不具合やバグが発生する場合があります。

問題が発生した場合は、GitHubで問題を開いてください。

戻る : Previous


API

@description Display Driver HAL interface header file

Typedefs

英文 自動翻訳
typedef struct _lv_disp_drv_t lv_disp_drv_t
Display Driver structure to be registered by HAL.

typedef struct _lv_disp_t lv_disp_t

Display structure.
Note : lv_disp_drv_t should be the first member of the structure.

typedef struct _lv_disp_drv_t lv_disp_drv_t

HALが登録するドライバ構造を表示します。

typedef struct _lv_disp_t lv_disp_t

表示構造。
lv_disp_drv_tは構造体の最初のメンバーである必要があります。
戻る : Previous

Enums

enum lv_disp_size_t

Values:
enumerator LV_DISP_SIZE_SMALL
enumerator LV_DISP_SIZE_MEDIUM
enumerator LV_DISP_SIZE_LARGE
enumerator LV_DISP_SIZE_EXTRA_LARGE

Functions

英文 自動翻訳
void lv_disp_drv_init(lv_disp_drv_t *driver)
Initialize a display driver with default values. It is used to have known values in the fields and not junk in memory. After it you can safely set only the fields you need.
Parameters:
driver -- pointer to driver variable to initialize

void lv_disp_draw_buf_init(lv_disp_draw_buf_t *draw_buf, void *buf1, void *buf2, uint32_t size_in_px_cnt)

Initialize a display buffer
Parameters
  • draw_buf -- pointer lv_disp_draw_buf_t variable to initialize
  • buf1 -- A buffer to be used by LVGL to draw the image. Always has to specified and can't be NULL. Can be an array allocated by the user. E.g. static lv_color_t disp_buf1[1024 * 10] Or a memory address e.g. in external SRAM
  • buf2 -- Optionally specify a second buffer to make image rendering and image flushing (sending to the display) parallel. In the disp_drv->flush you should use DMA or similar hardware to send the image to the display in the background. It lets LVGL to render next frame into the other buffer while previous is being sent. Set to NULL if unused.
  • size_in_px_cnt -- size of the buf1 and buf2 in pixel count.

lv_disp_t *lv_disp_drv_register(lv_disp_drv_t *driver)

Register an initialized display driver. Automatically set the first display as active.
Parameters
driver -- pointer to an initialized 'lv_disp_drv_t' variable. Only its pointer is saved!
Returns
pointer to the new display or NULL on error
void lv_disp_drv_init(lv_disp_drv_t * driver)
デフォルト値でディスプレイドライバを初期化します。これは、フィールドに既知の値を持ち、メモリにジャンクではないために使用されます。その後、必要なフィールドのみを安全に設定できます。
パラメーター:
driver-初期化するドライバー変数へのポインター

void lv_disp_draw_buf_init(lv_disp_draw_buf_t * draw_buf、void * buf1、void * buf2、uint32_t size_in_px_cnt)

表示バッファを初期化します
パラメーター
  • draw_buf--初期化するポインタlv_disp_draw_buf_t変数
  • buf1-画像を描画するためにLVGLによって使用されるバッファー。常に指定する必要があり、NULLにすることはできません。ユーザーが割り当てた配列にすることができます。例:static lv_color_t disp_buf1[1024 * 10]または外部SRAMのメモリアドレス
  • buf2-オプションで、画像のレンダリングと画像のフラッシュ(ディスプレイへの送信)を並行させるための2番目のバッファーを指定します。では、disp_drv->flushDMAまたは同様のハードウェアを使用して、画像をバックグラウンドのディスプレイに送信する必要があります。これにより、LVGLは、前のフレームが送信されている間、次のフレームを他のバッファーにレンダリングできます。NULL未使用の場合はに設定します。
  • size_in_px_cnt-およびのサイズbuf1buf2ピクセル数。

lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)

初期化されたディスプレイドライバを登録します。最初のディスプレイを自動的にアクティブに設定します。
パラメーター
driver-初期化された'lv_disp_drv_t'変数へのポインター。そのポインタだけが保存されます!
戻り値
新しい表示へのポインタまたはエラーの場合はNULL
void lv_disp_drv_update(lv_disp_t *disp, lv_disp_drv_t *new_drv)
Update the driver in run time.
Parameters
  • disp -- pointer to a display. (return value of lv_disp_drv_register)
  • new_drv -- pointer to the new driver

void lv_disp_remove(lv_disp_t *disp)

Remove a display
Parameters
disp -- pointer to display

void lv_disp_set_default(lv_disp_t *disp)

Set a default display. The new screens will be created on it by default.
Parameters
disp -- pointer to a display

lv_disp_t *lv_disp_get_default(void)

Get the default display
Returns
pointer to the default display

lv_coord_t lv_disp_get_hor_res(lv_disp_t *disp)

Get the horizontal resolution of a display
Parameters
disp -- pointer to a display (NULL to use the default display)
Returns
the horizontal resolution of the display
void lv_disp_drv_update(lv_disp_t * disp、lv_disp_drv_t * new_drv)
実行時にドライバーを更新します。
パラメーター
  • disp--ディスプレイへのポインタ。(の戻り値lv_disp_drv_register
  • new_drv--新しいドライバへのポインタ

void lv_disp_remove(lv_disp_t * disp)

ディスプレイを取り外す
パラメーター
disp--表示するポインタ

void lv_disp_set_default(lv_disp_t * disp)

デフォルトの表示を設定します。デフォルトでは、新しい画面が作成されます。
パラメーター
disp--ディスプレイへのポインタ

lv_disp_t * lv_disp_get_default(void)

デフォルトの表示を取得する
戻り値
デフォルト表示へのポインタ

lv_coord_t lv_disp_get_hor_res(lv_disp_t * disp)

ディスプレイの水平解像度を取得する
パラメーター
disp-ディスプレイへのポインタ(デフォルトのディスプレイを使用する場合はNULL)
戻り値
ディスプレイの水平解像度
lv_coord_t lv_disp_get_ver_res(lv_disp_t *disp)
Get the vertical resolution of a display
Parameters
disp -- pointer to a display (NULL to use the default display)
Returns
the vertical resolution of the display

lv_coord_t lv_disp_get_physical_hor_res(lv_disp_t *disp)

Get the full / physical horizontal resolution of a display
Parameters
disp -- pointer to a display (NULL to use the default display)
Returns
the full / physical horizontal resolution of the display

lv_coord_t lv_disp_get_physical_ver_res(lv_disp_t *disp)

Get the full / physical vertical resolution of a display
Parameters
disp -- pointer to a display (NULL to use the default display)
Returns
the full / physical vertical resolution of the display
lv_coord_t lv_disp_get_ver_res(lv_disp_t * disp)
ディスプレイの垂直解像度を取得する
パラメーター
disp-ディスプレイへのポインタ(デフォルトのディスプレイを使用する場合はNULL)
戻り値
ディスプレイの垂直解像度

lv_coord_t lv_disp_get_physical_hor_res(lv_disp_t * disp)

ディスプレイのフル/物理的な水平解像度を取得します
パラメーター
disp-ディスプレイへのポインタ(デフォルトのディスプレイを使用する場合はNULL)
戻り値
ディスプレイのフル/物理的な水平解像度

lv_coord_t lv_disp_get_physical_ver_res(lv_disp_t * disp)

ディスプレイのフル/物理的な垂直解像度を取得します
パラメーター
disp-ディスプレイへのポインタ(デフォルトのディスプレイを使用する場合はNULL)
戻り値
ディスプレイのフル/物理的な垂直解像度
lv_coord_t lv_disp_get_offset_x(lv_disp_t *disp)
Get the horizontal offset from the full / physical display
Parameters
disp -- pointer to a display (NULL to use the default display)
Returns
the horizontal offset from the full / physical display

lv_coord_t lv_disp_get_offset_y(lv_disp_t *disp)

Get the vertical offset from the full / physical display
Parameters
disp -- pointer to a display (NULL to use the default display)
Returns
the horizontal offset from the full / physical display
lv_coord_t lv_disp_get_offset_x(lv_disp_t * disp)
フル/物理ディスプレイから水平オフセットを取得します
パラメーター
disp-ディスプレイへのポインタ(デフォルトのディスプレイを使用する場合はNULL)
戻り値
フル/物理ディスプレイからの水平オフセット

lv_coord_t lv_disp_get_offset_y(lv_disp_t * disp)

フル/物理ディスプレイから垂直オフセットを取得します
パラメーター
disp-ディスプレイへのポインタ(デフォルトのディスプレイを使用する場合はNULL)
戻り値
フル/物理ディスプレイからの水平オフセット
bool lv_disp_get_antialiasing(lv_disp_t *disp)
Get if anti-aliasing is enabled for a display or not
Parameters
disp -- pointer to a display (NULL to use the default display)
Returns
true: anti-aliasing is enabled: false: disabled

lv_coord_t lv_disp_get_dpi(const lv_disp_t *disp)

Get the DPI of the display
Parameters
disp -- pointer to a display (NULL to use the default display)
Returns
dpi of the display

void lv_disp_set_rotation(lv_disp_t *disp, lv_disp_rot_t rotation)

Set the rotation of this display.
Parameters
  • disp -- pointer to a display (NULL to use the default display)
  • rotation -- rotation angle
bool lv_disp_get_antialiasing(lv_disp_t * disp)
ディスプレイに対してアンチエイリアシングが有効になっているかどうかを取得します
パラメーター
disp-ディスプレイへのポインタ(デフォルトのディスプレイを使用する場合はNULL)
戻り値
true:アンチエイリアシングが有効:false:無効

lv_coord_t lv_disp_get_dpi(con​​st lv_disp_t * disp)

ディスプレイのDPIを取得する
パラメーター
disp-ディスプレイへのポインタ(デフォルトのディスプレイを使用する場合はNULL)
戻り値
ディスプレイのdpi

void lv_disp_set_rotation(lv_disp_t * disp、lv_disp_rot_trotation)

このディスプレイの回転を設定します。
パラメーター
  • disp-ディスプレイへのポインタ(デフォルトのディスプレイを使用する場合はNULL)
  • 回転-回転角
lv_disp_rot_t lv_disp_get_rotation(lv_disp_t *disp)
Get the current rotation of this display.
Parameters
disp -- pointer to a display (NULL to use the default display)
Returns
rotation angle

lv_disp_t *lv_disp_get_next(lv_disp_t *disp)

Get the next display.
Parameters
disp -- pointer to the current display. NULL to initialize.
Returns
the next display or NULL if no more. Give the first display when the parameter is NULL

lv_disp_draw_buf_t *lv_disp_get_draw_buf(lv_disp_t *disp)

Get the internal buffer of a display
Parameters
disp -- pointer to a display
Returns
pointer to the internal buffers
lv_disp_rot_t lv_disp_get_rotation(lv_disp_t * disp)
このディスプレイの現在の回転を取得します。
パラメーター
disp-ディスプレイへのポインタ(デフォルトのディスプレイを使用する場合はNULL)
戻り値
回転角度

lv_disp_t * lv_disp_get_next(lv_disp_t * disp)

次の表示を取得します。
パラメーター
disp--現在の表示へのポインタ。初期化するにはNULL。
戻り値
次の表示、またはそれ以上ない場合はNULL。パラメータがNULLの場合に最初の表示を行います

lv_disp_draw_buf_t * lv_disp_get_draw_buf(lv_disp_t * disp)

ディスプレイの内部バッファを取得する
パラメーター
disp--ディスプレイへのポインタ
戻り値
内部バッファへのポインタ
void lv_disp_drv_use_generic_set_px_cb(lv_disp_drv_t *disp_drv, lv_img_cf_t cf)struct _lv_disp_draw_buf_t
#include <lv_hal_disp.h> Structure for holding display buffer information.
Public Members
void *buf1
First display buffer.
void *buf2
Second display buffer.
void * buf_act
uint32_t size
lv_area_t area
int flushing
int flashing_last
uint32_t last_area
uint32_t last_part
void lv_disp_drv_use_generic_set_px_cb(lv_disp_drv_t * disp_drv、lv_img_cf_t cf)

struct lv_disp_draw_buf_t

#include<lv_hal_disp.h>ディスプレイバッファ情報を保持するための構造。
パブリックメンバー
void * buf1
最初の表示バッファ。
void * buf2
2番目の表示バッファ。
void * buf_act
uint32_t size
lv_area_t area
int flushing
int flashing_last
uint32_t last_area
uint32_t last_part
struct _lv_disp_drv_t
#include <lv_hal_disp.h> Display Driver structure to be registered by HAL. Only its pointer will be saved in lv_disp_t so it should be declared as static lv_disp_drv_t my_drv or allocated dynamically.
Public Members
lv_coord_t hor_res
Horizontal resolution.
lv_coord_t ver_res
Vertical resolution.
lv_coord_t hysical_hor_res
Horizontal resolution of the full / physical display. Set to -1 for fullscreen mode.
lv_coord_t physical_ver_res
Vertical resolution of the full / physical display. Set to -1 for fullscreen mode.
lv_coord_t offset_x
Horizontal offset from the full / physical display. Set to 0 for fullscreen mode.
lv_coord_t offset_y
Vertical offset from the full / physical display. Set to 0 for fullscreen mode.
lv_disp_draw_buf_t *draw_buf
Pointer to a buffer initialized with lv_disp_draw_buf_init(). LVGL will use this buffer(s) to draw the screens contents
uint32_t direct_mode
1: Use screen-sized buffers and draw to absolute coordinates
uint32_t full_refresh
1: Always make the whole screen redrawn
uint32_t sw_rotate
1: use software rotation (slower)
uint32_t antialiasing
1: anti-aliasing is enabled on this display.
uint32_t rotated
1: turn the display by 90 degree.
Warning: Does not update coordinates for you!
uint32_t screen_transp
uint32_t dpi
Handle if the screen doesn't have a solid (opa == LV_OPA_COVER) background. Use only if required because it's slower.
void (*flush_cb)(struct _lv_disp_drv_t *disp_drv, const lv_area_t *area, lv_color_t *color_p)
DPI (dot per inch) of the display. Default value is LV_DPI_DEF. MANDATORY: Write the internal buffer (draw_buf) to the display. 'lv_disp_flush_ready()' has to be called when finished
void (*rounder_cb)(struct _lv_disp_drv_t *disp_drv, lv_area_t *area)
OPTIONAL: Extend the invalidated areas to match with the display drivers requirements E.g. round y to, 8, 16 ..) on a monochrome display
void (*set_px_cb)(struct _lv_disp_drv_t *disp_drv, uint8_t *buf, lv_coord_t buf_w, lv_coord_t x, lv_coord_t y, lv_color_t color, lv_opa_t opa)
OPTIONAL: Set a pixel in a buffer according to the special requirements of the display Can be used for color format not supported in LittelvGL. E.g. 2 bit -> 4 gray scales
Note: Much slower then drawing with supported color formats.
void (*clear_cb)(struct _lv_disp_drv_t *disp_drv, uint8_t *buf, uint32_t size)
void (*monitor_cb)(struct _lv_disp_drv_t *disp_drv, uint32_t time, uint32_t px)
OPTIONAL: Called after every refresh cycle to tell the rendering and flushing time + the number of flushed pixels
void (*wait_cb)(struct _lv_disp_drv_t *disp_drv)
OPTIONAL: Called periodically while lvgl waits for operation to be completed. For example flushing or GPU User can execute very simple tasks here or yield the task
void (*clean_dcache_cb)(struct _lv_disp_drv_t *disp_drv)
OPTIONAL: Called when lvgl needs any CPU cache that affects rendering to be cleaned
void (*drv_update_cb)(struct _lv_disp_drv_t *disp_drv)
OPTIONAL: called when driver parameters are updated
lv_color_t color_chroma_key
On CHROMA_KEYED images this color will be transparent. LV_COLOR_TRANSP by default. (lv_conf.h)
lv_draw_ctx_t *draw_ctx
void (*draw_ctx_init)(struct _lv_disp_drv_t *disp_drv, lv_draw_ctx_t *draw_ctx)
void (*draw_ctx_deinit)(struct _lv_disp_drv_t *disp_drv, lv_draw_ctx_t *draw_ctx)
size_t draw_ctx_size
void *user_data
Custom display driver user data
struct _lv_disp_drv_t
#include<lv_hal_disp.h> HALによって登録されるドライバー構造を表示します。そのポインタのみが保存されるlv_disp_tため、動的に宣言static lv_disp_drv_t my_drvまたは割り当てる必要があります。
パブリックメンバー
lv_coord_t hor_res
水平解像度。
lv_coord_t ver_res
垂直解像度。
lv_coord_t physical_hor_res
フル/物理ディスプレイの水平解像度。フルスクリーンモードの場合は-1に設定します。
lv_coord_t physical_ver_res
フル/物理ディスプレイの垂直解像度。フルスクリーンモードの場合は-1に設定します。
lv_coord_t offset_x
フル/物理ディスプレイからの水平オフセット。フルスクリーンモードの場合は0に設定します。
lv_coord_t offset_y
フル/物理ディスプレイからの垂直オフセット。フルスクリーンモードの場合は0に設定します。
lv_disp_draw_buf_t * draw_buf
で初期化されたバッファへのポインタ lv_disp_draw_buf_init()。LVGLは、このバッファーを使用して画面の内容を描画します
uint32_t direct_mode
1:画面サイズのバッファを使用し、絶対座標に描画します
uint32_t full_refresh
1:常に画面全体を再描画する
uint32_t sw_rotate
1:ソフトウェアローテーションを使用する(遅い)
uint32_t antialiasing'
1:このディスプレイでアンチエイリアシングが有効になっています。
uint32_t rotated
1:ディスプレイを90度回転させます。
警告:座標は更新されません!
uint32_t screen_transp
uint32_t dpi
画面に無地(opa == LV_OPA_COVER)の背景がない場合に処理します。速度が遅いため、必要な場合にのみ使用してください。
void(* flush_cb)(struct _ lv_disp_drv_t * disp_drv、const lv_area_t * area、lv_color_t * color_p)
ディスプレイのDPI(ドット/インチ)。デフォルト値はLV_DPI_DEFです。必須:内部バッファー(draw_buf)をディスプレイに書き込みます。終了時に「lv_disp_flush_ready()」を呼び出す必要があります
void(* rounder_cb)(struct _ lv_disp_drv_t * disp_drv、lv_area_t * area)
LVGLの表示を登録するには、ayオプション:無効化された領域を拡張して、モノクロディスプレイのディスプレイドライバの要件に一致させます。たとえば、8、16 ..)に丸めます。
void(* set_px_cb)(struct _ lv_disp_drv_t * disp_drv、uint8_t * buf、lv_coord_t buf_w、lv_coord_t x、lv_coord_t y、lv_color_t color、lv_opa_t opa)
オプション:ディスプレイの特別な要件に従って、バッファにピクセルを設定します。LittelvGLでサポートされていないカラーフォーマットに使用できます。例:2ビット->4グレースケール
:サポートされているカラー形式で描画するよりもはるかに遅くなります。
void(* clear_cb)(struct _ lv_disp_drv_t * disp_drv、uint8_t * buf、uint32_t size)
void(* monitor_cb)(struct _ lv_disp_drv_t * disp_drv、uint32_t time、uint32_t px)
オプション:更新サイクルごとに呼び出され、レンダリングとフラッシュの時間+フラッシュされたピクセルの数を通知します
void(* wait_cb)(struct _ lv_disp_drv_t * disp_drv)
オプション:lvglが操作の完了を待機している間、定期的に呼び出されます。たとえば、フラッシングまたはGPUユーザーは、ここで非常に単純なタスクを実行したり、タスクを生成したりできます
void(* clean_dcache_cb)(struct _ lv_disp_drv_t * disp_drv)
オプション:lvglがレンダリングに影響を与えるCPUキャッシュをクリーンアップする必要がある場合に呼び出されます
void(* drv_update_cb)(struct _ lv_disp_drv_t * disp_drv)
オプション:ドライバーパラメーターが更新されたときに呼び出されます
lv_color_t color_chroma_key
CHROMA_KEYED画像では、この色は透明になります。デフォルトはLV_COLOR_TRANSP。(lv_conf.h)
lv_draw_ctx_t * draw_ctx
void(* draw_ctx_init)(struct _ lv_disp_drv_t * disp_drv、lv_draw_ctx_t * draw_ctx)
void(* draw_ctx_deinit)(struct _ lv_disp_drv_t * disp_drv、lv_draw_ctx_t * draw_ctx)
size_t draw_ctx_size
void * user_data
カスタムディスプレイドライバーのユーザーデータ

struct _lv_disp_t

#include <lv_'hal_disp.h> Display structure.
Note lv_disp_drv_t should be the first member of the structure.
Public Members
struct _lv_disp_drv_t *driver
< Driver to the display A timer which periodically checks the dirty areas and refreshes them
lv_timer_t *refr_timer
The theme assigned to the screen
struct _lv_theme_t *theme
struct _lv_obj_t **screens
Screens of the display Array of screen objects.
struct _lv_obj_t *act_scr
Currently active screen on this display
struct _lv_obj_t *prev_scr
Previous screen. Used during screen animations
struct _lv_obj_t *scr_to_load
The screen prepared to load in lv_scr_load_anim
struct _lv_obj_t *top_layer
See
lv_disp_get_layer_top
struct _lv_obj_t *sys_layer
See
lv_disp_get_layer_sys
uint32_t screen_cnt
uint8_t del_prev
1: Automatically delete the previous screen when the screen load animation is ready
lv_opa_t bg_opa
Opacity of the background color or wallpaper
lv_color_t bg_color
Default display color when screens are transparent
const void *bg_img
An image source to display as wallpaper
lv_area_t inv_areas[LV_INV_BUF_SIZE]
Invalidated (marked to redraw) areas
uint8_t inv_area_joined[LV_INV_BUF_SIZE]
uint16_t inv_p
uint32_t last_activity_time
Last time when there was activity on this display

struct _lv_disp_t

#include<lv_'hal_disp.h>構造を表示します。
LVGLの表示を登録するには、alv_disp_drv_t構造体の最初のメンバーであることに 注意 してください。
パブリックメンバー
struct _ lv_disp_drv_t * driver
<ディスプレイへのドライバー汚れた部分を定期的にチェックしてリフレッシュするタイマー
lv_timer_t * refr_timer
画面に割り当てられたテーマ
struct _ lv_theme_t * theme
struct _lv_obj_t **画面
表示の画面画面オブジェクトの配列。
struct _ lv_obj_t * act_scr
このディスプレイで現在アクティブな画面
struct _ lv_obj_t * prev_scr
前の画面。画面アニメーション中に使用されます
struct _ lv_obj_t * scr_to_load
lv_scr_load_animにロードする準備ができた画面
struct _ lv_obj_t * top_layer
見る
lv_disp_get_layer_top
struct _ lv_obj_t * sys_layer
見る
lv_disp_get_layer_sys
uint32_t screen_cnt
uint8_t del_prev
1:画面読み込みアニメーションの準備ができたら、前の画面を自動的に削除します
lv_opa_t bg_opa
背景色または壁紙の不透明度
lv_color_t bg_c​​olor
画面が透明な場合のデフォルトの表示色
const void * bg_img
壁紙として表示する画像ソース
lv_area_t inv_areas [LV_INV_BUF_SIZE]
無効化された(再描画するようにマークされた)領域
uint8_t inv_area_joined [LV_INV_BUF_SIZE]
uint16_t inv_p
uint32_t last_activity_time
前回このディスプレイでアクティビティがあったとき
戻る : Previous