Skip to content

Commit

Permalink
hosted: Add libusb_device to probe info structure and implement usage
Browse files Browse the repository at this point in the history
hosted: Fix accidental typo in probe_info struct
  • Loading branch information
sidprice authored and dragonmux committed Jul 18, 2023
1 parent 6eaed96 commit 9cdd35f
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 8 deletions.
6 changes: 3 additions & 3 deletions src/platforms/hosted/bmp_libusb.c
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ probe_info_s *process_ftdi_probe(void)
}
if (add_probe)
probe_list = probe_info_add_by_id(
probe_list, BMP_TYPE_FTDI, vid, pid, manufacturer, product, serial, strdup("---"));
probe_list, BMP_TYPE_FTDI, NULL, vid, pid, manufacturer, product, serial, strdup("---"));
else {
free(serial);
free(product);
Expand Down Expand Up @@ -300,7 +300,7 @@ bool process_cmsis_interface_probe(
else
product = get_device_descriptor_string(handle, device_descriptor->iProduct);

*probe_list = probe_info_add_by_id(*probe_list, BMP_TYPE_CMSIS_DAP, device_descriptor->idVendor,
*probe_list = probe_info_add_by_id(*probe_list, BMP_TYPE_CMSIS_DAP, device, device_descriptor->idVendor,
device_descriptor->idProduct, manufacturer, product, serial, version);
cmsis_dap = true;
}
Expand Down Expand Up @@ -359,7 +359,7 @@ bool process_vid_pid_table_probe(
if (version == NULL)
version = strdup("---");

*probe_list = probe_info_add_by_id(*probe_list, probe_type, device_descriptor->idVendor,
*probe_list = probe_info_add_by_id(*probe_list, probe_type, device, device_descriptor->idVendor,
device_descriptor->idProduct, manufacturer, product, serial, version);
probe_added = true;
libusb_close(handle);
Expand Down
20 changes: 17 additions & 3 deletions src/platforms/hosted/probe_info.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,15 @@
probe_info_s *probe_info_add_by_serial(probe_info_s *const list, const bmp_type_t type, const char *const mfr,
const char *const product, const char *const serial, const char *const version)
{
return probe_info_add_by_id(list, type, 0, 0, mfr, product, serial, version);
return probe_info_add_by_id(list, type, NULL, 0, 0, mfr, product, serial, version);
}

probe_info_s *probe_info_add_by_id(probe_info_s *const list, const bmp_type_t type, uint16_t vid, uint16_t pid,
const char *const mfr, const char *const product, const char *const serial, const char *const version)
probe_info_s *probe_info_add_by_id(probe_info_s *const list, const bmp_type_t type, libusb_device *device, uint16_t vid,
uint16_t pid, const char *const mfr, const char *const product, const char *const serial, const char *const version)
{
#if HOSTED_BMP_ONLY == 1
(void)device;
#endif
probe_info_s *probe_info = malloc(sizeof(*probe_info));
if (!probe_info) {
DEBUG_INFO("Fatal: Failed to allocate memory for a probe info structure\n");
Expand All @@ -53,6 +56,10 @@ probe_info_s *probe_info_add_by_id(probe_info_s *const list, const bmp_type_t ty
probe_info->type = type;
probe_info->vid = vid;
probe_info->pid = pid;
#if HOSTED_BMP_ONLY == 0
if (device != NULL)
probe_info->device = libusb_ref_device(device);
#endif
probe_info->manufacturer = mfr;
probe_info->product = product;
probe_info->serial = serial;
Expand All @@ -72,6 +79,10 @@ size_t probe_info_count(const probe_info_s *const list)

void probe_info_free(probe_info_s *const probe_info)
{
#if HOSTED_BMP_ONLY == 0
if (probe_info->device)
libusb_unref_device(probe_info->device);
#endif
free((void *)probe_info->manufacturer);
free((void *)probe_info->product);
free((void *)probe_info->serial);
Expand Down Expand Up @@ -135,4 +146,7 @@ void probe_info_to_bmp_info(const probe_info_s *const probe, bmp_info_s *info)
DEBUG_ERROR("Probe descriptor string '%s (%s)' exceeds allowable manufacturer description length\n",
probe->product, probe->manufacturer);
}
#if HOSTED_BMP_ONLY == 0
info->libusb_dev = libusb_ref_device(probe->device);
#endif
}
11 changes: 9 additions & 2 deletions src/platforms/hosted/probe_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,17 @@
#include "platform.h"
#include "bmp_hosted.h"

#if HOSTED_BMP_ONLY == 1
typedef struct usb_device libusb_device;
#endif

typedef struct probe_info {
bmp_type_t type;
uint16_t vid;
uint16_t pid;
#if HOSTED_BMP_ONLY == 0
libusb_device *device;
#endif
const char *manufacturer;
const char *product;
const char *serial;
Expand All @@ -52,8 +59,8 @@ typedef struct probe_info {

probe_info_s *probe_info_add_by_serial(
probe_info_s *list, bmp_type_t type, const char *mfr, const char *product, const char *serial, const char *version);
probe_info_s *probe_info_add_by_id(probe_info_s *const list, const bmp_type_t type, uint16_t vid, uint16_t pid,
const char *const mfr, const char *const product, const char *const serial, const char *const version);
probe_info_s *probe_info_add_by_id(probe_info_s *list, bmp_type_t type, libusb_device *device, uint16_t vid,
uint16_t pid, const char *mfr, const char *product, const char *serial, const char *version);
size_t probe_info_count(const probe_info_s *list);
void probe_info_list_free(const probe_info_s *list);

Expand Down

0 comments on commit 9cdd35f

Please sign in to comment.