Tak, są za kilka złotych przejściówki lecz nie nadają się do programatorów, ponieważ mogą przesyłać dane takie jakie "rozumieją" drukarki, skanery itp - nie ma możliwości sterowania dowolnym pinem. Te na pcmcie/express są dobre, lecz nie wszystkie laptopy mają te gniazda(mój osobiście ma) i przy okazji chcę zrobić analizator stanów logicznych(tutaj wysyłam już pakietami) - który sprawuje się bardzo dobrze.
Pisałem, że nie ma przejściówek "pełnych" usb-lpt(przynajlniej dla Full Speed) i postanowiłem taką zrobić, realizuję to w następujący sposób:
/** parport_register_port
transfer realizowany przez usb_control_msg, nie będę zamieszczał z "Interrupts Transfer" bo trochę więcej kodu, prędkość taka sama oraz ten sam problem.
**/
static void parport_usblpt_write_data(struct parport *pp, unsigned char d){
unsigned int retval;
unsigned char pack[2];
int rlen;
struct usblpt_private * priv = pp->private_data;
if(!priv) return;
pack[0] = USBLPT_WRITE;
pack[1] = d;
retval = usb_control_msg(priv->usbdev, usb_sndctrlpipe(priv->usbdev, 1), 0, USB_DIR_OUT | USB_TYPE_VENDOR, 0, 0, pack, 2, HZ);
printk("parport_usblpt_write_data: [%d]0x%02x\n", retval, d);
}
static unsigned char parport_usblpt_read_data(struct parport *pp){
unsigned int retval;
unsigned char pack[2];
struct usblpt_private * priv = pp->private_data;
if(!priv) return 0;
pack[0] = USBLPT_READ;
pack[1] = 0;
// eksperymentalnie
retval = usb_control_msg(priv->usbdev, usb_sndctrlpipe(priv->usbdev, 1), 0, USB_DIR_OUT | USB_TYPE_VENDOR, 0, 0, pack, 2, HZ);
retval = usb_control_msg(priv->usbdev, usb_rcvctrlpipe(priv->usbdev, 2), 0, USB_DIR_IN | USB_TYPE_VENDOR, 0, 0, pack, 2, HZ);
// printk("parport_usblpt_read_data\n");
return 0;
}
/**
zrobiłem także programik do testowania działania oraz prędkości wykorzystując ioctl
**/
System widzi moją przejściówkę jako /dev/parport0, dane przechwycone zostają przesłane do układu, który następnie steruje stanami na gnieździe DB25. Okazało się że pakiety są przesyłane właśnie z częstotliwością 1kHz, więc przez tą wadę nie jest możliwe zrobienie takiej przejściówki. Widzę że CY7C68013A wykorzystuje High Speed gdzie występuje większa częstotliwość wysyłania pakietów, niestety ja posiadam układ z Full Speed :-/