aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2006-01-21 17:43:25 +0000
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2006-01-21 17:43:25 +0000
commitf85a8a9fa967fc493f089ad128596b3262c1538f (patch)
tree46be9f08722b7d22053c701dceab640354fb3e06
parent94159f18008e7f7bddcdab2f9cab978918a202ee (diff)
downloadlcd4linux-f85a8a9fa967fc493f089ad128596b3262c1538f.tar.gz
[lcd4linux @ 2006-01-21 17:43:25 by reinelt]
minor cosmetic fixes git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@620 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
-rw-r--r--drv_G15.c398
1 files changed, 181 insertions, 217 deletions
diff --git a/drv_G15.c b/drv_G15.c
index 60e650a..1e504f5 100644
--- a/drv_G15.c
+++ b/drv_G15.c
@@ -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);
}