Complete Yocto mirror with license table for TQMa6UL (2038-compliance)

- 264 license table entries with exact download URLs (224/264 resolved)
- Complete sources/ directory with all BitBake recipes
- Build configuration: tqma6ul-multi-mba6ulx, spaetzle (musl)
- Full traceability for Softwarefreigabeantrag
- GCC 13.4.0, Linux 6.6.102, U-Boot 2023.04, musl 1.2.4
- License distribution: GPL-2.0 (24), MIT (23), GPL-2.0+ (18), BSD-3 (16)
This commit is contained in:
Siggi (OpenClaw Agent)
2026-03-01 20:58:18 +00:00
commit 16accb6b24
15086 changed files with 1292356 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
SUMMARY = "USB Gadget Configuration Files"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
SRC_URI = "file://usbgx.default"
do_configure[noexec] = "1"
do_compile[noexec] = "1"
do_install() {
install -Dm 0644 ${WORKDIR}/usbgx.default ${D}${sysconfdir}/default/usbgx
}

View File

@@ -0,0 +1,2 @@
IMPORT_SCHEMAS=""
ENABLED_SCHEMAS="$IMPORT_SCHEMAS"

View File

@@ -0,0 +1,796 @@
From 421b366cafdf954b7e1cd2bbb78b55e04d73c082 Mon Sep 17 00:00:00 2001
From: Wlodzimierz Lipert <wlodzimierz.lipert@gmail.com>
Date: Mon, 28 Nov 2022 08:29:54 +0100
Subject: [PATCH] fix: stack-buffer-overflow in usbg_f_foo_attr_val processing.
Changed ABI version from 2 to 3.
Upstream-Status: Submitted [https://github.com/linux-usb-gadgets/libusbgx/pull/72]
Signed-off-by: Wlodzimierz Lipert <wlodzimierz.lipert@gmail.com>
Signed-off-by: Ming Liu <liu.ming50@gmail.com>
---
include/usbg/function/hid.h | 28 ++++++++++++----------------
include/usbg/function/midi.h | 35 +++++++++++++----------------------
include/usbg/function/ms.h | 30 +++++++++++-------------------
include/usbg/function/net.h | 34 ++++++++++++++--------------------
include/usbg/function/uac2.h | 29 +++++++++++++----------------
include/usbg/usbg_internal.h | 10 +++++-----
src/Makefile.am | 2 +-
src/function/ether.c | 10 +++++-----
src/function/hid.c | 12 ++++++------
src/function/midi.c | 10 +++++-----
src/function/ms.c | 10 +++++-----
src/function/uac2.c | 10 +++++-----
src/function/uvc.c | 10 +++++-----
src/usbg_common.c | 2 +-
14 files changed, 101 insertions(+), 131 deletions(-)
diff --git a/include/usbg/function/hid.h b/include/usbg/function/hid.h
index 3463140..3b3907b 100644
--- a/include/usbg/function/hid.h
+++ b/include/usbg/function/hid.h
@@ -56,11 +56,6 @@ union usbg_f_hid_attr_val {
unsigned int subclass;
};
-#define USBG_F_HID_UINT_TO_ATTR_VAL(WHAT) \
- USBG_TO_UNION(usbg_f_hid_attr_val, protocol, WHAT)
-
-#define USBG_F_HID_RDESC_TO_ATTR_VAL(WHAT) \
- USBG_TO_UNION(usbg_f_hid_attr_val, report_desc, WHAT)
/**
* @brief Cast from generic function to hid function
* @param[in] f function to be converted to hid funciton.
@@ -137,7 +132,7 @@ int usbg_f_hid_get_attr_val(usbg_f_hid *hf, enum usbg_f_hid_attr attr,
* @return 0 on success usbg_error if error occurred.
*/
int usbg_f_hid_set_attr_val(usbg_f_hid *hf, enum usbg_f_hid_attr attr,
- union usbg_f_hid_attr_val val);
+ const union usbg_f_hid_attr_val *val);
/**
* @brief Get the minor and major of corresponding character device
@@ -173,8 +168,9 @@ static inline int usbg_f_hid_get_protocol(usbg_f_hid *hf,
static inline int usbg_f_hid_set_protocol(usbg_f_hid *hf,
unsigned int protocol)
{
- return usbg_f_hid_set_attr_val(hf, USBG_F_HID_PROTOCOL,
- USBG_F_HID_UINT_TO_ATTR_VAL(protocol));
+
+ union usbg_f_hid_attr_val val = {.protocol = protocol};
+ return usbg_f_hid_set_attr_val(hf, USBG_F_HID_PROTOCOL, &val);
}
/**
@@ -199,8 +195,8 @@ static inline int usbg_f_hid_get_report_desc(usbg_f_hid *hf,
static inline int usbg_f_hid_set_report_desc(usbg_f_hid *hf,
struct usbg_f_hid_report_desc report_desc)
{
- return usbg_f_hid_set_attr_val(hf, USBG_F_HID_REPORT_DESC,
- USBG_F_HID_RDESC_TO_ATTR_VAL(report_desc));
+ union usbg_f_hid_attr_val val = {.report_desc = report_desc};
+ return usbg_f_hid_set_attr_val(hf, USBG_F_HID_REPORT_DESC, &val);
}
/**
@@ -242,8 +238,8 @@ static inline int usbg_f_hid_set_report_desc_raw(usbg_f_hid *hf,
.len = len,
};
- return usbg_f_hid_set_attr_val(hf, USBG_F_HID_REPORT_DESC,
- USBG_F_HID_RDESC_TO_ATTR_VAL(report_desc));
+ union usbg_f_hid_attr_val val = {.report_desc = report_desc};
+ return usbg_f_hid_set_attr_val(hf, USBG_F_HID_REPORT_DESC, &val);
}
/**
@@ -268,8 +264,8 @@ static inline int usbg_f_hid_get_report_length(usbg_f_hid *hf,
static inline int usbg_f_hid_set_report_length(usbg_f_hid *hf,
unsigned int report_length)
{
- return usbg_f_hid_set_attr_val(hf, USBG_F_HID_REPORT_LENGTH,
- USBG_F_HID_UINT_TO_ATTR_VAL(report_length));
+ union usbg_f_hid_attr_val val = {.report_length = report_length};
+ return usbg_f_hid_set_attr_val(hf, USBG_F_HID_REPORT_LENGTH, &val);
}
/**
@@ -294,8 +290,8 @@ static inline int usbg_f_hid_get_subclass(usbg_f_hid *hf,
static inline int usbg_f_hid_set_subclass(usbg_f_hid *hf,
unsigned int subclass)
{
- return usbg_f_hid_set_attr_val(hf, USBG_F_HID_SUBCLASS,
- USBG_F_HID_UINT_TO_ATTR_VAL(subclass));
+ union usbg_f_hid_attr_val val = {.subclass = subclass};
+ return usbg_f_hid_set_attr_val(hf, USBG_F_HID_SUBCLASS, &val);
}
#ifdef __cplusplus
diff --git a/include/usbg/function/midi.h b/include/usbg/function/midi.h
index 39df047..b9d9d4f 100644
--- a/include/usbg/function/midi.h
+++ b/include/usbg/function/midi.h
@@ -53,15 +53,6 @@ union usbg_f_midi_attr_val {
unsigned int qlen;
};
-#define USBG_F_MIDI_INT_TO_ATTR_VAL(WHAT) \
- USBG_TO_UNION(usbg_f_midi_attr_val, index, WHAT)
-
-#define USBG_F_MIDI_UINT_TO_ATTR_VAL(WHAT) \
- USBG_TO_UNION(usbg_f_midi_attr_val, qlen, WHAT)
-
-#define USBG_F_MIDI_CCHAR_PTR_TO_ATTR_VAL(WHAT) \
- USBG_TO_UNION(usbg_f_midi_attr_val, id, WHAT)
-
/**
* @brief Cast from generic function to midi function
* @param[in] f function to be converted to midi funciton.
@@ -126,7 +117,7 @@ int usbg_f_midi_get_attr_val(usbg_f_midi *mf, enum usbg_f_midi_attr attr,
* @return 0 on success usbg_error if error occurred.
*/
int usbg_f_midi_set_attr_val(usbg_f_midi *mf, enum usbg_f_midi_attr attr,
- union usbg_f_midi_attr_val val);
+ const union usbg_f_midi_attr_val *val);
/**
* @brief Get the index value of MIDI adapter
@@ -148,8 +139,8 @@ static inline int usbg_f_midi_get_index(usbg_f_midi *mf, int *index)
*/
static inline int usbg_f_midi_set_index(usbg_f_midi *mf, int index)
{
- return usbg_f_midi_set_attr_val(mf, USBG_F_MIDI_INDEX,
- USBG_F_MIDI_INT_TO_ATTR_VAL(index));
+ union usbg_f_midi_attr_val val = {.index = index};
+ return usbg_f_midi_set_attr_val(mf, USBG_F_MIDI_INDEX, &val);
}
/**
@@ -188,8 +179,8 @@ int usbg_f_midi_get_id_s(usbg_f_midi *mf, char *buf, int len);
*/
static inline int usbg_f_midi_set_id(usbg_f_midi *mf, const char *id)
{
- return usbg_f_midi_set_attr_val(mf, USBG_F_MIDI_ID,
- USBG_F_MIDI_CCHAR_PTR_TO_ATTR_VAL(id));
+ union usbg_f_midi_attr_val val = {.id = id};
+ return usbg_f_midi_set_attr_val(mf, USBG_F_MIDI_ID, &val);
}
/**
@@ -212,8 +203,8 @@ static inline int usbg_f_midi_get_in_ports(usbg_f_midi *mf, unsigned *in_ports)
*/
static inline int usbg_f_midi_set_in_ports(usbg_f_midi *mf, unsigned in_ports)
{
- return usbg_f_midi_set_attr_val(mf, USBG_F_MIDI_IN_PORTS,
- USBG_F_MIDI_UINT_TO_ATTR_VAL(in_ports));
+ union usbg_f_midi_attr_val val = {.in_ports = in_ports};
+ return usbg_f_midi_set_attr_val(mf, USBG_F_MIDI_IN_PORTS, &val);
}
/**
@@ -236,8 +227,8 @@ static inline int usbg_f_midi_get_out_ports(usbg_f_midi *mf, unsigned *out_ports
*/
static inline int usbg_f_midi_set_out_ports(usbg_f_midi *mf, unsigned out_ports)
{
- return usbg_f_midi_set_attr_val(mf, USBG_F_MIDI_OUT_PORTS,
- USBG_F_MIDI_UINT_TO_ATTR_VAL(out_ports));
+ union usbg_f_midi_attr_val val = {.out_ports = out_ports};
+ return usbg_f_midi_set_attr_val(mf, USBG_F_MIDI_OUT_PORTS, &val);
}
/**
@@ -264,8 +255,8 @@ static inline int usbg_f_midi_get_buflen(usbg_f_midi *mf, int *buflen)
*/
static inline int usbg_f_midi_set_buflen(usbg_f_midi *mf, unsigned buflen)
{
- return usbg_f_midi_set_attr_val(mf, USBG_F_MIDI_BUFLEN,
- USBG_F_MIDI_UINT_TO_ATTR_VAL(buflen));
+ union usbg_f_midi_attr_val val = {.buflen = buflen};
+ return usbg_f_midi_set_attr_val(mf, USBG_F_MIDI_BUFLEN, &val);
}
/**
@@ -288,8 +279,8 @@ static inline int usbg_f_midi_get_qlen(usbg_f_midi *mf, unsigned *qlen)
*/
static inline int usbg_f_midi_set_qlen(usbg_f_midi *mf, unsigned qlen)
{
- return usbg_f_midi_set_attr_val(mf, USBG_F_MIDI_QLEN,
- USBG_F_MIDI_UINT_TO_ATTR_VAL(qlen));
+ union usbg_f_midi_attr_val val = {.qlen = qlen};
+ return usbg_f_midi_set_attr_val(mf, USBG_F_MIDI_QLEN, &val);
}
#ifdef __cplusplus
diff --git a/include/usbg/function/ms.h b/include/usbg/function/ms.h
index 780464c..f52eb78 100644
--- a/include/usbg/function/ms.h
+++ b/include/usbg/function/ms.h
@@ -56,14 +56,6 @@ union usbg_f_ms_lun_attr_val {
const char *file;
};
-#define USBG_F_MS_LUN_BOOL_TO_ATTR_VAL(WHAT) \
- USBG_TO_UNION(usbg_f_ms_lun_attr_val, cdrom, WHAT)
-
-#define USBG_F_MS_LUN_CCHAR_PTR_TO_ATTR_VAL(WHAT) \
- USBG_TO_UNION(usbg_f_ms_lun_attr_val, file, WHAT)
-
-
-
/**
* @brief Cast from generic function to mass storage function
* @param[in] f function to be converted to ms funciton.
@@ -157,7 +149,7 @@ int usbg_f_ms_get_lun_attr_val(usbg_f_ms *mf, int lun_id,
*/
int usbg_f_ms_set_lun_attr_val(usbg_f_ms *mf, int lun_id,
enum usbg_f_ms_lun_attr lattr,
- const union usbg_f_ms_lun_attr_val val);
+ const union usbg_f_ms_lun_attr_val *val);
/**
* @brief Get the value which determines if lun is visible as a cdrom
@@ -183,8 +175,8 @@ static inline int usbg_f_ms_get_lun_cdrom(usbg_f_ms *mf, int lun_id,
static inline int usbg_f_ms_set_lun_cdrom(usbg_f_ms *mf, int lun_id,
bool cdrom)
{
- return usbg_f_ms_set_lun_attr_val(mf, lun_id, USBG_F_MS_LUN_CDROM,
- USBG_F_MS_LUN_BOOL_TO_ATTR_VAL(cdrom));
+ union usbg_f_ms_lun_attr_val val = {.cdrom = cdrom};
+ return usbg_f_ms_set_lun_attr_val(mf, lun_id, USBG_F_MS_LUN_CDROM, &val);
}
/**
@@ -209,8 +201,8 @@ static inline int usbg_f_ms_get_lun_ro(usbg_f_ms *mf, int lun_id, bool *ro)
*/
static inline int usbg_f_ms_set_lun_ro(usbg_f_ms *mf, int lun_id, bool ro)
{
- return usbg_f_ms_set_lun_attr_val(mf, lun_id, USBG_F_MS_LUN_RO,
- USBG_F_MS_LUN_BOOL_TO_ATTR_VAL(ro));
+ union usbg_f_ms_lun_attr_val val = {.ro = ro};
+ return usbg_f_ms_set_lun_attr_val(mf, lun_id, USBG_F_MS_LUN_RO, &val);
}
/**
@@ -239,8 +231,8 @@ static inline int usbg_f_ms_get_lun_nofua(usbg_f_ms *mf, int lun_id,
static inline int usbg_f_ms_set_lun_nofua(usbg_f_ms *mf, int lun_id,
bool nofua)
{
- return usbg_f_ms_set_lun_attr_val(mf, lun_id, USBG_F_MS_LUN_NOFUA,
- USBG_F_MS_LUN_BOOL_TO_ATTR_VAL(nofua));
+ union usbg_f_ms_lun_attr_val val = {.nofua = nofua};
+ return usbg_f_ms_set_lun_attr_val(mf, lun_id, USBG_F_MS_LUN_NOFUA, &val);
}
/**
@@ -267,8 +259,8 @@ static inline int usbg_f_ms_get_lun_removable(usbg_f_ms *mf, int lun_id,
static inline int usbg_f_ms_set_lun_removable(usbg_f_ms *mf, int lun_id,
bool removable)
{
- return usbg_f_ms_set_lun_attr_val(mf, lun_id, USBG_F_MS_LUN_REMOVABLE,
- USBG_F_MS_LUN_BOOL_TO_ATTR_VAL(removable));
+ union usbg_f_ms_lun_attr_val val = {.removable = removable};
+ return usbg_f_ms_set_lun_attr_val(mf, lun_id, USBG_F_MS_LUN_REMOVABLE, &val);
}
/**
@@ -313,8 +305,8 @@ int usbg_f_ms_get_lun_file_s(usbg_f_ms *mf, int lun_id,
static inline int usbg_f_ms_set_lun_file(usbg_f_ms *mf, int lun_id,
const char *file)
{
- return usbg_f_ms_set_lun_attr_val(mf, lun_id, USBG_F_MS_LUN_FILE,
- USBG_F_MS_LUN_CCHAR_PTR_TO_ATTR_VAL(file));
+ union usbg_f_ms_lun_attr_val val = {.file = file};
+ return usbg_f_ms_set_lun_attr_val(mf, lun_id, USBG_F_MS_LUN_FILE, &val);
}
/**
diff --git a/include/usbg/function/net.h b/include/usbg/function/net.h
index b0409f1..06cee30 100644
--- a/include/usbg/function/net.h
+++ b/include/usbg/function/net.h
@@ -56,12 +56,6 @@ union usbg_f_net_attr_val {
unsigned int protocol;
};
-#define USBG_F_NET_ETHER_ADDR_TO_ATTR_VAL(WHAT) \
- USBG_TO_UNION(usbg_f_net_attr_val, dev_addr, WHAT)
-
-#define USBG_F_NET_INT_TO_ATTR_VAL(WHAT) \
- USBG_TO_UNION(usbg_f_net_attr_val, qmult, WHAT)
-
/**
* @brief Cast from generic function to net function
* @param[in] f function to be converted to net funciton.
@@ -125,7 +119,7 @@ int usbg_f_net_get_attr_val(usbg_f_net *nf, enum usbg_f_net_attr attr,
* @return 0 on success usbg_error if error occurred.
*/
int usbg_f_net_set_attr_val(usbg_f_net *nf, enum usbg_f_net_attr attr,
- const union usbg_f_net_attr_val val);
+ const union usbg_f_net_attr_val *val);
/**
* @brief Get the value of device side MAC address
@@ -136,7 +130,7 @@ int usbg_f_net_set_attr_val(usbg_f_net *nf, enum usbg_f_net_attr attr,
static inline int usbg_f_net_get_dev_addr(usbg_f_net *nf,
struct ether_addr *addr)
{
- union usbg_f_net_attr_val val = { .dev_addr = *addr, };
+ union usbg_f_net_attr_val val = {.dev_addr = *addr};
return usbg_f_net_get_attr_val(nf, USBG_F_NET_DEV_ADDR, &val);
}
@@ -149,8 +143,8 @@ static inline int usbg_f_net_get_dev_addr(usbg_f_net *nf,
static inline int usbg_f_net_set_dev_addr(usbg_f_net *nf,
const struct ether_addr *addr)
{
- return usbg_f_net_set_attr_val(nf, USBG_F_NET_DEV_ADDR,
- USBG_F_NET_ETHER_ADDR_TO_ATTR_VAL(*addr));
+ union usbg_f_net_attr_val val = {.dev_addr = *addr};
+ return usbg_f_net_set_attr_val(nf, USBG_F_NET_DEV_ADDR, &val);
}
/**
@@ -175,8 +169,8 @@ static inline int usbg_f_net_get_host_addr(usbg_f_net *nf,
static inline int usbg_f_net_set_host_addr(usbg_f_net *nf,
const struct ether_addr *addr)
{
- return usbg_f_net_set_attr_val(nf, USBG_F_NET_HOST_ADDR,
- USBG_F_NET_ETHER_ADDR_TO_ATTR_VAL(*addr));
+ union usbg_f_net_attr_val val = {.host_addr = *addr};
+ return usbg_f_net_set_attr_val(nf, USBG_F_NET_HOST_ADDR, &val);
}
/**
@@ -226,8 +220,8 @@ static inline int usbg_f_net_get_qmult(usbg_f_net *nf, int *qmult)
*/
static inline int usbg_f_net_set_qmult(usbg_f_net *nf, int qmult)
{
- return usbg_f_net_set_attr_val(nf, USBG_F_NET_QMULT,
- USBG_F_NET_INT_TO_ATTR_VAL(qmult));
+ union usbg_f_net_attr_val val = {.qmult = qmult};
+ return usbg_f_net_set_attr_val(nf, USBG_F_NET_QMULT, &val);
}
/**
@@ -250,8 +244,8 @@ static inline int usbg_f_net_get_class(usbg_f_net *nf, unsigned int *class_)
*/
static inline int usbg_f_net_set_class(usbg_f_net *nf, unsigned int class_)
{
- return usbg_f_net_set_attr_val(nf, USBG_F_NET_CLASS,
- USBG_F_NET_INT_TO_ATTR_VAL(class_));
+ union usbg_f_net_attr_val val = {.class_ = class_};
+ return usbg_f_net_set_attr_val(nf, USBG_F_NET_CLASS, &val);
}
/**
@@ -274,8 +268,8 @@ static inline int usbg_f_net_get_subclass(usbg_f_net *nf, int *subclass)
*/
static inline int usbg_f_net_set_subclass(usbg_f_net *nf, unsigned int subclass)
{
- return usbg_f_net_set_attr_val(nf, USBG_F_NET_SUBCLASS,
- USBG_F_NET_INT_TO_ATTR_VAL(subclass));
+ union usbg_f_net_attr_val val = {.subclass = subclass};
+ return usbg_f_net_set_attr_val(nf, USBG_F_NET_SUBCLASS, &val);
}
/**
@@ -298,8 +292,8 @@ static inline int usbg_f_net_get_protocol(usbg_f_net *nf, int *protocol)
*/
static inline int usbg_f_net_set_protocol(usbg_f_net *nf, unsigned int protocol)
{
- return usbg_f_net_set_attr_val(nf, USBG_F_NET_PROTOCOL,
- USBG_F_NET_INT_TO_ATTR_VAL(protocol));
+ union usbg_f_net_attr_val val = {.protocol = protocol};
+ return usbg_f_net_set_attr_val(nf, USBG_F_NET_PROTOCOL, &val);
}
#ifdef __cplusplus
diff --git a/include/usbg/function/uac2.h b/include/usbg/function/uac2.h
index 6fc4d24..80918ef 100644
--- a/include/usbg/function/uac2.h
+++ b/include/usbg/function/uac2.h
@@ -110,9 +110,6 @@ union usbg_f_uac2_attr_val {
const char * function_name;
};
-#define USBG_F_UAC2_INT_TO_ATTR_VAL(WHAT) \
- USBG_TO_UNION(usbg_f_uac2_attr_val, c_chmask, WHAT)
-
/**
* @brief Cast from generic function to uac2 function
* @param[in] f function to be converted to uac2 funciton.
@@ -172,7 +169,7 @@ int usbg_f_uac2_get_attr_val(usbg_f_uac2 *af, enum usbg_f_uac2_attr attr,
* @return 0 on success usbg_error if error occurred.
*/
int usbg_f_uac2_set_attr_val(usbg_f_uac2 *af, enum usbg_f_uac2_attr attr,
- union usbg_f_uac2_attr_val val);
+ const union usbg_f_uac2_attr_val *val);
/**
* @brief Get the capture channel mask of UAC2 adapter
@@ -194,8 +191,8 @@ static inline int usbg_f_uac2_get_c_chmask(usbg_f_uac2 *af, int *c_chmask)
*/
static inline int usbg_f_uac2_set_c_chmask(usbg_f_uac2 *af, int c_chmask)
{
- return usbg_f_uac2_set_attr_val(af, USBG_F_UAC2_C_CHMASK,
- USBG_F_UAC2_INT_TO_ATTR_VAL(c_chmask));
+ union usbg_f_uac2_attr_val val = {.c_chmask = c_chmask};
+ return usbg_f_uac2_set_attr_val(af, USBG_F_UAC2_C_CHMASK, &val);
}
/**
@@ -218,8 +215,8 @@ static inline int usbg_f_uac2_get_c_srate(usbg_f_uac2 *af, int *c_srate)
*/
static inline int usbg_f_uac2_set_c_srate(usbg_f_uac2 *af, int c_srate)
{
- return usbg_f_uac2_set_attr_val(af, USBG_F_UAC2_C_SRATE,
- USBG_F_UAC2_INT_TO_ATTR_VAL(c_srate));
+ union usbg_f_uac2_attr_val val = {.c_srate = c_srate};
+ return usbg_f_uac2_set_attr_val(af, USBG_F_UAC2_C_SRATE, &val);
}
/**
@@ -242,8 +239,8 @@ static inline int usbg_f_uac2_get_c_ssize(usbg_f_uac2 *af, int *c_ssize)
*/
static inline int usbg_f_uac2_set_c_ssize(usbg_f_uac2 *af, int c_ssize)
{
- return usbg_f_uac2_set_attr_val(af, USBG_F_UAC2_C_SSIZE,
- USBG_F_UAC2_INT_TO_ATTR_VAL(c_ssize));
+ union usbg_f_uac2_attr_val val = {.c_ssize = c_ssize};
+ return usbg_f_uac2_set_attr_val(af, USBG_F_UAC2_C_SSIZE, &val);
}
/**
@@ -266,8 +263,8 @@ static inline int usbg_f_uac2_get_p_chmask(usbg_f_uac2 *af, int *p_chmask)
*/
static inline int usbg_f_uac2_set_p_chmask(usbg_f_uac2 *af, int p_chmask)
{
- return usbg_f_uac2_set_attr_val(af, USBG_F_UAC2_P_CHMASK,
- USBG_F_UAC2_INT_TO_ATTR_VAL(p_chmask));
+ union usbg_f_uac2_attr_val val = {.p_chmask = p_chmask};
+ return usbg_f_uac2_set_attr_val(af, USBG_F_UAC2_P_CHMASK, &val);
}
/**
@@ -290,8 +287,8 @@ static inline int usbg_f_uac2_get_p_srate(usbg_f_uac2 *af, int *p_srate)
*/
static inline int usbg_f_uac2_set_p_srate(usbg_f_uac2 *af, int p_srate)
{
- return usbg_f_uac2_set_attr_val(af, USBG_F_UAC2_P_SRATE,
- USBG_F_UAC2_INT_TO_ATTR_VAL(p_srate));
+ union usbg_f_uac2_attr_val val = {.p_srate = p_srate};
+ return usbg_f_uac2_set_attr_val(af, USBG_F_UAC2_P_SRATE, &val);
}
/**
@@ -314,8 +311,8 @@ static inline int usbg_f_uac2_get_p_ssize(usbg_f_uac2 *af, int *p_ssize)
*/
static inline int usbg_f_uac2_set_p_ssize(usbg_f_uac2 *af, int p_ssize)
{
- return usbg_f_uac2_set_attr_val(af, USBG_F_UAC2_P_SSIZE,
- USBG_F_UAC2_INT_TO_ATTR_VAL(p_ssize));
+ union usbg_f_uac2_attr_val val = {.p_ssize = p_ssize};
+ return usbg_f_uac2_set_attr_val(af, USBG_F_UAC2_P_SSIZE, &val);
}
#ifdef __cplusplus
diff --git a/include/usbg/usbg_internal.h b/include/usbg/usbg_internal.h
index 1d8dfe2..d6a3e3a 100644
--- a/include/usbg/usbg_internal.h
+++ b/include/usbg/usbg_internal.h
@@ -322,7 +322,7 @@ void usbg_cleanup_function(struct usbg_function *f);
}
typedef int (*usbg_attr_get_func)(const char *, const char *, const char *, void *);
-typedef int (*usbg_attr_set_func)(const char *, const char *, const char *, void *);
+typedef int (*usbg_attr_set_func)(const char *, const char *, const char *, const void *);
static inline int usbg_get_dec(const char *path, const char *name,
const char *attr, void *val)
@@ -331,7 +331,7 @@ static inline int usbg_get_dec(const char *path, const char *name,
}
static inline int usbg_set_dec(const char *path, const char *name,
- const char *attr, void *val)
+ const char *attr, const void *val)
{
return usbg_write_dec(path, name, attr, *((int *)val));
}
@@ -343,7 +343,7 @@ static inline int usbg_get_bool(const char *path, const char *name,
}
static inline int usbg_set_bool(const char *path, const char *name,
- const char *attr, void *val)
+ const char *attr, const void *val)
{
return usbg_write_bool(path, name, attr, *((bool *)val));
}
@@ -355,7 +355,7 @@ static inline int usbg_get_string(const char *path, const char *name,
}
static inline int usbg_set_string(const char *path, const char *name,
- const char *attr, void *val)
+ const char *attr, const void *val)
{
return usbg_write_string(path, name, attr, *(char **)val);
}
@@ -364,7 +364,7 @@ int usbg_get_ether_addr(const char *path, const char *name, const char *attr,
void *val);
int usbg_set_ether_addr(const char *path, const char *name, const char *attr,
- void *val);
+ const void *val);
int usbg_get_dev(const char *path, const char *name, const char *attr,
void *val);
diff --git a/src/Makefile.am b/src/Makefile.am
index 634209f..ac97bc8 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -7,6 +7,6 @@ else
libusbgx_la_SOURCES += usbg_schemes_none.c
endif
libusbgx_la_LDFLAGS = $(LIBCONFIG_LIBS)
-libusbgx_la_LDFLAGS += -version-info 2:0:0
+libusbgx_la_LDFLAGS += -version-info 3:0:0
libusbgx_la_CFLAGS = $(LIBCONFIG_CFLAGS)
AM_CPPFLAGS=-I$(top_srcdir)/include/ -I$(top_builddir)/include/usbg
diff --git a/src/function/ether.c b/src/function/ether.c
index a9eaf33..a1d20f1 100644
--- a/src/function/ether.c
+++ b/src/function/ether.c
@@ -124,7 +124,7 @@ static int ether_libconfig_import(struct usbg_function *f,
if (ret < 0)
break;
- ret = usbg_f_net_set_attr_val(nf, i, val);
+ ret = usbg_f_net_set_attr_val(nf, i, &val);
if (ret)
break;
}
@@ -258,8 +258,8 @@ int usbg_f_net_set_attrs(usbg_f_net *nf,
continue;
ret = usbg_f_net_set_attr_val(nf, i,
- *(union usbg_f_net_attr_val *)
- ((char *)attrs
+ (const union usbg_f_net_attr_val *)
+ ((const char *)attrs
+ net_attr[i].offset));
if (ret)
break;
@@ -277,12 +277,12 @@ int usbg_f_net_get_attr_val(usbg_f_net *nf, enum usbg_f_net_attr attr,
}
int usbg_f_net_set_attr_val(usbg_f_net *nf, enum usbg_f_net_attr attr,
- union usbg_f_net_attr_val val)
+ const union usbg_f_net_attr_val *val)
{
return net_attr[attr].ro ?
USBG_ERROR_INVALID_PARAM :
net_attr[attr].set(nf->func.path, nf->func.name,
- net_attr[attr].name, &val);
+ net_attr[attr].name, val);
}
int usbg_f_net_get_ifname_s(usbg_f_net *nf, char *buf, int len)
diff --git a/src/function/hid.c b/src/function/hid.c
index 4d075cf..895c2c6 100644
--- a/src/function/hid.c
+++ b/src/function/hid.c
@@ -69,9 +69,9 @@ static int hid_get_report(const char *path, const char *name, const char *attr,
}
static int hid_set_report(const char *path, const char *name, const char *attr,
- void *val)
+ const void *val)
{
- struct usbg_f_hid_report_desc *report_desc = val;
+ const struct usbg_f_hid_report_desc *report_desc = val;
char *buf = report_desc->desc;
int len = report_desc->len;
int ret;
@@ -239,7 +239,7 @@ static int hid_libconfig_import(struct usbg_function *f,
if (ret < 0)
break;
- ret = usbg_f_hid_set_attr_val(hf, i, val);
+ ret = usbg_f_hid_set_attr_val(hf, i, &val);
if (ret)
break;
}
@@ -327,7 +327,7 @@ int usbg_f_hid_set_attrs(usbg_f_hid *hf,
continue;
ret = usbg_f_hid_set_attr_val(hf, i,
- *(union usbg_f_hid_attr_val *)
+ (union usbg_f_hid_attr_val *)
((char *)attrs
+ hid_attr[i].offset));
if (ret)
@@ -346,11 +346,11 @@ int usbg_f_hid_get_attr_val(usbg_f_hid *hf, enum usbg_f_hid_attr attr,
}
int usbg_f_hid_set_attr_val(usbg_f_hid *hf, enum usbg_f_hid_attr attr,
- union usbg_f_hid_attr_val val)
+ const union usbg_f_hid_attr_val *val)
{
return hid_attr[attr].ro ?
USBG_ERROR_INVALID_PARAM :
hid_attr[attr].set(hf->func.path, hf->func.name,
- hid_attr[attr].name, &val);
+ hid_attr[attr].name, val);
}
diff --git a/src/function/midi.c b/src/function/midi.c
index 1cedb97..2318b49 100644
--- a/src/function/midi.c
+++ b/src/function/midi.c
@@ -100,7 +100,7 @@ static int midi_libconfig_import(struct usbg_function *f,
if (ret < 0)
break;
- ret = usbg_f_midi_set_attr_val(mf, i, val);
+ ret = usbg_f_midi_set_attr_val(mf, i, &val);
if (ret)
break;
}
@@ -185,8 +185,8 @@ int usbg_f_midi_set_attrs(usbg_f_midi *mf,
for (i = USBG_F_MIDI_ATTR_MIN; i < USBG_F_MIDI_ATTR_MAX; ++i) {
ret = usbg_f_midi_set_attr_val(mf, i,
- *(union usbg_f_midi_attr_val *)
- ((char *)attrs
+ (const union usbg_f_midi_attr_val *)
+ ((const char *)attrs
+ midi_attr[i].offset));
if (ret)
break;
@@ -204,10 +204,10 @@ int usbg_f_midi_get_attr_val(usbg_f_midi *mf, enum usbg_f_midi_attr attr,
}
int usbg_f_midi_set_attr_val(usbg_f_midi *mf, enum usbg_f_midi_attr attr,
- union usbg_f_midi_attr_val val)
+ const union usbg_f_midi_attr_val *val)
{
return midi_attr[attr].set(mf->func.path, mf->func.name,
- midi_attr[attr].name, &val);
+ midi_attr[attr].name, val);
}
int usbg_f_midi_get_id_s(usbg_f_midi *mf, char *buf, int len)
diff --git a/src/function/ms.c b/src/function/ms.c
index 519b012..5cdd814 100644
--- a/src/function/ms.c
+++ b/src/function/ms.c
@@ -207,7 +207,7 @@ static int ms_import_lun_attrs(struct usbg_f_ms *mf, int lun_id,
if (ret < 0)
break;
- ret = usbg_f_ms_set_lun_attr_val(mf, lun_id, i, val);
+ ret = usbg_f_ms_set_lun_attr_val(mf, lun_id, i, &val);
if (ret)
break;
}
@@ -605,8 +605,8 @@ int usbg_f_ms_set_lun_attrs(usbg_f_ms *mf, int lun_id,
for (i = USBG_F_MS_LUN_ATTR_MIN; i < USBG_F_MS_LUN_ATTR_MAX; ++i) {
ret = usbg_f_ms_set_lun_attr_val(mf, lun_id, i,
- *(union usbg_f_ms_lun_attr_val *)
- ((char *)lattrs
+ (const union usbg_f_ms_lun_attr_val *)
+ ((const char *)lattrs
+ ms_lun_attr[i].offset));
if (ret)
break;
@@ -633,7 +633,7 @@ int usbg_f_ms_get_lun_attr_val(usbg_f_ms *mf, int lun_id,
int usbg_f_ms_set_lun_attr_val(usbg_f_ms *mf, int lun_id,
enum usbg_f_ms_lun_attr lattr,
- union usbg_f_ms_lun_attr_val val)
+ const union usbg_f_ms_lun_attr_val *val)
{
char lpath[USBG_MAX_PATH_LENGTH];
int ret;
@@ -644,7 +644,7 @@ int usbg_f_ms_set_lun_attr_val(usbg_f_ms *mf, int lun_id,
return USBG_ERROR_PATH_TOO_LONG;
return ms_lun_attr[lattr].set(lpath, "",
- ms_lun_attr[lattr].name, &val);
+ ms_lun_attr[lattr].name, val);
}
int usbg_f_ms_get_lun_file_s(usbg_f_ms *mf, int lun_id,
diff --git a/src/function/uac2.c b/src/function/uac2.c
index 9ca8b66..fc06c1d 100644
--- a/src/function/uac2.c
+++ b/src/function/uac2.c
@@ -125,7 +125,7 @@ static int uac2_libconfig_import(struct usbg_function *f,
if (ret < 0)
break;
- ret = usbg_f_uac2_set_attr_val(af, i, val);
+ ret = usbg_f_uac2_set_attr_val(af, i, &val);
if (ret)
break;
}
@@ -210,8 +210,8 @@ int usbg_f_uac2_set_attrs(usbg_f_uac2 *af,
for (i = USBG_F_UAC2_ATTR_MIN; i < USBG_F_UAC2_ATTR_MAX; ++i) {
ret = usbg_f_uac2_set_attr_val(af, i,
- *(union usbg_f_uac2_attr_val *)
- ((char *)attrs
+ (const union usbg_f_uac2_attr_val *)
+ ((const char *)attrs
+ uac2_attr[i].offset));
if (ret)
break;
@@ -229,8 +229,8 @@ int usbg_f_uac2_get_attr_val(usbg_f_uac2 *af, enum usbg_f_uac2_attr attr,
}
int usbg_f_uac2_set_attr_val(usbg_f_uac2 *af, enum usbg_f_uac2_attr attr,
- union usbg_f_uac2_attr_val val)
+ const union usbg_f_uac2_attr_val *val)
{
return uac2_attr[attr].set(af->func.path, af->func.name,
- uac2_attr[attr].name, &val);
+ uac2_attr[attr].name, val);
}
diff --git a/src/function/uvc.c b/src/function/uvc.c
index f39594b..947b94e 100644
--- a/src/function/uvc.c
+++ b/src/function/uvc.c
@@ -303,7 +303,7 @@ int usbg_f_uvc_get_config_attr_val(usbg_f_uvc *uvcf, enum usbg_f_uvc_config_attr
}
int usbg_f_uvc_set_config_attr_val(usbg_f_uvc *uvcf, enum usbg_f_uvc_config_attr iattr,
- union usbg_f_uvc_config_attr_val val)
+ const union usbg_f_uvc_config_attr_val *val)
{
char ipath[USBG_MAX_PATH_LENGTH];
int nmb;
@@ -314,7 +314,7 @@ int usbg_f_uvc_set_config_attr_val(usbg_f_uvc *uvcf, enum usbg_f_uvc_config_attr
return USBG_ERROR_PATH_TOO_LONG;
return uvc_config_attr[iattr].set(ipath, "",
- uvc_config_attr[iattr].name, &val);
+ uvc_config_attr[iattr].name, val);
}
int usbg_f_uvc_get_config_attrs(usbg_f_uvc *uvcf, struct usbg_f_uvc_config_attrs *iattrs)
@@ -341,8 +341,8 @@ int usbg_f_uvc_set_config_attrs(usbg_f_uvc *uvcf, const struct usbg_f_uvc_config
for (i = USBG_F_UVC_FRAME_ATTR_MIN; i < USBG_F_UVC_FRAME_ATTR_MAX; ++i) {
ret = usbg_f_uvc_set_config_attr_val(uvcf, i,
- *(union usbg_f_uvc_config_attr_val *)
- ((char *)iattrs
+ (const union usbg_f_uvc_config_attr_val *)
+ ((const char *)iattrs
+ uvc_config_attr[i].offset));
if (ret)
break;
@@ -774,7 +774,7 @@ static int uvc_import_config(struct usbg_f_uvc *uvcf, config_setting_t *root)
if (ret < 0)
break;
- ret = usbg_f_uvc_set_config_attr_val(uvcf, i, val);
+ ret = usbg_f_uvc_set_config_attr_val(uvcf, i, &val);
if (ret)
break;
}
diff --git a/src/usbg_common.c b/src/usbg_common.c
index 5f7f4e5..7234649 100644
--- a/src/usbg_common.c
+++ b/src/usbg_common.c
@@ -337,7 +337,7 @@ int usbg_get_ether_addr(const char *path, const char *name,
}
int usbg_set_ether_addr(const char *path, const char *name,
- const char *attr, void *val)
+ const char *attr, const void *val)
{
char str_addr[USBG_MAX_STR_LENGTH];
--
2.42.0

View File

@@ -0,0 +1,52 @@
From 4f3f2ad08e6ca132bd1dd388e02b57223bf4219d Mon Sep 17 00:00:00 2001
From: Ming Liu <liu.ming50@gmail.com>
Date: Sun, 11 Dec 2022 14:11:49 +0100
Subject: [PATCH] libusbgx: Add interface name for NCM Feature Descriptors
In commit: abf422bffca4a4767e7e242c44910dbf5ef7094f
[
Author: Stefan Agner <stefan.agner@toradex.com>
Date: Tue Jan 24 14:22:25 2017 -0800
libusbgx: Add interface name for Feature Descriptors
This adds interface name required for "Feature Descriptors". If
specified, we can assume that a Feature Descriptor with the
interface name of the specified string is understood by the
kernel (e.g. interface.rndis).
]
it only added Feature Descriptors for RNDIS, NCM also needs that, or
else it could not be recognized by Windows systems.
Add Feature Descriptors interface name for NCM.
Upstream-Status: Submitted [https://github.com/linux-usb-gadgets/libusbgx/pull/73]
Signed-off-by: Ming Liu <liu.ming50@gmail.com>
---
src/function/ether.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/function/ether.c b/src/function/ether.c
index b1fe1d2..a9eaf33 100644
--- a/src/function/ether.c
+++ b/src/function/ether.c
@@ -184,8 +184,14 @@ struct usbg_function_type usbg_f_type_subset = {
ETHER_FUNCTION_OPTS
};
+static char *ncm_os_desc_ifnames[] = {
+ "ncm",
+ NULL
+};
+
struct usbg_function_type usbg_f_type_ncm = {
.name = "ncm",
+ .os_desc_iname = ncm_os_desc_ifnames,
ETHER_FUNCTION_OPTS
};
--
2.25.1

View File

@@ -0,0 +1,20 @@
#!/bin/sh
[ -r /etc/default/usbgx ] && . /etc/default/usbgx
for i in $IMPORT_SCHEMAS; do
/usr/bin/gadget-import "$i" /etc/usbgx/"$i".schema
done
for script in $(find -L /etc/usbgx.d -type f -exec test -e {} \; -print 2>/dev/null); do
$script
done
for i in $ENABLED_SCHEMAS; do
configured_udc=$(eval 'echo ${UDC_FOR_SCHEMA_'"$i"'}')
if [ -n "${configured_udc}" ] && [ -e "/sys/class/udc/${configured_udc}" ]; then
echo ${configured_udc} > /sys/kernel/config/usb_gadget/"$i"/UDC
else
ls /sys/class/udc/ > /sys/kernel/config/usb_gadget/"$i"/UDC
fi
done

View File

@@ -0,0 +1,13 @@
#!/bin/sh
[ -r /etc/default/usbgx ] && . /etc/default/usbgx
for i in $IMPORT_SCHEMAS; do
if [ -e /sys/kernel/config/usb_gadget/"$i"/idVendor ]; then
if [ -e /sys/kernel/config/usb_gadget/"$i"/idProduct ]; then
idVendor=$(cat /sys/kernel/config/usb_gadget/"$i"/idVendor)
idProduct=$(cat /sys/kernel/config/usb_gadget/"$i"/idProduct)
/usr/bin/gadget-vid-pid-remove ${idVendor}:${idProduct}
fi
fi
done

View File

@@ -0,0 +1,143 @@
#! /bin/sh
### BEGIN INIT INFO
# Provides: usbg
# Required-Start: $local_fs
# Should-Start:
# Required-Stop: $local_fs
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d
### END INIT INFO
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Load USB gadget schemas"
NAME="usbgx"
DAEMON=/usr/bin/gadget-start
DAEMON_ARGS=""
PIDFILE=/var/run/$NAME.pid
. /etc/init.d/functions || exit 1
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
#
# Function that starts the daemon/service
#
do_start() {
local status pid
status=0
pid=`pidofproc $NAME` || status=$?
case $status in
0)
echo "$DESC already running ($pid)."
exit 1
;;
*)
echo "Starting $DESC ..."
exec $DAEMON $DAEMON_ARGS >/dev/null 2>&1 || status=$?
echo "ERROR: Failed to start $DESC."
exit $status
;;
esac
}
#
# Function that stops the daemon/service
#
do_stop() {
local pid status
status=0
pid=`pidofproc $NAME` || status=$?
case $status in
0)
# Exit when fail to stop, the kill would complain when fail
kill -s 15 $pid >/dev/null && rm -f $PIDFILE && \
echo "Stopped $DESC ($pid)." || exit $?
;;
*)
echo "$DESC is not running; none killed." >&2
;;
esac
return $status
}
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
local pid status
status=0
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
pid=`pidofproc $NAME` || status=$?
case $status in
0)
echo "Reloading $DESC ..."
kill -s 1 $pid || exit $?
;;
*)
echo "$DESC is not running; none reloaded." >&2
;;
esac
exit $status
}
#
# Function that shows the daemon/service status
#
status_of_proc () {
local pid status
status=0
# pidof output null when no program is running, so no "2>/dev/null".
pid=`pidofproc $NAME` || status=$?
case $status in
0)
echo "$DESC is running ($pid)."
exit 0
;;
*)
echo "$DESC is not running." >&2
exit $status
;;
esac
}
case "$1" in
start)
do_start
;;
stop)
do_stop || exit $?
;;
status)
status_of_proc
;;
restart)
# Always start the service regardless the status of do_stop
do_stop
do_start
;;
try-restart|force-reload)
do_stop && do_start
;;
*)
echo "Usage: $0 {start|stop|status|restart|try-restart|force-reload}" >&2
exit 3
;;
esac

View File

@@ -0,0 +1,13 @@
[Unit]
Description=Load USB gadget schemas
Requires=sys-kernel-config.mount
After=sys-kernel-config.mount
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/gadget-start
ExecStop=/usr/bin/gadget-stop
[Install]
WantedBy=usb-gadget.target

View File

@@ -0,0 +1,61 @@
SUMMARY = "USB Gadget neXt Configfs Library"
LICENSE = "GPL-2.0-only & LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
file://COPYING.LGPL;md5=4fbd65380cdd255951079008b364516c"
inherit autotools pkgconfig systemd update-rc.d update-alternatives
PV = "0.2.0+git"
SRCREV = "ec0b01c03fdc7893997b7b32ec1c12c6103f62f3"
SRCBRANCH = "master"
SRC_URI = " \
git://github.com/libusbgx/libusbgx.git;branch=${SRCBRANCH};protocol=https \
file://0001-libusbgx-Add-interface-name-for-NCM-Feature-Descript.patch \
file://0001-fix-stack-buffer-overflow-in-usbg_f_foo_attr_val-pro.patch \
file://gadget-start \
file://gadget-stop \
file://usbgx.initd \
file://usbgx.service \
"
S = "${WORKDIR}/git"
PACKAGECONFIG ??= "examples gadget-schemes libconfig"
PACKAGECONFIG[libconfig] = "--with-libconfig=yes,--without-libconfig,libconfig"
PACKAGECONFIG[examples] = "--enable-examples,--disable-examples"
PACKAGECONFIG[gadget-schemes] = "--enable-gadget-schemes,--disable-gadget-schemes"
PACKAGECONFIG[tests] = "--enable-tests,--disable-tests,cmocka"
PACKAGE_BEFORE_PN = "${@bb.utils.contains('PACKAGECONFIG', 'examples', '${PN}-examples', '', d)}"
SYSTEMD_PACKAGES = "${PN}-examples"
SYSTEMD_SERVICE:${PN}-examples = "usbgx.service"
SYSTEMD_AUTO_ENABLE:${PN}-examples = "${@bb.utils.contains('PACKAGECONFIG', 'examples', 'enable', 'disable', d)}"
INITSCRIPT_PACKAGES = "${@bb.utils.contains('PACKAGECONFIG', 'examples', '${PN}-examples', '', d)}"
INITSCRIPT_NAME = "usbgx"
INITSCRIPT_PARAMS = "defaults"
INHIBIT_UPDATERCD_BBCLASS = "${@bb.utils.contains('PACKAGECONFIG', 'examples', '1', '0', d)}"
do_install:append() {
install -Dm 0755 ${WORKDIR}/gadget-start ${D}${bindir}/gadget-start
sed -i -e 's,/usr/bin,${bindir},g' -e 's,/etc,${sysconfdir},g' ${D}${bindir}/gadget-start
install -m 0755 ${WORKDIR}/gadget-start ${D}${bindir}/gadget-stop
sed -i -e 's,/usr/bin,${bindir},g' -e 's,/etc,${sysconfdir},g' ${D}${bindir}/gadget-stop
if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
install -Dm 0644 ${WORKDIR}/usbgx.service ${D}${systemd_system_unitdir}/usbgx.service
fi
if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
install -Dm 0755 ${WORKDIR}/usbgx.initd ${D}${sysconfdir}/init.d/usbgx
fi
}
FILES:${PN}-examples = "${bindir}/* ${sysconfdir}/*"
RDEPENDS:${PN}-examples += "${@bb.utils.contains('PACKAGECONFIG', 'examples', 'libusbgx-config', '', d)}"
ALTERNATIVE_PRIORITY = "90"
ALTERNATIVE:${PN}-examples = "${@bb.utils.contains('PACKAGECONFIG', 'examples', 'gadget-acm-ecm show-gadgets', '', d)}"
ALTERNATIVE_LINK_NAME[gadget-acm-ecm] = "${bindir}/gadget-acm-ecm"
ALTERNATIVE_LINK_NAME[show-gadgets] = "${bindir}/show-gadgets"