Skip to content

Commit

Permalink
[release 0.63] First version of the next generation usb_moded
Browse files Browse the repository at this point in the history
Signed-off-by: Philippe De Swert <philippe.deswert@jollamobile.com>
  • Loading branch information
philippedeswert committed Jun 19, 2013
2 parents 6cbf15e + f9487fe commit 2b4e802
Show file tree
Hide file tree
Showing 26 changed files with 420 additions and 147 deletions.
14 changes: 14 additions & 0 deletions config/dyn-modes/adb_mode.ini
@@ -0,0 +1,14 @@
[mode]
name = adb_mode
module = none
network = 1
network_interface = rndis0

[options]
sysfs_path = /sys/class/android_usb/android0/functions
sysfs_value = rndis,adb
sysfs_reset_value = none
softconnect_path = /sys/class/android_usb/android0/enable
softconnect = 1
softconnec_disconnect = 0

14 changes: 14 additions & 0 deletions config/dyn-modes/developer_mode-android.ini
@@ -0,0 +1,14 @@
[mode]
name = developer_mode
module = none
network = 1
network_interface = rndis0

[options]
sysfs_path = /sys/class/android_usb/android0/functions
sysfs_value = rndis
sysfs_reset_value = none
softconnect_path = /sys/class/android_usb/android0/enable
softconnect = 1
softconnec_disconnect = 0

5 changes: 5 additions & 0 deletions config/dyn-modes/developer_mode.ini
@@ -0,0 +1,5 @@
[mode]
name = developer_mode
module = g_ether
network = 1
network_interface = usb0
12 changes: 12 additions & 0 deletions config/dyn-modes/mtp_mode-android.ini
@@ -0,0 +1,12 @@
[mode]
name = mtp_mode
module = none

[options]
sysfs_path = /sys/class/android_usb/android0/functions
sysfs_value = mtp
sysfs_reset_value = none
softconnect_path = /sys/class/android_usb/android0/enable
softconnect = 1
softconnec_disconnect = 0

4 changes: 4 additions & 0 deletions config/dyn-modes/mtp_mode.ini
@@ -0,0 +1,4 @@
[mode]
name = mtp_mode
module = g_ffs
appsync = 1
4 changes: 4 additions & 0 deletions config/run/adb.ini
@@ -0,0 +1,4 @@
[info]
name = adbd.service
mode = adb_mode
systemd = 1
4 changes: 4 additions & 0 deletions config/run/mtp.ini
@@ -0,0 +1,4 @@
[info]
name = buteo.service
mode = mtp_mode
systemd = 1
18 changes: 1 addition & 17 deletions configure.ac
@@ -1,4 +1,4 @@
AC_INIT([usb_moded], [0.62.1])
AC_INIT([usb_moded], [0.63])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])

AM_CONFIG_HEADER([config.h])
Expand Down Expand Up @@ -78,14 +78,6 @@ AC_ARG_ENABLE([app_sync], AS_HELP_STRING([--enable-app-sync], [Enable applicatio
esac],[app_sync=false])
AM_CONDITIONAL([APP_SYNC], [test x$app_sync = xtrue])

AC_ARG_ENABLE([dynamic_modes], AS_HELP_STRING([--enable-dynamic-modes], [Enable adding modes with ini files @<:@default=false@:>@]),
[case "${enableval}" in
yes) dynamic_modes=true ; CFLAGS="-DDYN_MODE $CFLAGS" ;;
no) dynamic_modes=false ;;
*) AC_MSG_ERROR([bad value ${enableval} for --enable-dynamic-modes]) ;;
esac],[dynamic_modes=false])
AM_CONDITIONAL([DYN_MODE], [test x$dynamic_modes = xtrue])

AC_ARG_ENABLE([hal], AS_HELP_STRING([--enable-hal], [Enable deprecated hal interface (use --disable-udev also) @<:@default=false@:>@]),
[case "${enableval}" in
yes) hal=true ; CFLAGS="-DHAL -I/usr/include/hal -lhal $CFLAGS" ;;
Expand All @@ -110,14 +102,6 @@ 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
PKG_CHECK_MODULES([USB_MODED], [
Expand Down
19 changes: 5 additions & 14 deletions src/Makefile.am
Expand Up @@ -29,15 +29,10 @@ usb_moded_SOURCES = \
usb_moded-modesetting.c \
usb_moded-modesetting.h \
usb_moded-mac.c \
usb_moded-mac.h

if !ANDROID
usb_moded_SOURCES += \
usb_moded-mac.h \
usb_moded-dyn-config.c \
usb_moded-dyn-config.h \
usb_moded-modules.c
else
usb_moded_SOURCES += \
usb_moded-modules-android.c
endif

if GCONF
usb_moded_SOURCES += \
Expand Down Expand Up @@ -73,6 +68,8 @@ usb_moded_SOURCES += \
usb_moded-appsync.h \
usb_moded-appsync-dbus.c \
usb_moded-appsync-dbus.h \
usb_moded-systemd.c \
usb_moded-systemd.h \
usb_moded-appsync-dbus-private.h
endif

Expand All @@ -82,12 +79,6 @@ usb_moded_SOURCES += \
usb_moded-upstart.c
endif

if DYN_MODE
usb_moded_SOURCES += \
usb_moded-dyn-config.c \
usb_moded-dyn-config.h
endif

usb_moded_util_CPPFLAGS = \
$(USB_MODED_CFLAGS)

Expand Down
24 changes: 19 additions & 5 deletions src/usb_moded-appsync.c
Expand Up @@ -39,6 +39,7 @@
#include "usb_moded-modesetting.h"
#include "usb_moded-log.h"
#include "usb_moded-upstart.h"
#include "usb_moded-systemd.h"

static struct list_elem *read_file(const gchar *filename);
static gboolean enumerate_usb(gpointer data);
Expand Down Expand Up @@ -126,6 +127,8 @@ static struct list_elem *read_file(const gchar *filename)
log_debug("Launch mode = %s\n", list_item->mode);
list_item->upstart = g_key_file_get_integer(settingsfile, APP_INFO_ENTRY, APP_INFO_UPSTART_KEY, NULL);
log_debug("Upstart control = %d\n", list_item->upstart);
list_item->systemd = g_key_file_get_integer(settingsfile, APP_INFO_ENTRY, APP_INFO_SYSTEMD_KEY, NULL);
log_debug("Systemd control = %d\n", list_item->systemd);

cleanup:

Expand Down Expand Up @@ -201,14 +204,19 @@ int activate_sync(const char *mode)
if(!strcmp(mode, data->mode))
{
log_debug("launching app %s\n", data->launch);
if(data->systemd)
{
if(!systemd_control_service(data->name, SYSTEMD_START))
mark_active(data->name);
}
#ifdef UPSTART
if(data->upstart)
else if(data->upstart)
{
if(!upstart_control_job(data->name, UPSTART_START))
mark_active(data->name);
}
else
#endif /* UPSTART */
else
usb_moded_dbus_app_launch(data->launch);
}
}
Expand Down Expand Up @@ -291,22 +299,28 @@ static gboolean enumerate_usb(gpointer data)
return FALSE;
}

#ifdef UPSTART
int appsync_stop(void)
{
GList *iter = 0;

for( iter = sync_list; iter; iter = g_list_next(iter) )
{
struct list_elem *data = iter->data;
if(data->upstart)

if(data->systemd)
{
if(!systemd_control_service(data->name, SYSTEMD_STOP))
mark_active(data->name);
}
#ifdef UPSTART
else if(data->upstart)
{
log_debug("Stopping %s\n", data->launch);
if(upstart_control_job(data->name, UPSTART_STOP))
log_debug("Failed to stop %s\n", data->name);
}
#endif /* UPSTART */
}

return(0);
}
#endif /* UPSTART */
2 changes: 2 additions & 0 deletions src/usb_moded-appsync.h
Expand Up @@ -26,6 +26,7 @@
#define APP_INFO_NAME_KEY "name"
#define APP_INFO_LAUNCH_KEY "launch"
#define APP_INFO_UPSTART_KEY "upstart"
#define APP_INFO_SYSTEMD_KEY "systemd"

/**
* keep all the needed info together for launching an app
Expand All @@ -38,6 +39,7 @@ typedef struct list_elem
char *launch; /* dbus launch command/address */
int active; /* marker to check if the app has started sucessfully */
int upstart; /* marker to know if we start it with upstart or not */
int systemd; /* marker to know if we start it with systemd or not */
/*@}*/
}list_elem;

Expand Down
7 changes: 4 additions & 3 deletions src/usb_moded-config.c
Expand Up @@ -436,14 +436,15 @@ int conf_file_merge(void)
if(!test)
{
log_debug("%d failed loading config file %s\n", test, filename_full);
g_free(filename_full);
break;
goto next;
}
g_free(filename_full);
log_debug("file data = %s\n", g_key_file_to_data(settingsfile, NULL, NULL));
keyfile_string = g_string_append(keyfile_string, g_key_file_to_data(settingsfile, NULL, NULL));
log_debug("keyfile_string = %s\n", keyfile_string->str);
g_key_file_free(settingsfile);

next:
g_free(filename_full);
}

if(keyfile_string)
Expand Down
6 changes: 4 additions & 2 deletions src/usb_moded-dbus.c
Expand Up @@ -158,13 +158,15 @@ static DBusHandlerResult msg_handler(DBusConnection *const connection, DBusMessa

if((reply = dbus_message_new_method_return(msg)))
dbus_message_append_args (reply, DBUS_TYPE_STRING, &config, DBUS_TYPE_INVALID);
free((void *)config);
}
else if(!strcmp(member, USB_MODE_LIST))
{
const char *mode_list = get_mode_list();
gchar *mode_list = get_mode_list();

if((reply = dbus_message_new_method_return(msg)))
dbus_message_append_args (reply, DBUS_TYPE_STRING, &mode_list, DBUS_TYPE_INVALID);
dbus_message_append_args (reply, DBUS_TYPE_STRING, (const char *) &mode_list, DBUS_TYPE_INVALID);
g_free(mode_list);
}
else if(!strcmp(member, USB_MODE_RESCUE_OFF))
{
Expand Down
22 changes: 21 additions & 1 deletion src/usb_moded-dyn-config.c
Expand Up @@ -53,7 +53,7 @@ GList *read_mode_list(void)
g_dir_close(confdir);
}
else
log_debug("Dynamic mode confdir open failed.\n");
log_debug("Mode confdir open failed or file is incomplete/invalid.\n");
return(modelist);
}

Expand Down Expand Up @@ -82,6 +82,14 @@ static struct mode_list_elem *read_mode_file(const gchar *filename)
list_item->appsync = g_key_file_get_integer(settingsfile, MODE_ENTRY, MODE_NEEDS_APPSYNC_KEY, NULL);
list_item->network = g_key_file_get_integer(settingsfile, MODE_ENTRY, MODE_NETWORK_KEY, NULL);
list_item->network_interface = g_key_file_get_string(settingsfile, MODE_ENTRY, MODE_NETWORK_INTERFACE_KEY, NULL);
list_item->sysfs_path = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_SYSFS_PATH, NULL);
log_debug("Dynamic mode sysfs path = %s\n", list_item->sysfs_path);
list_item->sysfs_value = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_SYSFS_VALUE, NULL);
log_debug("Dynamic mode sysfs value = %s\n", list_item->sysfs_value);
list_item->sysfs_reset_value = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_SYSFS_RESET_VALUE, NULL);
list_item->softconnect = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_SOFTCONNECT, NULL);
list_item->softconnect_disconnect = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_SOFTCONNECT_DISCONNECT, NULL);
list_item->softconnect_path = g_key_file_get_string(settingsfile, MODE_OPTIONS_ENTRY, MODE_SOFTCONNECT_PATH, NULL);
g_key_file_free(settingsfile);
if(list_item->mode_name == NULL || list_item->mode_module == NULL)
{
Expand All @@ -95,6 +103,18 @@ static struct mode_list_elem *read_mode_file(const gchar *filename)
free(list_item);
return NULL;
}
if(list_item->sysfs_path && list_item->sysfs_value == NULL)
{
/* free list_item as it will not be used */
free(list_item);
return NULL;
}
if(list_item->softconnect && list_item->softconnect_path == NULL)
{
/* free list_item as it will not be used */
free(list_item);
return NULL;
}
else
return(list_item);
}
Expand Down
13 changes: 13 additions & 0 deletions src/usb_moded-dyn-config.h
Expand Up @@ -31,6 +31,13 @@
#define MODE_NEEDS_APPSYNC_KEY "appsync"
#define MODE_NETWORK_KEY "network"
#define MODE_NETWORK_INTERFACE_KEY "network_interface"
#define MODE_OPTIONS_ENTRY "options"
#define MODE_SYSFS_PATH "sysfs_path"
#define MODE_SYSFS_VALUE "sysfs_value"
#define MODE_SYSFS_RESET_VALUE "sysfs_reset_value"
#define MODE_SOFTCONNECT "softconnect"
#define MODE_SOFTCONNECT_DISCONNECT "softconnec_disconnect"
#define MODE_SOFTCONNECT_PATH "softconnect_path"

/**
* Struct keeping all the data needed for the definition of a dynamic mode
Expand All @@ -43,6 +50,12 @@ typedef struct mode_list_elem
int appsync; /* requires appsync or not */
int network; /* bring up network or not */
char *network_interface; /* Which network interface to bring up if network needs to be enabled */
char *sysfs_path; /* path to set sysfs options */
char *sysfs_value; /* option name/value to write to sysfs */
char *sysfs_reset_value; /* value to reset the the sysfs to default */
char *softconnect; /* value to be written to softconnect interface */
char *softconnect_disconnect; /* value to set on the softconnect interface to disable after disconnect */
char *softconnect_path; /* path for the softconnect */
/*@} */
}mode_list_elem;

Expand Down
4 changes: 3 additions & 1 deletion src/usb_moded-modes.h
Expand Up @@ -30,4 +30,6 @@
#define MODE_MTP "mtp_mode"
#define MODE_CHARGER "dedicated_charger"

char *get_mode_list(void);
/* due to the use of the modelist these functions are defined in usb_moded.c */
gchar *get_mode_list(void);
int valid_mode(const char *mode);

0 comments on commit 2b4e802

Please sign in to comment.