From 43b7967f133dfd49777734949ff2b19c25beb84a Mon Sep 17 00:00:00 2001 From: Dylan Van Assche 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 --- 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