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();