From d1bfb925ae2e93fb11c989563a1fd3442bd56844 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pawe=C5=82=20Szewczyk?=
Date: Tue, 15 May 2018 17:10:05 +0200
Subject: usb_gadget: Retrieve device serial number
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Serial number is retrieved from
/sys/firmware/devicetree/base/serial-number file.
Change-Id: I3e8251bd1ce916b72d45102017b3533420ef9f54
Signed-off-by: Paweł Szewczyk
---
hw/usb_gadget/usb_gadget.c | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/hw/usb_gadget/usb_gadget.c b/hw/usb_gadget/usb_gadget.c
index ad4513d..d1e6704 100755
--- a/hw/usb_gadget/usb_gadget.c
+++ b/hw/usb_gadget/usb_gadget.c
@@ -20,6 +20,7 @@
#include
+#include
#include
#include
#include
@@ -122,11 +123,36 @@ out:
return -ENOMEM;
}
+#define SERIAL_FILE_PATH "/sys/firmware/devicetree/base/serial-number"
+#define LINE_LEN 64
+
+static int get_device_serial(char **out)
+{
+ FILE *fp;
+ char *line, *p;
+
+ fp = fopen(SERIAL_FILE_PATH, "r");
+ if (!fp)
+ return -1;
+
+ line = malloc(LINE_LEN);
+ p = fgets(line, LINE_LEN, fp);
+ fclose(fp);
+ if (p == NULL) {
+ free(line);
+ return -1;
+ }
+
+ *out = p;
+ return 0;
+}
+
static int alloc_default_gadget(struct usb_gadget **_gadget)
{
struct usb_gadget *gadget;
struct usb_gadget_strings *strs;
struct usb_configuration **configs;
+ int ret;
gadget = zalloc(sizeof(*gadget));
if (!gadget)
@@ -143,7 +169,9 @@ static int alloc_default_gadget(struct usb_gadget **_gadget)
strs[0].lang_code = 0x409;
strs[0].manufacturer = strdup(DEFAULT_MANUFACTURER);
strs[0].product = strdup(DEFAULT_PRODUCT);
- strs[0].serial = strdup(DEFAULT_SERIAL);
+ ret = get_device_serial(&strs[0].serial);
+ if (ret < 0)
+ strs[0].serial = strdup(DEFAULT_SERIAL);
if (!strs[0].manufacturer || !strs[0].product || !strs[0].serial)
goto free_strs;
--
cgit v1.2.3