From 32923131b5ad6f9dba73e612b0eea4369301ddd6 Mon Sep 17 00:00:00 2001 From: Leonardo Cavagnis Date: Wed, 1 Apr 2026 12:12:54 +0200 Subject: [PATCH 1/3] feat: add Zephyr support for GigaDisplayRGB and Backlight --- library.properties | 2 +- src/GigaDisplayRGB.cpp | 62 ++++++++++++++++++++++++++++++++++++++++++ src/GigaDisplayRGB.h | 53 ++++++++++++++++-------------------- 3 files changed, 86 insertions(+), 31 deletions(-) diff --git a/library.properties b/library.properties index 928c2ab..2a73d9a 100644 --- a/library.properties +++ b/library.properties @@ -6,6 +6,6 @@ sentence=Examples for GIGA Display Shield paragraph= category=Device Control url=https://github.com/arduino-libraries/Arduino_GigaDisplay -architectures=mbed_giga,mbed_portenta +architectures=mbed_giga,mbed_portenta,ArduinoCore-zephyr includes=Arduino_GigaDisplay.h depends=Arduino_BMI270_BMM150,Arduino_GigaDisplayTouch,ArduinoGraphics,Arduino_GigaDisplay_GFX,lvgl,Arducam_dvp \ No newline at end of file diff --git a/src/GigaDisplayRGB.cpp b/src/GigaDisplayRGB.cpp index aff8cd8..85baf3a 100644 --- a/src/GigaDisplayRGB.cpp +++ b/src/GigaDisplayRGB.cpp @@ -30,3 +30,65 @@ void GigaDisplayRGB::writeByte(uint8_t subAddress, uint8_t data) Wire1.write(data); Wire1.endTransmission(); } + +#ifdef __ZEPHYR__ +GigaDisplayBacklight* GigaDisplayBacklight::_instance = nullptr; + +void GigaDisplayBacklight::zephyr_timer_handler(struct k_timer *timer_id) { + if (_instance) { + _instance->process_step(); + } +} +#endif + +GigaDisplayBacklight::GigaDisplayBacklight() : intensity(0) { + #ifdef __ZEPHYR__ + _instance = this; + #endif +} + +void GigaDisplayBacklight::begin(int target_percent) { + set(target_percent); + +#if defined(__MBED__) + pin = new mbed::DigitalOut(PB_12); + ticker = new mbed::Ticker(); + ticker->attach(mbed::callback(this, &GigaDisplayBacklight::cb), 2ms); +#elif defined(__ZEPHYR__) + pinMode(74, OUTPUT); // 74 = PB_12 + k_timer_init(&timer, GigaDisplayBacklight::zephyr_timer_handler, NULL); + k_timer_start(&timer, K_MSEC(2), K_MSEC(2)); +#endif +} + +#if defined(__MBED__) +void GigaDisplayBacklight::cb() { + static int counter = 0; + if (counter >= intensity) { + *pin = 0; + } else { + *pin = 1; + } + counter += 10; + if (counter == 100) counter = 0; +} +#elif defined(__ZEPHYR__) +void GigaDisplayBacklight::process_step() { + static int counter = 0; + if (counter >= intensity) { + digitalWrite(74, LOW); + } else { + digitalWrite(74, HIGH); + } + counter += 10; + if (counter == 100) counter = 0; +} +#endif + +void GigaDisplayBacklight::set(int target_percent) { + intensity = target_percent; +} + +void GigaDisplayBacklight::off() { + set(0); +} \ No newline at end of file diff --git a/src/GigaDisplayRGB.h b/src/GigaDisplayRGB.h index c48a4d5..baefd3a 100644 --- a/src/GigaDisplayRGB.h +++ b/src/GigaDisplayRGB.h @@ -13,41 +13,34 @@ class GigaDisplayRGB { void writeByte(uint8_t,uint8_t); }; -#include "mbed.h" -using namespace std::chrono_literals; -using namespace std::chrono; +#if defined(__MBED__) + #include "mbed.h" + using namespace std::chrono_literals; + using namespace std::chrono; +#elif defined(__ZEPHYR__) + #include +#endif class GigaDisplayBacklight { public: - GigaDisplayBacklight() {} - void begin(int target_percent = 100) { - pin = new mbed::DigitalOut(PB_12); - ticker = new mbed::Ticker(); - ticker->attach(mbed::callback(this, &GigaDisplayBacklight::cb), 2ms); - set(target_percent); - } - void cb() { - static int counter = 0; - if (counter >= intensity) { - *pin = 0; - } else { - *pin = 1; - } - counter += 10; - if (counter == 100) { - counter = 0; - } - } - void set(int target_percent) { - intensity = target_percent; - } - void off() { - set(0); - } + GigaDisplayBacklight(); + void begin(int target_percent = 100); + void set(int target_percent); + void off(); + private: - mbed::Ticker* ticker; - mbed::DigitalOut* pin; int intensity; + + #if defined(__MBED__) + mbed::Ticker* ticker; + mbed::DigitalOut* pin; + void cb(); + #elif defined(__ZEPHYR__) + struct k_timer timer; + static void zephyr_timer_handler(struct k_timer *dummy); + static GigaDisplayBacklight* _instance; + void process_step(); + #endif }; #endif From 2e8540e853d12aa786a1950f18c0f8e6225b58d6 Mon Sep 17 00:00:00 2001 From: Leonardo Cavagnis Date: Wed, 1 Apr 2026 12:14:28 +0200 Subject: [PATCH 2/3] feat: refactor examples for Arduino_Video integration --- examples/basic/ArduinoLogoDrawing/ArduinoLogoDrawing.ino | 6 +++--- examples/basic/SimpleText/SimpleText.ino | 4 ++-- examples/lvgl/bar_lvgl/bar_lvgl.ino | 4 ++-- examples/lvgl/button_lvgl/button_lvgl.ino | 4 ++-- examples/lvgl/check_radio_lvgl/check_radio_lvgl.ino | 4 ++-- examples/lvgl/image_lvgl/image_lvgl.ino | 4 ++-- examples/lvgl/imu_orientation/imu_orientation.ino | 4 ++-- examples/lvgl/slider_lvgl/slider_lvgl.ino | 4 ++-- .../lvgl/squarelinestudio_lvgl/squarelinestudio_lvgl.ino | 4 ++-- 9 files changed, 19 insertions(+), 19 deletions(-) diff --git a/examples/basic/ArduinoLogoDrawing/ArduinoLogoDrawing.ino b/examples/basic/ArduinoLogoDrawing/ArduinoLogoDrawing.ino index e2c7673..5aba110 100644 --- a/examples/basic/ArduinoLogoDrawing/ArduinoLogoDrawing.ino +++ b/examples/basic/ArduinoLogoDrawing/ArduinoLogoDrawing.ino @@ -8,11 +8,11 @@ https://github.com/arduino/ArduinoCore-mbed/blob/main/libraries/Arduino_H7_Video/ */ -#include "Arduino_H7_Video.h" +#include "Arduino_Video.h" #include "ArduinoGraphics.h" -Arduino_H7_Video Display(800, 480, GigaDisplayShield); -//Arduino_H7_Video Display(1024, 768, USBCVideo); +Arduino_Video Display(800, 480, GigaDisplayShield); +//Arduino_Video Display(1024, 768, USBCVideo); void setup() { Display.begin(); diff --git a/examples/basic/SimpleText/SimpleText.ino b/examples/basic/SimpleText/SimpleText.ino index f44cb70..9ee63aa 100644 --- a/examples/basic/SimpleText/SimpleText.ino +++ b/examples/basic/SimpleText/SimpleText.ino @@ -15,10 +15,10 @@ This example code is in the public domain. */ -#include "Arduino_H7_Video.h" +#include "Arduino_Video.h" #include "ArduinoGraphics.h" -Arduino_H7_Video Display(800, 480, GigaDisplayShield); +Arduino_Video Display(800, 480, GigaDisplayShield); void setup() { Display.begin(); diff --git a/examples/lvgl/bar_lvgl/bar_lvgl.ino b/examples/lvgl/bar_lvgl/bar_lvgl.ino index 7dcc4e2..0b09160 100644 --- a/examples/lvgl/bar_lvgl/bar_lvgl.ino +++ b/examples/lvgl/bar_lvgl/bar_lvgl.ino @@ -1,9 +1,9 @@ -#include "Arduino_H7_Video.h" +#include "Arduino_Video.h" #include "Arduino_GigaDisplayTouch.h" #include "lvgl.h" -Arduino_H7_Video Display(800, 480, GigaDisplayShield); /* Arduino_H7_Video Display(1024, 768, USBCVideo); */ +Arduino_Video Display(800, 480, GigaDisplayShield); /* Arduino_Video Display(1024, 768, USBCVideo); */ Arduino_GigaDisplayTouch TouchDetector; static void set_slider_val(void * bar, int32_t val) { diff --git a/examples/lvgl/button_lvgl/button_lvgl.ino b/examples/lvgl/button_lvgl/button_lvgl.ino index dfb24de..d965390 100644 --- a/examples/lvgl/button_lvgl/button_lvgl.ino +++ b/examples/lvgl/button_lvgl/button_lvgl.ino @@ -1,8 +1,8 @@ -#include "Arduino_H7_Video.h" +#include "Arduino_Video.h" #include "lvgl.h" #include "Arduino_GigaDisplayTouch.h" -Arduino_H7_Video Display(800, 480, GigaDisplayShield); +Arduino_Video Display(800, 480, GigaDisplayShield); Arduino_GigaDisplayTouch TouchDetector; static void btn_event_cb(lv_event_t * e) { diff --git a/examples/lvgl/check_radio_lvgl/check_radio_lvgl.ino b/examples/lvgl/check_radio_lvgl/check_radio_lvgl.ino index 36ac2ea..e739afb 100644 --- a/examples/lvgl/check_radio_lvgl/check_radio_lvgl.ino +++ b/examples/lvgl/check_radio_lvgl/check_radio_lvgl.ino @@ -1,8 +1,8 @@ -#include "Arduino_H7_Video.h" +#include "Arduino_Video.h" #include "lvgl.h" #include "Arduino_GigaDisplayTouch.h" -Arduino_H7_Video Display(800, 480, GigaDisplayShield); +Arduino_Video Display(800, 480, GigaDisplayShield); Arduino_GigaDisplayTouch TouchDetector; void setup() { diff --git a/examples/lvgl/image_lvgl/image_lvgl.ino b/examples/lvgl/image_lvgl/image_lvgl.ino index eeb104f..91fdae7 100644 --- a/examples/lvgl/image_lvgl/image_lvgl.ino +++ b/examples/lvgl/image_lvgl/image_lvgl.ino @@ -3,10 +3,10 @@ * Online image converter for LVGL v8 or earlier: https://lvgl.io/tools/imageconverter */ -#include "Arduino_H7_Video.h" +#include "Arduino_Video.h" #include "lvgl.h" -Arduino_H7_Video Display(800, 480, GigaDisplayShield); +Arduino_Video Display(800, 480, GigaDisplayShield); void setup() { Display.begin(); diff --git a/examples/lvgl/imu_orientation/imu_orientation.ino b/examples/lvgl/imu_orientation/imu_orientation.ino index 134df8e..3d84dc9 100644 --- a/examples/lvgl/imu_orientation/imu_orientation.ino +++ b/examples/lvgl/imu_orientation/imu_orientation.ino @@ -4,10 +4,10 @@ */ #include "Arduino_BMI270_BMM150.h" -#include "Arduino_H7_Video.h" +#include "Arduino_Video.h" #include "lvgl.h" -Arduino_H7_Video Display(800, 480, GigaDisplayShield); /* Arduino_H7_Video Display(1024, 768, USBCVideo); */ +Arduino_Video Display(800, 480, GigaDisplayShield); /* Arduino_H7_Video Display(1024, 768, USBCVideo); */ BoschSensorClass imu(Wire1); diff --git a/examples/lvgl/slider_lvgl/slider_lvgl.ino b/examples/lvgl/slider_lvgl/slider_lvgl.ino index 04657ea..631215e 100644 --- a/examples/lvgl/slider_lvgl/slider_lvgl.ino +++ b/examples/lvgl/slider_lvgl/slider_lvgl.ino @@ -1,9 +1,9 @@ -#include "Arduino_H7_Video.h" +#include "Arduino_Video.h" #include "Arduino_GigaDisplayTouch.h" #include "lvgl.h" -Arduino_H7_Video Display(800, 480, GigaDisplayShield); /* Arduino_H7_Video Display(1024, 768, USBCVideo); */ +Arduino_Video Display(800, 480, GigaDisplayShield); /* Arduino_H7_Video Display(1024, 768, USBCVideo); */ Arduino_GigaDisplayTouch TouchDetector; void setup() { diff --git a/examples/lvgl/squarelinestudio_lvgl/squarelinestudio_lvgl.ino b/examples/lvgl/squarelinestudio_lvgl/squarelinestudio_lvgl.ino index e0e45a1..745597d 100644 --- a/examples/lvgl/squarelinestudio_lvgl/squarelinestudio_lvgl.ino +++ b/examples/lvgl/squarelinestudio_lvgl/squarelinestudio_lvgl.ino @@ -19,14 +19,14 @@ * Initial author: Leonardo Cavagnis @leonardocavagnis */ -#include "Arduino_H7_Video.h" +#include "Arduino_Video.h" #include "Arduino_GigaDisplayTouch.h" #include "lvgl.h" #include "ui.h" /* Initialize the GIGA Display Shield with a resolution of 800x480 pixels */ -Arduino_H7_Video Display(800, 480, GigaDisplayShield); +Arduino_Video Display(800, 480, GigaDisplayShield); Arduino_GigaDisplayTouch Touch; void setup() { From b6408f59f91adf9f5eaeb59a9fe176c408dbad08 Mon Sep 17 00:00:00 2001 From: Leonardo Cavagnis Date: Thu, 2 Apr 2026 16:06:58 +0200 Subject: [PATCH 3/3] feat: refactor examples for Arduino_Video integration --- examples/camera/display_camera/display_camera.ino | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/camera/display_camera/display_camera.ino b/examples/camera/display_camera/display_camera.ino index f3c9dbf..2a3958e 100644 --- a/examples/camera/display_camera/display_camera.ino +++ b/examples/camera/display_camera/display_camera.ino @@ -1,6 +1,6 @@ #include "arducam_dvp.h" -#include "Arduino_H7_Video.h" +#include "Arduino_Video.h" #include "dsi.h" #include "SDRAM.h" @@ -37,7 +37,7 @@ FrameBuffer fb; // The buffer used to rotate and resize the frame FrameBuffer outfb; // The buffer used to rotate and resize the frame -Arduino_H7_Video Display(800, 480, GigaDisplayShield); +Arduino_Video Display(800, 480, GigaDisplayShield); void blinkLED(uint32_t count = 0xFFFFFFFF) {