X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fipdbg-logic-analyser%2Fapi.c;h=98512a1495be06574ed1219c8f8bcf4becd583d6;hb=a66099c6fa4f1b9e8b42bab1f980acc1d5aa452a;hp=9bbbfe01faf6b6e6a20d1bf03c39c98f9f41ce3c;hpb=a4210e1890bbdae354c64fd903784bdebb1aaa51;p=libsigrok.git diff --git a/src/hardware/ipdbg-logic-analyser/api.c b/src/hardware/ipdbg-logic-analyser/api.c index 9bbbfe01..98512a14 100644 --- a/src/hardware/ipdbg-logic-analyser/api.c +++ b/src/hardware/ipdbg-logic-analyser/api.c @@ -30,9 +30,9 @@ static const uint32_t ipdbg_org_la_scanopts[] = { }; static const uint32_t ipdbg_org_la_devopts[] = { - SR_CONF_TRIGGER_MATCH | SR_CONF_LIST, + SR_CONF_TRIGGER_MATCH | SR_CONF_LIST| SR_CONF_SET, SR_CONF_CAPTURE_RATIO | SR_CONF_GET | SR_CONF_SET, - SR_CONF_LIMIT_SAMPLES | SR_CONF_GET | SR_CONF_SET, + SR_CONF_LIMIT_SAMPLES | SR_CONF_GET }; static const int32_t ipdbg_org_la_trigger_matches[] = { @@ -40,7 +40,7 @@ static const int32_t ipdbg_org_la_trigger_matches[] = { SR_TRIGGER_ONE, SR_TRIGGER_RISING, SR_TRIGGER_FALLING, - //SR_TRIGGER_EDGE, + SR_TRIGGER_EDGE, }; SR_PRIV struct sr_dev_driver ipdbg_la_driver_info; @@ -123,10 +123,10 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) ipdbg_org_la_get_addrwidth_and_datawidth(tcp, devc); sr_err("addr_width = %d, data_width = %d\n", devc->ADDR_WIDTH, devc->DATA_WIDTH); - sr_err("limit samples = %d\n", devc->limit_samples); + sr_err("limit samples = %d\n", devc->limit_samples_max); ///////////////////////////////////////////////////////////////////////////////////////////////////////// - for (int i = 0; i < devc->DATA_WIDTH; i++) + for (unsigned int i = 0; i < devc->DATA_WIDTH; i++) { snprintf(buff, bufSize, "ch%d", i); sr_channel_new(sdi, i, SR_CHANNEL_LOGIC, TRUE, buff); @@ -135,17 +135,17 @@ static GSList *scan(struct sr_dev_driver *di, GSList *options) sdi->inst_type = SR_INST_USER; sdi->conn = tcp; - drvc->instances = g_slist_append(drvc->instances, sdi); - devices = g_slist_append(devices, sdi); - ipdbg_org_la_tcp_close(tcp); - return devices; + //drvc->instances = g_slist_append(drvc->instances, sdi); + devices = g_slist_append(devices, sdi); + + return std_scan_complete(di, devices); } static int dev_clear(const struct sr_dev_driver *di) { - sr_err("dev_clear\n"); + //sr_err("dev_clear\n"); struct drv_context *drvc = di->context; struct sr_dev_inst *sdi; @@ -170,7 +170,7 @@ static int dev_clear(const struct sr_dev_driver *di) static int dev_open(struct sr_dev_inst *sdi) { - sr_err("dev_open\n"); + //sr_err("dev_open\n"); (void)sdi; /* TODO: get handle from sdi->conn and open it. */ @@ -180,10 +180,8 @@ static int dev_open(struct sr_dev_inst *sdi) if (!tcp) { - sr_err("Out of memory\n"); return SR_ERR; } - sdi->conn = tcp; if(ipdbg_org_la_tcp_open(tcp) != SR_OK) return SR_ERR; @@ -198,10 +196,11 @@ static int dev_close(struct sr_dev_inst *sdi) (void)sdi; /* TODO: get handle from sdi->conn and close it. */ - sr_err("dev_close\n"); + //sr_err("dev_close\n"); /// should be called before a new call to scan() struct ipdbg_org_la_tcp *tcp = sdi->conn; - ipdbg_org_la_tcp_close(tcp); + if(tcp) + ipdbg_org_la_tcp_close(tcp); sdi->conn = NULL; @@ -247,7 +246,7 @@ static int config_set(uint32_t key, GVariant *data, if (sdi->status != SR_ST_ACTIVE) return SR_ERR_DEV_CLOSED; - sr_err("config_set\n"); + //sr_err("config_set\n"); struct ipdbg_org_la_dev_context *devc = sdi->priv; ret = SR_OK; @@ -310,19 +309,9 @@ static int init(struct sr_dev_driver *di, struct sr_context *sr_ctx) return std_init(di, sr_ctx); } -static int cleanup(const struct sr_dev_driver *di) -{ - sr_err("cleanup\n"); - dev_clear(di); - - //return std_cleanup(di); - return SR_OK; -} - static GSList *dev_list(const struct sr_dev_driver *di) { - //return std_dev_list(di); - return ((struct drv_context *) (di->context))-> instances; + return ((struct drv_context *) (di->context))->instances; } static int dev_acquisition_start(const struct sr_dev_inst *sdi) @@ -335,29 +324,29 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi) struct ipdbg_org_la_dev_context *devc = sdi->priv; ipdbg_org_la_convert_trigger(sdi); - sr_err("dev_acquisition_start\n"); + //sr_err("dev_acquisition_start\n"); /* Send Triggerkonviguration */ ipdbg_org_la_sendTrigger(devc, tcp); - sr_err("dev_acquisition_start1\n"); + //sr_err("dev_acquisition_start1\n"); /* Send Delay */ ipdbg_org_la_sendDelay(devc, tcp); - sr_err("dev_acquisition_start2\n"); + //sr_err("dev_acquisition_start2\n"); //std_session_send_df_header(sdi, LOG_PREFIX); std_session_send_df_header(sdi); - sr_err("dev_acquisition_start3\n"); + //sr_err("dev_acquisition_start3\n"); /* If the device stops sending for longer than it takes to send a byte, * that means it's finished. But wait at least 100 ms to be safe. */ //sr_session_source_add(sdi->session, -1, G_IO_IN, 100, ipdbg_receive_data, (struct sr_dev_inst *)sdi); //sr_session_source_add(sdi->session, -1, G_IO_IN, 100, ipdbg_org_la_receive_data, NULL); sr_session_source_add(sdi->session, tcp->socket, G_IO_IN, 100, ipdbg_org_la_receive_data, (struct sr_dev_inst *)sdi); - sr_err("dev_acquisition_start4\n"); + //sr_err("dev_acquisition_start4\n"); ipdbg_org_la_sendStart(tcp); - sr_err("dev_acquisition_start5\n"); + //sr_err("dev_acquisition_start5\n"); /* TODO: configure hardware, reset acquisition state, set up * callbacks and send header packet. */ @@ -382,7 +371,7 @@ SR_PRIV struct sr_dev_driver ipdbg_la_driver_info = { .longname = "ipdbg.org logic analyzer", .api_version = 1, .init = init, - .cleanup = cleanup, + .cleanup = std_cleanup, .scan = scan, .dev_list = dev_list, .dev_clear = dev_clear,