From 376002ca0b0a1aebf53db2035c608aaf2992cabc Mon Sep 17 00:00:00 2001 From: Philippe De Swert Date: Wed, 12 Dec 2012 22:59:28 +0200 Subject: [PATCH] pre-eliminary android gadget support Signed-off-by: Philippe De Swert --- configure.ac | 9 ++- debian/changelog | 8 +++ src/Makefile.am | 9 ++- src/usb_moded-modules-android.c | 123 ++++++++++++++++++++++++++++++++ src/usb_moded-modules.h | 10 +++ 5 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 src/usb_moded-modules-android.c diff --git a/configure.ac b/configure.ac index 929abc5..6664a1e 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([usb_moded], [0.54]) +AC_INIT([usb_moded], [0.55]) AM_INIT_AUTOMAKE([-Wall -Werror foreign]) AM_CONFIG_HEADER([config.h]) @@ -110,6 +110,13 @@ AC_ARG_ENABLE([upstart], AS_HELP_STRING([--enable-upstart], [Enable upstart inte esac],[upstart=false]) AM_CONDITIONAL([UPSTART], [test x$upstart = xtrue]) +AC_ARG_ENABLE([android], AS_HELP_STRING([--enable-android], [Enable Android "module" interface @<:@default=false@:>@]), + [case "${enableval}" in + yes) android=true ; CFLAGS="-DANDROID $CFLAGS" ;; + no) android=false ;; + *) AC_MSG_ERROR([bad value ${enableval} for --enable-android]) ;; + esac],[android=false]) +AM_CONDITIONAL([ANDROID], [test x$android = xtrue]) #TODO: Figure out how to check for this depending on the gconf flag # gconf-2.0 >= 2.16.0 diff --git a/debian/changelog b/debian/changelog index 9e42b19..da482fb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +usb-moded (0.55) unstable; urgency=low + + * Add android gadget driver support + * Make udev default + * Add rescue mode + + -- Philippe De Swert Wed, 12 Dec 2012 22:57:42 +0200 + usb-moded (0.54) unstable; urgency=low * Instead of spawning shells with system() use libkmod diff --git a/src/Makefile.am b/src/Makefile.am index 75c4ab8..354b922 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -18,7 +18,6 @@ usb_moded_SOURCES = \ usb_moded-dbus-private.h \ usb_moded-hw-ab.h \ usb_moded-config-private.h \ - usb_moded-modules.c \ usb_moded-modules.h \ usb_moded-log.h \ usb_moded-log.c \ @@ -29,6 +28,14 @@ usb_moded_SOURCES = \ usb_moded-modesetting.c \ usb_moded-modesetting.h +if !ANDROID +usb_moded_SOURCES += \ + usb_moded-modules.c +else +usb_moded_SOURCES += \ + usb_moded-modules-android.c +endif + if GCONF usb_moded_SOURCES += \ usb_moded-gconf.c \ diff --git a/src/usb_moded-modules-android.c b/src/usb_moded-modules-android.c new file mode 100644 index 0000000..8885a67 --- /dev/null +++ b/src/usb_moded-modules-android.c @@ -0,0 +1,123 @@ +/** + @file usb_moded-modules-android.c + + Copyright (C) 2012 Jolla. All rights reserved. + + @author: Philippe De Swert + + This program is free software; you can redistribute it and/or + modify it under the terms of the Lesser GNU General Public License + version 2 as published by the Free Software Foundation. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the Lesser GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301 USA +*/ + +#include +#include +#include +#include + +#include + +#include + +#include "usb_moded.h" +#include "usb_moded-modules.h" +#include "usb_moded-log.h" +#include "usb_moded-config.h" +#include "usb_moded-dbus.h" +#include "usb_moded-dbus-private.h" +#include "usb_moded-config.h" +#include "usb_moded-modesetting.h" + +/* kmod context - initialized at start in usb_moded_init */ +struct kmod_ctx *ctx; + +/** load module + * + * @param module Name of the module to load + * @return 0 on success, non-zero on failure + * + */ +int usb_moded_load_module(const char *module) +{ + int ret = 0; + + write_to_file("/sys/class/android_usb/android0/functions", module); + write_to_file("/sys/class/android_usb/android0/enable", "0"); + if( ret == 0) + log_info("Module setting to %s successfully\n", module); + return(ret); +} + +/** unload module + * + * @param module Name of the module to unload + * @return 0 on success, non-zero on failure + * + */ +int usb_moded_unload_module(const char *module) +{ + write_to_file("/sys/class/android_usb/android0/enable", "0"); + return(0); +} + +/** Check which state a module is in + * + * @return 1 if loaded, 0 when not loaded + */ +inline static int module_state_check(const char *module) +{ + return(0); +} + +/** find which module is loaded + * + * @return The name of the loaded module, or NULL if no modules are loaded. + */ +inline const char * usb_moded_find_module(void) +{ + return(0); +} + +/** clean up for modules when usb gets disconnected + * + * @param module The name of the module to unload + * @return 0 on success, non-zero on failure + * + */ +inline int usb_moded_module_cleanup(const char *module) +{ + return(0); +} + +/** try to unload modules to support switching + * + * + * @param force force unloading with a nasty clean-up on TRUE, or just try unloading when FALSE + * @return 0 on success, 1 on failure, 2 if hard clean-up failed + */ +inline int usb_moded_module_switch_prepare (int force) +{ + return 0; +} + +/** check for loaded modules and clean-up if they are not for the chosen mode + * + * @param module_name module name to check for + * + */ +inline void check_module_state(const char *module_name) +{ + return; +} + + diff --git a/src/usb_moded-modules.h b/src/usb_moded-modules.h index 6c54b18..66b97b5 100644 --- a/src/usb_moded-modules.h +++ b/src/usb_moded-modules.h @@ -18,6 +18,7 @@ 02110-1301 USA */ +#ifndef ANDROID /* module name definitions */ #define MODULE_NETWORK "g_nokia" #ifdef NOKIA @@ -33,6 +34,15 @@ #define MODULE_WINDOWS_NET "g_ether" #define MODULE_DEVELOPER "g_ether" #define MODULE_MTP "g_ffs" +#else +#define MODULE_MASS_STORAGE "mass_storage" +#define MODULE_FILE_STORAGE "mass_storage" +#define MODULE_WINDOWS_NET "rndis" +#define MODULE_DEVELOPER "rndis" +#define MODULE_MTP "mtp" +#define MODULE_NONE "none" +#define MODULE_CHARGING "mass_storage" +#endif /* load module */ int usb_moded_load_module(const char *module);