Merge tag 'dey-4.0-r5.2' into dey-4.0/master
Digi Embedded Yocto 4.0-r5.2 Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
This commit is contained in:
commit
52eb698999
33
README.md
33
README.md
|
|
@ -125,11 +125,40 @@ Documentation is available online at https://www.digi.com/resources/documentatio
|
||||||
|
|
||||||
# Downloads
|
# Downloads
|
||||||
|
|
||||||
* Demo images: https://ftp1.digi.com/support/digiembeddedyocto/4.0/r4/images/
|
* Demo images: https://ftp1.digi.com/support/digiembeddedyocto/4.0/r5/images/
|
||||||
* Software Development Kit (SDK): https://ftp1.digi.com/support/digiembeddedyocto/4.0/r4/sdk/
|
* Software Development Kit (SDK): https://ftp1.digi.com/support/digiembeddedyocto/4.0/r5/sdk/
|
||||||
|
|
||||||
# Release Changelog
|
# Release Changelog
|
||||||
|
|
||||||
|
## 4.0-r5
|
||||||
|
|
||||||
|
* ST-based platforms
|
||||||
|
* Add support to boot signed FIT images.
|
||||||
|
* Add support to EGLFS backend for CCMP15 platform
|
||||||
|
* Add overlay to enable Cortex-M coprocessor
|
||||||
|
* NXP-based platforms
|
||||||
|
* Updated BSP for ConnectCore 93
|
||||||
|
* U-Boot v2023.04 (based on tag 'lf-6.1.55-2.2.0' by NXP)
|
||||||
|
* Linux kernel v6.1.55 (based on tag 'lf-6.1.55-2.2.0' by NXP)
|
||||||
|
* Add overlay to enable Cortex-M coprocessor
|
||||||
|
* Added preliminary TrustFence support for ConnectCore 93
|
||||||
|
* Add support to LVGL based images
|
||||||
|
* Improved ConnectCore Cloud Services (CCCS):
|
||||||
|
* Data backlog support to locally store samples when it is not possible to upload them
|
||||||
|
* CCCS API to set the device maintenance state of devices
|
||||||
|
* CCCS API to upload binary data points
|
||||||
|
* Report to Remote Manager when a device is using a Wi-Fi connection
|
||||||
|
* Improve firmware download speed
|
||||||
|
* Configuration file:
|
||||||
|
* Use default values if configuration file is not provided
|
||||||
|
* Allow to disable firmware update service
|
||||||
|
* Improved SWU package generation and support:
|
||||||
|
* Generalized and simplified recipes to generate the SWU packages using a custom class
|
||||||
|
* Added support to update bootloader using software update (SWU)
|
||||||
|
* Update Python XBee library
|
||||||
|
* Bootcount feature is now disabled by default.
|
||||||
|
* General bug fixing and improvements
|
||||||
|
|
||||||
## 4.0-r4
|
## 4.0-r4
|
||||||
|
|
||||||
* ST-based platforms
|
* ST-based platforms
|
||||||
|
|
|
||||||
|
|
@ -77,3 +77,7 @@ UBOOT_ENV_RANGE ?= ""
|
||||||
# Partitions to blacklist for swupdate:
|
# Partitions to blacklist for swupdate:
|
||||||
# bootloader, environment, safe
|
# bootloader, environment, safe
|
||||||
SWUPDATE_MTD_BLACKLIST = "0 1 2"
|
SWUPDATE_MTD_BLACKLIST = "0 1 2"
|
||||||
|
|
||||||
|
# ccimx6ul LVGL images don't have a desktop backend, so we don't need to append
|
||||||
|
# "-x11" to the image name in the install scripts.
|
||||||
|
GRAPHICAL_IMAGES:remove = "dey-image-lvgl"
|
||||||
|
|
|
||||||
|
|
@ -90,3 +90,6 @@ PREFERRED_VERSION_wayland-native:ccimx93 ?= "1.22.0.imx"
|
||||||
PREFERRED_VERSION_wayland-protocols:ccimx93 ?= "1.32.imx"
|
PREFERRED_VERSION_wayland-protocols:ccimx93 ?= "1.32.imx"
|
||||||
PREFERRED_VERSION_weston:ccimx93 ?= "11.0.3.imx"
|
PREFERRED_VERSION_weston:ccimx93 ?= "11.0.3.imx"
|
||||||
PREFERRED_VERSION_xwayland:ccimx93 ?= "23.1.1.imx"
|
PREFERRED_VERSION_xwayland:ccimx93 ?= "23.1.1.imx"
|
||||||
|
|
||||||
|
PREFERRED_VERSION_nativesdk-trustfence-sign-tools:ccimx93 ?= "2023.04"
|
||||||
|
PREFERRED_VERSION_trustfence-sign-tools-native:ccimx93 ?= "2023.04"
|
||||||
|
|
|
||||||
|
|
@ -10,13 +10,13 @@ PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
|
||||||
#
|
#
|
||||||
# Platform Linux U-Boot
|
# Platform Linux U-Boot
|
||||||
# -------------------------------------------------
|
# -------------------------------------------------
|
||||||
# ccimx6 5.4 2017.03
|
# ccimx6 5.15 2017.03
|
||||||
# ccimx6qp 5.4 2017.03
|
# ccimx6qp 5.15 2017.03
|
||||||
# ccimx6ul 5.15 2020.04
|
# ccimx6ul 5.15 2020.04
|
||||||
# ccimx8x 5.4 2020.04 (packaged in imx-boot)
|
# ccimx8x 5.15 2020.04 (packaged in imx-boot)
|
||||||
# ccimx8mn 5.4 2020.04 (packaged in imx-boot)
|
# ccimx8mn 5.15 2020.04 (packaged in imx-boot)
|
||||||
# ccimx8mm 5.4 2020.04 (packaged in imx-boot)
|
# ccimx8mm 5.15 2020.04 (packaged in imx-boot)
|
||||||
# ccimx93 5.15 2022.04 (packaged in imx-boot)
|
# ccimx93 6.1 2023.04 (packaged in imx-boot)
|
||||||
# ccmp15 5.15 2021.10
|
# ccmp15 5.15 2021.10
|
||||||
# ccmp13 5.15 2021.10
|
# ccmp13 5.15 2021.10
|
||||||
#
|
#
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,90 @@
|
||||||
|
From: Haihua Hu <jared.hu@nxp.com>
|
||||||
|
Date: Wed, 3 Aug 2022 16:34:47 +0800
|
||||||
|
Subject: [PATCH] Revert "libweston/libinput-device: Enable/Set pointer
|
||||||
|
capabilities only on pointer movement"
|
||||||
|
|
||||||
|
This reverts commit e825fe389ebd63470028abd828019840c1170a03.
|
||||||
|
|
||||||
|
This commit will cause waylandsink cannot register pointer seat.
|
||||||
|
As a result, mouse cannot move waylandsink window
|
||||||
|
|
||||||
|
(cherry picked from commit 3f8f336b5d2cf7ea7aa4e047d669d093fc46dfe6)
|
||||||
|
---
|
||||||
|
libweston/libinput-device.c | 29 +++++------------------------
|
||||||
|
1 file changed, 5 insertions(+), 24 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libweston/libinput-device.c b/libweston/libinput-device.c
|
||||||
|
index 4ea89de0..2d7a7d5f 100644
|
||||||
|
--- a/libweston/libinput-device.c
|
||||||
|
+++ b/libweston/libinput-device.c
|
||||||
|
@@ -60,21 +60,6 @@ evdev_led_update(struct evdev_device *device, enum weston_led weston_leds)
|
||||||
|
libinput_device_led_update(device->device, leds);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void
|
||||||
|
-ensure_pointer_capability(struct libinput_device *libinput_device)
|
||||||
|
-{
|
||||||
|
- struct evdev_device *device = libinput_device_get_user_data(libinput_device);
|
||||||
|
- struct weston_seat *seat = device->seat;
|
||||||
|
-
|
||||||
|
- if (!libinput_device_has_capability(libinput_device, LIBINPUT_DEVICE_CAP_POINTER))
|
||||||
|
- return;
|
||||||
|
-
|
||||||
|
- if (!(device->seat_caps & EVDEV_SEAT_POINTER)) {
|
||||||
|
- weston_seat_init_pointer(seat);
|
||||||
|
- device->seat_caps |= EVDEV_SEAT_POINTER;
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
static void
|
||||||
|
handle_keyboard_key(struct libinput_device *libinput_device,
|
||||||
|
struct libinput_event_keyboard *keyboard_event)
|
||||||
|
@@ -112,8 +97,6 @@ handle_pointer_motion(struct libinput_device *libinput_device,
|
||||||
|
struct timespec time;
|
||||||
|
double dx_unaccel, dy_unaccel;
|
||||||
|
|
||||||
|
- ensure_pointer_capability(libinput_device);
|
||||||
|
-
|
||||||
|
timespec_from_usec(&time,
|
||||||
|
libinput_event_pointer_get_time_usec(pointer_event));
|
||||||
|
dx_unaccel = libinput_event_pointer_get_dx_unaccelerated(pointer_event);
|
||||||
|
@@ -146,8 +129,6 @@ handle_pointer_motion_absolute(
|
||||||
|
double x, y;
|
||||||
|
uint32_t width, height;
|
||||||
|
|
||||||
|
- ensure_pointer_capability(libinput_device);
|
||||||
|
-
|
||||||
|
if (!output)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
@@ -179,8 +160,6 @@ handle_pointer_button(struct libinput_device *libinput_device,
|
||||||
|
libinput_event_pointer_get_seat_button_count(pointer_event);
|
||||||
|
struct timespec time;
|
||||||
|
|
||||||
|
- ensure_pointer_capability(libinput_device);
|
||||||
|
-
|
||||||
|
/* Ignore button events that are not seat wide state changes. */
|
||||||
|
if ((button_state == LIBINPUT_BUTTON_STATE_PRESSED &&
|
||||||
|
seat_button_count != 1) ||
|
||||||
|
@@ -260,8 +239,6 @@ handle_pointer_axis(struct libinput_device *libinput_device,
|
||||||
|
bool has_vert, has_horiz;
|
||||||
|
struct timespec time;
|
||||||
|
|
||||||
|
- ensure_pointer_capability(libinput_device);
|
||||||
|
-
|
||||||
|
has_vert = libinput_event_pointer_has_axis(pointer_event,
|
||||||
|
LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL);
|
||||||
|
has_horiz = libinput_event_pointer_has_axis(pointer_event,
|
||||||
|
@@ -738,7 +715,11 @@ evdev_device_create(struct libinput_device *libinput_device,
|
||||||
|
|
||||||
|
device->seat_caps |= EVDEV_SEAT_KEYBOARD;
|
||||||
|
}
|
||||||
|
-
|
||||||
|
+ if (libinput_device_has_capability(libinput_device,
|
||||||
|
+ LIBINPUT_DEVICE_CAP_POINTER)) {
|
||||||
|
+ weston_seat_init_pointer(seat);
|
||||||
|
+ device->seat_caps |= EVDEV_SEAT_POINTER;
|
||||||
|
+ }
|
||||||
|
if (libinput_device_has_capability(libinput_device,
|
||||||
|
LIBINPUT_DEVICE_CAP_TOUCH)) {
|
||||||
|
if (weston_seat_init_touch(seat) < 0) {
|
||||||
|
|
@ -5,6 +5,7 @@ SRC_URI:append:stm32mpcommon = " \
|
||||||
file://0002-Force-to-close-all-output.patch \
|
file://0002-Force-to-close-all-output.patch \
|
||||||
file://0004-Disable-request-to-EGL_DRM_RENDER_NODE_FILE_EXT.patch \
|
file://0004-Disable-request-to-EGL_DRM_RENDER_NODE_FILE_EXT.patch \
|
||||||
file://0005-clients-simple-egl-call-eglSwapInterval-after-eglMak.patch \
|
file://0005-clients-simple-egl-call-eglSwapInterval-after-eglMak.patch \
|
||||||
|
file://0006-Revert-libweston-libinput-device-Enable-Set-pointer-.patch \
|
||||||
"
|
"
|
||||||
|
|
||||||
SIMPLECLIENTS="egl,touch,dmabuf-v4l,dmabuf-egl"
|
SIMPLECLIENTS="egl,touch,dmabuf-v4l,dmabuf-egl"
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,13 @@ FW_ATH6KL = " \
|
||||||
file://athtcmd_ram.bin \
|
file://athtcmd_ram.bin \
|
||||||
file://athwlan.bin \
|
file://athwlan.bin \
|
||||||
file://Digi_6203_2_ANT-US.bin \
|
file://Digi_6203_2_ANT-US.bin \
|
||||||
|
file://Digi_6203_2_ANT-US_b.bin \
|
||||||
file://Digi_6203_2_ANT-World.bin \
|
file://Digi_6203_2_ANT-World.bin \
|
||||||
|
file://Digi_6203_2_ANT-World_b.bin \
|
||||||
file://Digi_6203-6233-US.bin \
|
file://Digi_6203-6233-US.bin \
|
||||||
|
file://Digi_6203-6233-US_b.bin \
|
||||||
file://Digi_6203-6233-World.bin \
|
file://Digi_6203-6233-World.bin \
|
||||||
|
file://Digi_6203-6233-World_b.bin \
|
||||||
file://fw-4.bin \
|
file://fw-4.bin \
|
||||||
file://nullTestFlow.bin \
|
file://nullTestFlow.bin \
|
||||||
file://utf.bin \
|
file://utf.bin \
|
||||||
|
|
@ -47,9 +51,13 @@ do_install() {
|
||||||
athtcmd_ram.bin \
|
athtcmd_ram.bin \
|
||||||
athwlan.bin \
|
athwlan.bin \
|
||||||
Digi_6203_2_ANT-US.bin \
|
Digi_6203_2_ANT-US.bin \
|
||||||
|
Digi_6203_2_ANT-US_b.bin \
|
||||||
Digi_6203_2_ANT-World.bin \
|
Digi_6203_2_ANT-World.bin \
|
||||||
|
Digi_6203_2_ANT-World_b.bin \
|
||||||
Digi_6203-6233-US.bin \
|
Digi_6203-6233-US.bin \
|
||||||
|
Digi_6203-6233-US_b.bin \
|
||||||
Digi_6203-6233-World.bin \
|
Digi_6203-6233-World.bin \
|
||||||
|
Digi_6203-6233-World_b.bin \
|
||||||
fw-4.bin \
|
fw-4.bin \
|
||||||
nullTestFlow.bin \
|
nullTestFlow.bin \
|
||||||
utf.bin \
|
utf.bin \
|
||||||
|
|
@ -67,6 +75,19 @@ do_install() {
|
||||||
ln -sf Digi_6203_2_ANT-World.bin ${D}${base_libdir}/firmware/ath6k/AR6003/hw2.1.1/bdata.ANT-0x2.bin
|
ln -sf Digi_6203_2_ANT-World.bin ${D}${base_libdir}/firmware/ath6k/AR6003/hw2.1.1/bdata.ANT-0x2.bin
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Point to BDF with optimized TxPower for new AR6233 (HV=>6)"
|
||||||
|
pkg_postinst_ontarget:${PN}-ath6kl() {
|
||||||
|
MOD_VERSION="$(($(cat /proc/device-tree/digi,hwid,hv 2>/dev/null | tr -d '\0' || true)))"
|
||||||
|
if [ "${MOD_VERSION}" -ge "6" ]; then
|
||||||
|
ln -sf Digi_6203-6233-US_b.bin $D${base_libdir}/firmware/ath6k/AR6003/hw2.1.1/bdata.0x0.bin
|
||||||
|
ln -sf Digi_6203-6233-World_b.bin $D${base_libdir}/firmware/ath6k/AR6003/hw2.1.1/bdata.0x1.bin
|
||||||
|
ln -sf Digi_6203-6233-World_b.bin $D${base_libdir}/firmware/ath6k/AR6003/hw2.1.1/bdata.0x2.bin
|
||||||
|
ln -sf Digi_6203_2_ANT-US_b.bin $D${base_libdir}/firmware/ath6k/AR6003/hw2.1.1/bdata.ANT-0x0.bin
|
||||||
|
ln -sf Digi_6203_2_ANT-World_b.bin $D${base_libdir}/firmware/ath6k/AR6003/hw2.1.1/bdata.ANT-0x1.bin
|
||||||
|
ln -sf Digi_6203_2_ANT-World_b.bin $D${base_libdir}/firmware/ath6k/AR6003/hw2.1.1/bdata.ANT-0x2.bin
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Do not create empty debug and development packages (PN-dbg PN-dev PN-staticdev)
|
# Do not create empty debug and development packages (PN-dbg PN-dev PN-staticdev)
|
||||||
PACKAGES = "${PN}-ar3k ${PN}-ath6kl"
|
PACKAGES = "${PN}-ar3k ${PN}-ath6kl"
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -144,7 +144,7 @@ fi
|
||||||
# - Partition the eMMC user data area for Linux
|
# - Partition the eMMC user data area for Linux
|
||||||
# - If Dual Boot
|
# - If Dual Boot
|
||||||
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
||||||
- Set bootlimit to 3
|
# - Set bootlimit to 3
|
||||||
# - If Normal Boot:
|
# - If Normal Boot:
|
||||||
# - Update the system partitions: linux, recovery, rootfs
|
# - Update the system partitions: linux, recovery, rootfs
|
||||||
# - Erase the 'update' partition
|
# - Erase the 'update' partition
|
||||||
|
|
|
||||||
|
|
@ -144,7 +144,7 @@ fi
|
||||||
# - Partition the eMMC user data area for Linux
|
# - Partition the eMMC user data area for Linux
|
||||||
# - If Dual Boot
|
# - If Dual Boot
|
||||||
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
||||||
- Set bootlimit to 3
|
# - Set bootlimit to 3
|
||||||
# - If Normal Boot:
|
# - If Normal Boot:
|
||||||
# - Update the system partitions: linux, recovery, rootfs
|
# - Update the system partitions: linux, recovery, rootfs
|
||||||
# - Erase the 'update' partition
|
# - Erase the 'update' partition
|
||||||
|
|
|
||||||
|
|
@ -100,14 +100,13 @@ echo "Determining image files to use..."
|
||||||
if [ -z ${INSTALL_UBOOT_FILENAME} ]; then
|
if [ -z ${INSTALL_UBOOT_FILENAME} ]; then
|
||||||
module_variant=$(getenv "module_variant")
|
module_variant=$(getenv "module_variant")
|
||||||
# Determine U-Boot file to program basing on SOM's variant
|
# Determine U-Boot file to program basing on SOM's variant
|
||||||
if [ -n "$module_variant" ] || [ "$module_variant" = "0x00" ]; then
|
if [ -n "$module_variant" ]; then
|
||||||
if [ "$module_variant" = "0x01" ] || \
|
if [ "$module_variant" = "0x01" ] || \
|
||||||
[ "$module_variant" = "0x02" ]; then
|
[ "$module_variant" = "0x02" ]; then
|
||||||
module_ram="2GB"
|
INSTALL_UBOOT_FILENAME="u-boot-##MACHINE##2GB.imx"
|
||||||
else
|
elif [ "$module_variant" = "0x03" ]; then
|
||||||
module_ram="1GB"
|
INSTALL_UBOOT_FILENAME="u-boot-##MACHINE##1GB.imx"
|
||||||
fi
|
fi
|
||||||
INSTALL_UBOOT_FILENAME="u-boot-##MACHINE##${module_ram}.imx"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# U-Boot when the checked value is empty.
|
# U-Boot when the checked value is empty.
|
||||||
|
|
|
||||||
|
|
@ -155,7 +155,7 @@ fi
|
||||||
# - Partition the eMMC user data area for Linux
|
# - Partition the eMMC user data area for Linux
|
||||||
# - If Dual Boot
|
# - If Dual Boot
|
||||||
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
||||||
- Set bootlimit to 3
|
# - Set bootlimit to 3
|
||||||
# - If Normal Boot:
|
# - If Normal Boot:
|
||||||
# - Update the system partitions: linux, recovery, rootfs
|
# - Update the system partitions: linux, recovery, rootfs
|
||||||
# - Erase the 'update' partition
|
# - Erase the 'update' partition
|
||||||
|
|
|
||||||
|
|
@ -155,7 +155,7 @@ fi
|
||||||
# - Partition the eMMC user data area for Linux
|
# - Partition the eMMC user data area for Linux
|
||||||
# - If Dual Boot
|
# - If Dual Boot
|
||||||
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
||||||
- Set bootlimit to 3
|
# - Set bootlimit to 3
|
||||||
# - If Normal Boot:
|
# - If Normal Boot:
|
||||||
# - Update the system partitions: linux, recovery, rootfs
|
# - Update the system partitions: linux, recovery, rootfs
|
||||||
# - Erase the 'update' partition
|
# - Erase the 'update' partition
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,7 @@ if [ -z ${INSTALL_UBOOT_FILENAME} ]; then
|
||||||
if [ -n "$soc_family" ]; then
|
if [ -n "$soc_family" ]; then
|
||||||
module_variant=$(getenv "module_variant")
|
module_variant=$(getenv "module_variant")
|
||||||
# Determine U-Boot file to program basing on SOM's variant
|
# Determine U-Boot file to program basing on SOM's variant
|
||||||
if [ -n "$module_variant" ] || [ "$module_variant" = "0x00" ]; then
|
if [ -n "$module_variant" ]; then
|
||||||
if [ "$module_variant" = "0x12" ]; then
|
if [ "$module_variant" = "0x12" ]; then
|
||||||
INSTALL_UBOOT_FILENAME="u-boot-cc${soc_family}sbc2GB.imx"
|
INSTALL_UBOOT_FILENAME="u-boot-cc${soc_family}sbc2GB.imx"
|
||||||
elif [ "$module_variant" = "0x01" ] || \
|
elif [ "$module_variant" = "0x01" ] || \
|
||||||
|
|
@ -117,7 +117,11 @@ if [ -z ${INSTALL_UBOOT_FILENAME} ]; then
|
||||||
[ "$module_variant" = "0x15" ] || \
|
[ "$module_variant" = "0x15" ] || \
|
||||||
[ "$module_variant" = "0x16" ]; then
|
[ "$module_variant" = "0x16" ]; then
|
||||||
INSTALL_UBOOT_FILENAME="u-boot-cc${soc_family}sbc.imx"
|
INSTALL_UBOOT_FILENAME="u-boot-cc${soc_family}sbc.imx"
|
||||||
else
|
elif [ "$module_variant" = "0x03" ] || \
|
||||||
|
[ "$module_variant" = "0x0c" ] || \
|
||||||
|
[ "$module_variant" = "0x0e" ] || \
|
||||||
|
[ "$module_variant" = "0x0f" ] || \
|
||||||
|
[ "$module_variant" = "0x13" ]; then
|
||||||
INSTALL_UBOOT_FILENAME="u-boot-cc${soc_family}sbc512MB.imx"
|
INSTALL_UBOOT_FILENAME="u-boot-cc${soc_family}sbc512MB.imx"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
|
|
@ -151,7 +151,7 @@ fi
|
||||||
# - Save the environment
|
# - Save the environment
|
||||||
# - If Dual Boot
|
# - If Dual Boot
|
||||||
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
||||||
- Set bootlimit to 3
|
# - Set bootlimit to 3
|
||||||
# - If Normal Boot:
|
# - If Normal Boot:
|
||||||
# - Update the system partitions: linux, recovery, rootfs
|
# - Update the system partitions: linux, recovery, rootfs
|
||||||
# - Erase the 'update' partition
|
# - Erase the 'update' partition
|
||||||
|
|
|
||||||
|
|
@ -153,7 +153,7 @@ fi
|
||||||
# - Save the environment
|
# - Save the environment
|
||||||
# - If Dual Boot
|
# - If Dual Boot
|
||||||
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
||||||
- Set bootlimit to 3
|
# - Set bootlimit to 3
|
||||||
# - If Normal Boot:
|
# - If Normal Boot:
|
||||||
# - Update the system partitions: linux, recovery, rootfs
|
# - Update the system partitions: linux, recovery, rootfs
|
||||||
# - Erase the 'update' partition
|
# - Erase the 'update' partition
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ echo "Determining image files to use..."
|
||||||
if [ -z "${INSTALL_UBOOT_FILENAME}" ]; then
|
if [ -z "${INSTALL_UBOOT_FILENAME}" ]; then
|
||||||
module_variant=$(getenv "module_variant")
|
module_variant=$(getenv "module_variant")
|
||||||
# Determine U-Boot file to program basing on SOM's variant
|
# Determine U-Boot file to program basing on SOM's variant
|
||||||
if [ -n "$module_variant" ] || [ "$module_variant" = "0x00" ]; then
|
if [ -n "$module_variant" ]; then
|
||||||
if [ "$module_variant" = "0x08" ] || \
|
if [ "$module_variant" = "0x08" ] || \
|
||||||
[ "$module_variant" = "0x0a" ]; then
|
[ "$module_variant" = "0x0a" ]; then
|
||||||
INSTALL_UBOOT_FILENAME="u-boot-##MACHINE##512MB.imx"
|
INSTALL_UBOOT_FILENAME="u-boot-##MACHINE##512MB.imx"
|
||||||
|
|
@ -123,7 +123,10 @@ if [ -z "${INSTALL_UBOOT_FILENAME}" ]; then
|
||||||
[ "$module_variant" = "0x05" ] || \
|
[ "$module_variant" = "0x05" ] || \
|
||||||
[ "$module_variant" = "0x07" ]; then
|
[ "$module_variant" = "0x07" ]; then
|
||||||
INSTALL_UBOOT_FILENAME="u-boot-##MACHINE##1GB.imx"
|
INSTALL_UBOOT_FILENAME="u-boot-##MACHINE##1GB.imx"
|
||||||
else
|
elif [ "$module_variant" = "0x02" ] || \
|
||||||
|
[ "$module_variant" = "0x03" ] || \
|
||||||
|
[ "$module_variant" = "0x06" ] || \
|
||||||
|
[ "$module_variant" = "0x09" ]; then
|
||||||
INSTALL_UBOOT_FILENAME="u-boot-##MACHINE##.imx"
|
INSTALL_UBOOT_FILENAME="u-boot-##MACHINE##.imx"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,7 @@ fi
|
||||||
# - Partition the eMMC user data area for Linux
|
# - Partition the eMMC user data area for Linux
|
||||||
# - If Dual Boot
|
# - If Dual Boot
|
||||||
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
||||||
- Set bootlimit to 3
|
# - Set bootlimit to 3
|
||||||
# - If Normal Boot:
|
# - If Normal Boot:
|
||||||
# - Update the system partitions: linux, recovery, rootfs
|
# - Update the system partitions: linux, recovery, rootfs
|
||||||
# - Erase the 'update' partition
|
# - Erase the 'update' partition
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,7 @@ fi
|
||||||
# - Partition the eMMC user data area for Linux
|
# - Partition the eMMC user data area for Linux
|
||||||
# - If Dual Boot
|
# - If Dual Boot
|
||||||
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
||||||
- Set bootlimit to 3
|
# - Set bootlimit to 3
|
||||||
# - If Normal Boot:
|
# - If Normal Boot:
|
||||||
# - Update the system partitions: linux, recovery, rootfs
|
# - Update the system partitions: linux, recovery, rootfs
|
||||||
# - Erase the 'update' partition
|
# - Erase the 'update' partition
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@ fi
|
||||||
# - Partition the eMMC user data area for Linux
|
# - Partition the eMMC user data area for Linux
|
||||||
# - If Dual Boot
|
# - If Dual Boot
|
||||||
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
||||||
- Set bootlimit to 3
|
# - Set bootlimit to 3
|
||||||
# - If Normal Boot:
|
# - If Normal Boot:
|
||||||
# - Update the system partitions: linux, recovery, rootfs
|
# - Update the system partitions: linux, recovery, rootfs
|
||||||
# - Erase the 'update' partition
|
# - Erase the 'update' partition
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@ fi
|
||||||
# - Partition the eMMC user data area for Linux
|
# - Partition the eMMC user data area for Linux
|
||||||
# - If Dual Boot
|
# - If Dual Boot
|
||||||
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
||||||
- Set bootlimit to 3
|
# - Set bootlimit to 3
|
||||||
# - If Normal Boot:
|
# - If Normal Boot:
|
||||||
# - Update the system partitions: linux, recovery, rootfs
|
# - Update the system partitions: linux, recovery, rootfs
|
||||||
# - Erase the 'update' partition
|
# - Erase the 'update' partition
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,8 @@ if test ! -e mmc ${INSTALL_MMCDEV} ${INSTALL_ROOTFS_FILENAME}; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if test "${install_abort}" = "1"; then
|
if test "${install_abort}" = "1"; then
|
||||||
|
echo "To install a different image, set variable 'image-name', e.g.:"
|
||||||
|
echo " => setenv image-name core-image-base"
|
||||||
echo "Aborted.";
|
echo "Aborted.";
|
||||||
exit;
|
exit;
|
||||||
fi
|
fi
|
||||||
|
|
@ -131,7 +133,7 @@ fi
|
||||||
# - Partition the eMMC user data area for Linux
|
# - Partition the eMMC user data area for Linux
|
||||||
# - If Dual Boot
|
# - If Dual Boot
|
||||||
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
||||||
- Set bootlimit to 3
|
# - Set bootlimit to 3
|
||||||
# - If Normal Boot:
|
# - If Normal Boot:
|
||||||
# - Update the system partitions: linux, recovery, rootfs
|
# - Update the system partitions: linux, recovery, rootfs
|
||||||
# - Erase the 'update' partition
|
# - Erase the 'update' partition
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,8 @@ if test ! -e usb ${INSTALL_USBDEV} ${INSTALL_ROOTFS_FILENAME}; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if test "${install_abort}" = "1"; then
|
if test "${install_abort}" = "1"; then
|
||||||
|
echo "To install a different image, set variable 'image-name', e.g.:"
|
||||||
|
echo " => setenv image-name core-image-base"
|
||||||
echo "Aborted.";
|
echo "Aborted.";
|
||||||
exit;
|
exit;
|
||||||
fi
|
fi
|
||||||
|
|
@ -131,7 +133,7 @@ fi
|
||||||
# - Partition the eMMC user data area for Linux
|
# - Partition the eMMC user data area for Linux
|
||||||
# - If Dual Boot
|
# - If Dual Boot
|
||||||
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
||||||
- Set bootlimit to 3
|
# - Set bootlimit to 3
|
||||||
# - If Normal Boot:
|
# - If Normal Boot:
|
||||||
# - Update the system partitions: linux, recovery, rootfs
|
# - Update the system partitions: linux, recovery, rootfs
|
||||||
# - Erase the 'update' partition
|
# - Erase the 'update' partition
|
||||||
|
|
|
||||||
|
|
@ -152,7 +152,7 @@ fi
|
||||||
# environment
|
# environment
|
||||||
# - If Dual Boot
|
# - If Dual Boot
|
||||||
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
||||||
- Set bootlimit to 3
|
# - Set bootlimit to 3
|
||||||
# - If Normal Boot:
|
# - If Normal Boot:
|
||||||
# - Update the system partitions: linux, recovery, rootfs
|
# - Update the system partitions: linux, recovery, rootfs
|
||||||
# - Configure recovery to wipe 'update' partition
|
# - Configure recovery to wipe 'update' partition
|
||||||
|
|
|
||||||
|
|
@ -154,7 +154,7 @@ fi
|
||||||
# environment
|
# environment
|
||||||
# - If Dual Boot
|
# - If Dual Boot
|
||||||
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
# - Update the system partitions: linux_a, linux_b, rootfs_a, rootfs_b
|
||||||
- Set bootlimit to 3
|
# - Set bootlimit to 3
|
||||||
# - If Normal Boot:
|
# - If Normal Boot:
|
||||||
# - Update the system partitions: linux, recovery, rootfs
|
# - Update the system partitions: linux, recovery, rootfs
|
||||||
# - Configure recovery to wipe 'update' partition
|
# - Configure recovery to wipe 'update' partition
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
# Copyright (C) 2024, Digi International Inc.
|
||||||
|
|
||||||
|
require nativesdk-trustfence-sign-tools_git.bb
|
||||||
|
|
||||||
|
SRCBRANCH = "v2023.04/maint"
|
||||||
|
SRCREV = "d27aefc1691a14c6edaadf35ab147ac8afe5c98a"
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
# Copyright (C) 2024, Digi International Inc.
|
||||||
|
|
||||||
|
require trustfence-sign-tools-native_git.bb
|
||||||
|
|
||||||
|
SRCBRANCH = "v2023.04/maint"
|
||||||
|
SRCREV = "d27aefc1691a14c6edaadf35ab147ac8afe5c98a"
|
||||||
|
|
@ -24,15 +24,19 @@ TRUSTFENCE_CONSOLE_DISABLE ?= "0"
|
||||||
TRUSTFENCE_SIGN ?= "1"
|
TRUSTFENCE_SIGN ?= "1"
|
||||||
TRUSTFENCE_SIGN_KEYS_PATH ?= "default"
|
TRUSTFENCE_SIGN_KEYS_PATH ?= "default"
|
||||||
TRUSTFENCE_DEK_PATH ?= "default"
|
TRUSTFENCE_DEK_PATH ?= "default"
|
||||||
|
TRUSTFENCE_DEK_PATH:ccimx93 ?= "0"
|
||||||
TRUSTFENCE_DEK_PATH:ccmp1 ?= "0"
|
TRUSTFENCE_DEK_PATH:ccmp1 ?= "0"
|
||||||
TRUSTFENCE_ENCRYPT_ENVIRONMENT ?= "1"
|
TRUSTFENCE_ENCRYPT_ENVIRONMENT ?= "1"
|
||||||
|
TRUSTFENCE_ENCRYPT_ENVIRONMENT:ccimx93 ?= "0"
|
||||||
TRUSTFENCE_SRK_REVOKE_MASK ?= "0x0"
|
TRUSTFENCE_SRK_REVOKE_MASK ?= "0x0"
|
||||||
TRUSTFENCE_KEY_INDEX ?= "0"
|
TRUSTFENCE_KEY_INDEX ?= "0"
|
||||||
TRUSTFENCE_FIT_IMG:ccmp1 ?= "1"
|
TRUSTFENCE_FIT_IMG:ccmp1 ?= "1"
|
||||||
|
|
||||||
# Partition encryption configuration
|
# Partition encryption configuration
|
||||||
TRUSTFENCE_ENCRYPT_PARTITIONS ?= "1"
|
TRUSTFENCE_ENCRYPT_PARTITIONS ?= "1"
|
||||||
|
TRUSTFENCE_ENCRYPT_PARTITIONS:ccimx93 ?= "0"
|
||||||
TRUSTFENCE_ENCRYPT_ROOTFS ?= "${@bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs", "0", "1", d)}"
|
TRUSTFENCE_ENCRYPT_ROOTFS ?= "${@bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs", "0", "1", d)}"
|
||||||
|
TRUSTFENCE_ENCRYPT_ROOTFS:ccimx93 ?= "0"
|
||||||
|
|
||||||
# Read-only rootfs
|
# Read-only rootfs
|
||||||
TRUSTFENCE_READ_ONLY_ROOTFS ?= "${@bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs", "1", "0", d)}"
|
TRUSTFENCE_READ_ONLY_ROOTFS ?= "${@bb.utils.contains("IMAGE_FEATURES", "read-only-rootfs", "1", "0", d)}"
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ require conf/distro/poky.conf
|
||||||
YOCTO_MAJOR = "4"
|
YOCTO_MAJOR = "4"
|
||||||
YOCTO_MINOR = "0"
|
YOCTO_MINOR = "0"
|
||||||
DEY_RELEASE = "5"
|
DEY_RELEASE = "5"
|
||||||
DEY_BUILD = "1"
|
DEY_BUILD = "2"
|
||||||
|
|
||||||
# Firmware version of the system.
|
# Firmware version of the system.
|
||||||
DEY_FIRMWARE_VERSION ?= "${YOCTO_MAJOR}.${YOCTO_MINOR}.${DEY_RELEASE}.${DEY_BUILD}"
|
DEY_FIRMWARE_VERSION ?= "${YOCTO_MAJOR}.${YOCTO_MINOR}.${DEY_RELEASE}.${DEY_BUILD}"
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,933 @@
|
||||||
|
From: Gabriel Valcazar <gabriel.valcazar@digi.com>
|
||||||
|
Date: Fri, 19 Jan 2024 09:45:19 +0100
|
||||||
|
Subject: [PATCH] Restore wl_shell to weston 11
|
||||||
|
|
||||||
|
This shell was deprecated some time ago and removed in weston 11, but it's the
|
||||||
|
default shell used by LVGL's wayland backend. Until we migrate said backend to
|
||||||
|
use xdg_shell, restore wl_shell in weston 11.
|
||||||
|
|
||||||
|
This reverts the following commits:
|
||||||
|
|
||||||
|
* d40cedc8af9a42e1f6746fb58f4556080c6ff133
|
||||||
|
* 7cae2a1fb0aeec24ca33ac4c7cbb268f77095cb5
|
||||||
|
* e6b8f5a5e40cd6c0b934e8ae079c86d5193efa96
|
||||||
|
|
||||||
|
Signed-off-by: Gabriel Valcazar <gabriel.valcazar@digi.com>
|
||||||
|
---
|
||||||
|
desktop-shell/shell.c | 26 +-
|
||||||
|
libweston/backend-wayland/wayland.c | 87 ++++-
|
||||||
|
libweston/desktop/internal.h | 4 +
|
||||||
|
libweston/desktop/libweston-desktop.c | 19 +
|
||||||
|
libweston/desktop/meson.build | 1 +
|
||||||
|
libweston/desktop/wl-shell.c | 497 ++++++++++++++++++++++++++
|
||||||
|
meson.build | 6 +
|
||||||
|
meson_options.txt | 7 +
|
||||||
|
8 files changed, 630 insertions(+), 17 deletions(-)
|
||||||
|
create mode 100644 libweston/desktop/wl-shell.c
|
||||||
|
|
||||||
|
diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
|
||||||
|
index 91fadd0b..fced4d76 100644
|
||||||
|
--- a/desktop-shell/shell.c
|
||||||
|
+++ b/desktop-shell/shell.c
|
||||||
|
@@ -1163,16 +1163,16 @@ resize_grab_motion(struct weston_pointer_grab *grab,
|
||||||
|
pointer->x, pointer->y, &to_x, &to_y);
|
||||||
|
|
||||||
|
width = resize->width;
|
||||||
|
- if (resize->edges & WESTON_DESKTOP_SURFACE_EDGE_LEFT) {
|
||||||
|
+ if (resize->edges & WL_SHELL_SURFACE_RESIZE_LEFT) {
|
||||||
|
width += wl_fixed_to_int(from_x - to_x);
|
||||||
|
- } else if (resize->edges & WESTON_DESKTOP_SURFACE_EDGE_RIGHT) {
|
||||||
|
+ } else if (resize->edges & WL_SHELL_SURFACE_RESIZE_RIGHT) {
|
||||||
|
width += wl_fixed_to_int(to_x - from_x);
|
||||||
|
}
|
||||||
|
|
||||||
|
height = resize->height;
|
||||||
|
- if (resize->edges & WESTON_DESKTOP_SURFACE_EDGE_TOP) {
|
||||||
|
+ if (resize->edges & WL_SHELL_SURFACE_RESIZE_TOP) {
|
||||||
|
height += wl_fixed_to_int(from_y - to_y);
|
||||||
|
- } else if (resize->edges & WESTON_DESKTOP_SURFACE_EDGE_BOTTOM) {
|
||||||
|
+ } else if (resize->edges & WL_SHELL_SURFACE_RESIZE_BOTTOM) {
|
||||||
|
height += wl_fixed_to_int(to_y - from_y);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1250,9 +1250,9 @@ surface_resize(struct shell_surface *shsurf,
|
||||||
|
{
|
||||||
|
struct weston_resize_grab *resize;
|
||||||
|
const unsigned resize_topbottom =
|
||||||
|
- WESTON_DESKTOP_SURFACE_EDGE_TOP | WESTON_DESKTOP_SURFACE_EDGE_BOTTOM;
|
||||||
|
+ WL_SHELL_SURFACE_RESIZE_TOP | WL_SHELL_SURFACE_RESIZE_BOTTOM;
|
||||||
|
const unsigned resize_leftright =
|
||||||
|
- WESTON_DESKTOP_SURFACE_EDGE_LEFT | WESTON_DESKTOP_SURFACE_EDGE_RIGHT;
|
||||||
|
+ WL_SHELL_SURFACE_RESIZE_LEFT | WL_SHELL_SURFACE_RESIZE_RIGHT;
|
||||||
|
const unsigned resize_any = resize_topbottom | resize_leftright;
|
||||||
|
struct weston_geometry geometry;
|
||||||
|
|
||||||
|
@@ -1262,7 +1262,7 @@ surface_resize(struct shell_surface *shsurf,
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Check for invalid edge combinations. */
|
||||||
|
- if (edges == WESTON_DESKTOP_SURFACE_EDGE_NONE || edges > resize_any ||
|
||||||
|
+ if (edges == WL_SHELL_SURFACE_RESIZE_NONE || edges > resize_any ||
|
||||||
|
(edges & resize_topbottom) == resize_topbottom ||
|
||||||
|
(edges & resize_leftright) == resize_leftright)
|
||||||
|
return 0;
|
||||||
|
@@ -2123,9 +2123,9 @@ desktop_surface_committed(struct weston_desktop_surface *desktop_surface,
|
||||||
|
sy = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (shsurf->resize_edges & WESTON_DESKTOP_SURFACE_EDGE_LEFT)
|
||||||
|
+ if (shsurf->resize_edges & WL_SHELL_SURFACE_RESIZE_LEFT)
|
||||||
|
sx = shsurf->last_width - surface->width;
|
||||||
|
- if (shsurf->resize_edges & WESTON_DESKTOP_SURFACE_EDGE_TOP)
|
||||||
|
+ if (shsurf->resize_edges & WL_SHELL_SURFACE_RESIZE_TOP)
|
||||||
|
sy = shsurf->last_height - surface->height;
|
||||||
|
|
||||||
|
weston_view_to_global_float(shsurf->view, 0, 0, &from_x, &from_y);
|
||||||
|
@@ -3084,18 +3084,18 @@ resize_binding(struct weston_pointer *pointer, const struct timespec *time,
|
||||||
|
&x, &y);
|
||||||
|
|
||||||
|
if (x < surface->width / 3)
|
||||||
|
- edges |= WESTON_DESKTOP_SURFACE_EDGE_LEFT;
|
||||||
|
+ edges |= WL_SHELL_SURFACE_RESIZE_LEFT;
|
||||||
|
else if (x < 2 * surface->width / 3)
|
||||||
|
edges |= 0;
|
||||||
|
else
|
||||||
|
- edges |= WESTON_DESKTOP_SURFACE_EDGE_RIGHT;
|
||||||
|
+ edges |= WL_SHELL_SURFACE_RESIZE_RIGHT;
|
||||||
|
|
||||||
|
if (y < surface->height / 3)
|
||||||
|
- edges |= WESTON_DESKTOP_SURFACE_EDGE_TOP;
|
||||||
|
+ edges |= WL_SHELL_SURFACE_RESIZE_TOP;
|
||||||
|
else if (y < 2 * surface->height / 3)
|
||||||
|
edges |= 0;
|
||||||
|
else
|
||||||
|
- edges |= WESTON_DESKTOP_SURFACE_EDGE_BOTTOM;
|
||||||
|
+ edges |= WL_SHELL_SURFACE_RESIZE_BOTTOM;
|
||||||
|
|
||||||
|
surface_resize(shsurf, pointer, edges);
|
||||||
|
}
|
||||||
|
diff --git a/libweston/backend-wayland/wayland.c b/libweston/backend-wayland/wayland.c
|
||||||
|
index bb5648d5..3ba20ff7 100644
|
||||||
|
--- a/libweston/backend-wayland/wayland.c
|
||||||
|
+++ b/libweston/backend-wayland/wayland.c
|
||||||
|
@@ -76,6 +76,7 @@ struct wayland_backend {
|
||||||
|
struct wl_display *wl_display;
|
||||||
|
struct wl_registry *registry;
|
||||||
|
struct wl_compositor *compositor;
|
||||||
|
+ struct wl_shell *shell;
|
||||||
|
struct xdg_wm_base *xdg_wm_base;
|
||||||
|
struct zwp_fullscreen_shell_v1 *fshell;
|
||||||
|
struct wl_shm *shm;
|
||||||
|
@@ -111,6 +112,7 @@ struct wayland_output {
|
||||||
|
struct wl_output *output;
|
||||||
|
uint32_t global_id;
|
||||||
|
|
||||||
|
+ struct wl_shell_surface *shell_surface;
|
||||||
|
struct xdg_surface *xdg_surface;
|
||||||
|
struct xdg_toplevel *xdg_toplevel;
|
||||||
|
int configure_width, configure_height;
|
||||||
|
@@ -715,6 +717,11 @@ wayland_backend_destroy_output_surface(struct wayland_output *output)
|
||||||
|
output->parent.xdg_surface = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (output->parent.shell_surface) {
|
||||||
|
+ wl_shell_surface_destroy(output->parent.shell_surface);
|
||||||
|
+ output->parent.shell_surface = NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
wl_surface_destroy(output->parent.surface);
|
||||||
|
output->parent.surface = NULL;
|
||||||
|
}
|
||||||
|
@@ -787,6 +794,8 @@ wayland_output_destroy(struct weston_output *base)
|
||||||
|
free(output);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static const struct wl_shell_surface_listener shell_surface_listener;
|
||||||
|
+
|
||||||
|
#ifdef ENABLE_EGL
|
||||||
|
static int
|
||||||
|
wayland_output_init_gl_renderer(struct wayland_output *output)
|
||||||
|
@@ -940,6 +949,8 @@ wayland_output_set_windowed(struct wayland_output *output)
|
||||||
|
|
||||||
|
if (output->parent.xdg_toplevel) {
|
||||||
|
xdg_toplevel_unset_fullscreen(output->parent.xdg_toplevel);
|
||||||
|
+ } else if (output->parent.shell_surface) {
|
||||||
|
+ wl_shell_surface_set_toplevel(output->parent.shell_surface);
|
||||||
|
} else {
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
@@ -949,6 +960,7 @@ wayland_output_set_windowed(struct wayland_output *output)
|
||||||
|
|
||||||
|
static void
|
||||||
|
wayland_output_set_fullscreen(struct wayland_output *output,
|
||||||
|
+ enum wl_shell_surface_fullscreen_method method,
|
||||||
|
uint32_t framerate, struct wl_output *target)
|
||||||
|
{
|
||||||
|
if (output->frame) {
|
||||||
|
@@ -960,6 +972,9 @@ wayland_output_set_fullscreen(struct wayland_output *output,
|
||||||
|
|
||||||
|
if (output->parent.xdg_toplevel) {
|
||||||
|
xdg_toplevel_set_fullscreen(output->parent.xdg_toplevel, target);
|
||||||
|
+ } else if (output->parent.shell_surface) {
|
||||||
|
+ wl_shell_surface_set_fullscreen(output->parent.shell_surface,
|
||||||
|
+ method, framerate, target);
|
||||||
|
} else {
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
@@ -1089,7 +1104,7 @@ wayland_output_switch_mode(struct weston_output *output_base,
|
||||||
|
|
||||||
|
b = to_wayland_backend(output_base->compositor);
|
||||||
|
|
||||||
|
- if (output->parent.xdg_surface || !b->parent.fshell)
|
||||||
|
+ if (output->parent.xdg_surface || output->parent.shell_surface || !b->parent.fshell)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
mode = wayland_output_choose_mode(output, mode);
|
||||||
|
@@ -1230,6 +1245,20 @@ wayland_backend_create_output_surface(struct wayland_output *output)
|
||||||
|
|
||||||
|
weston_log("wayland-backend: Using xdg_wm_base\n");
|
||||||
|
}
|
||||||
|
+ else if (b->parent.shell) {
|
||||||
|
+ output->parent.shell_surface =
|
||||||
|
+ wl_shell_get_shell_surface(b->parent.shell,
|
||||||
|
+ output->parent.surface);
|
||||||
|
+ if (!output->parent.shell_surface) {
|
||||||
|
+ wl_surface_destroy(output->parent.surface);
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ wl_shell_surface_add_listener(output->parent.shell_surface,
|
||||||
|
+ &shell_surface_listener, output);
|
||||||
|
+
|
||||||
|
+ weston_log("wayland-backend: Using wl_shell\n");
|
||||||
|
+ }
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@@ -1294,9 +1323,13 @@ wayland_output_enable(struct weston_output *base)
|
||||||
|
|
||||||
|
output->parent.draw_initial_frame = true;
|
||||||
|
}
|
||||||
|
+ } else {
|
||||||
|
+ wayland_output_set_fullscreen(output,
|
||||||
|
+ WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER,
|
||||||
|
+ output->mode.refresh, output->parent.output);
|
||||||
|
}
|
||||||
|
} else if (b->fullscreen) {
|
||||||
|
- wayland_output_set_fullscreen(output, 0, NULL);
|
||||||
|
+ wayland_output_set_fullscreen(output, 0, 0, NULL);
|
||||||
|
} else {
|
||||||
|
wayland_output_set_windowed(output);
|
||||||
|
}
|
||||||
|
@@ -1578,10 +1611,13 @@ wayland_output_setup_fullscreen(struct wayland_output *output,
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
/* What should size be set if conditional is false? */
|
||||||
|
- if (b->parent.xdg_wm_base) {
|
||||||
|
+ if (b->parent.xdg_wm_base || b->parent.shell) {
|
||||||
|
if (output->parent.xdg_toplevel)
|
||||||
|
xdg_toplevel_set_fullscreen(output->parent.xdg_toplevel,
|
||||||
|
output->parent.output);
|
||||||
|
+ else if (output->parent.shell_surface)
|
||||||
|
+ wl_shell_surface_set_fullscreen(output->parent.shell_surface,
|
||||||
|
+ 0, 0, NULL);
|
||||||
|
|
||||||
|
wl_display_roundtrip(b->parent.wl_display);
|
||||||
|
|
||||||
|
@@ -1605,6 +1641,36 @@ err_set_size:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+shell_surface_ping(void *data, struct wl_shell_surface *shell_surface,
|
||||||
|
+ uint32_t serial)
|
||||||
|
+{
|
||||||
|
+ wl_shell_surface_pong(shell_surface, serial);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+shell_surface_configure(void *data, struct wl_shell_surface *shell_surface,
|
||||||
|
+ uint32_t edges, int32_t width, int32_t height)
|
||||||
|
+{
|
||||||
|
+ struct wayland_output *output = data;
|
||||||
|
+
|
||||||
|
+ output->parent.configure_width = width;
|
||||||
|
+ output->parent.configure_height = height;
|
||||||
|
+
|
||||||
|
+ /* FIXME: implement resizing */
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+shell_surface_popup_done(void *data, struct wl_shell_surface *shell_surface)
|
||||||
|
+{
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static const struct wl_shell_surface_listener shell_surface_listener = {
|
||||||
|
+ shell_surface_ping,
|
||||||
|
+ shell_surface_configure,
|
||||||
|
+ shell_surface_popup_done
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
/* Events received from the wayland-server this compositor is client of: */
|
||||||
|
|
||||||
|
/* parent input interface */
|
||||||
|
@@ -1782,6 +1848,9 @@ input_handle_button(void *data, struct wl_pointer *pointer,
|
||||||
|
if (input->output->parent.xdg_toplevel)
|
||||||
|
xdg_toplevel_move(input->output->parent.xdg_toplevel,
|
||||||
|
input->parent.seat, serial);
|
||||||
|
+ else if (input->output->parent.shell_surface)
|
||||||
|
+ wl_shell_surface_move(input->output->parent.shell_surface,
|
||||||
|
+ input->parent.seat, serial);
|
||||||
|
frame_status_clear(input->output->frame,
|
||||||
|
FRAME_STATUS_MOVE);
|
||||||
|
return;
|
||||||
|
@@ -2135,6 +2204,9 @@ input_handle_touch_down(void *data, struct wl_touch *wl_touch,
|
||||||
|
if (output->parent.xdg_toplevel)
|
||||||
|
xdg_toplevel_move(output->parent.xdg_toplevel,
|
||||||
|
input->parent.seat, serial);
|
||||||
|
+ else if (output->parent.shell_surface)
|
||||||
|
+ wl_shell_surface_move(output->parent.shell_surface,
|
||||||
|
+ input->parent.seat, serial);
|
||||||
|
frame_status_clear(output->frame,
|
||||||
|
FRAME_STATUS_MOVE);
|
||||||
|
return;
|
||||||
|
@@ -2647,6 +2719,10 @@ registry_handle_global(void *data, struct wl_registry *registry, uint32_t name,
|
||||||
|
&xdg_wm_base_interface, 1);
|
||||||
|
xdg_wm_base_add_listener(b->parent.xdg_wm_base,
|
||||||
|
&wm_base_listener, b);
|
||||||
|
+ } else if (strcmp(interface, "wl_shell") == 0) {
|
||||||
|
+ b->parent.shell =
|
||||||
|
+ wl_registry_bind(registry, name,
|
||||||
|
+ &wl_shell_interface, 1);
|
||||||
|
} else if (strcmp(interface, "zwp_fullscreen_shell_v1") == 0) {
|
||||||
|
b->parent.fshell =
|
||||||
|
wl_registry_bind(registry, name,
|
||||||
|
@@ -2741,6 +2817,9 @@ wayland_destroy(struct weston_compositor *ec)
|
||||||
|
if (b->parent.xdg_wm_base)
|
||||||
|
xdg_wm_base_destroy(b->parent.xdg_wm_base);
|
||||||
|
|
||||||
|
+ if (b->parent.shell)
|
||||||
|
+ wl_shell_destroy(b->parent.shell);
|
||||||
|
+
|
||||||
|
if (b->parent.fshell)
|
||||||
|
zwp_fullscreen_shell_v1_release(b->parent.fshell);
|
||||||
|
|
||||||
|
@@ -2808,7 +2887,7 @@ fullscreen_binding(struct weston_keyboard *keyboard,
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (input->output->frame)
|
||||||
|
- wayland_output_set_fullscreen(input->output, 0, NULL);
|
||||||
|
+ wayland_output_set_fullscreen(input->output, 0, 0, NULL);
|
||||||
|
else
|
||||||
|
wayland_output_set_windowed(input->output);
|
||||||
|
|
||||||
|
diff --git a/libweston/desktop/internal.h b/libweston/desktop/internal.h
|
||||||
|
index 1d035d5c..93b15919 100644
|
||||||
|
--- a/libweston/desktop/internal.h
|
||||||
|
+++ b/libweston/desktop/internal.h
|
||||||
|
@@ -241,6 +241,10 @@ weston_desktop_xdg_wm_base_create(struct weston_desktop *desktop,
|
||||||
|
struct wl_global *
|
||||||
|
weston_desktop_xdg_shell_v6_create(struct weston_desktop *desktop,
|
||||||
|
struct wl_display *display);
|
||||||
|
+struct wl_global *
|
||||||
|
+weston_desktop_wl_shell_create(struct weston_desktop *desktop,
|
||||||
|
+ struct wl_display *display);
|
||||||
|
+
|
||||||
|
void
|
||||||
|
weston_desktop_xwayland_init(struct weston_desktop *desktop);
|
||||||
|
void
|
||||||
|
diff --git a/libweston/desktop/libweston-desktop.c b/libweston/desktop/libweston-desktop.c
|
||||||
|
index 0be9d717..cbe69942 100644
|
||||||
|
--- a/libweston/desktop/libweston-desktop.c
|
||||||
|
+++ b/libweston/desktop/libweston-desktop.c
|
||||||
|
@@ -42,6 +42,7 @@ struct weston_desktop {
|
||||||
|
void *user_data;
|
||||||
|
struct wl_global *xdg_wm_base; /* Stable protocol xdg_shell replaces xdg_shell_unstable_v6 */
|
||||||
|
struct wl_global *xdg_shell_v6; /* Unstable xdg_shell_unstable_v6 protocol. */
|
||||||
|
+ struct wl_global *wl_shell;
|
||||||
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
@@ -76,6 +77,22 @@ weston_desktop_create(struct weston_compositor *compositor,
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifdef HAVE_DEPRECATED_WL_SHELL
|
||||||
|
+ weston_log("Warning: support for deprecated wl_shell interface is "
|
||||||
|
+ "enabled. Please migrate legacy clients to xdg-shell.\n");
|
||||||
|
+ desktop->wl_shell =
|
||||||
|
+ weston_desktop_wl_shell_create(desktop, display);
|
||||||
|
+ if (desktop->wl_shell == NULL) {
|
||||||
|
+ weston_desktop_destroy(desktop);
|
||||||
|
+ return NULL;
|
||||||
|
+ }
|
||||||
|
+#else
|
||||||
|
+ weston_log("Note: support for the deprecated wl_shell interface is "
|
||||||
|
+ "disabled. If a legacy client still needs it, it can be "
|
||||||
|
+ "re-enabled by passing -Ddeprecated-wl-shell=true to Meson "
|
||||||
|
+ "when building Weston.\n");
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
weston_desktop_xwayland_init(desktop);
|
||||||
|
|
||||||
|
return desktop;
|
||||||
|
@@ -89,6 +106,8 @@ weston_desktop_destroy(struct weston_desktop *desktop)
|
||||||
|
|
||||||
|
weston_desktop_xwayland_fini(desktop);
|
||||||
|
|
||||||
|
+ if (desktop->wl_shell != NULL)
|
||||||
|
+ wl_global_destroy(desktop->wl_shell);
|
||||||
|
if (desktop->xdg_shell_v6 != NULL)
|
||||||
|
wl_global_destroy(desktop->xdg_shell_v6);
|
||||||
|
if (desktop->xdg_wm_base != NULL)
|
||||||
|
diff --git a/libweston/desktop/meson.build b/libweston/desktop/meson.build
|
||||||
|
index 4588ad10..d8e1a709 100644
|
||||||
|
--- a/libweston/desktop/meson.build
|
||||||
|
+++ b/libweston/desktop/meson.build
|
||||||
|
@@ -4,6 +4,7 @@ srcs_libweston += files([
|
||||||
|
'seat.c',
|
||||||
|
'surface.c',
|
||||||
|
'xwayland.c',
|
||||||
|
+ 'wl-shell.c',
|
||||||
|
'xdg-shell.c',
|
||||||
|
'xdg-shell-v6.c',
|
||||||
|
])
|
||||||
|
diff --git a/libweston/desktop/wl-shell.c b/libweston/desktop/wl-shell.c
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000..9efec89b
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/libweston/desktop/wl-shell.c
|
||||||
|
@@ -0,0 +1,497 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright © 2010-2012 Intel Corporation
|
||||||
|
+ * Copyright © 2011-2012 Collabora, Ltd.
|
||||||
|
+ * Copyright © 2013 Raspberry Pi Foundation
|
||||||
|
+ * Copyright © 2016 Quentin "Sardem FF7" Glidic
|
||||||
|
+ *
|
||||||
|
+ * Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
+ * copy of this software and associated documentation files (the "Software"),
|
||||||
|
+ * to deal in the Software without restriction, including without limitation
|
||||||
|
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
+ * and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
+ * Software is furnished to do so, subject to the following conditions:
|
||||||
|
+ *
|
||||||
|
+ * The above copyright notice and this permission notice (including the next
|
||||||
|
+ * paragraph) shall be included in all copies or substantial portions of the
|
||||||
|
+ * Software.
|
||||||
|
+ *
|
||||||
|
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
+ * DEALINGS IN THE SOFTWARE.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#include "config.h"
|
||||||
|
+
|
||||||
|
+#include <assert.h>
|
||||||
|
+
|
||||||
|
+#include <wayland-server.h>
|
||||||
|
+
|
||||||
|
+#include <libweston/libweston.h>
|
||||||
|
+#include <libweston/zalloc.h>
|
||||||
|
+
|
||||||
|
+#include <libweston-desktop/libweston-desktop.h>
|
||||||
|
+#include "internal.h"
|
||||||
|
+
|
||||||
|
+#define WD_WL_SHELL_PROTOCOL_VERSION 1
|
||||||
|
+
|
||||||
|
+enum weston_desktop_wl_shell_surface_state {
|
||||||
|
+ NONE,
|
||||||
|
+ TOPLEVEL,
|
||||||
|
+ MAXIMIZED,
|
||||||
|
+ FULLSCREEN,
|
||||||
|
+ TRANSIENT,
|
||||||
|
+ POPUP,
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+struct weston_desktop_wl_shell_surface {
|
||||||
|
+ struct wl_resource *resource;
|
||||||
|
+ struct weston_desktop *desktop;
|
||||||
|
+ struct wl_display *display;
|
||||||
|
+ struct weston_desktop_surface *surface;
|
||||||
|
+ struct weston_desktop_surface *parent;
|
||||||
|
+ bool added;
|
||||||
|
+ struct weston_desktop_seat *popup_seat;
|
||||||
|
+ enum weston_desktop_wl_shell_surface_state state;
|
||||||
|
+ struct wl_listener wl_surface_resource_destroy_listener;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_surface_set_size(struct weston_desktop_surface *dsurface,
|
||||||
|
+ void *user_data,
|
||||||
|
+ int32_t width, int32_t height)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_wl_shell_surface *surface = user_data;
|
||||||
|
+ struct weston_surface *wsurface =
|
||||||
|
+ weston_desktop_surface_get_surface(surface->surface);
|
||||||
|
+
|
||||||
|
+ if ((wsurface->width == width && wsurface->height == height) ||
|
||||||
|
+ (width == 0 && height == 0))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ wl_shell_surface_send_configure(surface->resource,
|
||||||
|
+ WL_SHELL_SURFACE_RESIZE_NONE,
|
||||||
|
+ width, height);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_surface_maybe_ungrab(struct weston_desktop_wl_shell_surface *surface)
|
||||||
|
+{
|
||||||
|
+ if (surface->state != POPUP ||
|
||||||
|
+ !weston_desktop_surface_get_grab(surface->surface))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ weston_desktop_surface_popup_ungrab(surface->surface,
|
||||||
|
+ surface->popup_seat);
|
||||||
|
+ surface->popup_seat = NULL;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_surface_committed(struct weston_desktop_surface *dsurface,
|
||||||
|
+ void *user_data,
|
||||||
|
+ int32_t sx, int32_t sy)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_wl_shell_surface *surface = user_data;
|
||||||
|
+ struct weston_surface *wsurface =
|
||||||
|
+ weston_desktop_surface_get_surface(dsurface);
|
||||||
|
+
|
||||||
|
+ if (wsurface->buffer_ref.buffer == NULL)
|
||||||
|
+ weston_desktop_wl_shell_surface_maybe_ungrab(surface);
|
||||||
|
+
|
||||||
|
+ if (surface->added)
|
||||||
|
+ weston_desktop_api_committed(surface->desktop, surface->surface,
|
||||||
|
+ sx, sy);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_surface_ping(struct weston_desktop_surface *dsurface,
|
||||||
|
+ uint32_t serial, void *user_data)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_wl_shell_surface *surface = user_data;
|
||||||
|
+
|
||||||
|
+ wl_shell_surface_send_ping(surface->resource, serial);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_surface_close(struct weston_desktop_surface *dsurface,
|
||||||
|
+ void *user_data)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_wl_shell_surface *surface = user_data;
|
||||||
|
+
|
||||||
|
+ if (surface->state == POPUP)
|
||||||
|
+ wl_shell_surface_send_popup_done(surface->resource);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static bool
|
||||||
|
+weston_desktop_wl_shell_surface_get_maximized(struct weston_desktop_surface *dsurface,
|
||||||
|
+ void *user_data)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_wl_shell_surface *surface = user_data;
|
||||||
|
+
|
||||||
|
+ return surface->state == MAXIMIZED;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static bool
|
||||||
|
+weston_desktop_wl_shell_surface_get_fullscreen(struct weston_desktop_surface *dsurface,
|
||||||
|
+ void *user_data)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_wl_shell_surface *surface = user_data;
|
||||||
|
+
|
||||||
|
+ return surface->state == FULLSCREEN;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_change_state(struct weston_desktop_wl_shell_surface *surface,
|
||||||
|
+ enum weston_desktop_wl_shell_surface_state state,
|
||||||
|
+ struct weston_desktop_surface *parent,
|
||||||
|
+ int32_t x, int32_t y)
|
||||||
|
+{
|
||||||
|
+ bool to_add = (parent == NULL);
|
||||||
|
+
|
||||||
|
+ assert(state != NONE);
|
||||||
|
+
|
||||||
|
+ if (to_add && surface->added) {
|
||||||
|
+ surface->state = state;
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (surface->state != state) {
|
||||||
|
+ if (surface->state == POPUP)
|
||||||
|
+ weston_desktop_wl_shell_surface_maybe_ungrab(surface);
|
||||||
|
+
|
||||||
|
+ if (to_add) {
|
||||||
|
+ weston_desktop_surface_unset_relative_to(surface->surface);
|
||||||
|
+ weston_desktop_api_surface_added(surface->desktop,
|
||||||
|
+ surface->surface);
|
||||||
|
+ } else if (surface->added) {
|
||||||
|
+ weston_desktop_api_surface_removed(surface->desktop,
|
||||||
|
+ surface->surface);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ surface->state = state;
|
||||||
|
+ surface->added = to_add;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (parent != NULL)
|
||||||
|
+ weston_desktop_surface_set_relative_to(surface->surface, parent,
|
||||||
|
+ x, y, false);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_surface_destroy(struct weston_desktop_surface *dsurface,
|
||||||
|
+ void *user_data)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_wl_shell_surface *surface = user_data;
|
||||||
|
+
|
||||||
|
+ wl_list_remove(&surface->wl_surface_resource_destroy_listener.link);
|
||||||
|
+
|
||||||
|
+ weston_desktop_wl_shell_surface_maybe_ungrab(surface);
|
||||||
|
+ weston_desktop_surface_unset_relative_to(surface->surface);
|
||||||
|
+ if (surface->added)
|
||||||
|
+ weston_desktop_api_surface_removed(surface->desktop,
|
||||||
|
+ surface->surface);
|
||||||
|
+
|
||||||
|
+ free(surface);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_surface_protocol_pong(struct wl_client *wl_client,
|
||||||
|
+ struct wl_resource *resource,
|
||||||
|
+ uint32_t serial)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_surface *surface = wl_resource_get_user_data(resource);
|
||||||
|
+
|
||||||
|
+ weston_desktop_client_pong(weston_desktop_surface_get_client(surface), serial);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_surface_protocol_move(struct wl_client *wl_client,
|
||||||
|
+ struct wl_resource *resource,
|
||||||
|
+ struct wl_resource *seat_resource,
|
||||||
|
+ uint32_t serial)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_surface *dsurface =
|
||||||
|
+ wl_resource_get_user_data(resource);
|
||||||
|
+ struct weston_seat *seat =
|
||||||
|
+ wl_resource_get_user_data(seat_resource);
|
||||||
|
+ struct weston_desktop_wl_shell_surface *surface =
|
||||||
|
+ weston_desktop_surface_get_implementation_data(dsurface);
|
||||||
|
+
|
||||||
|
+ if (seat == NULL)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ weston_desktop_api_move(surface->desktop, dsurface, seat, serial);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_surface_protocol_resize(struct wl_client *wl_client,
|
||||||
|
+ struct wl_resource *resource,
|
||||||
|
+ struct wl_resource *seat_resource,
|
||||||
|
+ uint32_t serial,
|
||||||
|
+ enum wl_shell_surface_resize edges)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_surface *dsurface =
|
||||||
|
+ wl_resource_get_user_data(resource);
|
||||||
|
+ struct weston_seat *seat = wl_resource_get_user_data(seat_resource);
|
||||||
|
+ struct weston_desktop_wl_shell_surface *surface =
|
||||||
|
+ weston_desktop_surface_get_implementation_data(dsurface);
|
||||||
|
+ enum weston_desktop_surface_edge surf_edges =
|
||||||
|
+ (enum weston_desktop_surface_edge) edges;
|
||||||
|
+
|
||||||
|
+ if (seat == NULL)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ weston_desktop_api_resize(surface->desktop, dsurface, seat, serial, surf_edges);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_surface_protocol_set_toplevel(struct wl_client *wl_client,
|
||||||
|
+ struct wl_resource *resource)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_surface *dsurface =
|
||||||
|
+ wl_resource_get_user_data(resource);
|
||||||
|
+ struct weston_desktop_wl_shell_surface *surface =
|
||||||
|
+ weston_desktop_surface_get_implementation_data(dsurface);
|
||||||
|
+
|
||||||
|
+ weston_desktop_wl_shell_change_state(surface, TOPLEVEL, NULL, 0, 0);
|
||||||
|
+ if (surface->parent == NULL)
|
||||||
|
+ return;
|
||||||
|
+ surface->parent = NULL;
|
||||||
|
+ weston_desktop_api_set_parent(surface->desktop, surface->surface, NULL);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_surface_protocol_set_transient(struct wl_client *wl_client,
|
||||||
|
+ struct wl_resource *resource,
|
||||||
|
+ struct wl_resource *parent_resource,
|
||||||
|
+ int32_t x, int32_t y,
|
||||||
|
+ enum wl_shell_surface_transient flags)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_surface *dsurface =
|
||||||
|
+ wl_resource_get_user_data(resource);
|
||||||
|
+ struct weston_surface *wparent =
|
||||||
|
+ wl_resource_get_user_data(parent_resource);
|
||||||
|
+ struct weston_desktop_surface *parent;
|
||||||
|
+ struct weston_desktop_wl_shell_surface *surface =
|
||||||
|
+ weston_desktop_surface_get_implementation_data(dsurface);
|
||||||
|
+
|
||||||
|
+ if (!weston_surface_is_desktop_surface(wparent))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ parent = weston_surface_get_desktop_surface(wparent);
|
||||||
|
+ if (flags & WL_SHELL_SURFACE_TRANSIENT_INACTIVE) {
|
||||||
|
+ weston_desktop_wl_shell_change_state(surface, TRANSIENT, parent,
|
||||||
|
+ x, y);
|
||||||
|
+ } else {
|
||||||
|
+ weston_desktop_wl_shell_change_state(surface, TOPLEVEL, NULL,
|
||||||
|
+ 0, 0);
|
||||||
|
+ surface->parent = parent;
|
||||||
|
+ weston_desktop_api_set_parent(surface->desktop,
|
||||||
|
+ surface->surface, parent);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_surface_protocol_set_fullscreen(struct wl_client *wl_client,
|
||||||
|
+ struct wl_resource *resource,
|
||||||
|
+ enum wl_shell_surface_fullscreen_method method,
|
||||||
|
+ uint32_t framerate,
|
||||||
|
+ struct wl_resource *output_resource)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_surface *dsurface =
|
||||||
|
+ wl_resource_get_user_data(resource);
|
||||||
|
+ struct weston_desktop_wl_shell_surface *surface =
|
||||||
|
+ weston_desktop_surface_get_implementation_data(dsurface);
|
||||||
|
+ struct weston_output *output = NULL;
|
||||||
|
+
|
||||||
|
+ if (output_resource != NULL)
|
||||||
|
+ output = weston_head_from_resource(output_resource)->output;
|
||||||
|
+
|
||||||
|
+ weston_desktop_wl_shell_change_state(surface, FULLSCREEN, NULL, 0, 0);
|
||||||
|
+ weston_desktop_api_fullscreen_requested(surface->desktop, dsurface,
|
||||||
|
+ true, output);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_surface_protocol_set_popup(struct wl_client *wl_client,
|
||||||
|
+ struct wl_resource *resource,
|
||||||
|
+ struct wl_resource *seat_resource,
|
||||||
|
+ uint32_t serial,
|
||||||
|
+ struct wl_resource *parent_resource,
|
||||||
|
+ int32_t x, int32_t y,
|
||||||
|
+ enum wl_shell_surface_transient flags)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_surface *dsurface =
|
||||||
|
+ wl_resource_get_user_data(resource);
|
||||||
|
+ struct weston_seat *wseat = wl_resource_get_user_data(seat_resource);
|
||||||
|
+ struct weston_desktop_seat *seat = weston_desktop_seat_from_seat(wseat);
|
||||||
|
+ struct weston_surface *parent =
|
||||||
|
+ wl_resource_get_user_data(parent_resource);
|
||||||
|
+ struct weston_desktop_surface *parent_surface;
|
||||||
|
+ struct weston_desktop_wl_shell_surface *surface =
|
||||||
|
+ weston_desktop_surface_get_implementation_data(dsurface);
|
||||||
|
+
|
||||||
|
+ /* Check that if we have a valid wseat we also got a valid desktop seat */
|
||||||
|
+ if (wseat != NULL && seat == NULL) {
|
||||||
|
+ wl_client_post_no_memory(wl_client);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!weston_surface_is_desktop_surface(parent))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ parent_surface = weston_surface_get_desktop_surface(parent);
|
||||||
|
+
|
||||||
|
+ weston_desktop_wl_shell_change_state(surface, POPUP,
|
||||||
|
+ parent_surface, x, y);
|
||||||
|
+ weston_desktop_surface_popup_grab(surface->surface, seat, serial);
|
||||||
|
+ surface->popup_seat = seat;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_surface_protocol_set_maximized(struct wl_client *wl_client,
|
||||||
|
+ struct wl_resource *resource,
|
||||||
|
+ struct wl_resource *output_resource)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_surface *dsurface =
|
||||||
|
+ wl_resource_get_user_data(resource);
|
||||||
|
+ struct weston_desktop_wl_shell_surface *surface =
|
||||||
|
+ weston_desktop_surface_get_implementation_data(dsurface);
|
||||||
|
+
|
||||||
|
+ weston_desktop_wl_shell_change_state(surface, MAXIMIZED, NULL, 0, 0);
|
||||||
|
+ weston_desktop_api_maximized_requested(surface->desktop, dsurface, true);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_surface_protocol_set_title(struct wl_client *wl_client,
|
||||||
|
+ struct wl_resource *resource,
|
||||||
|
+ const char *title)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_surface *surface =
|
||||||
|
+ wl_resource_get_user_data(resource);
|
||||||
|
+
|
||||||
|
+ weston_desktop_surface_set_title(surface, title);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_surface_protocol_set_class(struct wl_client *wl_client,
|
||||||
|
+ struct wl_resource *resource,
|
||||||
|
+ const char *class_)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_surface *surface =
|
||||||
|
+ wl_resource_get_user_data(resource);
|
||||||
|
+
|
||||||
|
+ weston_desktop_surface_set_app_id(surface, class_);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static const struct wl_shell_surface_interface weston_desktop_wl_shell_surface_implementation = {
|
||||||
|
+ .pong = weston_desktop_wl_shell_surface_protocol_pong,
|
||||||
|
+ .move = weston_desktop_wl_shell_surface_protocol_move,
|
||||||
|
+ .resize = weston_desktop_wl_shell_surface_protocol_resize,
|
||||||
|
+ .set_toplevel = weston_desktop_wl_shell_surface_protocol_set_toplevel,
|
||||||
|
+ .set_transient = weston_desktop_wl_shell_surface_protocol_set_transient,
|
||||||
|
+ .set_fullscreen = weston_desktop_wl_shell_surface_protocol_set_fullscreen,
|
||||||
|
+ .set_popup = weston_desktop_wl_shell_surface_protocol_set_popup,
|
||||||
|
+ .set_maximized = weston_desktop_wl_shell_surface_protocol_set_maximized,
|
||||||
|
+ .set_title = weston_desktop_wl_shell_surface_protocol_set_title,
|
||||||
|
+ .set_class = weston_desktop_wl_shell_surface_protocol_set_class,
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const struct weston_desktop_surface_implementation weston_desktop_wl_shell_surface_internal_implementation = {
|
||||||
|
+ .set_size = weston_desktop_wl_shell_surface_set_size,
|
||||||
|
+ .committed = weston_desktop_wl_shell_surface_committed,
|
||||||
|
+ .ping = weston_desktop_wl_shell_surface_ping,
|
||||||
|
+ .close = weston_desktop_wl_shell_surface_close,
|
||||||
|
+
|
||||||
|
+ .get_maximized = weston_desktop_wl_shell_surface_get_maximized,
|
||||||
|
+ .get_fullscreen = weston_desktop_wl_shell_surface_get_fullscreen,
|
||||||
|
+
|
||||||
|
+ .destroy = weston_desktop_wl_shell_surface_destroy,
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+wl_surface_resource_destroyed(struct wl_listener *listener,
|
||||||
|
+ void *data)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_wl_shell_surface *surface =
|
||||||
|
+ wl_container_of(listener, surface,
|
||||||
|
+ wl_surface_resource_destroy_listener);
|
||||||
|
+
|
||||||
|
+ /* the wl_shell_surface spec says that wl_shell_surfaces are to be
|
||||||
|
+ * destroyed automatically when the wl_surface is destroyed. */
|
||||||
|
+ weston_desktop_surface_destroy(surface->surface);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_protocol_get_shell_surface(struct wl_client *wl_client,
|
||||||
|
+ struct wl_resource *resource,
|
||||||
|
+ uint32_t id,
|
||||||
|
+ struct wl_resource *surface_resource)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop_client *client = wl_resource_get_user_data(resource);
|
||||||
|
+ struct weston_surface *wsurface = wl_resource_get_user_data(surface_resource);
|
||||||
|
+ struct weston_desktop_wl_shell_surface *surface;
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+ if (weston_surface_set_role(wsurface, "wl_shell_surface", resource, WL_SHELL_ERROR_ROLE) < 0)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ surface = zalloc(sizeof(struct weston_desktop_wl_shell_surface));
|
||||||
|
+ if (surface == NULL) {
|
||||||
|
+ wl_client_post_no_memory(wl_client);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ surface->desktop = weston_desktop_client_get_desktop(client);
|
||||||
|
+ surface->display = weston_desktop_get_display(surface->desktop);
|
||||||
|
+
|
||||||
|
+ surface->surface =
|
||||||
|
+ weston_desktop_surface_create(surface->desktop, client, wsurface,
|
||||||
|
+ &weston_desktop_wl_shell_surface_internal_implementation,
|
||||||
|
+ surface);
|
||||||
|
+ if (surface->surface == NULL) {
|
||||||
|
+ free(surface);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ surface->wl_surface_resource_destroy_listener.notify =
|
||||||
|
+ wl_surface_resource_destroyed;
|
||||||
|
+ wl_resource_add_destroy_listener(wsurface->resource,
|
||||||
|
+ &surface->wl_surface_resource_destroy_listener);
|
||||||
|
+
|
||||||
|
+ surface->resource =
|
||||||
|
+ weston_desktop_surface_add_resource(surface->surface,
|
||||||
|
+ &wl_shell_surface_interface,
|
||||||
|
+ &weston_desktop_wl_shell_surface_implementation,
|
||||||
|
+ id, NULL);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+static const struct wl_shell_interface weston_desktop_wl_shell_implementation = {
|
||||||
|
+ .get_shell_surface = weston_desktop_wl_shell_protocol_get_shell_surface,
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+weston_desktop_wl_shell_bind(struct wl_client *client, void *data,
|
||||||
|
+ uint32_t version, uint32_t id)
|
||||||
|
+{
|
||||||
|
+ struct weston_desktop *desktop = data;
|
||||||
|
+
|
||||||
|
+ weston_desktop_client_create(desktop, client, NULL, &wl_shell_interface,
|
||||||
|
+ &weston_desktop_wl_shell_implementation,
|
||||||
|
+ version, id);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+struct wl_global *
|
||||||
|
+weston_desktop_wl_shell_create(struct weston_desktop *desktop,
|
||||||
|
+ struct wl_display *display)
|
||||||
|
+{
|
||||||
|
+ return wl_global_create(display,
|
||||||
|
+ &wl_shell_interface,
|
||||||
|
+ WD_WL_SHELL_PROTOCOL_VERSION, desktop,
|
||||||
|
+ weston_desktop_wl_shell_bind);
|
||||||
|
+}
|
||||||
|
diff --git a/meson.build b/meson.build
|
||||||
|
index 6452ca05..64575226 100644
|
||||||
|
--- a/meson.build
|
||||||
|
+++ b/meson.build
|
||||||
|
@@ -141,6 +141,12 @@ if dep_xkbcommon.version().version_compare('>= 0.5.0')
|
||||||
|
config_h.set('HAVE_XKBCOMMON_COMPOSE', '1')
|
||||||
|
endif
|
||||||
|
|
||||||
|
+if get_option('deprecated-wl-shell')
|
||||||
|
+ warning('Support for the deprecated wl_shell interface is enabled.')
|
||||||
|
+ warning('This feature will be removed in a future version.')
|
||||||
|
+ config_h.set('HAVE_DEPRECATED_WL_SHELL', '1')
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
dep_wayland_server = dependency('wayland-server', version: '>= 1.20.0')
|
||||||
|
dep_wayland_client = dependency('wayland-client', version: '>= 1.20.0')
|
||||||
|
dep_pixman = dependency('pixman-1', version: '>= 0.25.2')
|
||||||
|
diff --git a/meson_options.txt b/meson_options.txt
|
||||||
|
index 695eb780..203fa12d 100644
|
||||||
|
--- a/meson_options.txt
|
||||||
|
+++ b/meson_options.txt
|
||||||
|
@@ -132,6 +132,13 @@ option(
|
||||||
|
description: 'Weston desktop shell: default helper client selection'
|
||||||
|
)
|
||||||
|
|
||||||
|
+option(
|
||||||
|
+ 'deprecated-wl-shell',
|
||||||
|
+ type: 'boolean',
|
||||||
|
+ value: false,
|
||||||
|
+ description: 'Enable the deprecated wl_shell protocol'
|
||||||
|
+)
|
||||||
|
+
|
||||||
|
option(
|
||||||
|
'color-management-lcms',
|
||||||
|
type: 'boolean',
|
||||||
|
|
||||||
|
|
@ -0,0 +1,90 @@
|
||||||
|
From: Haihua Hu <jared.hu@nxp.com>
|
||||||
|
Date: Wed, 3 Aug 2022 16:34:47 +0800
|
||||||
|
Subject: [PATCH] Revert "libweston/libinput-device: Enable/Set pointer
|
||||||
|
capabilities only on pointer movement"
|
||||||
|
|
||||||
|
This reverts commit e825fe389ebd63470028abd828019840c1170a03.
|
||||||
|
|
||||||
|
This commit will cause waylandsink cannot register pointer seat.
|
||||||
|
As a result, mouse cannot move waylandsink window
|
||||||
|
|
||||||
|
(cherry picked from commit 3f8f336b5d2cf7ea7aa4e047d669d093fc46dfe6)
|
||||||
|
---
|
||||||
|
libweston/libinput-device.c | 29 +++++------------------------
|
||||||
|
1 file changed, 5 insertions(+), 24 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libweston/libinput-device.c b/libweston/libinput-device.c
|
||||||
|
index 4ea89de0..2d7a7d5f 100644
|
||||||
|
--- a/libweston/libinput-device.c
|
||||||
|
+++ b/libweston/libinput-device.c
|
||||||
|
@@ -60,21 +60,6 @@ evdev_led_update(struct evdev_device *device, enum weston_led weston_leds)
|
||||||
|
libinput_device_led_update(device->device, leds);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void
|
||||||
|
-ensure_pointer_capability(struct libinput_device *libinput_device)
|
||||||
|
-{
|
||||||
|
- struct evdev_device *device = libinput_device_get_user_data(libinput_device);
|
||||||
|
- struct weston_seat *seat = device->seat;
|
||||||
|
-
|
||||||
|
- if (!libinput_device_has_capability(libinput_device, LIBINPUT_DEVICE_CAP_POINTER))
|
||||||
|
- return;
|
||||||
|
-
|
||||||
|
- if (!(device->seat_caps & EVDEV_SEAT_POINTER)) {
|
||||||
|
- weston_seat_init_pointer(seat);
|
||||||
|
- device->seat_caps |= EVDEV_SEAT_POINTER;
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
static void
|
||||||
|
handle_keyboard_key(struct libinput_device *libinput_device,
|
||||||
|
struct libinput_event_keyboard *keyboard_event)
|
||||||
|
@@ -112,8 +97,6 @@ handle_pointer_motion(struct libinput_device *libinput_device,
|
||||||
|
struct timespec time;
|
||||||
|
double dx_unaccel, dy_unaccel;
|
||||||
|
|
||||||
|
- ensure_pointer_capability(libinput_device);
|
||||||
|
-
|
||||||
|
timespec_from_usec(&time,
|
||||||
|
libinput_event_pointer_get_time_usec(pointer_event));
|
||||||
|
dx_unaccel = libinput_event_pointer_get_dx_unaccelerated(pointer_event);
|
||||||
|
@@ -146,8 +129,6 @@ handle_pointer_motion_absolute(
|
||||||
|
double x, y;
|
||||||
|
uint32_t width, height;
|
||||||
|
|
||||||
|
- ensure_pointer_capability(libinput_device);
|
||||||
|
-
|
||||||
|
if (!output)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
@@ -179,8 +160,6 @@ handle_pointer_button(struct libinput_device *libinput_device,
|
||||||
|
libinput_event_pointer_get_seat_button_count(pointer_event);
|
||||||
|
struct timespec time;
|
||||||
|
|
||||||
|
- ensure_pointer_capability(libinput_device);
|
||||||
|
-
|
||||||
|
/* Ignore button events that are not seat wide state changes. */
|
||||||
|
if ((button_state == LIBINPUT_BUTTON_STATE_PRESSED &&
|
||||||
|
seat_button_count != 1) ||
|
||||||
|
@@ -260,8 +239,6 @@ handle_pointer_axis(struct libinput_device *libinput_device,
|
||||||
|
bool has_vert, has_horiz;
|
||||||
|
struct timespec time;
|
||||||
|
|
||||||
|
- ensure_pointer_capability(libinput_device);
|
||||||
|
-
|
||||||
|
has_vert = libinput_event_pointer_has_axis(pointer_event,
|
||||||
|
LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL);
|
||||||
|
has_horiz = libinput_event_pointer_has_axis(pointer_event,
|
||||||
|
@@ -738,7 +715,11 @@ evdev_device_create(struct libinput_device *libinput_device,
|
||||||
|
|
||||||
|
device->seat_caps |= EVDEV_SEAT_KEYBOARD;
|
||||||
|
}
|
||||||
|
-
|
||||||
|
+ if (libinput_device_has_capability(libinput_device,
|
||||||
|
+ LIBINPUT_DEVICE_CAP_POINTER)) {
|
||||||
|
+ weston_seat_init_pointer(seat);
|
||||||
|
+ device->seat_caps |= EVDEV_SEAT_POINTER;
|
||||||
|
+ }
|
||||||
|
if (libinput_device_has_capability(libinput_device,
|
||||||
|
LIBINPUT_DEVICE_CAP_TOUCH)) {
|
||||||
|
if (weston_seat_init_touch(seat) < 0) {
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
# Copyright (C) 2024 Digi International Inc.
|
||||||
|
|
||||||
|
SRC_URI += " \
|
||||||
|
file://0001-Restore-wl_shell-to-weston-11.patch \
|
||||||
|
file://0002-Revert-libweston-libinput-device-Enable-Set-pointer-.patch \
|
||||||
|
"
|
||||||
|
|
||||||
|
EXTRA_OEMESON += "-Ddeprecated-wl-shell=true"
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Copyright (C) 2022, 2023 Digi International.
|
# Copyright (C) 2022-2024 Digi International.
|
||||||
|
|
||||||
require recipes-digi/dey-examples/connectcore-demo-example.inc
|
require recipes-digi/dey-examples/connectcore-demo-example.inc
|
||||||
|
|
||||||
|
|
@ -7,7 +7,8 @@ WESTON_SERVICE:ccmp15 ?= "weston-launch.service"
|
||||||
|
|
||||||
CC_DEMO_DISPLAY ?= "wayland-0"
|
CC_DEMO_DISPLAY ?= "wayland-0"
|
||||||
CC_DEMO_DISPLAY:ccmp15 ?= "wayland-1"
|
CC_DEMO_DISPLAY:ccmp15 ?= "wayland-1"
|
||||||
CC_DEMO_ENV ?= "DISPLAY=:0.0 XDG_RUNTIME_DIR=/run/user/0 WAYLAND_DISPLAY=\${DEMO_DISPLAY}"
|
CC_DEMO_DISPLAY:ccimx93 ?= "wayland-1"
|
||||||
|
CC_DEMO_ENV ?= "DISPLAY=:0.0 XDG_RUNTIME_DIR=/run/user/0 WAYLAND_DISPLAY=\$\{DEMO_DISPLAY\}"
|
||||||
CC_DEMO_ENV:ccimx6ul ?= ""
|
CC_DEMO_ENV:ccimx6ul ?= ""
|
||||||
|
|
||||||
FILESEXTRAPATHS:prepend := "${THISDIR}/../../../../recipes-digi/dey-examples/connectcore-demo-example:"
|
FILESEXTRAPATHS:prepend := "${THISDIR}/../../../../recipes-digi/dey-examples/connectcore-demo-example:"
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,8 @@
|
||||||
#
|
#
|
||||||
#===============================================================================
|
#===============================================================================
|
||||||
|
|
||||||
RESUME_ACTIONS="/tmp/resume_actions"
|
RESUME_FILE="/tmp/resume_actions"
|
||||||
|
RESUME_ACTIONS=""
|
||||||
|
|
||||||
wifi_actions_needed() {
|
wifi_actions_needed() {
|
||||||
[ -d "/proc/device-tree/wireless" ] && [ ! -e "/sys/firmware/devicetree/base/soc@0/bus@42800000/mmc@428b0000/keep-power-in-suspend" ]
|
[ -d "/proc/device-tree/wireless" ] && [ ! -e "/sys/firmware/devicetree/base/soc@0/bus@42800000/mmc@428b0000/keep-power-in-suspend" ]
|
||||||
|
|
@ -27,39 +28,61 @@ bt_actions_needed() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ "${1}" = "pre" ]; then
|
if [ "${1}" = "pre" ]; then
|
||||||
rm -f "${RESUME_ACTIONS}"
|
rm -f "${RESUME_FILE}"
|
||||||
|
|
||||||
# Stop NetworkManager before suspend
|
# Stop NetworkManager before suspend
|
||||||
systemctl stop NetworkManager
|
systemctl stop NetworkManager
|
||||||
|
|
||||||
|
if bt_actions_needed; then
|
||||||
|
# bluetooth service relies on bluetooth-init service so
|
||||||
|
# stop it unconditionally
|
||||||
|
systemctl stop bluetooth-init
|
||||||
|
systemctl stop bluetooth
|
||||||
|
# Program the resume actions to start the services
|
||||||
|
RESUME_ACTIONS_BT="systemctl start bluetooth-init; systemctl start bluetooth;"
|
||||||
|
fi
|
||||||
|
|
||||||
if wifi_actions_needed; then
|
if wifi_actions_needed; then
|
||||||
|
RESUME_ACTIONS_WIFI=""
|
||||||
for iface in wlan0 uap0 wfd0; do
|
for iface in wlan0 uap0 wfd0; do
|
||||||
if grep -qs ${iface} /var/run/ifstate; then
|
if grep -qs ${iface} /var/run/ifstate; then
|
||||||
ifdown ${iface} && echo "ifup ${iface}" >> "${RESUME_ACTIONS}"
|
# Bring the interface down
|
||||||
|
ifdown ${iface}
|
||||||
|
# Program the resume action to bring it up
|
||||||
|
# (prepend to use reverse order)
|
||||||
|
RESUME_ACTIONS_WIFI="ifup ${iface};${RESUME_ACTIONS_WIFI}"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
{
|
# Unload Wi-Fi modules
|
||||||
echo "sleep 0.5"
|
|
||||||
echo "/etc/udev/scripts/load_iw612.sh"
|
|
||||||
} >> "${RESUME_ACTIONS}"
|
|
||||||
modprobe -r moal
|
modprobe -r moal
|
||||||
|
# Program the resume action to reload the modules
|
||||||
|
# (prepend to use reverse order)
|
||||||
|
RESUME_ACTIONS_WIFI="/etc/udev/scripts/load_iw612.sh;${RESUME_ACTIONS_WIFI}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if bt_actions_needed; then
|
# Compound resume actions (enable BT first, or else add a sleep, to give
|
||||||
# bluetooth service relies on bluetooth-init service, so stop/start it unconditionally
|
# some time to the system to be ready to load the Wi-Fi)
|
||||||
{
|
if [ -n "${RESUME_ACTIONS_BT}" ]; then
|
||||||
echo "systemctl start bluetooth-init"
|
RESUME_ACTIONS="${RESUME_ACTIONS_BT}"
|
||||||
echo "systemctl start bluetooth"
|
fi
|
||||||
} >> "${RESUME_ACTIONS}"
|
if [ -n "${RESUME_ACTIONS_WIFI}" ]; then
|
||||||
systemctl stop bluetooth-init
|
if [ ! -n "${RESUME_ACTIONS_BT}" ]; then
|
||||||
systemctl stop bluetooth
|
RESUME_ACTIONS="sleep 0.5;"
|
||||||
|
fi
|
||||||
|
RESUME_ACTIONS="${RESUME_ACTIONS}${RESUME_ACTIONS_WIFI}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "${RESUME_ACTIONS}" ]; then
|
||||||
|
# Create temp file with resume actions
|
||||||
|
echo "${RESUME_ACTIONS}" > "${RESUME_FILE}"
|
||||||
|
chmod +x "${RESUME_FILE}"
|
||||||
fi
|
fi
|
||||||
elif [ "${1}" = "post" ]; then
|
elif [ "${1}" = "post" ]; then
|
||||||
if [ -f ${RESUME_ACTIONS} ]; then
|
if [ -f "${RESUME_FILE}" ]; then
|
||||||
chmod +x "${RESUME_ACTIONS}"
|
eval "${RESUME_FILE}"
|
||||||
eval "${RESUME_ACTIONS}"
|
# Clean-up
|
||||||
rm -f "${RESUME_ACTIONS}"
|
rm -f "${RESUME_FILE}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Resume NetworkManager after suspend
|
# Resume NetworkManager after suspend
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (C) 2016-2023 Digi International.
|
# Copyright (C) 2016-2024 Digi International.
|
||||||
#
|
#
|
||||||
DESCRIPTION = "DEY image with graphical libraries"
|
DESCRIPTION = "DEY image with graphical libraries"
|
||||||
LICENSE = "MIT"
|
LICENSE = "MIT"
|
||||||
|
|
@ -44,7 +44,8 @@ IMAGE_ROOTFS_SIZE = "8192"
|
||||||
|
|
||||||
BAD_RECOMMENDATIONS += "eudev-hwdb"
|
BAD_RECOMMENDATIONS += "eudev-hwdb"
|
||||||
|
|
||||||
export IMAGE_BASENAME = "dey-image-${GRAPHICAL_CORE}-${GRAPHICAL_BACKEND}"
|
DEFAULT_IMAGE_BASENAME ??= "dey-image-${GRAPHICAL_CORE}-${GRAPHICAL_BACKEND}"
|
||||||
|
export IMAGE_BASENAME = "${DEFAULT_IMAGE_BASENAME}"
|
||||||
|
|
||||||
CORE_IMAGE_EXTRA_INSTALL += " \
|
CORE_IMAGE_EXTRA_INSTALL += " \
|
||||||
${@bb.utils.contains('DISTRO_FEATURES', 'x11 wayland', 'weston-xwayland', '', d)} \
|
${@bb.utils.contains('DISTRO_FEATURES', 'x11 wayland', 'weston-xwayland', '', d)} \
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,15 @@
|
||||||
#
|
#
|
||||||
# Copyright (C) 2023 Digi International.
|
# Copyright (C) 2023,2024 Digi International.
|
||||||
#
|
#
|
||||||
require dey-image-graphical.inc
|
require dey-image-graphical.inc
|
||||||
|
|
||||||
DESCRIPTION = "DEY image with LVGL graphical libraries"
|
DESCRIPTION = "DEY image with LVGL graphical libraries"
|
||||||
|
|
||||||
GRAPHICAL_CORE = "lvgl"
|
GRAPHICAL_CORE = "lvgl"
|
||||||
|
|
||||||
|
# On the ccimx6ul, the only supported LVGL backend is fbdev, so there is no
|
||||||
|
# need for a X11 desktop environment.
|
||||||
|
IMAGE_FEATURES:remove:ccimx6ul = " x11-base x11-sato "
|
||||||
|
|
||||||
|
# Remove GRAPHICAL_BACKEND suffix (-x11) from ccimx6ul image names
|
||||||
|
DEFAULT_IMAGE_BASENAME:ccimx6ul = "dey-image-${GRAPHICAL_CORE}"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Copyright (C) 2022, Digi International Inc.
|
# Copyright (C) 2022-2024 Digi International Inc.
|
||||||
|
|
||||||
SUMMARY = "Crank Demo"
|
SUMMARY = "Crank Demo"
|
||||||
HOMEPAGE = "https://www.cranksoftware.com/"
|
HOMEPAGE = "https://www.cranksoftware.com/"
|
||||||
|
|
@ -19,7 +19,8 @@ WESTON_SERVICE:ccmp15 ?= "weston-launch.service"
|
||||||
CRANK_DEMOS_TARBALL_PATH ?= ""
|
CRANK_DEMOS_TARBALL_PATH ?= ""
|
||||||
CRANK_DEMO_DISPLAY ?= "wayland-0"
|
CRANK_DEMO_DISPLAY ?= "wayland-0"
|
||||||
CRANK_DEMO_DISPLAY:ccmp15 ?= "wayland-1"
|
CRANK_DEMO_DISPLAY:ccmp15 ?= "wayland-1"
|
||||||
CRANK_DEMO_ENV ?= "DISPLAY=:0.0 XDG_RUNTIME_DIR=/run/user/0 WAYLAND_DISPLAY=\${DEMO_DISPLAY}"
|
CRANK_DEMO_DISPLAY:ccimx93 ?= "wayland-1"
|
||||||
|
CRANK_DEMO_ENV ?= "DISPLAY=:0.0 XDG_RUNTIME_DIR=/run/user/0 WAYLAND_DISPLAY=\$\{DEMO_DISPLAY\}"
|
||||||
CRANK_DEMO_ENV:ccimx6ul ?= ""
|
CRANK_DEMO_ENV:ccimx6ul ?= ""
|
||||||
CRANK_DEMO_OPTIONS ?= "-orender_mgr,multisample=0"
|
CRANK_DEMO_OPTIONS ?= "-orender_mgr,multisample=0"
|
||||||
CRANK_DEMO_OPTIONS:ccimx6ul ?= "-orender_mgr,multisample=0 -odev-input,mouse=/dev/input/mouse0 -oscreen_mgr,swcursor"
|
CRANK_DEMO_OPTIONS:ccimx6ul ?= "-orender_mgr,multisample=0 -odev-input,mouse=/dev/input/mouse0 -oscreen_mgr,swcursor"
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,8 @@ LICENSE = "MPL-2.0"
|
||||||
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MPL-2.0;md5=815ca599c9df247a0c7f619bab123dad"
|
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MPL-2.0;md5=815ca599c9df247a0c7f619bab123dad"
|
||||||
|
|
||||||
SRCBRANCH ?= "master"
|
SRCBRANCH ?= "master"
|
||||||
SRCREV = "72cc9eb39088ae6b16d32ca03c74e8885323279a"
|
SRCREV = "70245c4f4de7f2ffae899fd7cf267d9ad6db7ae0"
|
||||||
PV = "1.0.6"
|
PV = "1.0.7"
|
||||||
|
|
||||||
SRC_URI = " \
|
SRC_URI = " \
|
||||||
${DIGI_GITHUB_GIT}/connectcore-ble-python.git;protocol=https;branch=${SRCBRANCH} \
|
${DIGI_GITHUB_GIT}/connectcore-ble-python.git;protocol=https;branch=${SRCBRANCH} \
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@ Description=CCCS get start demo
|
||||||
After=cccsd.service
|
After=cccsd.service
|
||||||
BindsTo=cccsd.service
|
BindsTo=cccsd.service
|
||||||
Upholds=cccsd.service
|
Upholds=cccsd.service
|
||||||
|
# Do not limit the number of restarting times
|
||||||
|
StartLimitIntervalSec=0
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=forking
|
Type=forking
|
||||||
|
|
@ -10,7 +12,9 @@ ExecStart=/etc/cccs-gs-demo start
|
||||||
ExecStop=/etc/cccs-gs-demo stop
|
ExecStop=/etc/cccs-gs-demo stop
|
||||||
# SIGTERM signal is a valid status value
|
# SIGTERM signal is a valid status value
|
||||||
SuccessExitStatus=143
|
SuccessExitStatus=143
|
||||||
|
# Restart the service every 30 seconds if it fails
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
|
RestartSec=30s
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,17 @@
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=CCCS daemon
|
Description=CCCS daemon
|
||||||
After=network.target
|
After=network.target
|
||||||
|
# Do not limit the number of restarting times
|
||||||
|
StartLimitIntervalSec=0
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=forking
|
Type=forking
|
||||||
ExecStart=/etc/cccsd start
|
ExecStart=/etc/cccsd start
|
||||||
ExecStop=/etc/cccsd stop
|
ExecStop=/etc/cccsd stop
|
||||||
PIDFile=/run/cccsd.pid
|
PIDFile=/run/cccsd.pid
|
||||||
|
# Restart the service every 30 seconds if it fails
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
|
RestartSec=30s
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
|
|
|
||||||
|
|
@ -30,12 +30,17 @@ S = "${WORKDIR}/connectcore-demo-example"
|
||||||
|
|
||||||
inherit systemd update-rc.d
|
inherit systemd update-rc.d
|
||||||
|
|
||||||
|
BOARD_IMAGE_FILE ?= "${MACHINE}_board.png"
|
||||||
|
|
||||||
|
# The ccimx6qpsbc re-uses the ccimx6sbc board image
|
||||||
|
BOARD_IMAGE_FILE:ccimx6qpsbc = "ccimx6sbc_board.png"
|
||||||
|
|
||||||
do_install() {
|
do_install() {
|
||||||
install -d ${D}/srv/www
|
install -d ${D}/srv/www
|
||||||
cp -r ${WORKDIR}/git/connectcore-demo-example/* ${D}/srv/www/
|
cp -r ${WORKDIR}/git/connectcore-demo-example/* ${D}/srv/www/
|
||||||
|
|
||||||
# Remove unused images
|
# Remove unused images
|
||||||
find ${D}/srv/www/static/images/ -type f -name '*_board.png' -not -name '${MACHINE}_board.png' -delete
|
find ${D}/srv/www/static/images/ -type f -name '*_board.png' -not -name '${BOARD_IMAGE_FILE}' -delete
|
||||||
|
|
||||||
# Install systemd service
|
# Install systemd service
|
||||||
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
|
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Copyright (C) 2013-2023, Digi International Inc.
|
# Copyright (C) 2013-2024, Digi International Inc.
|
||||||
|
|
||||||
SUMMARY = "DEY examples packagegroup"
|
SUMMARY = "DEY examples packagegroup"
|
||||||
|
|
||||||
|
|
@ -27,4 +27,4 @@ RDEPENDS:${PN}:append:ccimx6 = "\
|
||||||
dey-examples-v4l2 \
|
dey-examples-v4l2 \
|
||||||
"
|
"
|
||||||
|
|
||||||
COMPATIBLE_MACHINE = "(ccimx6$|ccimx6ul|ccimx8m|ccimx8x)"
|
COMPATIBLE_MACHINE = "(ccimx6$|ccimx6ul|ccimx8m|ccimx8x|ccimx93)"
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
# Copyright (C) 2023 Digi International Inc.
|
# Copyright (C) 2023,2024 Digi International Inc.
|
||||||
|
|
||||||
require swu.inc
|
require swu.inc
|
||||||
|
|
||||||
IMG_NAME = "${@get_baseimg_pn(d)}-${GRAPHICAL_BACKEND}"
|
IMG_NAME = "${@get_baseimg_pn(d)}-${GRAPHICAL_BACKEND}"
|
||||||
|
|
||||||
|
# Remove GRAPHICAL_BACKEND suffix (-x11) from ccimx6ul image names
|
||||||
|
IMG_NAME:ccimx6ul = "${@get_baseimg_pn(d)}"
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,10 @@ software =
|
||||||
##SCRIPT_UBOOT##
|
##SCRIPT_UBOOT##
|
||||||
);
|
);
|
||||||
uboot: (
|
uboot: (
|
||||||
|
{
|
||||||
|
name = "upgrade_available";
|
||||||
|
value = "@@UPGRADE_AVAILABLE@@";
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name = "swap_bank";
|
name = "swap_bank";
|
||||||
value = "false";
|
value = "false";
|
||||||
|
|
@ -52,6 +56,12 @@ software =
|
||||||
}
|
}
|
||||||
##SCRIPT_UBOOT##
|
##SCRIPT_UBOOT##
|
||||||
);
|
);
|
||||||
|
uboot: (
|
||||||
|
{
|
||||||
|
name = "upgrade_available";
|
||||||
|
value = "@@UPGRADE_AVAILABLE@@";
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
platform = {
|
platform = {
|
||||||
ref = "#./single";
|
ref = "#./single";
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,12 @@ software =
|
||||||
}
|
}
|
||||||
##SCRIPT_UBOOT##
|
##SCRIPT_UBOOT##
|
||||||
);
|
);
|
||||||
|
uboot: (
|
||||||
|
{
|
||||||
|
name = "upgrade_available";
|
||||||
|
value = "@@UPGRADE_AVAILABLE@@";
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
platform = {
|
platform = {
|
||||||
ref = "#./single";
|
ref = "#./single";
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,133 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#===============================================================================
|
||||||
|
#
|
||||||
|
# Copyright (C) 2024 by Digi International Inc.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU General Public License version 2 as published by
|
||||||
|
# the Free Software Foundation.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# !Description: Initialize LVGL demo
|
||||||
|
#
|
||||||
|
#===============================================================================
|
||||||
|
|
||||||
|
readonly DEMO_NAME="lvgl_demo"
|
||||||
|
readonly DEMO_PATH="/usr/bin/${DEMO_NAME}"
|
||||||
|
readonly DEMO_TITLE="LVGL Demo Application"
|
||||||
|
readonly DEMO_DISPLAY="##LVGL_DEMO_DISPLAY##"
|
||||||
|
readonly DEMO_ENV="##LVGL_DEMO_ENV##"
|
||||||
|
readonly PID_FILE="/run/${DEMO_NAME}.pid"
|
||||||
|
|
||||||
|
log() {
|
||||||
|
if type "systemd-cat" >/dev/null 2>/dev/null; then
|
||||||
|
systemd-cat -p "${1}" -t "${DEMO_NAME}" printf "%s" "${2}"
|
||||||
|
fi
|
||||||
|
logger -p "${1}" -t "${DEMO_NAME}" "${2}"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_demo_pid() {
|
||||||
|
local pid="$(pgrep -f ${DEMO_PATH})"
|
||||||
|
|
||||||
|
[ -n "${pid}" ] && { echo "${pid}"; return 0; }
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
check_is_running() {
|
||||||
|
local pid
|
||||||
|
|
||||||
|
if [ -s "${PID_FILE}" ]; then
|
||||||
|
pid="$(cat ${PID_FILE})"
|
||||||
|
else
|
||||||
|
pid="$(get_demo_pid)"
|
||||||
|
echo "${pid}" > ${PID_FILE}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${pid}" ]; then
|
||||||
|
kill -0 "${pid}" >/dev/null 2>&1 && return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f "${PID_FILE}"
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
wait_for_wayland() {
|
||||||
|
local count=20
|
||||||
|
local wayland_socket="/run/user/0/${DEMO_DISPLAY}"
|
||||||
|
|
||||||
|
while [ ! -S "${wayland_socket}" ]; do
|
||||||
|
sleep 1
|
||||||
|
count=$((count-1))
|
||||||
|
if [ "${count}" = 0 ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
sleep 1
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
check_is_running || return
|
||||||
|
|
||||||
|
local pid="$(cat ${PID_FILE})"
|
||||||
|
kill -TERM "${pid}" >/dev/null 2>&1
|
||||||
|
|
||||||
|
local STOP_TIMEOUT="5"
|
||||||
|
for i in $(seq ${STOP_TIMEOUT}); do
|
||||||
|
check_is_running || { log info "stopped"; break; }
|
||||||
|
if [ "${i}" -eq ${STOP_TIMEOUT} ]; then
|
||||||
|
log warning "stop: ${DEMO_NAME} did not stop gracefully"
|
||||||
|
kill -KILL "${pid}" >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
check_is_running && { log warning "start: ${DEMO_NAME} ALREADY running"; exit 0; }
|
||||||
|
|
||||||
|
if [ -d "/usr/share/wayland" ]; then
|
||||||
|
wait_for_wayland
|
||||||
|
else
|
||||||
|
# Disable the cursor when displaying at full screen on fbdev
|
||||||
|
echo "0" > /sys/class/graphics/fbcon/cursor_blink
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Launch demo
|
||||||
|
env ${DEMO_ENV} ${DEMO_PATH} >/dev/null 2>&1 &
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo $! > ${PID_FILE}
|
||||||
|
log info "$(cat ${PID_FILE})"
|
||||||
|
log info "started"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
echo -n "Starting ${DEMO_TITLE}: "
|
||||||
|
start
|
||||||
|
echo "done."
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
stop
|
||||||
|
echo -n "Stopping ${DEMO_TITLE}: "
|
||||||
|
if [ -n "`/bin/pidof ${DEMO_PATH}`" ] ; then
|
||||||
|
echo "FAIL"
|
||||||
|
else
|
||||||
|
echo "OK"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
stop
|
||||||
|
sleep 1
|
||||||
|
start
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 {start|stop|restart}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
[Unit]
|
||||||
|
Description=LVGL Demo Application
|
||||||
|
|
||||||
|
# Make sure we are started after graphic service is available
|
||||||
|
After=##WESTON_SERVICE##
|
||||||
|
Requires=##WESTON_SERVICE##
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=forking
|
||||||
|
PIDFile=/run/lvgl_demo.pid
|
||||||
|
ExecStart=/etc/lvgl-demo-init start
|
||||||
|
ExecStop=/etc/lvgl-demo-init stop
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
|
@ -8,6 +8,7 @@ LVGL_CONFIG_DRM_CARD ?= "/dev/dri/card0"
|
||||||
|
|
||||||
LVGL_CONFIG_USE_EVDEV = "${@bb.utils.contains_any('PACKAGECONFIG', 'drm fbdev', '1', '0', d)}"
|
LVGL_CONFIG_USE_EVDEV = "${@bb.utils.contains_any('PACKAGECONFIG', 'drm fbdev', '1', '0', d)}"
|
||||||
LVGL_CONFIG_EVDEV_INPUT ?= "/dev/input/mouse0"
|
LVGL_CONFIG_EVDEV_INPUT ?= "/dev/input/mouse0"
|
||||||
|
LVGL_CONFIG_EVDEV_INPUT:ccimx6ul ?= "/dev/input/touchscreen0"
|
||||||
|
|
||||||
LVGL_CONFIG_USE_FBDEV = "${@bb.utils.contains('PACKAGECONFIG', 'fbdev', '1', '0', d)}"
|
LVGL_CONFIG_USE_FBDEV = "${@bb.utils.contains('PACKAGECONFIG', 'fbdev', '1', '0', d)}"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,10 @@ SRCBRANCH ?= "dey/master"
|
||||||
|
|
||||||
SRC_URI = " \
|
SRC_URI = " \
|
||||||
gitsm://github.com/digi-embedded/lv_port_linux_frame_buffer.git;branch=${SRCBRANCH};protocol=https \
|
gitsm://github.com/digi-embedded/lv_port_linux_frame_buffer.git;branch=${SRCBRANCH};protocol=https \
|
||||||
|
file://lvgl-demo-init \
|
||||||
|
file://lvgl-demo-init.service \
|
||||||
"
|
"
|
||||||
SRCREV = "f9426988a70f485ba7895bb1c26493f2fffcd957"
|
SRCREV = "0a799d22a5aaf9de18aca428579945a0a9c2c270"
|
||||||
|
|
||||||
EXTRA_OEMAKE = "DESTDIR=${D}"
|
EXTRA_OEMAKE = "DESTDIR=${D}"
|
||||||
|
|
||||||
|
|
@ -23,7 +25,7 @@ PACKAGECONFIG = "${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', '
|
||||||
|
|
||||||
require lv-drivers.inc
|
require lv-drivers.inc
|
||||||
|
|
||||||
inherit cmake
|
inherit cmake systemd update-rc.d
|
||||||
|
|
||||||
S = "${WORKDIR}/git"
|
S = "${WORKDIR}/git"
|
||||||
|
|
||||||
|
|
@ -34,6 +36,8 @@ LVGL_CONFIG_DRM_CARD:mx8-generic-bsp = "/dev/dri/card1"
|
||||||
|
|
||||||
LVGL_CONFIG_HOR_RES ?= "800"
|
LVGL_CONFIG_HOR_RES ?= "800"
|
||||||
LVGL_CONFIG_VER_RES ?= "480"
|
LVGL_CONFIG_VER_RES ?= "480"
|
||||||
|
LVGL_CONFIG_HOR_RES:ccimx6ul ?= "1280"
|
||||||
|
LVGL_CONFIG_VER_RES:ccimx6ul ?= "800"
|
||||||
|
|
||||||
do_configure:prepend() {
|
do_configure:prepend() {
|
||||||
if [ "${LVGL_CONFIG_USE_DRM}" -eq 1 ] ; then
|
if [ "${LVGL_CONFIG_USE_DRM}" -eq 1 ] ; then
|
||||||
|
|
@ -58,9 +62,49 @@ do_configure:prepend() {
|
||||||
-i "${S}/lv_drv_conf.h"
|
-i "${S}/lv_drv_conf.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WESTON_SERVICE ?= "weston.service"
|
||||||
|
WESTON_SERVICE:ccmp15 ?= "weston-launch.service"
|
||||||
|
|
||||||
|
LVGL_DEMO_DISPLAY ?= "wayland-0"
|
||||||
|
LVGL_DEMO_DISPLAY:ccmp15 ?= "wayland-1"
|
||||||
|
LVGL_DEMO_DISPLAY:ccimx93 ?= "wayland-1"
|
||||||
|
LVGL_DEMO_ENV ?= "DISPLAY=:0.0 XDG_RUNTIME_DIR=/run/user/0 WAYLAND_DISPLAY=\$\{DEMO_DISPLAY\}"
|
||||||
|
LVGL_DEMO_ENV:ccimx6ul ?= ""
|
||||||
|
|
||||||
do_install:append() {
|
do_install:append() {
|
||||||
install -d ${D}${bindir}
|
install -d ${D}${bindir}
|
||||||
install -m 0755 ${B}/lvgl_fb ${D}${bindir}/lvgl_demo
|
install -m 0755 ${B}/lvgl_fb ${D}${bindir}/lvgl_demo
|
||||||
|
|
||||||
|
# Install systemd service
|
||||||
|
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
|
||||||
|
# Install systemd unit files
|
||||||
|
install -d ${D}${systemd_unitdir}/system
|
||||||
|
install -m 0644 ${WORKDIR}/lvgl-demo-init.service ${D}${systemd_unitdir}/system/
|
||||||
|
sed -i -e "s,##WESTON_SERVICE##,${WESTON_SERVICE},g" \
|
||||||
|
"${D}${systemd_unitdir}/system/lvgl-demo-init.service"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install wrapper bootscript to launch LVGL demo on boot
|
||||||
|
install -d ${D}${sysconfdir}/init.d
|
||||||
|
install -m 0755 ${WORKDIR}/lvgl-demo-init ${D}${sysconfdir}/lvgl-demo-init
|
||||||
|
sed -i -e "s@##LVGL_DEMO_DISPLAY##@${LVGL_DEMO_DISPLAY}@g" \
|
||||||
|
-e "s@##LVGL_DEMO_ENV##@${LVGL_DEMO_ENV}@g" \
|
||||||
|
"${D}${sysconfdir}/lvgl-demo-init"
|
||||||
|
ln -sf ${sysconfdir}/lvgl-demo-init ${D}${sysconfdir}/init.d/lvgl-demo-init
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PACKAGES =+ "${PN}-init"
|
||||||
|
FILES:${PN}-init = " \
|
||||||
|
${sysconfdir}/lvgl-demo-init \
|
||||||
|
${sysconfdir}/init.d/lvgl-demo-init \
|
||||||
|
${systemd_unitdir}/system/lvgl-demo-init.service \
|
||||||
|
"
|
||||||
|
|
||||||
|
INITSCRIPT_PACKAGES += "${PN}-init"
|
||||||
|
INITSCRIPT_NAME:${PN}-init = "lvgl-demo-init"
|
||||||
|
INITSCRIPT_PARAMS:${PN}-init = "start 99 3 5 . stop 20 0 1 2 6 ."
|
||||||
|
|
||||||
|
SYSTEMD_PACKAGES = "${PN}-init"
|
||||||
|
SYSTEMD_SERVICE:${PN}-init = "lvgl-demo-init.service"
|
||||||
|
|
||||||
COMPATIBLE_MACHINE = "(ccimx6$|ccimx6ul|ccimx8m|ccimx8x|ccimx93|ccmp15)"
|
COMPATIBLE_MACHINE = "(ccimx6$|ccimx6ul|ccimx8m|ccimx8x|ccimx93|ccmp15)"
|
||||||
|
|
|
||||||
|
|
@ -8,4 +8,5 @@ inherit packagegroup
|
||||||
|
|
||||||
RDEPENDS:${PN} += " \
|
RDEPENDS:${PN} += " \
|
||||||
lvgl-demo \
|
lvgl-demo \
|
||||||
|
lvgl-demo-init \
|
||||||
"
|
"
|
||||||
|
|
|
||||||
|
|
@ -139,7 +139,6 @@ done<<-_EOF_
|
||||||
ccimx8mm-dvk dey-image-qt
|
ccimx8mm-dvk dey-image-qt
|
||||||
ccimx8mn-dvk dey-image-qt
|
ccimx8mn-dvk dey-image-qt
|
||||||
ccimx8x-sbc-pro dey-image-qt
|
ccimx8x-sbc-pro dey-image-qt
|
||||||
ccimx8x-sbc-express dey-image-qt
|
|
||||||
ccimx6qpsbc dey-image-qt
|
ccimx6qpsbc dey-image-qt
|
||||||
ccimx6sbc dey-image-qt
|
ccimx6sbc dey-image-qt
|
||||||
ccimx6ulsbc dey-image-qt
|
ccimx6ulsbc dey-image-qt
|
||||||
|
|
|
||||||
|
|
@ -176,8 +176,8 @@ done<<-_EOF_
|
||||||
ccimx8mn-dvk dey-image-qt,dey-image-crank,dey-image-webkit,dey-image-lvgl
|
ccimx8mn-dvk dey-image-qt,dey-image-crank,dey-image-webkit,dey-image-lvgl
|
||||||
ccimx8x-sbc-pro dey-image-qt,dey-image-crank,dey-image-webkit,dey-image-lvgl
|
ccimx8x-sbc-pro dey-image-qt,dey-image-crank,dey-image-webkit,dey-image-lvgl
|
||||||
ccimx8x-sbc-express dey-image-qt
|
ccimx8x-sbc-express dey-image-qt
|
||||||
ccimx6qpsbc dey-image-qt,dey-image-crank,dey-image-webkit,dey-image-lvgl
|
ccimx6qpsbc dey-image-qt,dey-image-webkit,dey-image-lvgl
|
||||||
ccimx6sbc dey-image-qt,dey-image-crank,dey-image-webkit,dey-image-lvgl
|
ccimx6sbc dey-image-qt,dey-image-webkit,dey-image-lvgl
|
||||||
ccimx6ulsbc core-image-base,dey-image-qt,dey-image-crank,dey-image-lvgl
|
ccimx6ulsbc core-image-base,dey-image-qt,dey-image-crank,dey-image-lvgl
|
||||||
ccimx6ulstarter core-image-base
|
ccimx6ulstarter core-image-base
|
||||||
ccimx6ulsom dey-image-mft-module-min
|
ccimx6ulsom dey-image-mft-module-min
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,7 @@ Digi Embedded Yocto provides the following image recipes:
|
||||||
|
|
||||||
* dey-image-lvgl: graphical LVGL image
|
* dey-image-lvgl: graphical LVGL image
|
||||||
|
|
||||||
By default the image is X11-based so it provides a full SATO theme
|
A framebuffer-based image including an LVGL demo application.
|
||||||
desktop environment.
|
|
||||||
|
|
||||||
* core-image-base: a console-only image
|
* core-image-base: a console-only image
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue