Permit serial number without leading zeros so you don't have to type as much. In fact, permit any suffix of the serial number.

This commit is contained in:
Heikki Hannikainen
2015-02-23 21:44:22 +02:00
committed by Heikki Hannikainen
parent c9f8bb2a05
commit 8e21b9882f

View File

@ -268,15 +268,27 @@ libusb_device_handle* hackrf_open_usb(const char* const desired_serial_number)
libusb_device_handle* usb_device = NULL; libusb_device_handle* usb_device = NULL;
libusb_device** devices = NULL; libusb_device** devices = NULL;
const ssize_t list_length = libusb_get_device_list(g_libusb_context, &devices); const ssize_t list_length = libusb_get_device_list(g_libusb_context, &devices);
int match_len = 0;
printf("Number of USB devices: %ld\n", list_length); printf("Number of USB devices: %ld\n", list_length);
if( desired_serial_number ) {
/* If a shorter serial number is specified, only match against the suffix.
* Should probably complain if the match is not unique, currently doesn't.
*/
match_len = strlen(desired_serial_number);
if ( match_len > 32 )
return NULL;
}
for (ssize_t i=0; i<list_length; i++) { for (ssize_t i=0; i<list_length; i++) {
struct libusb_device_descriptor device_descriptor; struct libusb_device_descriptor device_descriptor;
libusb_get_device_descriptor(devices[i], &device_descriptor); libusb_get_device_descriptor(devices[i], &device_descriptor);
if( device_descriptor.idVendor == hackrf_usb_vid ) { if( device_descriptor.idVendor == hackrf_usb_vid ) {
if( (device_descriptor.idProduct == hackrf_one_usb_pid) || (device_descriptor.idProduct == hackrf_jawbreaker_usb_pid) ) { if( (device_descriptor.idProduct == hackrf_one_usb_pid) || (device_descriptor.idProduct == hackrf_jawbreaker_usb_pid) ) {
printf("%4x:%4x", device_descriptor.idVendor, device_descriptor.idProduct); printf("%4x:%4x", device_descriptor.idVendor, device_descriptor.idProduct);
if( desired_serial_number != NULL ) { if( desired_serial_number != NULL ) {
const uint_fast8_t serial_descriptor_index = device_descriptor.iSerialNumber; const uint_fast8_t serial_descriptor_index = device_descriptor.iSerialNumber;
if( serial_descriptor_index > 0 ) { if( serial_descriptor_index > 0 ) {
@ -289,7 +301,7 @@ libusb_device_handle* hackrf_open_usb(const char* const desired_serial_number)
if( serial_number_length == 32 ) { if( serial_number_length == 32 ) {
serial_number[32] = 0; serial_number[32] = 0;
printf(" %s", serial_number); printf(" %s", serial_number);
if( strncmp(serial_number, desired_serial_number, 32) == 0 ) { if( strncmp(serial_number + 32-match_len, desired_serial_number, match_len) == 0 ) {
printf(" match\n"); printf(" match\n");
break; break;
} else { } else {