From ae413cee9cf3329f517cbf61c12a8a9af2f8a0e1 Mon Sep 17 00:00:00 2001 From: michael Date: Sat, 17 Mar 2007 00:13:23 +0000 Subject: [PATCH] cleanup parallel support a bit --- usb-driver.c | 80 ++++++++++++++++++++++++++++++++++++---------------- usb-driver.h | 6 ++++ 2 files changed, 62 insertions(+), 24 deletions(-) diff --git a/usb-driver.c b/usb-driver.c index 1c5b18b..b4a1549 100644 --- a/usb-driver.c +++ b/usb-driver.c @@ -258,33 +258,65 @@ int pp_transfer(WD_TRANSFER *tr, int fd, unsigned int request, unsigned char *wd if (parportfd < 0) return ret; - switch(tr->cmdTrans) { - case 10: /* Read Byte */ - if ((unsigned long)tr->dwPort == ppbase) { /* Data Port */ - ret = 0; /* We don't support reading of the data port */ - } else if ((unsigned long)tr->dwPort == ppbase + 1) { /* Status Port */ - DPRINTF("status port\n"); - ret = ioctl(parportfd, PPRSTATUS, &val); - } else if ((unsigned long)tr->dwPort == ppbase + 2) { /* Control Port */ - DPRINTF("control port\n"); - ret = ioctl(parportfd, PPRCONTROL, &val); + switch((unsigned long)tr->dwPort - ppbase) { + case PP_DATA: + DPRINTF("data port\n"); + switch(tr->cmdTrans) { + case PP_READ: + ret = 0; /* We don't support reading of the data port */ + break; + + case PP_WRITE: + ret = ioctl(parportfd, PPWDATA, &val); + break; + + default: + fprintf(stderr,"!!!Unsupported TRANSFER command: %lu!!!\n", tr->cmdTrans); + ret = -1; + break; } - break; - case 13: /* Write Byte */ - if ((unsigned long)tr->dwPort == ppbase) { /* Data Port */ - DPRINTF("data port\n"); - ret = ioctl(parportfd, PPWDATA, &val); - } else if ((unsigned long)tr->dwPort == ppbase + 1) { /* Status Port */ - ret = 0; /* Status Port is readonly */ - } else if ((unsigned long)tr->dwPort == ppbase + 2) { /* Control Port */ - DPRINTF("control port\n"); - ret = ioctl(parportfd, PPWCONTROL, &val); + break; + + case PP_STATUS: + DPRINTF("status port\n"); + switch(tr->cmdTrans) { + case PP_READ: + ret = ioctl(parportfd, PPRSTATUS, &val); + break; + + case PP_WRITE: + ret = 0; /* Status Port is readonly */ + break; + + default: + fprintf(stderr,"!!!Unsupported TRANSFER command: %lu!!!\n", tr->cmdTrans); + ret = -1; + break; } - break; + break; + + case PP_CONTROL: + DPRINTF("control port\n"); + switch(tr->cmdTrans) { + case PP_READ: + ret = ioctl(parportfd, PPRCONTROL, &val); + break; + + case PP_WRITE: + ret = ioctl(parportfd, PPWCONTROL, &val); + break; + + default: + fprintf(stderr,"!!!Unsupported TRANSFER command: %lu!!!\n", tr->cmdTrans); + ret = -1; + break; + } + break; + default: - fprintf(stderr,"!!!Unsupported TRANSFER command: %lu!!!\n", tr->cmdTrans); - ret = -1; - break; + DPRINTF("access to unsupported address range (probably ECP)!\n"); + ret = 0; + break; } tr->Data.Byte = val; diff --git a/usb-driver.h b/usb-driver.h index 77b60f2..187be1b 100644 --- a/usb-driver.h +++ b/usb-driver.h @@ -22,6 +22,12 @@ #define MAGIC 0xa410b413UL +#define PP_DATA 0 +#define PP_STATUS 1 +#define PP_CONTROL 2 +#define PP_READ 10 +#define PP_WRITE 13 + #define WDU_GET_MAX_PACKET_SIZE(x) ((unsigned short) (((x) & 0x7ff) * (1 + (((x) & 0x1800) >> 11)))) /* http://www.jungo.com/support/documentation/windriver/811/wdusb_man_mhtml/node78.html#SECTION001734000000000000000 */ -- 2.39.2