diff --git a/plugins/serial2002/serial2002.c b/plugins/serial2002/serial2002.c index ae0af1b5d98808309e3b68356470d1bb5964d0ce..4017406a4b6604f307a456c3f030286be5db2285 100644 --- a/plugins/serial2002/serial2002.c +++ b/plugins/serial2002/serial2002.c @@ -367,6 +367,28 @@ static int channel_down(struct moberg_channel *channel) static struct moberg_status channel_open(struct moberg_channel *channel) { struct moberg_status result = device_open(channel->context->device); + int count = 0; + switch (channel->kind) { + case chan_ANALOGIN: + count = channel->context->device->analog_in.count; + break; + case chan_ANALOGOUT: + count = channel->context->device->analog_out.count; + break; + case chan_DIGITALIN: + count = channel->context->device->digital_in.count; + break; + case chan_DIGITALOUT: + count = channel->context->device->digital_out.count; + break; + case chan_ENCODERIN: + count = channel->context->device->encoder_in.count; + break; + } + if (channel->context->index >= count) { + device_close(channel->context->device); + result = MOBERG_ERRNO(ENODEV); + } return result; }