Add hack to force the detection of a parallel cable by Stefan Ziegenbalg.
This hack is activated by preloading libusb-driver-trenz.so.
This commit is contained in:
parent
7824bbf66e
commit
cdc9c5bf09
15
Makefile
15
Makefile
@ -1,14 +1,19 @@
|
|||||||
CFLAGS=-Wall
|
CFLAGS=-Wall -fPIC
|
||||||
|
|
||||||
all: libusb-driver.so libusb-driver-DEBUG.so
|
SOBJECTS=libusb-driver.so libusb-driver-DEBUG.so libusb-driver-trenz.so
|
||||||
|
|
||||||
|
all: $(SOBJECTS)
|
||||||
|
|
||||||
libusb-driver.so: usb-driver.c usb-driver.h
|
libusb-driver.so: usb-driver.c usb-driver.h
|
||||||
gcc -fPIC $(CFLAGS) $< -o $@ -ldl -lusb -lpthread -shared
|
gcc $(CFLAGS) $< -o $@ -ldl -lusb -lpthread -shared
|
||||||
|
|
||||||
|
libusb-driver-trenz.so: usb-driver.c usb-driver.h
|
||||||
|
gcc -DTRENZ $(CFLAGS) $< -o $@ -ldl -lusb -lpthread -shared
|
||||||
|
|
||||||
libusb-driver-DEBUG.so: usb-driver.c usb-driver.h
|
libusb-driver-DEBUG.so: usb-driver.c usb-driver.h
|
||||||
gcc -fPIC -DDEBUG $(CFLAGS) $< -o $@ -ldl -lusb -lpthread -shared
|
gcc -DDEBUG $(CFLAGS) $< -o $@ -ldl -lusb -lpthread -shared
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f libusb-driver.so libusb-driver-DEBUG.so
|
rm -f $(SOBJECTS)
|
||||||
|
|
||||||
.PHONY: clean all
|
.PHONY: clean all
|
||||||
|
5
README
5
README
@ -72,6 +72,11 @@ ppdev
|
|||||||
To use the device as an ordinary user, put the user in the group 'lp'
|
To use the device as an ordinary user, put the user in the group 'lp'
|
||||||
|
|
||||||
|
|
||||||
|
If you have an almost compatible cable which works with other software but not
|
||||||
|
with Impact, try preloading libusb-driver-trenz.so instead of libusb-driver.so.
|
||||||
|
It includes a hack by Stefan Ziegenbalg to force detection of a parallel cable.
|
||||||
|
|
||||||
|
|
||||||
Parallel Cable IV is currently only supported in 'compatibility mode', as no
|
Parallel Cable IV is currently only supported in 'compatibility mode', as no
|
||||||
attempt to configure the ECP registers is done by this library.
|
attempt to configure the ECP registers is done by this library.
|
||||||
|
|
||||||
|
11
usb-driver.c
11
usb-driver.c
@ -241,6 +241,7 @@ int pp_transfer(WD_TRANSFER *tr, int fd, unsigned int request, unsigned char *wd
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
unsigned long port = (unsigned long)tr->dwPort;
|
unsigned long port = (unsigned long)tr->dwPort;
|
||||||
unsigned char val;
|
unsigned char val;
|
||||||
|
static int last_pp_write = 0;
|
||||||
|
|
||||||
DPRINTF("dwPort: 0x%lx, cmdTrans: %lu, dwbytes: %ld, fautoinc: %ld, dwoptions: %ld\n",
|
DPRINTF("dwPort: 0x%lx, cmdTrans: %lu, dwbytes: %ld, fautoinc: %ld, dwoptions: %ld\n",
|
||||||
(unsigned long)tr->dwPort, tr->cmdTrans, tr->dwBytes,
|
(unsigned long)tr->dwPort, tr->cmdTrans, tr->dwBytes,
|
||||||
@ -268,6 +269,7 @@ int pp_transfer(WD_TRANSFER *tr, int fd, unsigned int request, unsigned char *wd
|
|||||||
|
|
||||||
case PP_WRITE:
|
case PP_WRITE:
|
||||||
ret = ioctl(parportfd, PPWDATA, &val);
|
ret = ioctl(parportfd, PPWDATA, &val);
|
||||||
|
last_pp_write = val;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -276,10 +278,17 @@ int pp_transfer(WD_TRANSFER *tr, int fd, unsigned int request, unsigned char *wd
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if (port == ppbase + PP_STATUS) {
|
} else if (port == ppbase + PP_STATUS) {
|
||||||
DPRINTF("status port\n");
|
DPRINTF("status port (last write: %d)\n", last_pp_write);
|
||||||
switch(tr->cmdTrans) {
|
switch(tr->cmdTrans) {
|
||||||
case PP_READ:
|
case PP_READ:
|
||||||
ret = ioctl(parportfd, PPRSTATUS, &val);
|
ret = ioctl(parportfd, PPRSTATUS, &val);
|
||||||
|
#ifdef TRENZ
|
||||||
|
val &= 95;
|
||||||
|
if (last_pp_write & 64)
|
||||||
|
val |= 32;
|
||||||
|
else
|
||||||
|
val |= 128;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PP_WRITE:
|
case PP_WRITE:
|
||||||
|
Reference in New Issue
Block a user