asix-sigma: comment on trigger/stop position, silence warning

Add a comment on the logic which skips the upper 64 bytes of a 512 bytes
chunk in the Asix Sigma's sample memory. Move the initial assignment and
the subsequent update from a value which was retrieved from a hardware
register closer together for awareness during maintenance. Pre-setting a
high position value that will never match when the feature is not in use
is very appropriate.

Adjust the sigma_read_pos() routine to handle triggerpos identically to
stoppos. The test condition's intention is to check whether a decrement
of the position ends up in the meta data section of a chunk. The previous
implementation tested whether a pointer to the position variable ended in
0x1ff when decremented -- which is unrelated to the driver's operation.
It's assumed that no harm was done because the trigger feature is
unsupported (see bug #359).

This silences the compiler warning reported in bug #1411.
This commit is contained in:
Gerhard Sittig 2019-12-19 20:30:00 +01:00
parent a16198316f
commit dc40081706
1 changed files with 11 additions and 5 deletions

View File

@ -168,11 +168,17 @@ static int sigma_read_pos(uint32_t *stoppos, uint32_t *triggerpos,
*triggerpos = result[0] | (result[1] << 8) | (result[2] << 16);
*stoppos = result[3] | (result[4] << 8) | (result[5] << 16);
/* Not really sure why this must be done, but according to spec. */
/*
* These "position" values point to after the event (end of
* capture data, trigger condition matched). This is why they
* get decremented here. Sample memory consists of 512-byte
* chunks with meta data in the upper 64 bytes. Thus when the
* decrements takes us into this upper part of the chunk, then
* further move backwards to the end of the chunk's data part.
*/
if ((--*stoppos & 0x1ff) == 0x1ff)
*stoppos -= 64;
if ((*--triggerpos & 0x1ff) == 0x1ff)
if ((--*triggerpos & 0x1ff) == 0x1ff)
*triggerpos -= 64;
return 1;
@ -1009,8 +1015,6 @@ static int download_capture(struct sr_dev_inst *sdi)
devc = sdi->priv;
dl_events_in_line = 64 * 7;
trg_line = ~0;
trg_event = ~0;
dram_line = g_try_malloc0(chunks_per_read * sizeof(*dram_line));
if (!dram_line)
@ -1038,6 +1042,8 @@ static int download_capture(struct sr_dev_inst *sdi)
/* Check if trigger has fired. */
modestatus = sigma_get_register(READ_MODE, devc);
trg_line = ~0;
trg_event = ~0;
if (modestatus & RMR_TRIGGERED) {
trg_line = triggerpos >> 9;
trg_event = triggerpos & 0x1ff;