]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/ipdbg-logic-analyser/api.c
ipdbg-la: add edge trigger option
[libsigrok.git] / src / hardware / ipdbg-logic-analyser / api.c
index 9bbbfe01faf6b6e6a20d1bf03c39c98f9f41ce3c..98512a1495be06574ed1219c8f8bcf4becd583d6 100644 (file)
@@ -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,