]> sigrok.org Git - libsigrok.git/blobdiff - hardware/zeroplus-logic-cube/zeroplus.c
output_vcd: Remember samples between packets.
[libsigrok.git] / hardware / zeroplus-logic-cube / zeroplus.c
index 791202d90dc611ab9154dec5d014e4ed15472d7b..1c5f2cef0488d128ed0a2a1e30838f14a9aedebe 100644 (file)
@@ -140,7 +140,7 @@ static unsigned int get_memory_size(int type)
                return 0;
 }
 
-static int opendev3(struct sigrok_device_instance **sdi, libusb_device *dev,
+static int opendev4(struct sigrok_device_instance **sdi, libusb_device *dev,
                    struct libusb_device_descriptor *des)
 {
        unsigned int i;
@@ -205,7 +205,7 @@ struct sigrok_device_instance *zp_open_device(int device_index)
                libusb_get_device_list(usb_context, &devlist);
                for (i = 0; devlist[i]; i++) {
                        /* TODO: Error handling. */
-                       err = opendev3(&sdi, devlist[i], &des);
+                       err = opendev4(&sdi, devlist[i], &des);
                }
        } else {
                /* Status must be ST_ACTIVE, i.e. already in use... */
@@ -280,7 +280,7 @@ static int hw_init(char *deviceinfo)
        libusb_device **devlist;
        int err, devcnt, i;
 
-       /* QUICK HACK */
+       /* Avoid compiler warnings. */
        deviceinfo = deviceinfo;
 
        if (libusb_init(&usb_context) != 0) {
@@ -340,7 +340,6 @@ static int hw_opendev(int device_index)
        }
        analyzer_reset(sdi->usb->devhdl);
        analyzer_initialize(sdi->usb->devhdl);
-       analyzer_configure(sdi->usb->devhdl);
 
        analyzer_set_memory_size(MEMORY_SIZE_512K);
        // analyzer_set_freq(g_freq, g_freq_scale);
@@ -444,7 +443,7 @@ static int *hw_get_capabilities(void)
 /* TODO: This will set the same samplerate for all devices. */
 static int set_configuration_samplerate(uint64_t samplerate)
 {
-       g_message("%s(%llu)", __FUNCTION__, samplerate);
+       g_message("%s(%" PRIu64 ")", __FUNCTION__, samplerate);
        if (samplerate > MHZ(1))
                analyzer_set_freq(samplerate / MHZ(1), FREQ_SCALE_MHZ);
        else if (samplerate > KHZ(1))
@@ -472,7 +471,8 @@ static int hw_set_configuration(int device_index, int capability, void *value)
        case HWCAP_PROBECONFIG:
                return configure_probes((GSList *) value);
        case HWCAP_LIMIT_SAMPLES:
-               limit_samples = strtoull(value, NULL, 10);
+               tmp_u64 = value;
+               limit_samples = *tmp_u64;
                return SIGROK_OK;
        default:
                return SIGROK_ERR;
@@ -491,6 +491,9 @@ static int hw_start_acquisition(int device_index, gpointer session_device_id)
        if (!(sdi = get_sigrok_device_instance(device_instances, device_index)))
                return SIGROK_ERR;
 
+       /* push configured settings to device */
+       analyzer_configure(sdi->usb->devhdl);
+
        analyzer_start(sdi->usb->devhdl);
        g_message("Waiting for data");
        analyzer_wait_data(sdi->usb->devhdl);
@@ -509,7 +512,8 @@ static int hw_start_acquisition(int device_index, gpointer session_device_id)
        gettimeofday(&header.starttime, NULL);
        header.samplerate = cur_samplerate;
        header.protocol_id = PROTO_RAW;
-       header.num_probes = num_channels;
+       header.num_logic_probes = num_channels;
+       header.num_analog_probes = 0;
        session_bus(session_device_id, &packet);
 
        buf = g_malloc(PACKET_SIZE);
@@ -525,8 +529,9 @@ static int hw_start_acquisition(int device_index, gpointer session_device_id)
                          PACKET_SIZE, res);
 #endif
 
-               packet.type = DF_LOGIC32;
+               packet.type = DF_LOGIC;
                packet.length = PACKET_SIZE;
+               packet.unitsize = 4;
                packet.payload = buf;
                session_bus(session_device_id, &packet);
        }