- Audio (2)
- Codes Scratches (4)
- Elektronika (23)
- Inteligentny dom (1)
- IT (9)
- Mikrokontrolery / Arduino (6)
FTDI zmiana vendor i product id w Ubuntu 14.04LTS
Już od dość dawna korzystam z kas fiskalnych posnet, które do komunikacji z komputerem wykorzystują wirtualny port szeregowy na bazie popularnego układu FTDI. Żeby jednak nie było tak różowo, producent – posnet – postanowił zmienić idVendor i idProduct urządzenia na niestandardowe wartości. Wartości te możemy odczytać, korzystając z polecenia lsusb (są to dwie liczby rozdzielone dwukropkiem). W moim przypadku jest to odpowiednio 0x1424 oraz 0x1001. Do tej pory nie było z tym problemów, gdyż wystarczyło podczas uruchamiania systemu (np. dodając do /etc/rc.local) wykonać:
/sbin/modprobe ftdi_sio vendor=0x1424 product=0x1001
i po sprawie. Niestety od wersji jądra 3.12 po wykonaniu takiej komendy otrzymamy informację:
# dmesg
ftdi_sio: unknown parameter 'vendor' ignored
ftdi_sio: unknown parameter 'product' ignored
Okazuje się, że parametry vendor oraz product były wykorzystywane przez programistów w celu debugowania i nie powinny być wykorzystywane przez użytkownika końcowego. W zamian za to został udostępniony odpowiedni interfejs w pliku /sys/bus/usb-serial/drivers/ftdi_sio/new_id, w którym wystarczy dopisać odpowiednią parę vendor i product i wszystko powinno znów działać poprawnie. Zatem w tej chwili moje linijki z /etc/rc.local wyglądają dokładnie tak:
/sbin/modprobe ftdi_sio
echo "1424 1001" > /sys/bus/usb-serial/drivers/ftdi_sio/new_id
i po podłączeniu kasy fiskalnej do komputera zostaje utworzone nowe urządzenie /dev/ttyUSB0.
To automate this, add the following to /etc/udev/rules.d/99-ftdi.rules:
ACTION==”add”, ATTRS{idVendor}==”0403″, ATTRS{idProduct}==”9090″, RUN+=”/sbin/modprobe ftdi_sio” RUN+=”/bin/sh -c ‘echo 0403 9090 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id'”