From 9e92adda79ec610659986cf609b41c90a1292445 Mon Sep 17 00:00:00 2001 From: Heikki Hannikainen Date: Mon, 23 Feb 2015 20:14:20 +0200 Subject: [PATCH] Refactor obtaining LPC serial number and chip ID into separate API and header/source files. Remove from main(). Create a usb_set_descriptor_by_serial_number(), called before USB stack is started. --- firmware/hackrf_usb/hackrf_usb.c | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index 4ceba12e..4eddcae9 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -186,25 +186,19 @@ void usb_configuration_changed( } } -int main(void) { - pin_setup(); - enable_1v8_power(); -#ifdef HACKRF_ONE - enable_rf_power(); -#endif - cpu_clock_init(); - - -/* HACK! -*/ +void usb_set_descriptor_by_serial_number(void) +{ iap_cmd_res_t iap_cmd_res; + /* Read IAP Serial Number Identification */ iap_cmd_res.cmd_param.command_code = IAP_CMD_READ_SERIAL_NO; iap_cmd_call(&iap_cmd_res); - if(iap_cmd_res.status_res.status_ret == CMD_SUCCESS) { + + if (iap_cmd_res.status_res.status_ret == CMD_SUCCESS) { usb_descriptor_string_serial_number[0] = 66; usb_descriptor_string_serial_number[1] = USB_DESCRIPTOR_TYPE_STRING; - for(size_t i=0; i<32; i++) { + + for (size_t i=0; i<32; i++) { const uint_fast8_t nibble = (iap_cmd_res.status_res.iap_result[i >> 3] >> (28 - (i & 7) * 4)) & 0xf; const char c = (nibble > 9) ? ('a' + nibble - 10) : ('0' + nibble); usb_descriptor_string_serial_number[2 + i * 2] = c; @@ -214,6 +208,17 @@ int main(void) { usb_descriptor_string_serial_number[0] = 2; usb_descriptor_string_serial_number[1] = USB_DESCRIPTOR_TYPE_STRING; } +} + +int main(void) { + pin_setup(); + enable_1v8_power(); +#ifdef HACKRF_ONE + enable_rf_power(); +#endif + cpu_clock_init(); + + usb_set_descriptor_by_serial_number(); usb_set_configuration_changed_cb(usb_configuration_changed); usb_peripheral_reset();