libusbgx: Add recipe

Submitted by Otavio Salvador on Nov. 30, 2018, 10:43 p.m. | Patch ID: 156770

Details

Message ID 20181130224336.15257-1-otavio@ossystems.com.br
State Master Next
Commit f29268ee21106dfd9f578088745c43aa5e6ed3a3
Headers show

Commit Message

Otavio Salvador Nov. 30, 2018, 10:43 p.m.
The libusbgx allow easier use and setup of USB gadgets. To easy
integration on different systems a libusbgx-config package is provided
so it can be used to start and enable respective USB gadget schema.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
---

 .../libusbgx/libusbgx-config.bb               |  12 ++
 .../libusbgx/libusbgx-config/usbgx.default    |   2 +
 .../libusbgx/libusbgx/gadget-start            |  11 ++
 .../libusbgx/libusbgx/usbgx.initd             | 143 ++++++++++++++++++
 .../libusbgx/libusbgx/usbgx.service           |   9 ++
 .../recipes-support/libusbgx/libusbgx_git.bb  |  40 +++++
 6 files changed, 217 insertions(+)
 create mode 100644 meta-oe/recipes-support/libusbgx/libusbgx-config.bb
 create mode 100644 meta-oe/recipes-support/libusbgx/libusbgx-config/usbgx.default
 create mode 100644 meta-oe/recipes-support/libusbgx/libusbgx/gadget-start
 create mode 100644 meta-oe/recipes-support/libusbgx/libusbgx/usbgx.initd
 create mode 100644 meta-oe/recipes-support/libusbgx/libusbgx/usbgx.service
 create mode 100644 meta-oe/recipes-support/libusbgx/libusbgx_git.bb

Patch hide | download patch | download mbox

diff --git a/meta-oe/recipes-support/libusbgx/libusbgx-config.bb b/meta-oe/recipes-support/libusbgx/libusbgx-config.bb
new file mode 100644
index 000000000..b269e33c4
--- /dev/null
+++ b/meta-oe/recipes-support/libusbgx/libusbgx-config.bb
@@ -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
+}
diff --git a/meta-oe/recipes-support/libusbgx/libusbgx-config/usbgx.default b/meta-oe/recipes-support/libusbgx/libusbgx-config/usbgx.default
new file mode 100644
index 000000000..f690dfe2a
--- /dev/null
+++ b/meta-oe/recipes-support/libusbgx/libusbgx-config/usbgx.default
@@ -0,0 +1,2 @@ 
+IMPORT_SCHEMAS=""
+ENABLED_SCHEMAS="$IMPORT_SCHEMAS"
diff --git a/meta-oe/recipes-support/libusbgx/libusbgx/gadget-start b/meta-oe/recipes-support/libusbgx/libusbgx/gadget-start
new file mode 100644
index 000000000..1a106b785
--- /dev/null
+++ b/meta-oe/recipes-support/libusbgx/libusbgx/gadget-start
@@ -0,0 +1,11 @@ 
+#!/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 i in $ENABLED_SCHEMAS; do
+    ls /sys/class/udc/ > /sys/kernel/config/usb_gadget/"$i"/UDC
+done
diff --git a/meta-oe/recipes-support/libusbgx/libusbgx/usbgx.initd b/meta-oe/recipes-support/libusbgx/libusbgx/usbgx.initd
new file mode 100644
index 000000000..d1938078f
--- /dev/null
+++ b/meta-oe/recipes-support/libusbgx/libusbgx/usbgx.initd
@@ -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
diff --git a/meta-oe/recipes-support/libusbgx/libusbgx/usbgx.service b/meta-oe/recipes-support/libusbgx/libusbgx/usbgx.service
new file mode 100644
index 000000000..74541d3c2
--- /dev/null
+++ b/meta-oe/recipes-support/libusbgx/libusbgx/usbgx.service
@@ -0,0 +1,9 @@ 
+[Unit]
+Description=Load USB gadget schemas
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/gadget-start
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-oe/recipes-support/libusbgx/libusbgx_git.bb b/meta-oe/recipes-support/libusbgx/libusbgx_git.bb
new file mode 100644
index 000000000..d73ca6106
--- /dev/null
+++ b/meta-oe/recipes-support/libusbgx/libusbgx_git.bb
@@ -0,0 +1,40 @@ 
+SUMMARY = "USB Gadget neXt Configfs Library"
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+                    file://COPYING.LGPL;md5=4fbd65380cdd255951079008b364516c"
+
+DEPENDS = "libconfig"
+
+inherit autotools pkgconfig systemd update-rc.d
+
+PV = "0.2.0+git${SRCPV}"
+SRCREV = "45c14ef4d5d7ced0fbf984208de44ced6d5ed898"
+SRCBRANCH = "master"
+SRC_URI = " \
+    git://github.com/libusbgx/libusbgx.git;branch=${SRCBRANCH} \
+    file://gadget-start \
+    file://usbgx.initd \
+    file://usbgx.service \
+"
+
+S = "${WORKDIR}/git"
+
+SYSTEMD_PACKAGES = "${PN}"
+SYSTEMD_SERVICE_${PN} = "usbgx.service"
+
+INITSCRIPT_NAME = "usbgx"
+INITSCRIPT_PARAMS = "defaults"
+
+EXTRA_OECONF = "--includedir=${includedir}/usbgx"
+
+do_install_append() {
+    install -Dm 0755 ${WORKDIR}/gadget-start ${D}/${bindir}/gadget-start
+    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
+}
+
+RDEPENDS_${PN} += "libusbgx-config"