www.leniwiec.org

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 0×1424 oraz 0×1001. 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.

1 KOMENTARZ
test
4 listopad 2014
ad

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’”

Wyślij