From 4cc533dd1c946664df1cd7386f60d37fd16c2668 Mon Sep 17 00:00:00 2001 From: Doug Zongker Date: Tue, 8 Mar 2011 12:25:05 -0800 Subject: don't reboot for inactivity if USB is connected Change-Id: Icba35da91167d30c446581afb47d0804e49964bf --- ui.c | 51 ++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/ui.c b/ui.c index 5a2a83715..179eb2ae6 100644 --- a/ui.c +++ b/ui.c @@ -14,6 +14,8 @@ * limitations under the License. */ +#include +#include #include #include #include @@ -21,10 +23,11 @@ #include #include #include +#include #include +#include #include #include -#include #include "common.h" #include "minui/minui.h" @@ -587,22 +590,44 @@ void ui_show_text(int visible) pthread_mutex_unlock(&gUpdateMutex); } +// Return true if USB is connected. +static int usb_connected() { + int fd = open("/sys/class/switch/usb_connected/state", O_RDONLY); + if (fd < 0) { + printf("failed to open /sys/class/switch/usb_connected/state: %s\n", + strerror(errno)); + return 0; + } + + char buf; + int connected = (read(fd, &buf, 1) == 1) && (buf == '1'); + if (close(fd) < 0) { + printf("failed to close /sys/class/switch/usb_connected/state: %s\n", + strerror(errno)); + } + return connected; +} + int ui_wait_key() { pthread_mutex_lock(&key_queue_mutex); - struct timeval now; - struct timespec timeout; - gettimeofday(&now, NULL); - timeout.tv_sec = now.tv_sec; - timeout.tv_nsec = now.tv_usec * 1000; - timeout.tv_sec += UI_WAIT_KEY_TIMEOUT_SEC; - - int rc = 0; - while (key_queue_len == 0 && rc != ETIMEDOUT) { - rc = pthread_cond_timedwait(&key_queue_cond, &key_queue_mutex, - &timeout); - } + // Time out after UI_WAIT_KEY_TIMEOUT_SEC, unless a USB cable is + // plugged in. + do { + struct timeval now; + struct timespec timeout; + gettimeofday(&now, NULL); + timeout.tv_sec = now.tv_sec; + timeout.tv_nsec = now.tv_usec * 1000; + timeout.tv_sec += UI_WAIT_KEY_TIMEOUT_SEC; + + int rc = 0; + while (key_queue_len == 0 && rc != ETIMEDOUT) { + rc = pthread_cond_timedwait(&key_queue_cond, &key_queue_mutex, + &timeout); + } + } while (usb_connected() && key_queue_len == 0); int key = -1; if (key_queue_len > 0) { -- cgit v1.2.3