Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge branch 'jb35156_use_ssu_names' into 'master'
Get device manufacturer and product name from ssu



See merge request !11
  • Loading branch information
Matti Kosola committed May 11, 2016
2 parents 96abc50 + 300b055 commit f393f35
Show file tree
Hide file tree
Showing 6 changed files with 238 additions and 3 deletions.
8 changes: 8 additions & 0 deletions configure.ac
Expand Up @@ -40,6 +40,14 @@ AC_ARG_ENABLE([meegodevlock], AS_HELP_STRING([--enable-meegodevlock], [Enable Me
esac],[meegodevlock=false])
AM_CONDITIONAL([MEEGOLOCK], [test x$meegodevlock = xtrue])

AC_ARG_ENABLE([mer_ssu], AS_HELP_STRING([--enable-mer-ssu], [Enable MER SSU @<:@default=false@:>@]),
[case "${enableval}" in
yes) mer_ssu=true ; CFLAGS="-DUSE_MER_SSU $CFLAGS" ;;
no) mer_ssu=false ;;
*) AC_MSG_ERROR([bad value ${enableval} for --enable-mer-ssu]) ;;
esac],[mer_ssu=false])
AM_CONDITIONAL([USE_MER_SSU], [test x$mer_ssu = xtrue])

AC_ARG_ENABLE([app_sync], AS_HELP_STRING([--enable-app-sync], [Enable application syncing @<:@default=true@:>@]),
[case "${enableval}" in
yes) app_sync=true ; CFLAGS="-DAPP_SYNC $CFLAGS" ;;
Expand Down
2 changes: 1 addition & 1 deletion rpm/usb-moded.spec
Expand Up @@ -308,7 +308,7 @@ when the UI fails.

%build
%autogen
%configure --enable-app-sync --enable-meegodevlock --enable-debug --enable-connman --enable-systemd
%configure --enable-app-sync --enable-meegodevlock --enable-debug --enable-connman --enable-systemd --enable-mer-ssu
make all doc %{?_smp_mflags}

%install
Expand Down
6 changes: 6 additions & 0 deletions src/Makefile.am
Expand Up @@ -38,6 +38,12 @@ usb_moded_SOURCES = \
usb_moded-android.h \
usb_moded-android.c

if USE_MER_SSU
usb_moded_SOURCES += \
usb_moded-ssu.h \
usb_moded-ssu.c
endif

if MEEGOLOCK
usb_moded_SOURCES += \
usb_moded-devicelock.h \
Expand Down
28 changes: 26 additions & 2 deletions src/usb_moded-config.c
Expand Up @@ -42,6 +42,10 @@
#include "usb_moded-log.h"
#include "usb_moded-modes.h"

#ifdef USE_MER_SSU
# include "usb_moded-ssu.h"
#endif

static int get_conf_int(const gchar *entry, const gchar *key);
static char * get_conf_string(const gchar *entry, const gchar *key);
static char * get_kcmdline_string(const char *entry);
Expand Down Expand Up @@ -743,7 +747,17 @@ int conf_file_merge(void)

char * get_android_manufacturer(void)
{
return(get_conf_string(ANDROID_ENTRY, ANDROID_MANUFACTURER_KEY));
#ifdef USE_MER_SSU
/* If SSU can provide manufacturer name, use it. Otherwise fall
* back to using the name specified in configuration files. */
char *ssu_name = ssu_get_manufacturer_name();
if( ssu_name )
{
return ssu_name;
}
#endif

return get_conf_string(ANDROID_ENTRY, ANDROID_MANUFACTURER_KEY);
}

char * get_android_vendor_id(void)
Expand All @@ -753,7 +767,17 @@ char * get_android_vendor_id(void)

char * get_android_product(void)
{
return(get_conf_string(ANDROID_ENTRY, ANDROID_PRODUCT_KEY));
#ifdef USE_MER_SSU
/* If SSU can provide device model name, use it. Otherwise fall
* back to using the name specified in configuration files. */
char *ssu_name = ssu_get_product_name();
if( ssu_name )
{
return ssu_name;
}
#endif

return get_conf_string(ANDROID_ENTRY, ANDROID_PRODUCT_KEY);
}

char * get_android_product_id(void)
Expand Down
168 changes: 168 additions & 0 deletions src/usb_moded-ssu.c
@@ -0,0 +1,168 @@
/**
@file usb_moded-ssu.c
Copyright (C) 2016 Jolla. All rights reserved.
@author: Simo Piiroinen <simo.piiroinen@jollamobile.com>
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 <glib.h>

#include <dbus/dbus.h>

#include "usb_moded-ssu.h"
#include "usb_moded-log.h"

/** SSU D-Bus service name */
#define SSU_DBUS_SERVICE "org.nemo.ssu"

/** Default SSU D-Bus object path */
#define SSU_DBUS_OBJECT "/org/nemo/ssu"

/** SSU D-Bus interface */
#define SSU_DBUS_INTERFACE "org.nemo.ssu"

/** SSU displayName D-Bus method call */
#define SSU_DBUS_GET_DISPLAY_NAME "displayName"

/** SsuDisplayType enum adapted from ssu c++ headers */
typedef enum
{
/** Manufacturer, like ACME Corp.
* Board mappings key "deviceManufacturer" */
SsuDeviceManufacturer = 0,

/** Marketed device name, like Pogoblaster 3000.
* Board mappings key "prettyModel" */
SsuDeviceModel = 1,

/** Type designation, like NCC-1701.
* Beard mappings key "deviceDesignation" */
SsuDeviceDesignation = 2,
} SsuDisplayType;

/** Wrapper for making synchronous org.nemo.ssu.displayName() method calls
*
* Caller must release non-null return value with g_free().
*
* @param type_id display name type to query
*
* @return human readable string, or NULL in case of errors
*/
static gchar *
usb_moded_get_ssu_display_name(SsuDisplayType type_id)
{
gchar *res = 0;
DBusConnection *con = 0;
DBusMessage *req = 0;
DBusMessage *rsp = 0;
dbus_int32_t arg = type_id;
const char *val = 0;
DBusError err = DBUS_ERROR_INIT;

if( !(con = dbus_bus_get(DBUS_BUS_SYSTEM, &err)) ) {
log_err("could not connect to system bus: %s: %s",
err.name, err.message);
goto EXIT;
}

req = dbus_message_new_method_call(SSU_DBUS_SERVICE,
SSU_DBUS_OBJECT,
SSU_DBUS_INTERFACE,
SSU_DBUS_GET_DISPLAY_NAME);

if( !req ) {
log_err("could not create method call message");
goto EXIT;
}

if( !dbus_message_append_args(req,
DBUS_TYPE_INT32, &arg,
DBUS_TYPE_INVALID) ) {
log_err("could not add method call parameters");
goto EXIT;
}

rsp = dbus_connection_send_with_reply_and_block(con, req, -1, &err);
if( !rsp ) {
/* Be less verbose with failures that are expected
* if ssu service is not installed on the device. */
if( !strcmp(err.name, DBUS_ERROR_SERVICE_UNKNOWN) ) {
log_debug("%s D-Bus service is not available",
SSU_DBUS_SERVICE);
}
else {
log_err("did not get reply: %s: %s",
err.name, err.message);
}
goto EXIT;
}

if( dbus_set_error_from_message(&err, rsp) ) {
log_err("got error reply: %s: %s", err.name, err.message);
goto EXIT;
}

if( !dbus_message_get_args(rsp, &err,
DBUS_TYPE_STRING, &val,
DBUS_TYPE_INVALID) ) {
log_err("could not parse reply: %s: %s",
err.name, err.message);
goto EXIT;
}

res = g_strdup(val);

EXIT:

dbus_error_free(&err);

if( rsp )
dbus_message_unref(rsp);
if( req )
dbus_message_unref(req);
if( con )
dbus_connection_unref(con);

log_debug("ssu displayName(%d) -> %s", type_id, res ?: "N/A");

return res;
}

/** Query device manufacturer name from the SSU D-Bus service
*
* Caller must release non-null return value with g_free().
*
* @return human readable string, or NULL in case of errors
*/
gchar *
ssu_get_manufacturer_name(void)
{
return usb_moded_get_ssu_display_name(SsuDeviceManufacturer);
}

/** Query device model name from the SSU D-Bus service
*
* Caller must release non-null return value with g_free().
*
* @return human readable string, or NULL in case of errors
*/
gchar *
ssu_get_product_name(void)
{
return usb_moded_get_ssu_display_name(SsuDeviceModel);
}
29 changes: 29 additions & 0 deletions src/usb_moded-ssu.h
@@ -0,0 +1,29 @@
/**
@file usb_moded-ssu.h
Copyright (C) 2016 Jolla. All rights reserved.
@author: Simo Piiroinen <simo.piiroinen@jollamobile.com>
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
*/

#ifndef USB_MODED_SSU_H_
# define USB_MODED_SSU_H_

gchar * ssu_get_manufacturer_name(void);
gchar * ssu_get_product_name(void);

#endif // USB_MODED_SSU_H_

0 comments on commit f393f35

Please sign in to comment.