sr: code organization cleanup

Device-specific functions (public and private) go in device.c,
more general driver-related code in hwdriver.c
This commit is contained in:
Bert Vermeulen 2012-07-25 00:20:06 +02:00
parent 87ca93c504
commit 48a486cd3e
4 changed files with 126 additions and 123 deletions

100
device.c
View File

@ -22,6 +22,25 @@
#include "libsigrok.h"
#include "libsigrok-internal.h"
SR_PRIV struct sr_probe *sr_probe_new(int index, int type,
gboolean enabled, const char *name)
{
struct sr_probe *probe;
if (!(probe = g_try_malloc0(sizeof(struct sr_probe)))) {
sr_err("hwdriver: probe malloc failed");
return NULL;
}
probe->index = index;
probe->type = type;
probe->enabled = enabled;
if (name)
probe->name = g_strdup(name);
return probe;
}
/**
* Set the name of the specified probe in the specified device.
*
@ -165,3 +184,84 @@ SR_API gboolean sr_dev_has_hwcap(const struct sr_dev_inst *sdi, int hwcap)
return FALSE;
}
SR_PRIV struct sr_dev_inst *sr_dev_inst_new(int index, int status,
const char *vendor, const char *model, const char *version)
{
struct sr_dev_inst *sdi;
if (!(sdi = g_try_malloc(sizeof(struct sr_dev_inst)))) {
sr_err("hwdriver: %s: sdi malloc failed", __func__);
return NULL;
}
sdi->index = index;
sdi->status = status;
sdi->inst_type = -1;
sdi->vendor = vendor ? g_strdup(vendor) : NULL;
sdi->model = model ? g_strdup(model) : NULL;
sdi->version = version ? g_strdup(version) : NULL;
sdi->probes = NULL;
sdi->priv = NULL;
return sdi;
}
SR_PRIV void sr_dev_inst_free(struct sr_dev_inst *sdi)
{
g_free(sdi->priv);
g_free(sdi->vendor);
g_free(sdi->model);
g_free(sdi->version);
g_free(sdi);
}
#ifdef HAVE_LIBUSB_1_0
SR_PRIV struct sr_usb_dev_inst *sr_usb_dev_inst_new(uint8_t bus,
uint8_t address, struct libusb_device_handle *hdl)
{
struct sr_usb_dev_inst *udi;
if (!(udi = g_try_malloc(sizeof(struct sr_usb_dev_inst)))) {
sr_err("hwdriver: %s: udi malloc failed", __func__);
return NULL;
}
udi->bus = bus;
udi->address = address;
udi->devhdl = hdl;
return udi;
}
SR_PRIV void sr_usb_dev_inst_free(struct sr_usb_dev_inst *usb)
{
/* Avoid compiler warnings. */
(void)usb;
/* Nothing to do for this device instance type. */
}
#endif
SR_PRIV struct sr_serial_dev_inst *sr_serial_dev_inst_new(const char *port,
int fd)
{
struct sr_serial_dev_inst *serial;
if (!(serial = g_try_malloc(sizeof(struct sr_serial_dev_inst)))) {
sr_err("hwdriver: %s: serial malloc failed", __func__);
return NULL;
}
serial->port = g_strdup(port);
serial->fd = fd;
return serial;
}
SR_PRIV void sr_serial_dev_inst_free(struct sr_serial_dev_inst *serial)
{
g_free(serial->port);
}

View File

@ -210,106 +210,6 @@ SR_API int sr_info_get(struct sr_dev_driver *driver, int id,
return ret;
}
SR_PRIV struct sr_dev_inst *sr_dev_inst_new(int index, int status,
const char *vendor, const char *model, const char *version)
{
struct sr_dev_inst *sdi;
if (!(sdi = g_try_malloc(sizeof(struct sr_dev_inst)))) {
sr_err("hwdriver: %s: sdi malloc failed", __func__);
return NULL;
}
sdi->index = index;
sdi->status = status;
sdi->inst_type = -1;
sdi->vendor = vendor ? g_strdup(vendor) : NULL;
sdi->model = model ? g_strdup(model) : NULL;
sdi->version = version ? g_strdup(version) : NULL;
sdi->probes = NULL;
sdi->priv = NULL;
return sdi;
}
SR_PRIV void sr_dev_inst_free(struct sr_dev_inst *sdi)
{
g_free(sdi->priv);
g_free(sdi->vendor);
g_free(sdi->model);
g_free(sdi->version);
g_free(sdi);
}
SR_PRIV struct sr_probe *sr_probe_new(int index, int type,
gboolean enabled, const char *name)
{
struct sr_probe *probe;
if (!(probe = g_try_malloc0(sizeof(struct sr_probe)))) {
sr_err("hwdriver: probe malloc failed");
return NULL;
}
probe->index = index;
probe->type = type;
probe->enabled = enabled;
if (name)
probe->name = g_strdup(name);
return probe;
}
#ifdef HAVE_LIBUSB_1_0
SR_PRIV struct sr_usb_dev_inst *sr_usb_dev_inst_new(uint8_t bus,
uint8_t address, struct libusb_device_handle *hdl)
{
struct sr_usb_dev_inst *udi;
if (!(udi = g_try_malloc(sizeof(struct sr_usb_dev_inst)))) {
sr_err("hwdriver: %s: udi malloc failed", __func__);
return NULL;
}
udi->bus = bus;
udi->address = address;
udi->devhdl = hdl;
return udi;
}
SR_PRIV void sr_usb_dev_inst_free(struct sr_usb_dev_inst *usb)
{
/* Avoid compiler warnings. */
(void)usb;
/* Nothing to do for this device instance type. */
}
#endif
SR_PRIV struct sr_serial_dev_inst *sr_serial_dev_inst_new(const char *port,
int fd)
{
struct sr_serial_dev_inst *serial;
if (!(serial = g_try_malloc(sizeof(struct sr_serial_dev_inst)))) {
sr_err("hwdriver: %s: serial malloc failed", __func__);
return NULL;
}
serial->port = g_strdup(port);
serial->fd = fd;
return serial;
}
SR_PRIV void sr_serial_dev_inst_free(struct sr_serial_dev_inst *serial)
{
g_free(serial->port);
}
/**
* Find out if a hardware driver has a specific capability.
*
@ -342,7 +242,7 @@ SR_API gboolean sr_driver_hwcap_exists(struct sr_dev_driver *driver, int hwcap)
}
/**
* Get a hardware driver option.
* Get information about a hardware driver option.
*
* @param hwopt The option to get.
*
@ -362,7 +262,7 @@ SR_API const struct sr_hwcap_option *sr_drvopt_get(int hwopt)
}
/**
* Get a hardware driver capability option.
* Get information about a device option.
*
* @param hwcap The capability to get.
*

View File

@ -56,7 +56,26 @@ struct sr_serial_dev_inst {
int fd;
};
/*--- log.c -----------------------------------------------------------------*/
SR_PRIV int sr_log(int loglevel, const char *format, ...);
SR_PRIV int sr_spew(const char *format, ...);
SR_PRIV int sr_dbg(const char *format, ...);
SR_PRIV int sr_info(const char *format, ...);
SR_PRIV int sr_warn(const char *format, ...);
SR_PRIV int sr_err(const char *format, ...);
/*--- device.c --------------------------------------------------------------*/
SR_PRIV struct sr_probe *sr_probe_new(int index, int type,
gboolean enabled, const char *name);
/* Generic device instances */
SR_PRIV struct sr_dev_inst *sr_dev_inst_new(int index, int status,
const char *vendor, const char *model, const char *version);
SR_PRIV void sr_dev_inst_free(struct sr_dev_inst *sdi);
#ifdef HAVE_LIBUSB_1_0
/* USB-specific instances */
SR_PRIV struct sr_usb_dev_inst *sr_usb_dev_inst_new(uint8_t bus,
uint8_t address, struct libusb_device_handle *hdl);
@ -68,35 +87,19 @@ SR_PRIV struct sr_serial_dev_inst *sr_serial_dev_inst_new(
const char *port, int fd);
SR_PRIV void sr_serial_dev_inst_free(struct sr_serial_dev_inst *serial);
/*--- log.c -----------------------------------------------------------------*/
SR_PRIV int sr_log(int loglevel, const char *format, ...);
SR_PRIV int sr_spew(const char *format, ...);
SR_PRIV int sr_dbg(const char *format, ...);
SR_PRIV int sr_info(const char *format, ...);
SR_PRIV int sr_warn(const char *format, ...);
SR_PRIV int sr_err(const char *format, ...);
/*--- hwdriver.c ------------------------------------------------------------*/
SR_PRIV void sr_hw_cleanup_all(void);
SR_PRIV int sr_source_remove(int fd);
SR_PRIV int sr_source_add(int fd, int events, int timeout,
sr_receive_data_callback_t cb, void *cb_data);
/*--- session.c -------------------------------------------------------------*/
SR_PRIV int sr_session_send(const struct sr_dev_inst *sdi,
struct sr_datafeed_packet *packet);
/* Generic device instances */
SR_PRIV struct sr_dev_inst *sr_dev_inst_new(int index, int status,
const char *vendor, const char *model, const char *version);
SR_PRIV void sr_dev_inst_free(struct sr_dev_inst *sdi);
SR_PRIV struct sr_probe *sr_probe_new(int index, int type,
gboolean enabled, const char *name);
SR_PRIV int sr_source_remove(int fd);
SR_PRIV int sr_source_add(int fd, int events, int timeout,
sr_receive_data_callback_t cb, void *cb_data);
/*--- hardware/common/serial.c ----------------------------------------------*/
SR_PRIV GSList *list_serial_ports(void);

View File

@ -67,11 +67,11 @@ SR_API int sr_filter_probes(int in_unitsize, int out_unitsize,
SR_API struct sr_dev_driver **sr_driver_list(void);
SR_API int sr_driver_init(struct sr_dev_driver *driver);
SR_API GSList *sr_driver_scan(struct sr_dev_driver *driver, GSList *options);
SR_API int sr_info_get(struct sr_dev_driver *driver, int id,
const void **data, const struct sr_dev_inst *sdi);
SR_API gboolean sr_driver_hwcap_exists(struct sr_dev_driver *driver, int hwcap);
SR_API const struct sr_hwcap_option *sr_drvopt_get(int hwopt);
SR_API const struct sr_hwcap_option *sr_hw_hwcap_get(int hwcap);
SR_API int sr_info_get(struct sr_dev_driver *driver, int id,
const void **data, const struct sr_dev_inst *sdi);
/*--- session.c -------------------------------------------------------------*/