diff options
| author | reinelt <> | 2006-01-21 17:43:25 +0000 | 
|---|---|---|
| committer | reinelt <> | 2006-01-21 17:43:25 +0000 | 
| commit | 8cbe75be8424946f4e0874defc80e13edb19eb93 (patch) | |
| tree | 46be9f08722b7d22053c701dceab640354fb3e06 | |
| parent | b888a37ddd1311e13f9cffcbb3114a670e95482b (diff) | |
| download | lcd4linux-8cbe75be8424946f4e0874defc80e13edb19eb93.tar.gz | |
[lcd4linux @ 2006-01-21 17:43:25 by reinelt]
minor cosmetic fixes
| -rw-r--r-- | drv_G15.c | 398 | 
1 files changed, 181 insertions, 217 deletions
| @@ -1,4 +1,4 @@ -/* $Id: drv_G15.c,v 1.1 2006/01/21 13:26:44 reinelt Exp $ +/* $Id: drv_G15.c,v 1.2 2006/01/21 17:43:25 reinelt Exp $   *   * Driver for Logitech G-15 keyboard LCD screen   * @@ -24,6 +24,9 @@   *   *   * $Log: drv_G15.c,v $ + * Revision 1.2  2006/01/21 17:43:25  reinelt + * minor cosmetic fixes + *   * Revision 1.1  2006/01/21 13:26:44  reinelt   * Logitech G-15 keyboard LCD driver from Dave Ingram   * @@ -79,210 +82,180 @@ static unsigned char *g15_image;  static int drv_G15_open()  { -	struct usb_bus *bus; -	struct usb_device *dev; -	char dname[32]={0}; - -	g15_lcd=NULL; - -	info("%s: Scanning USB for G-15 keyboard...", Name); - -	usb_init(); -	usb_set_debug(0); -	usb_find_busses(); -	usb_find_devices(); - -	for (bus=usb_get_busses(); bus; bus=bus->next) { -		for (dev=bus->devices; dev; dev=dev->next) { -			if ((g15_lcd=usb_open(dev))) { -				if ((dev->descriptor.idVendor == G15_VENDOR) && -					(dev->descriptor.idProduct == G15_DEVICE)) { - -					// detach from the kernel if we need to -					int retval=usb_get_driver_np(g15_lcd, 0, dname, 31); -					if (retval==0 && strcmp(dname, "usbhid")==0) { -						usb_detach_kernel_driver_np(g15_lcd, 0); -					} -					usb_set_configuration(g15_lcd,1); -					usleep(100); -					usb_claim_interface(g15_lcd,0); -					return 0; -				} else { -					usb_close(g15_lcd); -				} -			} +    struct usb_bus *bus; +    struct usb_device *dev; +    char dname[32] = { 0 }; + +    g15_lcd = NULL; + +    info("%s: Scanning USB for G-15 keyboard...", Name); + +    usb_init(); +    usb_set_debug(0); +    usb_find_busses(); +    usb_find_devices(); + +    for (bus = usb_get_busses(); bus; bus = bus->next) { +	for (dev = bus->devices; dev; dev = dev->next) { +	    if ((g15_lcd = usb_open(dev))) { +		if ((dev->descriptor.idVendor == G15_VENDOR) && (dev->descriptor.idProduct == G15_DEVICE)) { + +		    /* detach from the kernel if we need to */ +		    int retval = usb_get_driver_np(g15_lcd, 0, dname, 31); +		    if (retval == 0 && strcmp(dname, "usbhid") == 0) { +			usb_detach_kernel_driver_np(g15_lcd, 0); +		    } +		    usb_set_configuration(g15_lcd, 1); +		    usleep(100); +		    usb_claim_interface(g15_lcd, 0); +		    return 0; +		} else { +		    usb_close(g15_lcd);  		} +	    }  	} +    } -	return -1; +    return -1;  }  static int drv_G15_close(void)  { -	usb_release_interface(g15_lcd, 0); -	if (g15_lcd) -		usb_close(g15_lcd); +    usb_release_interface(g15_lcd, 0); +    if (g15_lcd) +	usb_close(g15_lcd); -	return 0; +    return 0;  } -static void drv_G15_send(const char *data, const unsigned int len) -{ -	/* send data to the serial port is easy... */ -	//drv_generic_serial_write(data, len); -} -  static void drv_G15_update_img()  { -	int i,j,k; -	unsigned char *output=malloc(160*43*sizeof(unsigned char)); -	 -	DEBUG("entered"); -	if (!output) -		return; -	 -	DEBUG("memory allocated"); -	memset(output, 0, 160*43); -	DEBUG("memory set"); -	output[0]=0x03; -	DEBUG("first output set"); -	 -	for (k=0; k<6; k++) { -		for (i=0; i<160; i++) { -			int maxj=(k==5)?3:8; -			for (j=0; j<maxj; j++) { -				if (g15_image[(k*1280)+i+(j*160)]) output[32+i+(k*160)]|=(1<<j); -			} -		} +    int i, j, k; +    unsigned char *output = malloc(160 * 43 * sizeof(unsigned char)); + +    DEBUG("entered"); +    if (!output) +	return; + +    DEBUG("memory allocated"); +    memset(output, 0, 160 * 43); +    DEBUG("memory set"); +    output[0] = 0x03; +    DEBUG("first output set"); + +    for (k = 0; k < 6; k++) { +	for (i = 0; i < 160; i++) { +	    int maxj = (k == 5) ? 3 : 8; +	    for (j = 0; j < maxj; j++) { +		if (g15_image[(k * 1280) + i + (j * 160)]) +		    output[32 + i + (k * 160)] |= (1 << j); +	    }  	} +    } -	DEBUG("output array prepared"); +    DEBUG("output array prepared"); -	usb_bulk_write(g15_lcd, 0x02, output, 992, 1000); -	usleep(300); +    usb_bulk_write(g15_lcd, 0x02, (char*)output, 992, 1000); +    usleep(300); -	DEBUG("data written to LCD"); +    DEBUG("data written to LCD"); -	free(output); +    free(output); -	DEBUG("memory freed"); -	DEBUG("left"); +    DEBUG("memory freed"); +    DEBUG("left");  }  /* for graphic displays only */ -static void drv_G15_blit(const int row, const int col, const int height, -						 const int width) +static void drv_G15_blit(const int row, const int col, const int height, const int width)  { -	int r, c; +    int r, c; -	DEBUG("entered"); +    DEBUG("entered"); -	for (r = row; r < row + height; r++) { -		for (c = col; c < col + width; c++) { -			g15_image[r*160+c]=(drv_generic_graphic_FB[r * LCOLS + c]); -		} +    for (r = row; r < row + height; r++) { +	for (c = col; c < col + width; c++) { +	    g15_image[r * 160 + c] = (drv_generic_graphic_FB[r * LCOLS + c]);  	} +    } -	DEBUG("updating image"); - -	drv_G15_update_img(); +    DEBUG("updating image"); -	DEBUG("left"); -} - - -/* example function used in a plugin */ -static int drv_G15_contrast(int contrast) -{ -	char cmd[2]; +    drv_G15_update_img(); -	/* adjust limits according to the display */ -	if (contrast < 0) -		contrast = 0; -	if (contrast > 255) -		contrast = 255; - -	/* call a 'contrast' function */ -	/* assume 0x04 to be the 'set contrast' command */ -	cmd[0] = 0x04; -	cmd[1] = contrast; -	drv_G15_send(cmd, 2); - -	return contrast; +    DEBUG("left");  }  /* start graphic display */  static int drv_G15_start(const char *section)  { -	char *s; -	//int contrast; -	 -	DEBUG("entered"); +    char *s; -	/* read display size from config */ -	DROWS = 160; -	DCOLS = 43; +    DEBUG("entered"); -	DEBUG("display size set"); +    /* read display size from config */ +    DROWS = 160; +    DCOLS = 43; -	s = cfg_get(section, "Font", "6x8"); -	if (s == NULL || *s == '\0') { -		error("%s: no '%s.Font' entry from %s", Name, section, cfg_source()); -		return -1; -	} +    DEBUG("display size set"); -	XRES = -1; -	YRES = -1; -	if (sscanf(s, "%dx%d", &XRES, &YRES) != 2 || XRES < 1 || YRES < 1) { -		error("%s: bad Font '%s' from %s", Name, s, cfg_source()); -		return -1; -	} +    s = cfg_get(section, "Font", "6x8"); +    if (s == NULL || *s == '\0') { +	error("%s: no '%s.Font' entry from %s", Name, section, cfg_source()); +	return -1; +    } -	/* Fixme: provider other fonts someday... */ -	if (XRES != 6 && YRES != 8) { -		error("%s: bad Font '%s' from %s (only 6x8 at the moment)", Name, s, -			  cfg_source()); -		return -1; -	} +    XRES = -1; +    YRES = -1; +    if (sscanf(s, "%dx%d", &XRES, &YRES) != 2 || XRES < 1 || YRES < 1) { +	error("%s: bad Font '%s' from %s", Name, s, cfg_source()); +	return -1; +    } -	DEBUG("Finished config stuff"); - -	DEBUG("allocating image buffer"); -	/* you surely want to allocate a framebuffer or something... */ -	g15_image=malloc(160*43*sizeof(unsigned char)); -	if (!g15_image) -		return -1; -	DEBUG("allocated"); -	memset(g15_image,0,160*43); -	DEBUG("zeroed"); - -	/* open communication with the display */ -	DEBUG("opening display..."); -	if (drv_G15_open() < 0) { -		DEBUG("opening failed"); -		return -1; -	} -	DEBUG("display open"); +    /* Fixme: provider other fonts someday... */ +    if (XRES != 6 && YRES != 8) { +	error("%s: bad Font '%s' from %s (only 6x8 at the moment)", Name, s, cfg_source()); +	return -1; +    } -	/* reset & initialize display */ -	DEBUG("clearing display"); -	drv_G15_update_img(); -	DEBUG("done"); +    DEBUG("Finished config stuff"); -	/* -	if (cfg_number(section, "Contrast", 0, 0, 255, &contrast) > 0) { -		drv_G15_contrast(contrast); -	} -	*/ +    DEBUG("allocating image buffer"); +    /* you surely want to allocate a framebuffer or something... */ +    g15_image = malloc(160 * 43 * sizeof(unsigned char)); +    if (!g15_image) +	return -1; +    DEBUG("allocated"); +    memset(g15_image, 0, 160 * 43); +    DEBUG("zeroed"); + +    /* open communication with the display */ +    DEBUG("opening display..."); +    if (drv_G15_open() < 0) { +	DEBUG("opening failed"); +	return -1; +    } +    DEBUG("display open"); -	DEBUG("left"); +    /* reset & initialize display */ +    DEBUG("clearing display"); +    drv_G15_update_img(); +    DEBUG("done"); -	return 0; +    /* +       if (cfg_number(section, "Contrast", 0, 0, 255, &contrast) > 0) { +       drv_G15_contrast(contrast); +       } +     */ + +    DEBUG("left"); + +    return 0;  } @@ -290,13 +263,7 @@ static int drv_G15_start(const char *section)  /***            plugins               ***/  /****************************************/ -static void plugin_contrast(RESULT * result, RESULT * arg1) -{ -	double contrast; - -	contrast = drv_G15_contrast(R2N(arg1)); -	SetResult(&result, R_NUMBER, &contrast); -} +/* none */  /****************************************/ @@ -318,61 +285,58 @@ static void plugin_contrast(RESULT * result, RESULT * arg1)  /* list models */  int drv_G15_list(void)  { -	printf("generic"); -	return 0; +    printf("generic"); +    return 0;  }  /* initialize driver & display */  int drv_G15_init(const char *section, const int quiet)  { -	WIDGET_CLASS wc; -	int ret; +    WIDGET_CLASS wc; +    int ret; -	DEBUG("entered"); +    DEBUG("entered"); -	/* real worker functions */ -	drv_generic_graphic_real_blit = drv_G15_blit; +    /* real worker functions */ +    drv_generic_graphic_real_blit = drv_G15_blit; -	/* start display */ -	if ((ret = drv_G15_start(section)) != 0) -		return ret; +    /* start display */ +    if ((ret = drv_G15_start(section)) != 0) +	return ret; -	/* initialize generic graphic driver */ -	if ((ret = drv_generic_graphic_init(section, Name)) != 0) -		return ret; +    /* initialize generic graphic driver */ +    if ((ret = drv_generic_graphic_init(section, Name)) != 0) +	return ret; -	if (!quiet) { -		char buffer[40]; +    if (!quiet) { +	char buffer[40]; -		qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS); -		if (drv_generic_graphic_greet(buffer, NULL)) { -			sleep(3); -			drv_generic_graphic_clear(); -		} +	qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS); +	if (drv_generic_graphic_greet(buffer, NULL)) { +	    sleep(3); +	    drv_generic_graphic_clear();  	} +    } -	/* register text widget */ -	wc = Widget_Text; -	wc.draw = drv_generic_graphic_draw; -	widget_register(&wc); +    /* register text widget */ +    wc = Widget_Text; +    wc.draw = drv_generic_graphic_draw; +    widget_register(&wc); -	/* register icon widget */ -	wc = Widget_Icon; -	wc.draw = drv_generic_graphic_icon_draw; -	widget_register(&wc); +    /* register icon widget */ +    wc = Widget_Icon; +    wc.draw = drv_generic_graphic_icon_draw; +    widget_register(&wc); -	/* register bar widget */ -	wc = Widget_Bar; -	wc.draw = drv_generic_graphic_bar_draw; -	widget_register(&wc); +    /* register bar widget */ +    wc = Widget_Bar; +    wc.draw = drv_generic_graphic_bar_draw; +    widget_register(&wc); -	/* register plugins */ -	//AddFunction("LCD::contrast", 1, plugin_contrast); +    DEBUG("left"); -	DEBUG("left"); - -	return 0; +    return 0;  } @@ -380,28 +344,28 @@ int drv_G15_init(const char *section, const int quiet)  /* close driver & display */  int drv_G15_quit(const int quiet)  { -	info("%s: shutting down.", Name); +    info("%s: shutting down.", Name); -	DEBUG("clearing display"); -	/* clear display */ -	drv_generic_graphic_clear(); +    DEBUG("clearing display"); +    /* clear display */ +    drv_generic_graphic_clear(); -	DEBUG("saying goodbye"); -	/* say goodbye... */ -	if (!quiet) { -		drv_generic_graphic_greet("goodbye!", NULL); -	} +    DEBUG("saying goodbye"); +    /* say goodbye... */ +    if (!quiet) { +	drv_generic_graphic_greet("goodbye!", NULL); +    } -	DEBUG("generic_graphic_quit()"); -	drv_generic_graphic_quit(); +    DEBUG("generic_graphic_quit()"); +    drv_generic_graphic_quit(); -	DEBUG("closing connection"); -	drv_G15_close(); +    DEBUG("closing connection"); +    drv_G15_close(); -	DEBUG("freeing image alloc"); -	free(g15_image); +    DEBUG("freeing image alloc"); +    free(g15_image); -	return (0); +    return (0);  } | 
