* [ptxdist] [PATCH v3] libusbgx: version bump 0.2.0 -> 0.3.0
@ 2024-10-02 19:11 Michael Grzeschik
0 siblings, 0 replies; only message in thread
From: Michael Grzeschik @ 2024-10-02 19:11 UTC (permalink / raw)
To: ptxdist; +Cc: Michael Tretter
- move to meson which is included in 0.3.0
Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
Reviewed-by: Michael Tretter <m.tretter@pengutronix.de>
---
...1-Fix-39-Compilation-fails-on-gcc-v8.patch | 20 -
...ld-with-glibc-2.28-since-sys-sysmacr.patch | 90 ---
...vid-pid-remove-add-dynamic-vid-pid-s.patch | 67 --
.../0004-libusbgx-Add-UVC-support.patch | 737 ------------------
patches/libusbgx-0.2.0/autogen.sh | 16 -
patches/libusbgx-0.2.0/series | 7 -
rules/libusbgx.in | 1 +
rules/libusbgx.make | 24 +-
8 files changed, 12 insertions(+), 950 deletions(-)
delete mode 100644 patches/libusbgx-0.2.0/0001-Fix-39-Compilation-fails-on-gcc-v8.patch
delete mode 100644 patches/libusbgx-0.2.0/0002-libusbgx-fix-build-with-glibc-2.28-since-sys-sysmacr.patch
delete mode 100644 patches/libusbgx-0.2.0/0003-examples-gadget-vid-pid-remove-add-dynamic-vid-pid-s.patch
delete mode 100644 patches/libusbgx-0.2.0/0004-libusbgx-Add-UVC-support.patch
delete mode 100755 patches/libusbgx-0.2.0/autogen.sh
delete mode 100644 patches/libusbgx-0.2.0/series
diff --git a/patches/libusbgx-0.2.0/0001-Fix-39-Compilation-fails-on-gcc-v8.patch b/patches/libusbgx-0.2.0/0001-Fix-39-Compilation-fails-on-gcc-v8.patch
deleted file mode 100644
index 4e7ff0ca4..000000000
--- a/patches/libusbgx-0.2.0/0001-Fix-39-Compilation-fails-on-gcc-v8.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-From: Federico Fuga <fuga@studiofuga.com>
-Date: Thu, 23 May 2019 13:40:39 +0200
-Subject: [PATCH] Fix #39 Compilation fails on gcc v8
-
----
- src/usbg_common.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/usbg_common.c b/src/usbg_common.c
-index f8822fcf727f..f3aa8b053c44 100644
---- a/src/usbg_common.c
-+++ b/src/usbg_common.c
-@@ -20,6 +20,7 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
-+#include <sys/sysmacros.h>
-
- int usbg_read_buf_limited(const char *path, const char *name,
- const char *file, char *buf, int len)
diff --git a/patches/libusbgx-0.2.0/0002-libusbgx-fix-build-with-glibc-2.28-since-sys-sysmacr.patch b/patches/libusbgx-0.2.0/0002-libusbgx-fix-build-with-glibc-2.28-since-sys-sysmacr.patch
deleted file mode 100644
index 9670d469a..000000000
--- a/patches/libusbgx-0.2.0/0002-libusbgx-fix-build-with-glibc-2.28-since-sys-sysmacr.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From: Gwenhael Goavec-Merou <gwenhael.goavec-merou@trabucayre.com>
-Date: Mon, 10 Sep 2018 15:52:09 +0200
-Subject: [PATCH] libusbgx: fix build with glibc-2.28 since <sys/sysmacros.h>
- is no more included by <sys/types.h>
-
-Signed-off-by: Sid Spry R030t1@gmail.com
-Signed-off-by: Gwenhael Goavec-Merou gwenhael.goavec-merou@trabucayre.com
-[Copy sign-offs from pull requst to commit msg]
-Signed-off-by: Krzysztof Opasiak <k.opasiak@samsung.com>
----
- examples/gadget-acm-ecm.c | 1 +
- examples/gadget-import.c | 1 +
- examples/gadget-ms.c | 1 +
- examples/show-gadgets.c | 1 +
- examples/show-udcs.c | 1 +
- include/usbg/usbg_internal_libconfig.h | 1 +
- 6 files changed, 6 insertions(+)
-
-diff --git a/examples/gadget-acm-ecm.c b/examples/gadget-acm-ecm.c
-index 1c5e2ca5161c..29360da15811 100644
---- a/examples/gadget-acm-ecm.c
-+++ b/examples/gadget-acm-ecm.c
-@@ -20,6 +20,7 @@
-
- #include <errno.h>
- #include <stdio.h>
-+#include <sys/sysmacros.h>
- #include <linux/usb/ch9.h>
- #include <usbg/usbg.h>
-
-diff --git a/examples/gadget-import.c b/examples/gadget-import.c
-index e684fdb861e8..63df4499926b 100644
---- a/examples/gadget-import.c
-+++ b/examples/gadget-import.c
-@@ -25,6 +25,7 @@
- #include <errno.h>
- #include <string.h>
- #include <stdio.h>
-+#include <sys/sysmacros.h>
- #include <usbg/usbg.h>
-
- int main(int argc, char **argv)
-diff --git a/examples/gadget-ms.c b/examples/gadget-ms.c
-index 478c37097397..a5c668187a96 100644
---- a/examples/gadget-ms.c
-+++ b/examples/gadget-ms.c
-@@ -23,6 +23,7 @@
-
- #include <errno.h>
- #include <stdio.h>
-+#include <sys/sysmacros.h>
- #include <linux/usb/ch9.h>
- #include <usbg/usbg.h>
- #include <usbg/function/ms.h>
-diff --git a/examples/show-gadgets.c b/examples/show-gadgets.c
-index 707d4488d16b..a2a21c883b27 100644
---- a/examples/show-gadgets.c
-+++ b/examples/show-gadgets.c
-@@ -21,6 +21,7 @@
- #include <errno.h>
- #include <stdio.h>
- #include <string.h>
-+#include <sys/sysmacros.h>
- #include <netinet/ether.h>
- #include <usbg/usbg.h>
- #include <usbg/function/ms.h>
-diff --git a/examples/show-udcs.c b/examples/show-udcs.c
-index 66e950f7bf85..2f5cc458ebb1 100644
---- a/examples/show-udcs.c
-+++ b/examples/show-udcs.c
-@@ -23,6 +23,7 @@
-
- #include <errno.h>
- #include <stdio.h>
-+#include <sys/sysmacros.h>
- #include <usbg/usbg.h>
-
- int main(void)
-diff --git a/include/usbg/usbg_internal_libconfig.h b/include/usbg/usbg_internal_libconfig.h
-index ac51758b3d6c..3fa55c0b544b 100644
---- a/include/usbg/usbg_internal_libconfig.h
-+++ b/include/usbg/usbg_internal_libconfig.h
-@@ -12,6 +12,7 @@
- #ifndef USBG_INTERNAL_LIBCONFIG_H
- #define USBG_INTERNAL_LIBCONFIG_H
-
-+#include <sys/sysmacros.h>
- #include <libconfig.h>
- #ifdef __cplusplus
- extern "C" {
diff --git a/patches/libusbgx-0.2.0/0003-examples-gadget-vid-pid-remove-add-dynamic-vid-pid-s.patch b/patches/libusbgx-0.2.0/0003-examples-gadget-vid-pid-remove-add-dynamic-vid-pid-s.patch
deleted file mode 100644
index 63ddf347f..000000000
--- a/patches/libusbgx-0.2.0/0003-examples-gadget-vid-pid-remove-add-dynamic-vid-pid-s.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-From: Michael Grzeschik <m.grzeschik@pengutronix.de>
-Date: Wed, 28 Apr 2021 21:43:07 +0200
-Subject: [PATCH] examples: gadget-vid-pid-remove: add dynamic vid pid support
-
-Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
----
- examples/gadget-vid-pid-remove.c | 25 ++++++++++++++++++++-----
- 1 file changed, 20 insertions(+), 5 deletions(-)
-
-diff --git a/examples/gadget-vid-pid-remove.c b/examples/gadget-vid-pid-remove.c
-index f6b950b38da3..f5eb9664b721 100644
---- a/examples/gadget-vid-pid-remove.c
-+++ b/examples/gadget-vid-pid-remove.c
-@@ -23,11 +23,10 @@
-
- #include <errno.h>
- #include <stdio.h>
-+#include <string.h>
-+#include <stdlib.h>
- #include <usbg/usbg.h>
-
--#define VENDOR 0x1d6b
--#define PRODUCT 0x0104
--
- int remove_gadget(usbg_gadget *g)
- {
- int usbg_ret;
-@@ -60,13 +59,29 @@ out:
- return usbg_ret;
- }
-
--int main(void)
-+int main(int argc, char **argv)
- {
- int usbg_ret;
- int ret = -EINVAL;
- usbg_state *s;
- usbg_gadget *g;
- struct usbg_gadget_attrs g_attrs;
-+ char *cp;
-+ int vendor = 0x1d6b, product = 0x0104;
-+
-+ if (argc >= 2) {
-+ cp = strchr(argv[1], ':');
-+ if (!cp) {
-+ ret = -EINVAL;
-+ fprintf(stderr, "Usage: gadget-vid-pid-remove vid:pid\n");
-+ goto out1;
-+ }
-+ *cp++ = 0;
-+ if (&argv[1])
-+ vendor = strtoul(argv[1], NULL, 16);
-+ if (*cp)
-+ product = strtoul(cp, NULL, 16);
-+ }
-
- usbg_ret = usbg_init("/sys/kernel/config", &s);
- if (usbg_ret != USBG_SUCCESS) {
-@@ -88,7 +103,7 @@ int main(void)
- }
-
- /* Compare attrs with given values and remove if suitable */
-- if (g_attrs.idVendor == VENDOR && g_attrs.idProduct == PRODUCT) {
-+ if (g_attrs.idVendor == vendor && g_attrs.idProduct == product) {
- usbg_gadget *g_next = usbg_get_next_gadget(g);
-
- usbg_ret = remove_gadget(g);
diff --git a/patches/libusbgx-0.2.0/0004-libusbgx-Add-UVC-support.patch b/patches/libusbgx-0.2.0/0004-libusbgx-Add-UVC-support.patch
deleted file mode 100644
index 0217bb02d..000000000
--- a/patches/libusbgx-0.2.0/0004-libusbgx-Add-UVC-support.patch
+++ /dev/null
@@ -1,737 +0,0 @@
-From: Thomas Haemmerle <thomas.haemmerle@wolfvision.net>
-Date: Wed, 8 Jan 2020 14:43:45 +0100
-Subject: [PATCH] libusbgx: Add UVC support
-
-Signed-off-by: Thomas Haemmerle <thomas.haemmerle@wolfvision.net>
-Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
-
-Notes:
-v2 -> v3: - simplified exit paths of functions with reutrns instead of gotos
- - added cleanup code for remove
- - added gadget-uvc example file
- - simplified class link creation
- - added support for more than one format
----
- Makefile.am | 2 +-
- examples/Makefile.am | 3 +-
- examples/gadget-uvc.c | 156 ++++++++++++++++++
- include/usbg/function/uvc.h | 90 +++++++++++
- include/usbg/usbg.h | 1 +
- src/Makefile.am | 2 +-
- src/function/uvc.c | 378 ++++++++++++++++++++++++++++++++++++++++++++
- src/usbg.c | 2 +
- 8 files changed, 631 insertions(+), 3 deletions(-)
- create mode 100644 examples/gadget-uvc.c
- create mode 100644 include/usbg/function/uvc.h
- create mode 100644 src/function/uvc.c
-
-diff --git a/Makefile.am b/Makefile.am
-index a3cc337c18da..b3cd097d9d32 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -14,6 +14,6 @@ EXTRA_DIST = doxygen.cfg
- library_includedir=$(includedir)/usbg
- library_include_HEADERS = include/usbg/usbg.h include/usbg/usbg_version.h
- function_includedir=$(includedir)/usbg/function
--function_include_HEADERS = include/usbg/function/ffs.h include/usbg/function/loopback.h include/usbg/function/midi.h include/usbg/function/ms.h include/usbg/function/net.h include/usbg/function/phonet.h include/usbg/function/serial.h include/usbg/function/hid.h include/usbg/function/uac2.h
-+function_include_HEADERS = include/usbg/function/ffs.h include/usbg/function/loopback.h include/usbg/function/midi.h include/usbg/function/ms.h include/usbg/function/net.h include/usbg/function/phonet.h include/usbg/function/serial.h include/usbg/function/hid.h include/usbg/function/uac2.h include/usbg/function/uvc.h
- pkgconfigdir = $(libdir)/pkgconfig
- pkgconfig_DATA = libusbgx.pc
-diff --git a/examples/Makefile.am b/examples/Makefile.am
-index 993432156d6c..3217eb3bfd6f 100644
---- a/examples/Makefile.am
-+++ b/examples/Makefile.am
-@@ -1,5 +1,6 @@
--bin_PROGRAMS = show-gadgets gadget-acm-ecm gadget-vid-pid-remove gadget-ffs gadget-export gadget-import show-udcs gadget-ms gadget-midi gadget-hid gadget-rndis-os-desc gadget-uac2
-+bin_PROGRAMS = show-gadgets gadget-acm-ecm gadget-vid-pid-remove gadget-uvc gadget-ffs gadget-export gadget-import show-udcs gadget-ms gadget-midi gadget-hid gadget-rndis-os-desc gadget-uac2
- gadget_acm_ecm_SOURCES = gadget-acm-ecm.c
-+gadget_uvc_SOURCES = gadget-uvc.c
- show_gadgets_SOURCES = show-gadgets.c
- gadget_vid_pid_remove_SOURCES = gadget-vid-pid-remove.c
- gadget_ffs_SOURCES = gadget-ffs.c
-diff --git a/examples/gadget-uvc.c b/examples/gadget-uvc.c
-new file mode 100644
-index 000000000000..d3efe2deaebe
---- /dev/null
-+++ b/examples/gadget-uvc.c
-@@ -0,0 +1,156 @@
-+/*
-+ * Copyright (C) 2021 Pengutronix
-+ *
-+ * Michael Grzeschik <mgr@pengutronix.de>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ */
-+
-+#include <errno.h>
-+#include <stdio.h>
-+#include <sys/sysmacros.h>
-+#include <linux/usb/ch9.h>
-+#include <usbg/usbg.h>
-+#include <usbg/function/uvc.h>
-+
-+/**
-+ * @file gadget-uvc.c
-+ * @example gadget-uvc.c
-+ * This is an example of how to create an UVC gadget device.
-+ */
-+
-+#define VENDOR 0x1d6b
-+#define PRODUCT 0x0104
-+
-+int main(void)
-+{
-+ usbg_state *s;
-+ usbg_gadget *g;
-+ usbg_config *c;
-+ usbg_function *f_uvc;
-+ int ret = -EINVAL;
-+ int usbg_ret;
-+
-+ struct usbg_gadget_attrs g_attrs = {
-+ .bcdUSB = 0x0200,
-+ .bDeviceClass = USB_CLASS_PER_INTERFACE,
-+ .bDeviceSubClass = 0x00,
-+ .bDeviceProtocol = 0x00,
-+ .bMaxPacketSize0 = 64, /* Max allowed ep0 packet size */
-+ .idVendor = VENDOR,
-+ .idProduct = PRODUCT,
-+ .bcdDevice = 0x0001, /* Verson of device */
-+ };
-+
-+ struct usbg_gadget_strs g_strs = {
-+ .serial = "0123456789", /* Serial number */
-+ .manufacturer = "Foo Inc.", /* Manufacturer */
-+ .product = "Bar Gadget" /* Product string */
-+ };
-+
-+ struct usbg_config_strs c_strs = {
-+ .configuration = "UVC"
-+ };
-+
-+ struct usbg_f_uvc_format_attrs uvc_format_attrs_array[] = {
-+ {
-+ .format = UVC_FORMAT_MJPEG,
-+ .dwFrameInterval = "333333",
-+ .height = 1080,
-+ .width = 1920,
-+ }, {
-+ .format = UVC_FORMAT_MJPEG,
-+ .dwFrameInterval = "333333",
-+ .height = 3940,
-+ .width = 2160,
-+ }, {
-+ .format = UVC_FORMAT_UNCOMPRESSED,
-+ .dwFrameInterval = "333333",
-+ .height = 1080,
-+ .width = 1920,
-+ }, {
-+ .format = UVC_FORMAT_UNCOMPRESSED,
-+ .dwFrameInterval = "333333",
-+ .height = 3940,
-+ .width = 2160,
-+ }
-+ };
-+
-+ struct usbg_f_uvc_format_attrs *uvc_format_attrs[] = {
-+ &uvc_format_attrs_array[3],
-+ &uvc_format_attrs_array[2],
-+ &uvc_format_attrs_array[1],
-+ &uvc_format_attrs_array[0],
-+ NULL,
-+ };
-+
-+ struct usbg_f_uvc_attrs uvc_attrs = {
-+ .formats = uvc_format_attrs,
-+ };
-+
-+ usbg_ret = usbg_init("/sys/kernel/config", &s);
-+ if (usbg_ret != USBG_SUCCESS) {
-+ fprintf(stderr, "Error on USB gadget init\n");
-+ fprintf(stderr, "Error: %s : %s\n", usbg_error_name(usbg_ret),
-+ usbg_strerror(usbg_ret));
-+ goto out1;
-+ }
-+
-+ usbg_ret = usbg_create_gadget(s, "g1", &g_attrs, &g_strs, &g);
-+ if (usbg_ret != USBG_SUCCESS) {
-+ fprintf(stderr, "Error on create gadget\n");
-+ fprintf(stderr, "Error: %s : %s\n", usbg_error_name(usbg_ret),
-+ usbg_strerror(usbg_ret));
-+ goto out2;
-+ }
-+
-+ usbg_ret = usbg_create_function(g, USBG_F_UVC, "uvc", &uvc_attrs, &f_uvc);
-+ if(usbg_ret != USBG_SUCCESS)
-+ {
-+ fprintf(stderr, "Error creating uvc function\n");
-+ fprintf(stderr, "Error: %s : %s\n", usbg_error_name(usbg_ret),
-+ usbg_strerror(usbg_ret));
-+ goto out2;
-+ }
-+
-+ /* NULL can be passed to use kernel defaults */
-+ usbg_ret = usbg_create_config(g, 1, "The only one", NULL, &c_strs, &c);
-+ if (usbg_ret != USBG_SUCCESS) {
-+ fprintf(stderr, "Error creating config\n");
-+ fprintf(stderr, "Error: %s : %s\n", usbg_error_name(usbg_ret),
-+ usbg_strerror(usbg_ret));
-+ goto out2;
-+ }
-+
-+ usbg_ret = usbg_add_config_function(c, "uvc.cam", f_uvc);
-+ if (usbg_ret != USBG_SUCCESS) {
-+ fprintf(stderr, "Error adding acm.GS0\n");
-+ fprintf(stderr, "Error: %s : %s\n", usbg_error_name(usbg_ret),
-+ usbg_strerror(usbg_ret));
-+ goto out2;
-+ }
-+
-+ usbg_ret = usbg_enable_gadget(g, DEFAULT_UDC);
-+ if (usbg_ret != USBG_SUCCESS) {
-+ fprintf(stderr, "Error enabling gadget\n");
-+ fprintf(stderr, "Error: %s : %s\n", usbg_error_name(usbg_ret),
-+ usbg_strerror(usbg_ret));
-+ goto out2;
-+ }
-+
-+ ret = 0;
-+
-+out2:
-+ usbg_cleanup(s);
-+
-+out1:
-+ return ret;
-+}
-diff --git a/include/usbg/function/uvc.h b/include/usbg/function/uvc.h
-new file mode 100644
-index 000000000000..4c641dacdfcb
---- /dev/null
-+++ b/include/usbg/function/uvc.h
-@@ -0,0 +1,90 @@
-+/*
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ */
-+
-+#ifndef USBG_FUNCTION_UVC__
-+#define USBG_FUNCTION_UVC__
-+
-+#include <usbg/usbg.h>
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+
-+#define USBG_UVC_MAX_PATH_LENGTH 1024
-+
-+struct usbg_f_uvc;
-+typedef struct usbg_f_uvc usbg_f_uvc;
-+
-+enum uvc_format
-+{
-+ UVC_FORMAT_MJPEG,
-+ UVC_FORMAT_UNCOMPRESSED
-+};
-+
-+struct usbg_f_uvc_format_attrs
-+{
-+ enum uvc_format format;
-+ const char *dwFrameInterval;
-+ int height;
-+ int width;
-+};
-+
-+struct usbg_f_uvc_attrs
-+{
-+ struct usbg_f_uvc_format_attrs **formats;
-+};
-+
-+/**
-+ * @brief Cast from generic function to uvc function
-+ * @param[in] f function to be converted to uvc funciton.
-+ * Should be one of types:
-+ * ecm, subset, ncm, eem, rndis
-+ * @return Converted uvc function or NULL if function hasn't suitable type
-+ */
-+usbg_f_uvc *usbg_to_uvc_function(usbg_function *f);
-+
-+/**
-+ * @brief Cast form uvc function to generic one
-+ * @param[in] uvc function to be converted to generic one
-+ * @return Generic usbg function
-+ */
-+usbg_function *usbg_from_uvc_function(usbg_f_uvc *ff);
-+
-+/**
-+ * @brief Cleanup attributes structure after usage
-+ * @param[in] attrs to be cleaned up
-+ */
-+static inline void usbg_f_uvc_cleanup_attrs(struct usbg_f_uvc_attrs *attrs)
-+{
-+ struct usbg_f_uvc_format_attrs **format_attrs;
-+ int i;
-+
-+ if (attrs) {
-+ for(format_attrs = attrs->formats, i = 0; format_attrs[i]; ++i) {
-+ if (format_attrs[i]) {
-+ free((char *)format_attrs[i]->dwFrameInterval);
-+ format_attrs[i]->dwFrameInterval = NULL;
-+ }
-+ }
-+ }
-+}
-+
-+int usbg_f_uvc_get_attrs(usbg_f_uvc *uvcf, struct usbg_f_uvc_attrs *attrs);
-+int usbg_f_uvc_set_attrs(usbg_f_uvc *uvcf, const struct usbg_f_uvc_attrs *attrs);
-+
-+
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+#endif /* USBG_FUNCTION_UVC__ */
-diff --git a/include/usbg/usbg.h b/include/usbg/usbg.h
-index 55c52a1c3768..de72793ddcf0 100644
---- a/include/usbg/usbg.h
-+++ b/include/usbg/usbg.h
-@@ -219,6 +219,7 @@ typedef enum
- USBG_F_LOOPBACK,
- USBG_F_HID,
- USBG_F_UAC2,
-+ USBG_F_UVC,
- USBG_FUNCTION_TYPE_MAX,
- } usbg_function_type;
-
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 6b2726ec5219..c51878fac2ff 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -1,6 +1,6 @@
- AUTOMAKE_OPTIONS = std-options subdir-objects
- lib_LTLIBRARIES = libusbgx.la
--libusbgx_la_SOURCES = usbg.c usbg_error.c usbg_common.c function/ether.c function/ffs.c function/midi.c function/ms.c function/phonet.c function/serial.c function/loopback.c function/hid.c function/uac2.c
-+libusbgx_la_SOURCES = usbg.c usbg_error.c usbg_common.c function/ether.c function/ffs.c function/midi.c function/ms.c function/phonet.c function/serial.c function/loopback.c function/hid.c function/uac2.c function/uvc.c
- if TEST_GADGET_SCHEMES
- libusbgx_la_SOURCES += usbg_schemes_libconfig.c usbg_common_libconfig.c
- else
-diff --git a/src/function/uvc.c b/src/function/uvc.c
-new file mode 100644
-index 000000000000..92d738c5763c
---- /dev/null
-+++ b/src/function/uvc.c
-@@ -0,0 +1,378 @@
-+/*
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ */
-+
-+#include "usbg/usbg.h"
-+#include "usbg/usbg_internal.h"
-+#include "usbg/function/uvc.h"
-+
-+#include <errno.h>
-+#include <sys/stat.h>
-+#include <unistd.h>
-+#include <malloc.h>
-+#include <ftw.h>
-+#ifdef HAS_GADGET_SCHEMES
-+#include <libconfig.h>
-+#endif
-+
-+#define UVC_PATH_CONTROL "control"
-+#define UVC_PATH_HEADER "header/h"
-+#define UVC_PATH_CLASS_FS "class/fs/h"
-+#define UVC_PATH_CLASS_HS "class/hs/h"
-+#define UVC_PATH_CLASS_SS "class/ss/h"
-+#define UVC_PATH_STREAMING "streaming"
-+#define UVC_PATH_STREAMING_UNCOMPRESSED "uncompressed/u"
-+#define UVC_PATH_STREAMING_MJPEG "mjpeg/m"
-+
-+struct usbg_f_uvc
-+{
-+ struct usbg_function func;
-+};
-+
-+GENERIC_ALLOC_INST(uvc, struct usbg_f_uvc, func);
-+
-+GENERIC_FREE_INST(uvc, struct usbg_f_uvc, func);
-+
-+static int uvc_set_attrs(struct usbg_function *f, void *f_attrs)
-+{
-+ return usbg_f_uvc_set_attrs(usbg_to_uvc_function(f), f_attrs);
-+}
-+
-+static int uvc_get_attrs(struct usbg_function *f, void *f_attrs)
-+{
-+ return usbg_f_uvc_get_attrs(usbg_to_uvc_function(f), f_attrs);
-+}
-+
-+static void uvc_cleanup_attrs(struct usbg_function *f, void *f_attrs)
-+{
-+ return usbg_f_uvc_cleanup_attrs(f_attrs);
-+}
-+
-+static int uvc_libconfig_import(struct usbg_function *f, config_setting_t *root)
-+{
-+ return USBG_SUCCESS;
-+}
-+
-+static int uvc_libconfig_export(struct usbg_function *f, config_setting_t *root)
-+{
-+ return USBG_SUCCESS;
-+}
-+
-+static int uvc_create_dir(const char *path)
-+{
-+ char tmp[USBG_MAX_PATH_LENGTH];
-+ char *p = NULL;
-+ size_t len;
-+ int nmb, ret = USBG_SUCCESS;
-+
-+ nmb = snprintf(tmp, sizeof(tmp), "%s", path);
-+ if(nmb >= sizeof(tmp))
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ len = strlen(tmp);
-+ if(tmp[len - 1] == '/')
-+ tmp[len - 1] = 0;
-+
-+ for (p = tmp + 1; *p; p++) {
-+ if(*p == '/') {
-+ *p = 0;
-+ if((mkdir(tmp, S_IRWXU | S_IRWXG | S_IRWXO) != 0) && errno != EEXIST) {
-+ ret = usbg_translate_error(errno);
-+ break;
-+ }
-+ *p = '/';
-+ }
-+ }
-+ if(ret != USBG_SUCCESS)
-+ return ret;
-+
-+ if((mkdir(tmp, S_IRWXU | S_IRWXG | S_IRWXO) != 0) && errno != EEXIST)
-+ return usbg_translate_error(errno);
-+}
-+
-+static int uvc_link(char *path, char *to, char *from)
-+{
-+ char oldname[USBG_MAX_PATH_LENGTH];
-+ char newname[USBG_MAX_PATH_LENGTH];
-+ int nmb;
-+
-+ nmb = snprintf(oldname, sizeof(oldname), "%s/%s", path, to);
-+ if (nmb >= sizeof(oldname))
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ nmb = snprintf(newname, sizeof(newname), "%s/%s", path, from);
-+ if (nmb >= sizeof(newname))
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ if(symlink(oldname, newname))
-+ return usbg_translate_error(errno);
-+}
-+
-+static int uvc_set_class(char *func_path, char *cs)
-+{
-+ int ret, nmb;
-+ char path[USBG_MAX_PATH_LENGTH];
-+ char header_path[USBG_MAX_PATH_LENGTH];
-+
-+ nmb = snprintf(path, sizeof(path), "%s/%s", func_path, cs);
-+ if (nmb >= sizeof(path))
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ nmb = snprintf(header_path, sizeof(header_path), "%s/" UVC_PATH_HEADER, path);
-+ if (nmb >= sizeof(header_path))
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ ret = uvc_create_dir(header_path);
-+ if (ret != USBG_SUCCESS)
-+ return ret;
-+
-+ if (!strncmp(cs, UVC_PATH_STREAMING, strlen(UVC_PATH_STREAMING))) {
-+ char check_path[USBG_MAX_PATH_LENGTH];
-+ struct stat buffer;
-+
-+ nmb = snprintf(check_path, sizeof(check_path), "%s/" UVC_PATH_STREAMING_UNCOMPRESSED, path);
-+ if (nmb >= sizeof(check_path))
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ ret = stat(check_path, &buffer);
-+ if (!ret) {
-+ ret = uvc_link(path, UVC_PATH_STREAMING_UNCOMPRESSED, "header/h/u");
-+ if (ret != USBG_SUCCESS)
-+ return ret;
-+ }
-+
-+ nmb = snprintf(check_path, sizeof(check_path), "%s/" UVC_PATH_STREAMING_MJPEG, path);
-+ if (nmb >= sizeof(check_path))
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ ret = stat(check_path, &buffer);
-+ if (!ret) {
-+ ret = uvc_link(path, UVC_PATH_STREAMING_MJPEG, "header/h/m");
-+ if (ret != USBG_SUCCESS)
-+ return ret;
-+ }
-+
-+ ret = uvc_link(path, UVC_PATH_HEADER, UVC_PATH_CLASS_HS);
-+ if (ret)
-+ return ret;
-+ }
-+
-+ ret = uvc_link(path, UVC_PATH_HEADER, UVC_PATH_CLASS_FS);
-+ if (ret)
-+ return ret;
-+
-+ return uvc_link(path, UVC_PATH_HEADER, UVC_PATH_CLASS_SS);
-+}
-+
-+static int uvc_set_frame(char *format_path, char *format, const struct usbg_f_uvc_format_attrs *attrs)
-+{
-+ int nmb, ret, i;
-+ char frame_path[USBG_MAX_PATH_LENGTH];
-+ char full_frame_path[USBG_MAX_PATH_LENGTH];
-+ char frame_interval[USBG_MAX_PATH_LENGTH];
-+ char frame_name[32];
-+
-+ nmb = snprintf(frame_name, sizeof(frame_name), "%dp", attrs->height);
-+ if (nmb >= sizeof(frame_name))
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ nmb = snprintf(frame_path, sizeof(frame_path), "%s/%s", format_path, format);
-+ if (nmb >= sizeof(frame_path))
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ nmb = snprintf(full_frame_path, sizeof(frame_path), "%s/%s", frame_path, frame_name);
-+ if (nmb >= sizeof(full_frame_path))
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ ret = uvc_create_dir(full_frame_path);
-+ if (ret != USBG_SUCCESS)
-+ return ret;
-+
-+ ret = usbg_write_string(frame_path, frame_name, "dwFrameInterval", attrs->dwFrameInterval);
-+ if (ret != USBG_SUCCESS)
-+ return ret;
-+
-+ ret = usbg_write_dec(frame_path, frame_name, "wHeight", attrs->height);
-+ if (ret != USBG_SUCCESS)
-+ return ret;
-+
-+ return usbg_write_dec(frame_path, frame_name, "wWidth", attrs->width);
-+}
-+
-+static int uvc_set_streaming(char *func_path, const struct usbg_f_uvc_format_attrs *attrs)
-+{
-+ char streaming_path[USBG_MAX_PATH_LENGTH];
-+ int ret, nmb;
-+
-+ nmb = snprintf(streaming_path, sizeof(streaming_path), "%s/" UVC_PATH_STREAMING, func_path);
-+ if (nmb >= sizeof(streaming_path))
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ if (attrs->format == UVC_FORMAT_UNCOMPRESSED)
-+ ret = uvc_set_frame(streaming_path, UVC_PATH_STREAMING_UNCOMPRESSED, attrs);
-+ else
-+ ret = uvc_set_frame(streaming_path, UVC_PATH_STREAMING_MJPEG, attrs);
-+
-+ return ret;
-+}
-+
-+static int dir_nftw_cb(const char *pathname, const struct stat *sbuf, int type, struct FTW *ftwb)
-+{
-+ (void) sbuf;
-+ (void) type;
-+ (void) ftwb;
-+ int ret;
-+
-+ ret = remove(pathname);
-+ if (ret < -1)
-+ ERROR("failed to remove %s - %s", pathname, strerror(ret));
-+
-+ return 0;
-+}
-+
-+int remove_dir(const char *dirpath)
-+{
-+ const int max_open_descs = 8;
-+ int ret;
-+
-+ ret = nftw(dirpath, dir_nftw_cb, max_open_descs, FTW_DEPTH | FTW_MOUNT | FTW_PHYS);
-+ if (ret < 0) {
-+ ERROR("nftw failed");
-+ return ret;
-+ }
-+
-+ return 0;
-+}
-+
-+static int content_nftw_cb(const char *pathname, const struct stat *sbuf, int type, struct FTW *ftwb)
-+{
-+ (void) sbuf;
-+ (void) type;
-+ (void) ftwb;
-+ int ret;
-+
-+ if(ftwb->level == 0)
-+ return 0;
-+
-+ ret = remove(pathname);
-+ if(ret < -1)
-+ ERROR("failed to remove %s - %s", pathname, strerror(ret));
-+
-+ return 0;
-+}
-+
-+int remove_dir_content(const char *dirpath)
-+{
-+ const int max_open_descs = 8;
-+ int ret;
-+
-+ /* traverse in reverse order (handle directory after it's content), stay within the same file system and do not follow symbolic links */
-+ ret = nftw(dirpath, content_nftw_cb, max_open_descs, FTW_DEPTH | FTW_MOUNT | FTW_PHYS);
-+ if (ret < 0) {
-+ ERROR("nftw failed");
-+ return ret;
-+ }
-+
-+ return 0;
-+}
-+
-+static int uvc_remove(struct usbg_function *f, int opts)
-+{
-+ usbg_f_uvc *uvcf = usbg_to_uvc_function(f);
-+ char streaming_path[USBG_MAX_PATH_LENGTH];
-+ char control_path[USBG_MAX_PATH_LENGTH];
-+ char path[USBG_UVC_MAX_PATH_LENGTH];
-+ int nmb, ret = USBG_SUCCESS;
-+
-+ nmb = snprintf(path, sizeof(path), "%s/%s", uvcf->func.path, uvcf->func.name);
-+ if (nmb >= sizeof(path))
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ nmb = snprintf(streaming_path, sizeof(streaming_path), "%s/streaming", path);
-+ if (nmb >= sizeof(streaming_path))
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ nmb = snprintf(control_path, sizeof(control_path), "%s/control", path);
-+ if (nmb >= sizeof(control_path))
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ if(remove_dir_content(streaming_path) < 0)
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ if(remove_dir_content(control_path) < 0)
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ if(remove_dir(streaming_path) < 0)
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ if(remove_dir(control_path) < 0)
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ return 0;
-+};
-+
-+struct usbg_function_type usbg_f_type_uvc = {
-+ .name = "uvc",
-+ .alloc_inst = uvc_alloc_inst,
-+ .free_inst = uvc_free_inst,
-+ .set_attrs = uvc_set_attrs,
-+ .get_attrs = uvc_get_attrs,
-+ .cleanup_attrs = uvc_cleanup_attrs,
-+ .import = uvc_libconfig_import,
-+ .export = uvc_libconfig_export,
-+ .remove = uvc_remove,
-+};
-+
-+/* API implementation */
-+
-+usbg_f_uvc *usbg_to_uvc_function(usbg_function *f)
-+{
-+ return f->ops == &usbg_f_type_uvc ?
-+ container_of(f, struct usbg_f_uvc, func) : NULL;
-+}
-+
-+usbg_function *usbg_from_uvc_function(usbg_f_uvc *ff)
-+{
-+ return &ff->func;
-+}
-+
-+int usbg_f_uvc_get_attrs(usbg_f_uvc *uvcf, struct usbg_f_uvc_attrs *attrs)
-+{
-+ return USBG_SUCCESS;
-+}
-+
-+int usbg_f_uvc_set_attrs(usbg_f_uvc *uvcf, const struct usbg_f_uvc_attrs *attrs)
-+{
-+ int nmb, ret = USBG_SUCCESS;
-+ char path[USBG_UVC_MAX_PATH_LENGTH];
-+ struct usbg_f_uvc_format_attrs **format_attrs;
-+ int i;
-+
-+ nmb = snprintf(path, sizeof(path), "%s/%s", uvcf->func.path, uvcf->func.name);
-+ if (nmb >= sizeof(path))
-+ return USBG_ERROR_PATH_TOO_LONG;
-+
-+ for(format_attrs = attrs->formats, i = 0; format_attrs[i]; ++i) {
-+ ret = uvc_set_streaming(path, format_attrs[i]);
-+ if(ret != USBG_SUCCESS)
-+ ERROR("Error: %d", ret);
-+ }
-+
-+ ret = uvc_set_class(path, "control");
-+ if (ret != USBG_SUCCESS)
-+ return ret;
-+
-+ ret = uvc_set_class(path, "streaming");
-+ if (ret != USBG_SUCCESS)
-+ return ret;
-+
-+ return ret;
-+}
-diff --git a/src/usbg.c b/src/usbg.c
-index d2bf38160358..b298ddc50ecf 100644
---- a/src/usbg.c
-+++ b/src/usbg.c
-@@ -52,6 +52,7 @@ extern struct usbg_function_type usbg_f_type_phonet;
- extern struct usbg_function_type usbg_f_type_loopback;
- extern struct usbg_function_type usbg_f_type_hid;
- extern struct usbg_function_type usbg_f_type_uac2;
-+extern struct usbg_function_type usbg_f_type_uvc;
-
- /**
- * @var function_types
-@@ -73,6 +74,7 @@ struct usbg_function_type* function_types[] = {
- [USBG_F_LOOPBACK] = &usbg_f_type_loopback,
- [USBG_F_HID] = &usbg_f_type_hid,
- [USBG_F_UAC2] = &usbg_f_type_uac2,
-+ [USBG_F_UVC] = &usbg_f_type_uvc,
- };
-
- ARRAY_SIZE_SENTINEL(function_types, USBG_FUNCTION_TYPE_MAX);
diff --git a/patches/libusbgx-0.2.0/autogen.sh b/patches/libusbgx-0.2.0/autogen.sh
deleted file mode 100755
index 2459647bf..000000000
--- a/patches/libusbgx-0.2.0/autogen.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-set -e
-
-aclocal $ACLOCAL_FLAGS
-
-libtoolize \
- --force \
- --copy
-
-autoreconf \
- --force \
- --install \
- --warnings=syntax \
- --warnings=obsolete \
- --warnings=unsupported
diff --git a/patches/libusbgx-0.2.0/series b/patches/libusbgx-0.2.0/series
deleted file mode 100644
index 406d15acc..000000000
--- a/patches/libusbgx-0.2.0/series
+++ /dev/null
@@ -1,7 +0,0 @@
-# generated by git-ptx-patches
-#tag:base --start-number 1
-0001-Fix-39-Compilation-fails-on-gcc-v8.patch
-0002-libusbgx-fix-build-with-glibc-2.28-since-sys-sysmacr.patch
-0003-examples-gadget-vid-pid-remove-add-dynamic-vid-pid-s.patch
-0004-libusbgx-Add-UVC-support.patch
-# 55b4c63ca7f6b97ceb9cd9588e1eacdd - git-ptx-patches magic
diff --git a/rules/libusbgx.in b/rules/libusbgx.in
index e576f842e..95e92a04c 100644
--- a/rules/libusbgx.in
+++ b/rules/libusbgx.in
@@ -2,6 +2,7 @@
menuconfig LIBUSBGX
bool
+ select HOST_MESON
select LIBCONFIG if LIBUSBGX_SCHEMES
prompt "libusbgx "
help
diff --git a/rules/libusbgx.make b/rules/libusbgx.make
index f6ccb6e9b..78128fd0a 100644
--- a/rules/libusbgx.make
+++ b/rules/libusbgx.make
@@ -14,11 +14,11 @@ PACKAGES-$(PTXCONF_LIBUSBGX) += libusbgx
#
# Paths and names
#
-LIBUSBGX_VERSION := 0.2.0
-LIBUSBGX_MD5 := a8ea2234c6355ac8ad2ca86c453297bd
+LIBUSBGX_VERSION := 0.3.0
+LIBUSBGX_MD5 := f2ca9c639e6fc6ee9dbecb545fa61637
LIBUSBGX := libusbgx-$(LIBUSBGX_VERSION)
-LIBUSBGX_SUFFIX := zip
-LIBUSBGX_URL := https://github.com/libusbgx/libusbgx/archive/refs/tags/libusbgx-v$(LIBUSBGX_VERSION).zip
+LIBUSBGX_SUFFIX := tar.gz
+LIBUSBGX_URL := https://github.com/linux-usb-gadgets/libusbgx/archive/refs/tags/libusbgx-v$(LIBUSBGX_VERSION).$(LIBUSBGX_SUFFIX)
LIBUSBGX_SOURCE := $(SRCDIR)/$(LIBUSBGX).$(LIBUSBGX_SUFFIX)
LIBUSBGX_DIR := $(BUILDDIR)/$(LIBUSBGX)
LIBUSBGX_LICENSE := GPL-2.0-or-later AND LGPL-2.1-or-later
@@ -32,18 +32,16 @@ LIBUSBGX_LICENSE_FILES := \
# Prepare
# ----------------------------------------------------------------------------
-LIBUSBGX_CONF_ENV := $(CROSS_ENV)
-
#
-# autoconf
+# meson
#
-LIBUSBGX_CONF_TOOL := autoconf
+LIBUSBGX_CONF_TOOL := meson
LIBUSBGX_CONF_OPT := \
- $(CROSS_AUTOCONF_USR) \
- --$(call ptx/wwo, PTXCONF_LIBUSBGX_SCHEMES)-libconfig \
- --enable-examples \
- --$(call ptx/endis, PTXCONF_LIBUSBGX_SCHEMES)-gadget-schemes \
- --disable-doxygen-doc
+ $(CROSS_MESON_USR) \
+ -Dexamples=true \
+ -Dtests=disabled \
+ -Dgadget-schemes=$(call ptx/endis, PTXCONF_LIBUSBGX_SCHEMES)d \
+ -Ddoxygen=disabled
# ----------------------------------------------------------------------------
# Target-Install
--
2.39.5
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-10-02 19:12 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-10-02 19:11 [ptxdist] [PATCH v3] libusbgx: version bump 0.2.0 -> 0.3.0 Michael Grzeschik
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox