CDC-IO прекрасно работает! Правда нужно установить пакет kmod-usb-acm (~16 Кб) и использовать usb-hub как переходник к low-speed устройству.
Вот лог при подключении:
Код:
[ 826.230000] usb 1-1.3: new low-speed USB device number 5 using ehci-platform
[ 826.340000] usb 1-1.3: config 1 interface 1 altsetting 0 endpoint 0x1 is Bulk; changing to Interrupt
[ 826.350000] usb 1-1.3: config 1 interface 1 altsetting 0 endpoint 0x81 is Bulk; changing to Interrupt
[ 826.370000] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device
root@OpenWrt:/# ls /dev/
bus mtd0ro mtd4ro mtdblock5 ttyACM0 ttyS14 ttyS8
console mtd1 mtd5 null ttyATH0 ttyS15 ttyS9
full mtd1ro mtd5ro port ttyS0 ttyS2 urandom
fuse mtd2 mtdblock0 ptmx ttyS1 ttyS3 watchdog
kmsg mtd2ro mtdblock1 pts ttyS10 ttyS4 zero
log mtd3 mtdblock2 random ttyS11 ttyS5
mem mtd3ro mtdblock3 shm ttyS12 ttyS6
mtd0 mtd4 mtdblock4 tty ttyS13 ttyS7
Появилось устройство ttyACM0. Проверить его работу можно следующим образом. Подключаемся двумя терминалами к роутеру. На одном выполняем команду cat /dev/ttyACM0, а на другом терминале посылаем команды, например: echo @ > /dev/ttyACM0. На что устройство отвечает: cdc-io.
Итого, чтобы сделать 3 цифровых выхода нам понадобится: ATtiny45(85), три резистора (68, 68, 1к5), 2 диода (4148). Всё. Даже можно без разъёма USB обойтись, сделав его прямо из платы. Если нужно больше выходов, то берём мк постарше. Возможно даже, что примитивная система команд может не только дискретные входы считывать, но и настраивать АЦП и считывать аналоговый сигнал.
Поскольку исходники открыты, то можно вообще свою систему команд сделать.