From 25ba7a49098fb2f4c120293d8f7c7404e5d3687b Mon Sep 17 00:00:00 2001 From: michael Date: Mon, 30 Apr 2007 23:42:17 +0000 Subject: [PATCH] more parts of the config infrastructure --- config.c | 28 ++++++++++++++++++++++++++++ config.h | 5 ++++- parport.c | 2 +- parport.h | 2 +- usb-driver.c | 39 +++++++-------------------------------- 5 files changed, 41 insertions(+), 35 deletions(-) diff --git a/config.c b/config.c index c41590f..ba6b9a6 100644 --- a/config.c +++ b/config.c @@ -1,5 +1,11 @@ #include #include +#include +#include "usb-driver.h" +#include "parport.h" +#ifdef JTAGKEY +#include "jtagkey.h" +#endif #include "config.h" static struct parport_config pp_config[4]; @@ -17,15 +23,37 @@ static void read_config() { pp_config[i].num = i; pp_config[i].ppbase = i*0x10; pp_config[i].real = 1; + pp_config[i].open = parport_open; + pp_config[i].close = parport_close; + pp_config[i].transfer = parport_transfer; } #ifdef JTAGKEY pp_config[3].real = 0; pp_config[3].usb_vid = 0x0403; pp_config[3].usb_pid = 0xcff8; + pp_config[3].open = jtagkey_open; + pp_config[3].close = jtagkey_close; + pp_config[3].transfer = jtagkey_transfer; #endif } +struct parport_config *config_get(int num) { + struct parport_config *ret = NULL; + int i; + + read_config(); + + for (i=0; i #include "usb-driver.h" #include "config.h" -#include "parport.h" -#ifdef JTAGKEY -#include "jtagkey.h" -#endif static int (*ioctl_func) (int, int, void *) = NULL; static int windrvrfd = -1; static unsigned long ppbase = 0; static unsigned long ecpbase = 0; +static struct parport_config *pport = NULL; FILE *modulesfp = NULL; FILE *baseaddrfp = NULL; int baseaddrnum = 0; @@ -248,7 +245,7 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) { switch(request & ~(0xc0000000)) { case VERSION: version = (struct version_struct*)(wdheader->data); - strcpy(version->version, "libusb-driver.so $Revision: 1.67 $"); + strcpy(version->version, "libusb-driver.so $Revision: 1.68 $"); version->versionul = 802; DPRINTF("VERSION\n"); break; @@ -278,12 +275,8 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) { ret = (*ioctl_func) (fd, request, wdioctl); #else -#ifdef JTAGKEY - if (!config_is_real_pport((unsigned long)cr->Card.Item[0].I.IO.dwAddr / 0x10)) - ret = jtagkey_open((unsigned long)cr->Card.Item[0].I.IO.dwAddr / 0x10); - else -#endif - ret = parport_open((unsigned long)cr->Card.Item[0].I.IO.dwAddr / 0x10); + pport = config_get((unsigned long)cr->Card.Item[0].I.IO.dwAddr / 0x10); + ret = pport->open((unsigned long)cr->Card.Item[0].I.IO.dwAddr / 0x10); ppbase = (unsigned long)cr->Card.Item[0].I.IO.dwAddr; @@ -566,14 +559,7 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) { #ifndef NO_WINDRVR ret = (*ioctl_func) (fd, request, wdioctl); #else - -#ifdef JTAGKEY - if (!config_is_real_pport(ppbase / 0x10)) { - ret = jtagkey_transfer(tr, fd, request, ppbase, ecpbase, 1); - break; - } -#endif /* JTAGKEY */ - ret = pp_transfer(tr, fd, request, ppbase, ecpbase, 1); + ret = pport->transfer(tr, fd, request, ppbase, ecpbase, 1); #endif } break; @@ -587,13 +573,7 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) { #ifndef NO_WINDRVR ret = (*ioctl_func) (fd, request, wdioctl); #else - -#ifdef JTAGKEY - if (!config_is_real_pport(ppbase / 0x10)) { - ret = jtagkey_transfer(tr, fd, request, ppbase, ecpbase, num); - } else -#endif /* JTAGKEY */ - ret = pp_transfer(tr, fd, request, ppbase, ecpbase, num); + ret = pport->transfer(tr, fd, request, ppbase, ecpbase, num); #endif } break; @@ -653,12 +633,7 @@ int do_wdioctl(int fd, unsigned int request, unsigned char *wdioctl) { #ifndef NO_WINDRVR ret = (*ioctl_func) (fd, request, wdioctl); #else -#ifdef JTAGKEY - if (cr->hCard == 0xff) - jtagkey_close(cr->hCard); - else -#endif - parport_close(cr->hCard); + pport->close(cr->hCard); #endif } break; -- 2.39.2