hameg-hmo: Rephrase the channel constraints check (analog vs digital)

Phrase the logic which checks the use of analog channels and digital
pods in more generic terms. Place a comment about the contraints' being
potentially dependent on the specific HMO model. This implementation
should lend itself better to future adjustment (HMO1002?).
This commit is contained in:
Gerhard Sittig 2017-01-06 22:00:28 +01:00 committed by Uwe Hermann
parent e06875b2ce
commit 4889acefb2
2 changed files with 31 additions and 13 deletions

View File

@ -592,34 +592,50 @@ static int hmo_check_channels(GSList *channels)
{ {
GSList *l; GSList *l;
struct sr_channel *ch; struct sr_channel *ch;
gboolean enabled_pod1, enabled_pod2, enabled_chan3, enabled_chan4; gboolean enabled_chan[MAX_ANALOG_CHANNEL_COUNT];
gboolean enabled_pod[MAX_DIGITAL_GROUP_COUNT];
size_t idx;
enabled_pod1 = enabled_pod2 = enabled_chan3 = enabled_chan4 = FALSE; /* Preset "not enabled" for all channels / pods. */
for (idx = 0; idx < ARRAY_SIZE(enabled_chan); idx++)
enabled_chan[idx] = FALSE;
for (idx = 0; idx < ARRAY_SIZE(enabled_pod); idx++)
enabled_pod[idx] = FALSE;
/*
* Determine which channels / pods are required for the caller's
* specified configuration.
*/
for (l = channels; l; l = l->next) { for (l = channels; l; l = l->next) {
ch = l->data; ch = l->data;
switch (ch->type) { switch (ch->type) {
case SR_CHANNEL_ANALOG: case SR_CHANNEL_ANALOG:
if (ch->index == 2) idx = ch->index;
enabled_chan3 = TRUE; if (idx < ARRAY_SIZE(enabled_chan))
else if (ch->index == 3) enabled_chan[idx] = TRUE;
enabled_chan4 = TRUE;
break; break;
case SR_CHANNEL_LOGIC: case SR_CHANNEL_LOGIC:
if (ch->index < 8) idx = ch->index / 8;
enabled_pod1 = TRUE; if (idx < ARRAY_SIZE(enabled_pod))
else enabled_pod[idx] = TRUE;
enabled_pod2 = TRUE;
break; break;
default: default:
return SR_ERR; return SR_ERR;
} }
} }
if ((enabled_pod1 && enabled_chan3) || /*
(enabled_pod2 && enabled_chan4)) * Check for resource conflicts. Some channels can be either
* analog or digital, but never both at the same time.
*
* Note that the constraints might depend on the specific model.
* These tests might need some adjustment when support for more
* models gets added to the driver.
*/
if (enabled_pod[0] && enabled_chan[2])
return SR_ERR;
if (enabled_pod[1] && enabled_chan[3])
return SR_ERR; return SR_ERR;
return SR_OK; return SR_OK;
} }

View File

@ -30,6 +30,8 @@
#define MAX_INSTRUMENT_VERSIONS 10 #define MAX_INSTRUMENT_VERSIONS 10
#define MAX_COMMAND_SIZE 48 #define MAX_COMMAND_SIZE 48
#define MAX_ANALOG_CHANNEL_COUNT 4
#define MAX_DIGITAL_CHANNEL_COUNT 16
#define MAX_DIGITAL_GROUP_COUNT 2 #define MAX_DIGITAL_GROUP_COUNT 2
struct scope_config { struct scope_config {