From 48a486cd3ed51cfefce271224541502f4388c225 Mon Sep 17 00:00:00 2001 From: Bert Vermeulen Date: Wed, 25 Jul 2012 00:20:06 +0200 Subject: [PATCH] sr: code organization cleanup Device-specific functions (public and private) go in device.c, more general driver-related code in hwdriver.c --- device.c | 100 +++++++++++++++++++++++++++++++++++++++++ hwdriver.c | 104 +------------------------------------------ libsigrok-internal.h | 41 +++++++++-------- proto.h | 4 +- 4 files changed, 126 insertions(+), 123 deletions(-) diff --git a/device.c b/device.c index 528a2af1..53333114 100644 --- a/device.c +++ b/device.c @@ -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); +} + diff --git a/hwdriver.c b/hwdriver.c index d1181a2f..118e49a2 100644 --- a/hwdriver.c +++ b/hwdriver.c @@ -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. * diff --git a/libsigrok-internal.h b/libsigrok-internal.h index 1d93d9e5..b45b0786 100644 --- a/libsigrok-internal.h +++ b/libsigrok-internal.h @@ -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); diff --git a/proto.h b/proto.h index d79e017b..7ac3d09e 100644 --- a/proto.h +++ b/proto.h @@ -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 -------------------------------------------------------------*/