summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2010-01-06 14:22:40 -0800
committerMarcel Holtmann <marcel@holtmann.org>2010-01-06 14:22:40 -0800
commit058584e36b1efc53411e6ff54fabccf3251685f4 (patch)
treed411caa38498018e88419ce9a585ebc65c3f2858 /plugins
parentee5951256720ba2db3f68bddea25741089eeb3cf (diff)
downloadofono-058584e36b1efc53411e6ff54fabccf3251685f4.tar.bz2
Use short serial number for udev detected devices
Diffstat (limited to 'plugins')
-rw-r--r--plugins/udev.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/plugins/udev.c b/plugins/udev.c
index 690eafa0..455bef37 100644
--- a/plugins/udev.c
+++ b/plugins/udev.c
@@ -69,6 +69,24 @@ static const char *get_driver(struct udev_device *udev_device)
return driver;
}
+static const char *get_serial(struct udev_device *udev_device)
+{
+ struct udev_list_entry *entry;
+ const char *serial = NULL;
+
+ entry = udev_device_get_properties_list_entry(udev_device);
+ while (entry) {
+ const char *name = udev_list_entry_get_name(entry);
+
+ if (g_strcmp0(name, "ID_SERIAL_SHORT") == 0)
+ serial = udev_list_entry_get_value(entry);
+
+ entry = udev_list_entry_get_next(entry);
+ }
+
+ return serial;
+}
+
#define MODEM_DEVICE "ModemDevice"
#define DATA_DEVICE "DataDevice"
#define GPS_DEVICE "GPSDevice"
@@ -211,7 +229,7 @@ static void add_modem(struct udev_device *udev_device)
{
struct ofono_modem *modem;
struct udev_device *parent;
- const char *devpath, *driver = NULL;
+ const char *devpath, *driver;
parent = udev_device_get_parent(udev_device);
if (parent == NULL)
@@ -235,7 +253,9 @@ static void add_modem(struct udev_device *udev_device)
modem = find_modem(devpath);
if (modem == NULL) {
- modem = ofono_modem_create(NULL, driver);
+ const char *serial = get_serial(parent);
+
+ modem = ofono_modem_create(serial, driver);
if (modem == NULL)
return;