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