diff --git a/hardware/asix-sigma/asix-sigma.c b/hardware/asix-sigma/asix-sigma.c index c44bae7a..7e4b3caa 100644 --- a/hardware/asix-sigma/asix-sigma.c +++ b/hardware/asix-sigma/asix-sigma.c @@ -1073,13 +1073,20 @@ static int download_capture(struct sr_dev_inst *sdi) { struct dev_context *devc = sdi->priv; const int chunks_per_read = 32; - unsigned char buf[chunks_per_read * CHUNK_SIZE]; + struct sigma_dram_line *dram_line; + unsigned char *buf; int bufsz, i, numchunks, newchunks; uint32_t stoppos, triggerpos; int triggerchunk, chunks_downloaded; struct sr_datafeed_packet packet; uint8_t modestatus; + dram_line = g_try_malloc0(chunks_per_read * sizeof(*dram_line)); + if (!dram_line) + return FALSE; + + buf = (unsigned char *)dram_line; + sr_info("Downloading sample data."); /* Stop acquisition. */ @@ -1143,6 +1150,8 @@ static int download_capture(struct sr_dev_inst *sdi) dev_acquisition_stop(sdi, sdi); + g_free(dram_line); + return TRUE; } diff --git a/hardware/asix-sigma/asix-sigma.h b/hardware/asix-sigma/asix-sigma.h index 19330643..87c92fb7 100644 --- a/hardware/asix-sigma/asix-sigma.h +++ b/hardware/asix-sigma/asix-sigma.h @@ -76,6 +76,25 @@ enum sigma_read_register { #define CHUNK_SIZE 1024 +/* + * The entire ASIX Sigma DRAM is an array of struct sigma_dram_line[1024]; + */ + +/* One "DRAM cluster" contains a timestamp and 7 samples, 16b total. */ +struct sigma_dram_cluster { + uint8_t timestamp_lo; + uint8_t timestamp_hi; + struct { + uint8_t sample_hi; + uint8_t sample_lo; + } samples[7]; +}; + +/* One "DRAM line" contains 64 "DRAM clusters", 1024b total. */ +struct sigma_dram_line { + struct sigma_dram_cluster cluster[64]; +}; + struct clockselect_50 { uint8_t async; uint8_t fraction;