temp/usb-moded: drop pmaport
Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/9150>
This commit is contained in:
parent
4a6b2648f0
commit
4394d90b2e
10 changed files with 0 additions and 941 deletions
|
|
@ -1,112 +0,0 @@
|
|||
From 2782277f64a4d47dbdf5f5e4a78fcaa75fe711a8 Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Sat, 10 May 2025 14:37:52 +0200
|
||||
Subject: [PATCH 1/5] [dyn-config] Add option for running a command on mode
|
||||
start/stop
|
||||
|
||||
Allow specifying a command to execute on starting and stopping an USB mode
|
||||
such as a DHCP server, MTP responder, or another daemon which is needed
|
||||
for operating this USB mode. This feature complements DBus activation
|
||||
and systemd service activation.
|
||||
|
||||
Signed-off-by: Dylan Van Assche <me@dylanvanassche.be>
|
||||
---
|
||||
src/usb_moded-dyn-config.c | 11 +++++++++++
|
||||
src/usb_moded-dyn-config.h | 10 ++++++++++
|
||||
2 files changed, 21 insertions(+)
|
||||
|
||||
diff --git a/src/usb_moded-dyn-config.c b/src/usb_moded-dyn-config.c
|
||||
index a6d9d7e..0623b57 100644
|
||||
--- a/src/usb_moded-dyn-config.c
|
||||
+++ b/src/usb_moded-dyn-config.c
|
||||
@@ -4,6 +4,7 @@
|
||||
* Copyright (c) 2011 Nokia Corporation. All rights reserved.
|
||||
* Copyright (c) 2013 - 2021 Jolla Ltd.
|
||||
* Copyright (c) 2020 Open Mobile Platform LLC.
|
||||
+ * Copyright (c) 2025 Dylan Van Assche
|
||||
*
|
||||
* @author Philippe De Swert <philippe.de-swert@nokia.com>
|
||||
* @author Philippe De Swert <philippedeswert@gmail.com>
|
||||
@@ -11,6 +12,7 @@
|
||||
* @author Thomas Perl <thomas.perl@jolla.com>
|
||||
* @author Slava Monich <slava.monich@jolla.com>
|
||||
* @author Simo Piiroinen <simo.piiroinen@jollamobile.com>
|
||||
+ * @author Dylan Van Assche <me@dylanvanassche.be>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the Lesser GNU General Public License
|
||||
@@ -100,6 +102,9 @@ modedata_free(modedata_t *self)
|
||||
#ifdef CONNMAN
|
||||
g_free(self->connman_tethering);
|
||||
#endif
|
||||
+ g_free(self->command_up);
|
||||
+ g_free(self->command_down);
|
||||
+ g_free(self->ffs_daemon_mountpoint);
|
||||
modedata_flush_settings(self);
|
||||
free(self);
|
||||
}
|
||||
@@ -151,6 +156,9 @@ modedata_copy(const modedata_t *that)
|
||||
self->cached_gateway = g_strdup(that->cached_gateway);
|
||||
self->cached_nat_interface = g_strdup(that->cached_nat_interface);
|
||||
self->cached_netmask = g_strdup(that->cached_netmask);
|
||||
+ self->command_up = g_strdup(that->command_up);
|
||||
+ self->command_down = g_strdup(that->command_down);
|
||||
+ self->ffs_daemon_mountpoint = g_strdup(that->ffs_daemon_mountpoint);
|
||||
|
||||
EXIT:
|
||||
return self;
|
||||
@@ -275,6 +283,9 @@ modedata_load(const gchar *filename)
|
||||
#ifdef CONNMAN
|
||||
self->connman_tethering = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_CONNMAN_TETHERING, NULL);
|
||||
#endif
|
||||
+ self->command_up = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_COMMAND_UP, NULL);
|
||||
+ self->command_down = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_COMMAND_DOWN, NULL);
|
||||
+ self->ffs_daemon_mountpoint = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_FFS_DAEMON_MOUNTPOINT, NULL);
|
||||
|
||||
//log_debug("Dynamic mode sysfs path = %s\n", self->sysfs_path);
|
||||
//log_debug("Dynamic mode sysfs value = %s\n", self->sysfs_value);
|
||||
diff --git a/src/usb_moded-dyn-config.h b/src/usb_moded-dyn-config.h
|
||||
index 79a143e..6e368a2 100644
|
||||
--- a/src/usb_moded-dyn-config.h
|
||||
+++ b/src/usb_moded-dyn-config.h
|
||||
@@ -4,6 +4,7 @@
|
||||
* Copyright (c) 2011 Nokia Corporation. All rights reserved.
|
||||
* Copyright (c) 2013 - 2020 Jolla Ltd.
|
||||
* Copyright (c) 2020 Open Mobile Platform LLC.
|
||||
+ * Copyright (c) 2025 Dylan Van Assche
|
||||
*
|
||||
* @author Philippe De Swert <philippe.de-swert@nokia.com>
|
||||
* @author Philippe De Swert <phdeswer@lumi.maa>
|
||||
@@ -13,6 +14,7 @@
|
||||
* @author Slava Monich <slava.monich@jolla.com>
|
||||
* @author Simo Piiroinen <simo.piiroinen@jollamobile.com>
|
||||
* @author Andrew den Exter <andrew.den.exter@jolla.com>
|
||||
+ * @author Dylan Van Assche <me@dylanvanassche.be>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the Lesser GNU General Public License
|
||||
@@ -89,6 +91,10 @@
|
||||
# define MODE_CONNMAN_TETHERING "connman_tethering"
|
||||
# endif
|
||||
|
||||
+# define MODE_COMMAND_UP "command_up"
|
||||
+# define MODE_COMMAND_DOWN "command_down"
|
||||
+# define MODE_FFS_DAEMON_MOUNTPOINT "ffs_daemon_mountpoint"
|
||||
+
|
||||
/* ========================================================================= *
|
||||
* Types
|
||||
* ========================================================================= */
|
||||
@@ -129,6 +135,10 @@ typedef struct modedata_t
|
||||
gchar *cached_nat_interface; /**< Cached NETWORK_NAT_INTERFACE_KEY setting */
|
||||
gchar *cached_netmask; /**< Cached NETWORK_NETMASK_KEY setting */
|
||||
|
||||
+ gchar *command_up; /**< Command to execute when starting an USB mode */
|
||||
+ gchar *command_down; /**< Command to execute when stopping an USB mode */
|
||||
+ gchar *ffs_daemon_mountpoint; /**< Device mountpoint for userspace FunctionFS daemon */
|
||||
+
|
||||
} modedata_t;
|
||||
|
||||
/* ========================================================================= *
|
||||
--
|
||||
2.49.0
|
||||
|
||||
|
|
@ -1,496 +0,0 @@
|
|||
From 651d1b5b3f5ec6419d2e25b0491afcc6f26959d5 Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Sat, 10 May 2025 15:47:28 +0200
|
||||
Subject: [PATCH 2/5] [worker] generalize MTP daemon to FunctionFS daemon
|
||||
|
||||
MTP daemon handling is a hardcoded version of FunctionFS daemon
|
||||
handling. Allow to specify for each dynamic FunctionFS mode which
|
||||
daemon command must be executed to start/stop the FunctionFS userspace
|
||||
daemon for the USB mode and where the FunctionFS device must be mounted
|
||||
for the daemon. This prepares usb-moded to support more FunctionFS
|
||||
userspace daemons such as supporting the Android Open Accesory mode.
|
||||
|
||||
Signed-off-by: Dylan Van Assche <me@dylanvanassche.be>
|
||||
---
|
||||
config/dyn-modes/mtp_mode.ini | 2 +-
|
||||
src/usb_moded-worker.c | 242 +++++++++++++++++++---------------
|
||||
2 files changed, 139 insertions(+), 105 deletions(-)
|
||||
|
||||
diff --git a/config/dyn-modes/mtp_mode.ini b/config/dyn-modes/mtp_mode.ini
|
||||
index 10352f6..22b8a33 100644
|
||||
--- a/config/dyn-modes/mtp_mode.ini
|
||||
+++ b/config/dyn-modes/mtp_mode.ini
|
||||
@@ -1,4 +1,4 @@
|
||||
[mode]
|
||||
-name = mtp_mode
|
||||
+name = mtp_ffs_mode
|
||||
module = g_ffs
|
||||
appsync = 1
|
||||
diff --git a/src/usb_moded-worker.c b/src/usb_moded-worker.c
|
||||
index 272698b..11662e9 100644
|
||||
--- a/src/usb_moded-worker.c
|
||||
+++ b/src/usb_moded-worker.c
|
||||
@@ -73,15 +73,15 @@ static const char * const devstate_name[] = {
|
||||
|
||||
static bool worker_thread_p (void);
|
||||
bool worker_bailing_out (void);
|
||||
-static devstate_t worker_get_mtp_device_state (void);
|
||||
-static void worker_unmount_mtp_device (void);
|
||||
-static bool worker_mount_mtp_device (void);
|
||||
-static bool worker_mode_is_mtp_mode (const char *mode);
|
||||
-static bool worker_is_mtpd_running (void);
|
||||
-static bool worker_mtpd_running_p (void *aptr);
|
||||
-static bool worker_mtpd_stopped_p (void *aptr);
|
||||
-static bool worker_stop_mtpd (void);
|
||||
-static bool worker_start_mtpd (void);
|
||||
+static devstate_t worker_get_ffs_device_state (void);
|
||||
+static void worker_unmount_ffs_device (void);
|
||||
+static bool worker_mount_ffs_device (void);
|
||||
+static bool worker_mode_is_ffs_mode (const char *mode);
|
||||
+static bool worker_is_ffs_daemon_running (void);
|
||||
+static bool worker_ffs_daemon_running_p (void *aptr);
|
||||
+static bool worker_ffs_daemon_stopped_p (void *aptr);
|
||||
+static bool worker_run_command_down (void);
|
||||
+static bool worker_run_command_up (void);
|
||||
static bool worker_switch_to_charging (void);
|
||||
const char *worker_get_kernel_module (void);
|
||||
bool worker_set_kernel_module (const char *module);
|
||||
@@ -169,16 +169,16 @@ worker_bailing_out(void)
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- *
|
||||
- * MTP_DEVICE
|
||||
+ * FUNCTIONFS_DEVICE
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
-/** Check if mtp device is mounted
|
||||
+/** Check if FunctionFS device is mounted
|
||||
*
|
||||
* Returns DEVSTATE_MOUNTED / DEVSTATE_UNMOUNTED depending
|
||||
- * on whether control endpoint file exists in the mtp device
|
||||
+ * on whether control endpoint file exists in the FunctionFS device
|
||||
* directory.
|
||||
*
|
||||
- * Note: If mtp device directory is for some reason not accessible by
|
||||
+ * Note: If FunctionFS device directory is for some reason not accessible by
|
||||
* uid=root processes and usb-moded does not have suitable DAC
|
||||
* override permissions existance of the control endpoint file
|
||||
* might not be determinable. In these cases DEVSTATE_UNKNOWN
|
||||
@@ -190,59 +190,70 @@ worker_bailing_out(void)
|
||||
* DEVSTATE_UNKNOWN
|
||||
*/
|
||||
static devstate_t
|
||||
-worker_get_mtp_device_state(void)
|
||||
+worker_get_ffs_device_state(void)
|
||||
{
|
||||
LOG_REGISTER_CONTEXT;
|
||||
|
||||
devstate_t state = DEVSTATE_UNKNOWN;
|
||||
+ const modedata_t *data = worker_get_usb_mode_data();
|
||||
+ gchar *path = g_strconcat("/dev/", data->ffs_daemon_mountpoint, "/ep0", NULL);
|
||||
|
||||
- if( access("/dev/mtp/ep0", F_OK) == 0 )
|
||||
+ if( access(path, F_OK) == 0 )
|
||||
state = DEVSTATE_MOUNTED;
|
||||
else if( errno == ENOENT )
|
||||
state = DEVSTATE_UNMOUNTED;
|
||||
else
|
||||
- log_warning("/dev/mtp/ep0: %m");
|
||||
+ log_warning("%s: %m", path);
|
||||
+
|
||||
+ log_debug("FunctionFS device state = %s", devstate_name[state]);
|
||||
+
|
||||
+ g_free(path);
|
||||
|
||||
- log_debug("mtp device state = %s", devstate_name[state]);
|
||||
return state;
|
||||
}
|
||||
|
||||
-/** Unmount mtp device
|
||||
+/** Unmount ffs device
|
||||
*/
|
||||
static void
|
||||
-worker_unmount_mtp_device(void)
|
||||
+worker_unmount_ffs_device(void)
|
||||
{
|
||||
LOG_REGISTER_CONTEXT;
|
||||
+ const modedata_t *data = worker_get_usb_mode_data();
|
||||
+ gchar *command = g_strconcat("/bin/umount ", "/dev/", data->ffs_daemon_mountpoint, NULL);
|
||||
|
||||
- if( worker_get_mtp_device_state() != DEVSTATE_UNMOUNTED ) {
|
||||
- log_debug("unmounting mtp device");
|
||||
- common_system("/bin/umount /dev/mtp");
|
||||
+ if( worker_get_ffs_device_state() != DEVSTATE_UNMOUNTED ) {
|
||||
+ log_debug("unmounting FunctionFS device");
|
||||
+ common_system(command);
|
||||
}
|
||||
+
|
||||
+ g_free (command);
|
||||
}
|
||||
|
||||
-/** Mount mtp device
|
||||
+/** Mount ffs device
|
||||
*
|
||||
- * Mount mtp device so that it is accessible by root and the
|
||||
+ * Mount FunctionFS device so that it is accessible by root and the
|
||||
* currently active user.
|
||||
*
|
||||
- * @return true if mtp device was mounted as result of call, false otherwise
|
||||
+ * @return true if ffs device was mounted as result of call, false otherwise
|
||||
*/
|
||||
static bool
|
||||
-worker_mount_mtp_device(void)
|
||||
+worker_mount_ffs_device(void)
|
||||
{
|
||||
LOG_REGISTER_CONTEXT;
|
||||
|
||||
bool mounted = false;
|
||||
+ const modedata_t *data = worker_get_usb_mode_data();
|
||||
+ gchar *directory = g_strconcat("/dev/", data->ffs_daemon_mountpoint, NULL);
|
||||
|
||||
/* Fail if control endpoint is already present */
|
||||
- if( worker_get_mtp_device_state() != DEVSTATE_UNMOUNTED ) {
|
||||
- log_err("mtp device already mounted");
|
||||
+ if( worker_get_ffs_device_state() != DEVSTATE_UNMOUNTED ) {
|
||||
+ log_err("FunctionFS device already mounted");
|
||||
goto EXIT;
|
||||
}
|
||||
|
||||
/* Ensure that device directory exists */
|
||||
- if( mkdir("/dev/mtp", 0755) == -1 && errno != EEXIST ) {
|
||||
- log_err("failed to create /dev/mtp directory: %m");
|
||||
+ if( mkdir(directory, 0755) == -1 && errno != EEXIST ) {
|
||||
+ log_err("failed to create %s directory: %m", data->ffs_daemon_mountpoint);
|
||||
goto EXIT;
|
||||
}
|
||||
|
||||
@@ -257,143 +268,154 @@ worker_mount_mtp_device(void)
|
||||
if( pw )
|
||||
gid = pw->pw_gid;
|
||||
|
||||
- /* Attempt to mount mtp device using root uid and primary
|
||||
+ /* Attempt to mount FunctionFS device using root uid and primary
|
||||
* gid of the current user.
|
||||
*/
|
||||
- char cmd[256];
|
||||
- snprintf(cmd, sizeof cmd,
|
||||
- "/bin/mount -o mode=0770,uid=0,gid=%u -t functionfs mtp /dev/mtp",
|
||||
- (unsigned)gid);
|
||||
+ char command[512];
|
||||
+ snprintf(command, sizeof command,
|
||||
+ "/bin/mount -o mode=0770,uid=0,gid=%u -t functionfs %s /dev/%s",
|
||||
+ (unsigned)gid, data->ffs_daemon_mountpoint, data->ffs_daemon_mountpoint);
|
||||
|
||||
- log_debug("mounting mtp device");
|
||||
- if( common_system(cmd) != 0 )
|
||||
+ log_debug("mounting FunctionFS device");
|
||||
+ if( common_system(command) != 0 )
|
||||
goto EXIT;
|
||||
|
||||
/* Check that control endpoint is present */
|
||||
- if( worker_get_mtp_device_state() != DEVSTATE_MOUNTED ) {
|
||||
- log_err("mtp control not mounted");
|
||||
+ if( worker_get_ffs_device_state() != DEVSTATE_MOUNTED ) {
|
||||
+ log_err("FunctionFS control not mounted");
|
||||
goto EXIT;
|
||||
}
|
||||
|
||||
mounted = true;
|
||||
|
||||
EXIT:
|
||||
+ g_free (directory);
|
||||
return mounted;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- *
|
||||
- * MTP_DAEMON
|
||||
+ * FUNCTIONFS_DAEMON
|
||||
* ------------------------------------------------------------------------- */
|
||||
|
||||
-/** Maximum time to wait for mtpd to start [ms]
|
||||
+/** Maximum time to wait for FunctionFS daemon to start [ms]
|
||||
*
|
||||
* This needs to include time to start systemd unit
|
||||
- * plus however long it might take for mtpd to scan
|
||||
- * all files exposed over mtp. On a slow device with
|
||||
- * lots of files it can easily take over 30 seconds,
|
||||
- * especially during the 1st mtp connect after reboot.
|
||||
+ * plus however long it might take for FunctionFS
|
||||
+ * to start up, for example: scanning files over MTP.
|
||||
+ * On a slow device with lots of files it can easily
|
||||
+ * take over 30 seconds, especially during the 1st FunctionFS
|
||||
+ * connect after reboot.
|
||||
*
|
||||
* Use two minutes as some kind of worst case estimate.
|
||||
*/
|
||||
-static unsigned worker_mtp_start_delay = 120 * 1000;
|
||||
+static unsigned worker_ffs_daemon_start_delay = 120 * 1000;
|
||||
|
||||
-/** Maximum time to wait for mtpd to stop [ms]
|
||||
+/** Maximum time to wait for FunctionFS daemon to stop [ms]
|
||||
*
|
||||
* This is just regular service stop. Expected to
|
||||
* take max couple of seconds, but use someting
|
||||
* in the ballbark of systemd default i.e. 15 seconds
|
||||
*/
|
||||
-static unsigned worker_mtp_stop_delay = 15 * 1000;
|
||||
+static unsigned worker_ffs_daemon_stop_delay = 15 * 1000;
|
||||
|
||||
-/** Flag for: We have started mtp daemon
|
||||
+/** Flag for: We have started FunctionFS daemon
|
||||
*
|
||||
* If we have issued systemd unit start, we should also
|
||||
- * issue systemd unit stop even if probing for mtpd
|
||||
- * presense gives negative result.
|
||||
+ * issue systemd unit stop even if probing for FunctionFS
|
||||
+ * daemon presense gives negative result.
|
||||
*/
|
||||
-static bool worker_mtp_service_started = false;
|
||||
+static bool worker_ffs_daemon_service_started = false;
|
||||
|
||||
-static bool worker_mode_is_mtp_mode(const char *mode)
|
||||
+static bool worker_mode_is_ffs_mode(const char *mode)
|
||||
{
|
||||
LOG_REGISTER_CONTEXT;
|
||||
|
||||
- return mode && !strcmp(mode, "mtp_mode");
|
||||
+ return mode && strstr(mode, "_ffs_mode") != NULL;
|
||||
}
|
||||
|
||||
-static bool worker_is_mtpd_running(void)
|
||||
+static bool worker_is_ffs_daemon_running(void)
|
||||
{
|
||||
LOG_REGISTER_CONTEXT;
|
||||
|
||||
- /* ep0 becomes available when /dev/mtp is mounted.
|
||||
+ /* ep0 becomes available when ffs_daemon_mountpoint is mounted.
|
||||
*
|
||||
- * ep1, ep2, ep3 exist while mtp daemon is running,
|
||||
+ * ep1, ep2, ep3 exist while FunctionFS daemon is running,
|
||||
* has ep0 opened and has written config data to it.
|
||||
*/
|
||||
static const char * const lut[] = {
|
||||
- "/dev/mtp/ep0",
|
||||
- "/dev/mtp/ep1",
|
||||
- "/dev/mtp/ep2",
|
||||
- "/dev/mtp/ep3",
|
||||
+ "ep0",
|
||||
+ "ep1",
|
||||
+ "ep2",
|
||||
+ "ep3",
|
||||
0
|
||||
};
|
||||
|
||||
bool ack = true;
|
||||
+ const modedata_t *data = worker_get_usb_mode_data();
|
||||
|
||||
for( size_t i = 0; lut[i]; ++i ) {
|
||||
- if( access(lut[i], F_OK) == -1 ) {
|
||||
+ gchar *path = g_strconcat("/dev/", data->ffs_daemon_mountpoint, "/", lut[i], NULL);
|
||||
+ if( access(path, F_OK) == -1 ) {
|
||||
+ log_debug("%s", path);
|
||||
ack = false;
|
||||
+ g_free (path);
|
||||
break;
|
||||
- }
|
||||
+ } else
|
||||
+ g_free (path);
|
||||
}
|
||||
|
||||
return ack;
|
||||
}
|
||||
|
||||
static bool
|
||||
-worker_mtpd_running_p(void *aptr)
|
||||
+worker_ffs_daemon_running_p(void *aptr)
|
||||
{
|
||||
LOG_REGISTER_CONTEXT;
|
||||
|
||||
(void)aptr;
|
||||
- return worker_is_mtpd_running();
|
||||
+ return worker_is_ffs_daemon_running();
|
||||
}
|
||||
|
||||
static bool
|
||||
-worker_mtpd_stopped_p(void *aptr)
|
||||
+worker_ffs_daemon_stopped_p(void *aptr)
|
||||
{
|
||||
LOG_REGISTER_CONTEXT;
|
||||
|
||||
(void)aptr;
|
||||
- return !worker_is_mtpd_running();
|
||||
+ return !worker_is_ffs_daemon_running();
|
||||
}
|
||||
|
||||
static bool
|
||||
-worker_stop_mtpd(void)
|
||||
+worker_run_command_down(void)
|
||||
{
|
||||
LOG_REGISTER_CONTEXT;
|
||||
|
||||
bool ack = false;
|
||||
+ const modedata_t *data = worker_get_usb_mode_data();
|
||||
|
||||
- if( !worker_mtp_service_started && worker_mtpd_stopped_p(0) ) {
|
||||
- log_debug("mtp daemon is not running");
|
||||
+ if( !worker_ffs_daemon_service_started && worker_ffs_daemon_stopped_p(0) ) {
|
||||
+ log_debug("FunctionFS daemon is not running");
|
||||
goto SUCCESS;
|
||||
}
|
||||
|
||||
- int rc = common_system("systemctl-user stop buteo-mtp.service");
|
||||
+ if( data->command_down == NULL)
|
||||
+ goto SUCCESS;
|
||||
+
|
||||
+ int rc = common_system(data->command_down);
|
||||
if( rc != 0 ) {
|
||||
- log_warning("failed to stop mtp daemon; exit code = %d", rc);
|
||||
+ log_warning("failed to run bring-down command; exit code = %d", rc);
|
||||
goto FAILURE;
|
||||
}
|
||||
|
||||
- /* Have succesfully stopped mtp service */
|
||||
- worker_mtp_service_started = false;
|
||||
+ /* Have succesfully stopped FunctionFS daemon service */
|
||||
+ worker_ffs_daemon_service_started = false;
|
||||
|
||||
- if( common_wait(worker_mtp_stop_delay, worker_mtpd_stopped_p, 0) != WAIT_READY ) {
|
||||
- log_warning("failed to stop mtp daemon; giving up");
|
||||
+ if( common_wait(worker_ffs_daemon_stop_delay, worker_ffs_daemon_stopped_p, 0) != WAIT_READY ) {
|
||||
+ log_warning("failed to stop FunctionFS daemon; giving up");
|
||||
goto FAILURE;
|
||||
}
|
||||
|
||||
- log_debug("mtp daemon has stopped");
|
||||
+ log_debug("Bring-down command executed");
|
||||
|
||||
SUCCESS:
|
||||
ack = true;
|
||||
@@ -403,32 +425,37 @@ FAILURE:
|
||||
}
|
||||
|
||||
static bool
|
||||
-worker_start_mtpd(void)
|
||||
+worker_run_command_up(void)
|
||||
{
|
||||
LOG_REGISTER_CONTEXT;
|
||||
|
||||
bool ack = false;
|
||||
+ const modedata_t *data = worker_get_usb_mode_data();
|
||||
|
||||
- if( worker_mtpd_running_p(0) ) {
|
||||
- log_debug("mtp daemon is running");
|
||||
+ if( data->ffs_daemon_mountpoint != NULL && worker_ffs_daemon_running_p(0) ) {
|
||||
+ log_debug("FunctionFS daemon is already running");
|
||||
goto SUCCESS;
|
||||
}
|
||||
|
||||
- /* Have attempted to start mtp service */
|
||||
- worker_mtp_service_started = true;
|
||||
+ if (data->command_up == NULL)
|
||||
+ goto SUCCESS;
|
||||
|
||||
- int rc = common_system("systemctl-user start buteo-mtp.service");
|
||||
+ /* Have attempted to start FunctionFS daemon service */
|
||||
+ worker_ffs_daemon_service_started = true;
|
||||
+
|
||||
+ int rc = common_system(data->command_up);
|
||||
if( rc != 0 ) {
|
||||
- log_warning("failed to start mtp daemon; exit code = %d", rc);
|
||||
+ log_warning("failed to run bring-up command; exit code = %d", rc);
|
||||
goto FAILURE;
|
||||
}
|
||||
|
||||
- if( common_wait(worker_mtp_start_delay, worker_mtpd_running_p, 0) != WAIT_READY ) {
|
||||
- log_warning("failed to start mtp daemon; giving up");
|
||||
+ /* FunctionFS requires the daemon to fully run before enabling UDC */
|
||||
+ if( data->ffs_daemon_mountpoint != NULL && (common_wait(worker_ffs_daemon_start_delay, worker_ffs_daemon_running_p, 0) != WAIT_READY) ) {
|
||||
+ log_warning("failed to start FunctionFS daemon; giving up");
|
||||
goto FAILURE;
|
||||
}
|
||||
|
||||
- log_debug("mtp daemon has started");
|
||||
+ log_debug("Bring-up command executed");
|
||||
|
||||
SUCCESS:
|
||||
ack = true;
|
||||
@@ -722,16 +749,15 @@ worker_switch_to_mode(const char *mode)
|
||||
|
||||
log_debug("Cleaning up previous mode");
|
||||
|
||||
- /* Either mtp daemon is not needed, or it must be *started* in
|
||||
- * correct phase of gadget configuration when entering mtp mode.
|
||||
+ /* Either FunctionFS daemon is not needed, or it must be *started* in
|
||||
+ * correct phase of gadget configuration when entering FunctionFS mode.
|
||||
*
|
||||
- * Similarly, unmount mtp device to make sure sure it gets mounted
|
||||
+ * Similarly, unmount FunctionFS device to make sure sure it gets mounted
|
||||
* with appropriate uid/gid values when it is actually needed.
|
||||
*/
|
||||
- worker_stop_mtpd();
|
||||
- worker_unmount_mtp_device();
|
||||
-
|
||||
if( worker_get_usb_mode_data() ) {
|
||||
+ worker_run_command_down();
|
||||
+ worker_unmount_ffs_device();
|
||||
modesetting_leave_dynamic_mode();
|
||||
worker_set_usb_mode_data(NULL);
|
||||
}
|
||||
@@ -767,14 +793,17 @@ worker_switch_to_mode(const char *mode)
|
||||
worker_set_usb_mode_data(data);
|
||||
|
||||
/* When dealing with configfs, we can't enable UDC without
|
||||
- * already having mtpd running */
|
||||
- if( worker_mode_is_mtp_mode(mode) && configfs_in_use() ) {
|
||||
- if( !worker_mount_mtp_device() )
|
||||
- goto FAILED;
|
||||
- if( !worker_start_mtpd() )
|
||||
+ * already having FunctionFS daemon running */
|
||||
+ if( worker_mode_is_ffs_mode(mode) && configfs_in_use() ) {
|
||||
+ if( !worker_mount_ffs_device() )
|
||||
goto FAILED;
|
||||
}
|
||||
|
||||
+ if (configfs_in_use()) {
|
||||
+ if( !worker_run_command_up() )
|
||||
+ goto FAILED;
|
||||
+ }
|
||||
+
|
||||
if( !worker_set_kernel_module(data->mode_module) )
|
||||
goto FAILED;
|
||||
|
||||
@@ -782,12 +811,15 @@ worker_switch_to_mode(const char *mode)
|
||||
goto FAILED;
|
||||
|
||||
/* When dealing with android usb, it must be enabled before
|
||||
- * we can start mtpd. Assumption is that the same applies
|
||||
- * when using kernel modules. */
|
||||
- if( worker_mode_is_mtp_mode(mode) && !configfs_in_use() ) {
|
||||
- if( !worker_mount_mtp_device() )
|
||||
+ * we can start FunctionFS daemon. Assumption is that the
|
||||
+ * same applies when using kernel modules. */
|
||||
+ if( worker_mode_is_ffs_mode(mode) && !configfs_in_use() ) {
|
||||
+ if( !worker_mount_ffs_device() )
|
||||
goto FAILED;
|
||||
- if( !worker_start_mtpd() )
|
||||
+ }
|
||||
+
|
||||
+ if( !configfs_in_use() ) {
|
||||
+ if( !worker_run_command_down() )
|
||||
goto FAILED;
|
||||
}
|
||||
|
||||
@@ -802,7 +834,9 @@ FAILED:
|
||||
/* Undo any changes we might have might have already done */
|
||||
if( worker_get_usb_mode_data() ) {
|
||||
log_debug("Cleaning up failed mode switch");
|
||||
- worker_stop_mtpd();
|
||||
+ worker_run_command_down();
|
||||
+ if( worker_mode_is_ffs_mode(mode))
|
||||
+ worker_unmount_ffs_device();
|
||||
modesetting_leave_dynamic_mode();
|
||||
worker_set_usb_mode_data(NULL);
|
||||
}
|
||||
--
|
||||
2.49.0
|
||||
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
From 43b7967f133dfd49777734949ff2b19c25beb84a Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Sat, 10 May 2025 20:29:41 +0200
|
||||
Subject: [PATCH 3/5] [worker] only check daemon running in FunctionFS mode
|
||||
|
||||
Daemons for operating USB gadgets in FunctionFS must be fully ready
|
||||
before enabling the gadget by the UDC. Daemons for other gadgets
|
||||
such as USB Ethernet (NCM) do not require such functionality, thus
|
||||
bypass this check to avoid timeouts waiting for the FunctionFS interface
|
||||
to become fully ready as these gadgets do not have such interface.
|
||||
|
||||
Signed-off-by: Dylan Van Assche <me@dylanvanassche.be>
|
||||
---
|
||||
src/usb_moded-worker.c | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/usb_moded-worker.c b/src/usb_moded-worker.c
|
||||
index 11662e9..f70bdc8 100644
|
||||
--- a/src/usb_moded-worker.c
|
||||
+++ b/src/usb_moded-worker.c
|
||||
@@ -196,6 +196,10 @@ worker_get_ffs_device_state(void)
|
||||
|
||||
devstate_t state = DEVSTATE_UNKNOWN;
|
||||
const modedata_t *data = worker_get_usb_mode_data();
|
||||
+
|
||||
+ if( data->ffs_daemon_mountpoint == NULL )
|
||||
+ return DEVSTATE_UNMOUNTED;
|
||||
+
|
||||
gchar *path = g_strconcat("/dev/", data->ffs_daemon_mountpoint, "/ep0", NULL);
|
||||
|
||||
if( access(path, F_OK) == 0 )
|
||||
@@ -393,7 +397,7 @@ worker_run_command_down(void)
|
||||
bool ack = false;
|
||||
const modedata_t *data = worker_get_usb_mode_data();
|
||||
|
||||
- if( !worker_ffs_daemon_service_started && worker_ffs_daemon_stopped_p(0) ) {
|
||||
+ if( data->ffs_daemon_mountpoint != NULL && !worker_ffs_daemon_service_started && worker_ffs_daemon_stopped_p(0) ) {
|
||||
log_debug("FunctionFS daemon is not running");
|
||||
goto SUCCESS;
|
||||
}
|
||||
@@ -410,7 +414,7 @@ worker_run_command_down(void)
|
||||
/* Have succesfully stopped FunctionFS daemon service */
|
||||
worker_ffs_daemon_service_started = false;
|
||||
|
||||
- if( common_wait(worker_ffs_daemon_stop_delay, worker_ffs_daemon_stopped_p, 0) != WAIT_READY ) {
|
||||
+ if( data->ffs_daemon_mountpoint != NULL && (common_wait(worker_ffs_daemon_stop_delay, worker_ffs_daemon_stopped_p, 0) != WAIT_READY) ) {
|
||||
log_warning("failed to stop FunctionFS daemon; giving up");
|
||||
goto FAILURE;
|
||||
}
|
||||
--
|
||||
2.49.0
|
||||
|
||||
|
|
@ -1,73 +0,0 @@
|
|||
From 045a0ead25e17b86ef97379534403da7d64ac1a1 Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Sat, 17 May 2025 13:50:52 +0200
|
||||
Subject: [PATCH 4/5] [configfs] Register NCM gadget for USB networking
|
||||
|
||||
USB networking is also possible via the NCM gadget instead of
|
||||
RNDIS which is considered insecure [1], but remains supported
|
||||
in usb-moded.
|
||||
|
||||
[1] https://lore.kernel.org/lkml/20221123124620.1387499-1-gregkh@linuxfoundation.org/t/
|
||||
---
|
||||
src/usb_moded-configfs.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/src/usb_moded-configfs.c b/src/usb_moded-configfs.c
|
||||
index abfdd54..bcd1755 100644
|
||||
--- a/src/usb_moded-configfs.c
|
||||
+++ b/src/usb_moded-configfs.c
|
||||
@@ -54,6 +54,7 @@
|
||||
|
||||
#define DEFAULT_FUNCTION_MASS_STORAGE "mass_storage.usb0"
|
||||
#define DEFAULT_FUNCTION_RNDIS "rndis_bam.rndis"
|
||||
+#define DEFAULT_FUNCTION_NCM "ncm.usb0"
|
||||
#define DEFAULT_FUNCTION_MTP "ffs.mtp"
|
||||
|
||||
#define DEFAULT_RNDIS_CTRL_WCEIS "wceis"
|
||||
@@ -126,6 +127,7 @@ static gchar *GADGET_CTRL_SERIAL = 0;
|
||||
|
||||
static gchar *FUNCTION_MASS_STORAGE = 0;
|
||||
static gchar *FUNCTION_RNDIS = 0;
|
||||
+static gchar *FUNCTION_NCM = 0;
|
||||
static gchar *FUNCTION_MTP = 0;
|
||||
|
||||
static gchar *RNDIS_CTRL_WCEIS = 0;
|
||||
@@ -236,6 +238,9 @@ static void configfs_read_configuration(void)
|
||||
configfs_get_conf("function_rndis",
|
||||
DEFAULT_FUNCTION_RNDIS);
|
||||
|
||||
+ FUNCTION_NCM =
|
||||
+ configfs_get_conf("function_ncm",
|
||||
+ DEFAULT_FUNCTION_NCM);
|
||||
FUNCTION_MTP =
|
||||
configfs_get_conf("function_mtp",
|
||||
DEFAULT_FUNCTION_MTP);
|
||||
@@ -806,6 +811,7 @@ configfs_init(void)
|
||||
configfs_register_function(FUNCTION_MTP);
|
||||
|
||||
/* Prep: developer_mode */
|
||||
+ configfs_register_function(FUNCTION_NCM);
|
||||
configfs_register_function(FUNCTION_RNDIS);
|
||||
if( (text = mac_read_mac()) ) {
|
||||
configfs_write_file(RNDIS_CTRL_ETHADDR, text);
|
||||
@@ -848,6 +854,8 @@ configfs_quit(void)
|
||||
FUNCTION_MASS_STORAGE = 0;
|
||||
g_free(FUNCTION_RNDIS),
|
||||
FUNCTION_RNDIS = 0;
|
||||
+ g_free(FUNCTION_NCM),
|
||||
+ FUNCTION_NCM = 0;
|
||||
g_free(FUNCTION_MTP),
|
||||
FUNCTION_MTP = 0;
|
||||
|
||||
@@ -955,6 +963,8 @@ configfs_map_function(const char *func)
|
||||
func = FUNCTION_MASS_STORAGE;
|
||||
else if( !strcmp(func, "rndis") )
|
||||
func = FUNCTION_RNDIS;
|
||||
+ else if( !strcmp(func, "ncm") )
|
||||
+ func = FUNCTION_NCM;
|
||||
else if( !strcmp(func, "mtp") )
|
||||
func = FUNCTION_MTP;
|
||||
else if( !strcmp(func, "ffs") ) // existing config files ...
|
||||
--
|
||||
2.49.0
|
||||
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
From 1615aa38a63ead9dde88442f5f1b9ab1b615f76d Mon Sep 17 00:00:00 2001
|
||||
From: Dylan Van Assche <me@dylanvanassche.be>
|
||||
Date: Sun, 18 May 2025 10:54:02 +0200
|
||||
Subject: [PATCH 5/5] [usb-moded] Allow disabling rescue mode
|
||||
|
||||
Some distros have their own rescue mode builtin and launch usb-moded
|
||||
after initialization is complete. Therefore, no checks need to be
|
||||
performed anymore. Furthermore, this allows non-systemd init systems
|
||||
to launch usb-moded as well after initialization is complete.
|
||||
|
||||
Signed-off-by: Dylan Van Assche <me@dylanvanassche.be>
|
||||
---
|
||||
configure.ac | 8 ++++++++
|
||||
src/usb_moded.c | 6 ++++++
|
||||
2 files changed, 14 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index e8fdc69..2c56ae6 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -99,6 +99,14 @@ AC_ARG_ENABLE([ofono], AS_HELP_STRING([--enable-ofono], [Enable ofono DBUS inter
|
||||
esac],[ofono=false])
|
||||
AM_CONDITIONAL([OFONO], [test x$ofono = xtrue])
|
||||
|
||||
+AC_ARG_ENABLE([rescue], AS_HELP_STRING([--enable-rescue], [Enable rescue mode @<:@default=true@:>@]),
|
||||
+ [case "${enableval}" in
|
||||
+ yes) rescue=true ; CFLAGS="-DRESCUE $CFLAGS" ;;
|
||||
+ no) rescue=false ;;
|
||||
+ *) AC_MSG_ERROR([bad value ${enableval} for --enable-rescue]) ;;
|
||||
+ esac],[rescue=true])
|
||||
+AM_CONDITIONAL([RESCUE], [test x$rescue = xtrue])
|
||||
+
|
||||
PKG_CHECK_MODULES([DBUS], dbus-1 >= 1.8)
|
||||
PKG_CHECK_MODULES([GLIB], glib-2.0 >= 2.24.0)
|
||||
PKG_CHECK_MODULES([USB_MODED], [
|
||||
diff --git a/src/usb_moded.c b/src/usb_moded.c
|
||||
index f7443d6..76625d9 100644
|
||||
--- a/src/usb_moded.c
|
||||
+++ b/src/usb_moded.c
|
||||
@@ -686,7 +686,13 @@ void usbmoded_probe_init_done(void)
|
||||
{
|
||||
LOG_REGISTER_CONTEXT;
|
||||
|
||||
+#ifdef RESCUE
|
||||
usbmoded_set_init_done(access(usbmoded_init_done_flagfile, F_OK) == 0);
|
||||
+ return;
|
||||
+#endif
|
||||
+
|
||||
+ /* If rescue mode is not enabled, bypass init done check */
|
||||
+ usbmoded_set_init_done(true);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- *
|
||||
--
|
||||
2.49.0
|
||||
|
||||
|
|
@ -1,102 +0,0 @@
|
|||
# Forked from Alpine to adjust for mainline
|
||||
# Co-Maintainer: Clayton Craft <craftyguy@postmarketos.org>
|
||||
maintainer="Dylan Van Assche <me@dylanvanassche.be>"
|
||||
pkgname=usb-moded
|
||||
_pkgver=0.86.0.69
|
||||
pkgver=9999$_pkgver
|
||||
pkgrel=1
|
||||
_commit_dbus_glib="d42176ae4763e5288ef37ea314fe58387faf2005"
|
||||
pkgdesc="A daemon activating a certain USB profile based on the usb cable connection status"
|
||||
url="https://github.com/sailfishos/usb-moded"
|
||||
arch="all"
|
||||
license="GPL-2.0-only"
|
||||
depends_dev="
|
||||
eudev-dev
|
||||
elogind-dev
|
||||
glib-dev
|
||||
gobject-introspection-dev
|
||||
kmod-dev
|
||||
libdsme-dev
|
||||
sailfish-access-control
|
||||
ssu-sysinfo-dev
|
||||
"
|
||||
makedepends="$depends_dev
|
||||
autoconf
|
||||
automake
|
||||
dbus-dev
|
||||
libtool
|
||||
"
|
||||
subpackages="
|
||||
$pkgname-dev
|
||||
$pkgname-openrc
|
||||
$pkgname-systemd
|
||||
"
|
||||
source="$pkgname-$pkgver.tar.gz::https://github.com/sailfishos/usb-moded/archive/refs/tags/mer/${_pkgver%.*}+mer${_pkgver##*.}.tar.gz
|
||||
https://github.com/sailfishos-mirror/dbus-glib/archive/$_commit_dbus_glib/dbus-glib-$_commit_dbus_glib.tar.gz
|
||||
usb-moded.confd
|
||||
usb-moded.initd
|
||||
umtprd.conf
|
||||
basename.patch
|
||||
0001-dyn-config-Add-option-for-running-a-command-on-mode-.patch
|
||||
0002-worker-generalize-MTP-daemon-to-FunctionFS-daemon.patch
|
||||
0003-worker-only-check-daemon-running-in-FunctionFS-mode.patch
|
||||
0004-configfs-Register-NCM-gadget-for-USB-networking.patch
|
||||
0005-usb-moded-Allow-disabling-rescue-mode.patch
|
||||
"
|
||||
options="!check" # No test suite available
|
||||
builddir="$srcdir/$pkgname-mer-${_pkgver%.*}-mer${_pkgver##*.}"
|
||||
|
||||
prepare() {
|
||||
default_prepare
|
||||
|
||||
# Fix invalid pkgconf version
|
||||
sed -i 's/+mer/./' configure.ac
|
||||
|
||||
rmdir dbus-gmain
|
||||
mv "$srcdir/dbus-glib-$_commit_dbus_glib" dbus-gmain
|
||||
}
|
||||
|
||||
build() {
|
||||
./autogen.sh
|
||||
|
||||
# --enable-systemd is required to build, otherwise it can't find sd-login.h
|
||||
./configure \
|
||||
--prefix=/usr \
|
||||
--enable-connman \
|
||||
--enable-ofono \
|
||||
--enable-app-sync \
|
||||
--enable-systemd
|
||||
make
|
||||
}
|
||||
|
||||
package() {
|
||||
DESTDIR="$pkgdir" make install
|
||||
|
||||
install -Dm755 "$srcdir"/usb-moded.initd "$pkgdir"/etc/init.d/usb-moded
|
||||
install -Dm644 "$srcdir"/usb-moded.confd "$pkgdir"/etc/conf.d/usb-moded
|
||||
|
||||
# The pkg-config & systemd-service file aren't installed automatically for some reason
|
||||
install -Dm644 usb_moded.pc -t "$pkgdir"/usr/lib/pkgconfig/
|
||||
install -Dm644 systemd/usb-moded.service -t "$pkgdir"/usr/lib/systemd/system/
|
||||
|
||||
install -dm 755 "$pkgdir"/usr/include/$pkgname
|
||||
cp src/*.h src/*.xml "$pkgdir"/usr/include/$pkgname
|
||||
|
||||
# Install DBus policies
|
||||
install -Dm644 debian/usb_moded.conf \
|
||||
"$pkgdir"/usr/share/dbus-1/system.d/usb_moded.conf
|
||||
}
|
||||
|
||||
sha512sums="
|
||||
55c8892c9f9c5a9cc6b526e8c1f9c55cd5f61922dbc52b1c85abb2850a00d1146c0d8e4f7a631bd0d7927e40908dae2541870bf1cc591b9d527ce29306051829 usb-moded-99990.86.0.69.tar.gz
|
||||
665cd6395ee0ea14086ba30188c62a72697b3f63484681e18fc7f54109c9aca162f2e33aa2fa4d45287c6c0b590e81ca310c143dac0232cd5887692cdaf51256 dbus-glib-d42176ae4763e5288ef37ea314fe58387faf2005.tar.gz
|
||||
cea86b540e8d181f684b39791b658dcce5210f3dd3d07d6cefdb172fa82ba8446ea60ac4c8aa40badcfc0e4a8cef12c33ff3eb437cc6dbebad3cca9884ef9bda usb-moded.confd
|
||||
38f263a9f1c6711396b2672e53b297dbaa2f41222061da7eb90e2646e52f124b126b9bcedcec5b85e387518d455c132c37ce2196e5975f8e7732be240ead490d usb-moded.initd
|
||||
912f0700c87883b55f631cfc3d76e172ff1c21aa57b0c18d1e7b9671ecd6254b1e7565816e3967c68caab196076bf7c8b848375c89185aa4466f4ca7f65231be umtprd.conf
|
||||
8e15fcdcb5199c7c9deffc417035e2260aa7d4a437056f2ab9141c33220618da59324b87cbcebe9857d0269b170f98e2ea703c69b6543cbae237555cc6e297a4 basename.patch
|
||||
23980ebf109c01ad9be366ac35cd101608ed14a826c20e73a33fbeed856feef435ba29b34033a054e282075bcac18108f2d6e0ec8e81f41d97c3639fdd5fe23f 0001-dyn-config-Add-option-for-running-a-command-on-mode-.patch
|
||||
258a4004ebb85c01e7bb94f7b24a39d834b8699e6a035e04d3613800c8c2fdcc35290378866890ae1399919d6faddad8659c378c3022a5510375a4806b8911c5 0002-worker-generalize-MTP-daemon-to-FunctionFS-daemon.patch
|
||||
fa62cce99e91437bbb9cd88cc193c66b7cf4f988708fad8647e91b031f9d0a844f11dd469f364b214b9ca65358f696d7e7b546d7887d0f99f2b5dee4328c20d3 0003-worker-only-check-daemon-running-in-FunctionFS-mode.patch
|
||||
3a905d3038309e8a54e77ee601dc98f12c339fdd9c7ba5989d2edce5baf98fdb6d6cf092c3168da577b137a4b356edfb72bf2df7ef148fa778655934dcebe72c 0004-configfs-Register-NCM-gadget-for-USB-networking.patch
|
||||
595d3541ee2aadbc3857cc81ef4c2e393351c4a9ba26c7e20b2b098c2cec32d8c6643d4f491e3c6e16be6d509486a8313f5b5627b354ee12e11f89cc62af6598 0005-usb-moded-Allow-disabling-rescue-mode.patch
|
||||
"
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
diff -upr usb-moded-mer-0.86.0-mer66.orig/src/usb_moded.c usb-moded-mer-0.86.0-mer66/src/usb_moded.c
|
||||
--- usb-moded-mer-0.86.0-mer66.orig/src/usb_moded.c 2024-08-28 20:24:01.495130829 +0200
|
||||
+++ usb-moded-mer-0.86.0-mer66/src/usb_moded.c 2024-08-28 20:25:30.838474437 +0200
|
||||
@@ -175,6 +175,8 @@ static pthread_mutex_t usbmoded_mutex =
|
||||
}\
|
||||
}while(0)
|
||||
|
||||
+#define basename(name) (strrchr((name),'/') ? strrchr((name),'/')+1 : (name))
|
||||
+
|
||||
/* ========================================================================= *
|
||||
* Functions
|
||||
* ========================================================================= */
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
# FunctionFS configuration
|
||||
usb_functionfs_mode 0x1
|
||||
usb_dev_path "/dev/mtp/ep0"
|
||||
usb_epin_path "/dev/mtp/ep1"
|
||||
usb_epout_path "/dev/mtp/ep2"
|
||||
usb_epint_path "/dev/mtp/ep3"
|
||||
usb_max_packet_size 0x200
|
||||
|
||||
# Prevent disconnection on cable status, managed by usb-moded
|
||||
loop_on_disconnect 1
|
||||
|
||||
# Storage to expose over MTP
|
||||
storage "/home" "Home" "rw"
|
||||
|
||||
manufacturer "postmarketOS"
|
||||
product "Device"
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
configfs="/sys/kernel/config"
|
||||
supervisor=supervise-daemon
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
#!/sbin/openrc-run
|
||||
|
||||
name=usb-moded
|
||||
description="usb-moded USB gadget controller"
|
||||
command="/usr/sbin/usb_moded"
|
||||
command_background=yes
|
||||
|
||||
depend() {
|
||||
need dbus
|
||||
}
|
||||
|
||||
start_pre() {
|
||||
mkdir -p "$configfs"
|
||||
mount -t configfs none "$configfs"
|
||||
}
|
||||
|
||||
stop_post() {
|
||||
umount "$configfs"
|
||||
rmdir "$configfs"
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue