X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Frdtech-um%2Fapi.c;h=3f086ae63f2a0e16518581b95bf3e1edde5f9917;hb=bc9aa94b92c5ac0271769af4605992d7a38e65bc;hp=fbc38b1aadcbd1570608a7456bcb8d1fdce61367;hpb=8b607a24e7e7dec8b65963281b9cb43a0c5ba0a6;p=libsigrok.git diff --git a/src/hardware/rdtech-um/api.c b/src/hardware/rdtech-um/api.c index fbc38b1a..3f086ae6 100644 --- a/src/hardware/rdtech-um/api.c +++ b/src/hardware/rdtech-um/api.c @@ -17,17 +17,16 @@ * along with this program. If not, see . */ - #include + #include -#include -#include #include +#include #include +#include +#include -#include #include "libsigrok-internal.h" - #include "protocol.h" #define RDTECH_UM_SERIALCOMM "115200/8n1" @@ -47,14 +46,16 @@ static const uint32_t devopts[] = { SR_CONF_LIMIT_MSEC | SR_CONF_SET, }; -static GSList *rdtech_um_scan(struct sr_dev_driver *di, const char *conn, - const char *serialcomm) +static GSList *rdtech_um_scan(struct sr_dev_driver *di, + const char *conn, const char *serialcomm) { struct sr_serial_dev_inst *serial; - const struct rdtech_um_profile *p = NULL; - GSList *devices = NULL; - struct dev_context *devc = NULL; - struct sr_dev_inst *sdi = NULL; + const struct rdtech_um_profile *p; + GSList *devices; + struct dev_context *devc; + struct sr_dev_inst *sdi; + size_t ch_idx; + const char *name; serial = sr_serial_dev_inst_new(conn, serialcomm); if (serial_open(serial, SERIAL_RDWR) != SR_OK) @@ -66,25 +67,23 @@ static GSList *rdtech_um_scan(struct sr_dev_driver *di, const char *conn, goto err_out_serial; } - devc = g_malloc0(sizeof(struct dev_context)); - sdi = g_malloc0(sizeof(struct sr_dev_inst)); - + devc = g_malloc0(sizeof(*devc)); sr_sw_limits_init(&devc->limits); devc->profile = p; + sdi = g_malloc0(sizeof(*sdi)); + sdi->priv = devc; sdi->status = SR_ST_INACTIVE; sdi->vendor = g_strdup("RDTech"); sdi->model = g_strdup(p->model_name); sdi->version = NULL; sdi->inst_type = SR_INST_SERIAL; sdi->conn = serial; - sdi->priv = devc; - for (int i = 0; p->channels[i].name; i++) - sr_channel_new(sdi, i, SR_CHANNEL_ANALOG, TRUE, - p->channels[i].name); + for (ch_idx = 0; (name = p->channels[ch_idx].name); ch_idx++) + sr_channel_new(sdi, ch_idx, SR_CHANNEL_ANALOG, TRUE, name); - devices = g_slist_append(devices, sdi); + devices = g_slist_append(NULL, sdi); serial_close(serial); if (!devices) sr_serial_dev_inst_free(serial); @@ -101,11 +100,14 @@ err_out: static GSList *scan(struct sr_dev_driver *di, GSList *options) { + const char *conn; + const char *serialcomm; + GSList *l; struct sr_config *src; - const char *conn = NULL; - const char *serialcomm = RDTECH_UM_SERIALCOMM; - for (GSList *l = options; l; l = l->next) { + conn = NULL; + serialcomm = RDTECH_UM_SERIALCOMM; + for (l = options; l; l = l->next) { src = l->data; switch (src->key) { case SR_CONF_CONN: @@ -123,7 +125,7 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) } static int config_set(uint32_t key, GVariant *data, - const struct sr_dev_inst *sdi, const struct sr_channel_group *cg) + const struct sr_dev_inst *sdi, const struct sr_channel_group *cg) { struct dev_context *devc; @@ -135,23 +137,25 @@ static int config_set(uint32_t key, GVariant *data, } static int config_list(uint32_t key, GVariant **data, - const struct sr_dev_inst *sdi, const struct sr_channel_group *cg) + const struct sr_dev_inst *sdi, const struct sr_channel_group *cg) { return STD_CONFIG_LIST(key, data, sdi, cg, scanopts, drvopts, devopts); } static int dev_acquisition_start(const struct sr_dev_inst *sdi) { - struct dev_context *devc = sdi->priv; - struct sr_serial_dev_inst *serial = sdi->conn; + struct dev_context *devc; + struct sr_serial_dev_inst *serial; + devc = sdi->priv; sr_sw_limits_acquisition_start(&devc->limits); std_session_send_df_header(sdi); + serial = sdi->conn; serial_source_add(sdi->session, serial, G_IO_IN, 50, - rdtech_um_receive_data, (void *)sdi); + rdtech_um_receive_data, (void *)sdi); - return rdtech_um_poll(sdi); + return rdtech_um_poll(sdi, TRUE); } static struct sr_dev_driver rdtech_um_driver_info = {