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:
parent
e06875b2ce
commit
4889acefb2
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue