From 3f720ca932173c5941e5a35d6cf0c1aba663d917 Mon Sep 17 00:00:00 2001 From: Philippe De Swert Date: Tue, 28 May 2013 01:02:22 +0300 Subject: [PATCH] Include the new mode data in the mode setting chain Signed-off-by: Philippe De Swert --- src/usb_moded-modesetting.c | 8 ++++++++ src/usb_moded-modules.h | 1 - src/usb_moded.c | 26 +++++++++++++++++++++++++- src/usb_moded.h | 13 +++++++++---- 4 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/usb_moded-modesetting.c b/src/usb_moded-modesetting.c index 5ebcaea..775edc3 100644 --- a/src/usb_moded-modesetting.c +++ b/src/usb_moded-modesetting.c @@ -296,6 +296,14 @@ int set_dynamic_mode(struct mode_list_elem *data) usb_network_up(); #endif /* DEBIAN */ } + if(data->sysfs_path) + { + write_to_file(data->sysfs_path, data->sysfs_value); + } + if(data->softconnect) + { + write_to_file(data->softconnect_path, data->softconnect); + } return(0); } diff --git a/src/usb_moded-modules.h b/src/usb_moded-modules.h index 3f37357..167c314 100644 --- a/src/usb_moded-modules.h +++ b/src/usb_moded-modules.h @@ -32,7 +32,6 @@ #define MODULE_NONE "none" #define MODULE_DEVELOPER "g_ether" #define MODULE_MTP "g_ffs" -#define MODULE_NONE "none" /* load module */ int usb_moded_load_module(const char *module); diff --git a/src/usb_moded.c b/src/usb_moded.c index d022b1c..4de3738 100644 --- a/src/usb_moded.c +++ b/src/usb_moded.c @@ -279,16 +279,20 @@ void set_usb_mode(const char *mode) set_usb_module(data->mode_module); ret = usb_moded_load_module(data->mode_module); ret = set_dynamic_mode(data); + set_usb_mode_data(data); } } } end: - /* if ret != 0 then usb_module loading failed */ + /* if ret != 0 then usb_module loading failed + no mode matched or MODE_UNDEFINED was requested */ if(ret) { set_usb_module(MODULE_NONE); mode = MODE_UNDEFINED; + /*TODO: unset_dynamic_mode */ + set_usb_mode_data(NULL); } if(net) log_debug("Network setting failed!\n"); @@ -412,6 +416,26 @@ inline void set_usb_connection_state(gboolean state) current_mode.connected = state; } +/** set the mode_list_elem data + * + * @param data mode_list_element pointer + * +*/ +void set_usb_mode_data(struct mode_list_elem *data) +{ + current_mode.data = data; +} + +/** get the usb mode data + * + * @return a pointer to the usb mode data + * + */ +inline struct mode_list_elem * get_usb_mode_data(void) +{ + return(current_mode.data); +} + /*================ Static functions ===================================== */ /* set default values for usb_moded */ diff --git a/src/usb_moded.h b/src/usb_moded.h index b7507d9..bcff64b 100644 --- a/src/usb_moded.h +++ b/src/usb_moded.h @@ -35,6 +35,8 @@ #include #include +#include "usb_moded-dyn-config.h" + #define USB_MODED_LOCKFILE "/var/run/usb_moded.pid" #define MAX_READ_BUF 512 @@ -44,10 +46,11 @@ typedef struct usb_mode { /*@{*/ - gboolean connected; /* connection status, 1 for connected */ - gboolean mounted; /* mount status, 1 for mounted -UNUSED atm- */ - char *mode; /* the mode name */ - char *module; /* the module name for the specific mode */ + gboolean connected; /* connection status, 1 for connected */ + gboolean mounted; /* mount status, 1 for mounted -UNUSED atm- */ + char *mode; /* the mode name */ + char *module; /* the module name for the specific mode */ + struct mode_list_elem *data; /* contains the mode data */ /*@}*/ }usb_mode; @@ -57,6 +60,8 @@ void set_usb_mode(const char *mode); const char * get_usb_mode(void); void set_usb_module(const char *module); const char * get_usb_module(void); +void set_usb_mode_data(struct mode_list_elem *data); +struct mode_list_elem * get_usb_mode_data(void); gboolean get_usb_connection_state(void); void set_usb_connection_state(gboolean state); void set_charger_connected(gboolean state);