diff options
author | Bastien Nocera <hadess@hadess.net> | 2020-06-17 10:51:09 +0200 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2020-06-17 11:01:30 +0200 |
commit | 97185bae75b16bea48d532aa5511417e485b1c06 (patch) | |
tree | 665b7018a8df1363a2300757c4e3fc2981b09d68 | |
parent | d2917c0c71b2ee5cfd0e46e7401229a4c80ca0e3 (diff) | |
download | upower-97185bae75b16bea48d532aa5511417e485b1c06.tar.gz |
linux: Add support for iPhone XR, XS models
Modifying the udev serial to be acceptable as an hyphened UDID, as the
usbmux stack expects.
Closes: #114
-rw-r--r-- | src/linux/up-device-idevice.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/linux/up-device-idevice.c b/src/linux/up-device-idevice.c index a808269..d2fa0a1 100644 --- a/src/linux/up-device-idevice.c +++ b/src/linux/up-device-idevice.c @@ -203,6 +203,28 @@ out: return G_SOURCE_CONTINUE; } +static char * +get_device_uuid (GUdevDevice *native) +{ + const char *uuid; + char *retval; + + uuid = g_udev_device_get_property (native, "ID_SERIAL_SHORT"); + if (uuid == NULL) + return NULL; + + if (strlen (uuid) != 24) + return g_strdup (uuid); + + /* new style UDID: add hyphen between first 8 and following 16 digits */ + retval = g_malloc0 (24 + 1 + 1); + memcpy (&retval[0], &uuid[0], 8); + retval[8] = '-'; + memcpy (&retval[9], &uuid[8], 16); + + return retval; +} + /** * up_device_idevice_coldplug: * @@ -213,7 +235,7 @@ up_device_idevice_coldplug (UpDevice *device) { UpDeviceIdevice *idevice = UP_DEVICE_IDEVICE (device); GUdevDevice *native; - const gchar *uuid; + char *uuid; const gchar *model; UpDeviceKind kind; @@ -223,7 +245,7 @@ up_device_idevice_coldplug (UpDevice *device) return FALSE; /* Get the UUID */ - uuid = g_udev_device_get_property (native, "ID_SERIAL_SHORT"); + uuid = get_device_uuid (native); if (uuid == NULL) return FALSE; @@ -253,6 +275,8 @@ up_device_idevice_coldplug (UpDevice *device) g_source_set_name_by_id (idevice->priv->start_id, "[upower] up_device_idevice_start_poll_cb (linux)"); + g_free (uuid); + return TRUE; } |