Introduce helper routines to access the sample data that is provided by
the ASIX hardware, as well as the buffer which accumulates logic data
before it gets sent to the session's datafeed.
This hides endianess issues from call sites, and prepares access to
memory layout which varies with sample frequencies.
This commit is based on work done by jry@.
return (cluster->timestamp_hi << 8) | cluster->timestamp_lo;
}
return (cluster->timestamp_hi << 8) | cluster->timestamp_lo;
}
+/*
+ * Return one 16bit data entity of a DRAM cluster at the specified index.
+ */
+static uint16_t sigma_dram_cluster_data(struct sigma_dram_cluster *cl, int idx)
+{
+ uint16_t sample;
+
+ sample = 0;
+ sample |= cl->samples[idx].sample_lo << 0;
+ sample |= cl->samples[idx].sample_hi << 8;
+ return sample;
+}
+
+static void store_sr_sample(uint8_t *samples, int idx, uint16_t data)
+{
+ samples[2 * idx + 0] = (data >> 0) & 0xff;
+ samples[2 * idx + 1] = (data >> 8) & 0xff;
+}
+
static void sigma_decode_dram_cluster(struct sigma_dram_cluster *dram_cluster,
unsigned int events_in_cluster,
unsigned int triggered,
static void sigma_decode_dram_cluster(struct sigma_dram_cluster *dram_cluster,
unsigned int events_in_cluster,
unsigned int triggered,
struct sigma_state *ss = &devc->state;
struct sr_datafeed_packet packet;
struct sr_datafeed_logic logic;
struct sigma_state *ss = &devc->state;
struct sr_datafeed_packet packet;
struct sr_datafeed_logic logic;
+ uint16_t tsdiff, ts, sample;
uint8_t samples[2048];
unsigned int i;
uint8_t samples[2048];
unsigned int i;
*/
for (ts = 0; ts < tsdiff; ts++) {
i = ts % 1024;
*/
for (ts = 0; ts < tsdiff; ts++) {
i = ts % 1024;
- samples[2 * i + 0] = ss->lastsample & 0xff;
- samples[2 * i + 1] = ss->lastsample >> 8;
+ store_sr_sample(samples, i, ss->lastsample);
/*
* If we have 1024 samples ready or we're at the
/*
* If we have 1024 samples ready or we're at the
* Parse the samples in current cluster and prepare them
* to be submitted to Sigrok.
*/
* Parse the samples in current cluster and prepare them
* to be submitted to Sigrok.
*/
for (i = 0; i < events_in_cluster; i++) {
for (i = 0; i < events_in_cluster; i++) {
- samples[2 * i + 1] = dram_cluster->samples[i].sample_lo;
- samples[2 * i + 0] = dram_cluster->samples[i].sample_hi;
+ sample = sigma_dram_cluster_data(dram_cluster, i);
+ store_sr_sample(samples, i, sample);
sr_session_send(sdi, &packet);
}
sr_session_send(sdi, &packet);
}
- ss->lastsample =
- samples[2 * (events_in_cluster - 1) + 0] |
- (samples[2 * (events_in_cluster - 1) + 1] << 8);
-
+ ss->lastsample = sample;