diff options
| author | root <root@krebs> | 2011-08-20 23:33:40 +0200 |
|---|---|---|
| committer | root <root@krebs> | 2011-08-20 23:33:40 +0200 |
| commit | 6b2cd5bb85d257f432923e22178c0559fe9656aa (patch) | |
| tree | 46f16983868954dd5aec208cdbcfc8466d87eef3 /oncology/dpfhack_display/lcd4linux/.svn/text-base/drv_G15.c.svn-base | |
| parent | a130ff747711005511c33f4c0714550f32e707f2 (diff) | |
lcd4linux: removed trash
Diffstat (limited to 'oncology/dpfhack_display/lcd4linux/.svn/text-base/drv_G15.c.svn-base')
| -rw-r--r-- | oncology/dpfhack_display/lcd4linux/.svn/text-base/drv_G15.c.svn-base | 676 |
1 files changed, 0 insertions, 676 deletions
diff --git a/oncology/dpfhack_display/lcd4linux/.svn/text-base/drv_G15.c.svn-base b/oncology/dpfhack_display/lcd4linux/.svn/text-base/drv_G15.c.svn-base deleted file mode 100644 index d070b383..00000000 --- a/oncology/dpfhack_display/lcd4linux/.svn/text-base/drv_G15.c.svn-base +++ /dev/null @@ -1,676 +0,0 @@ -/* $Id$ - * $URL$ - * - * Driver for Logitech G-15 keyboard LCD screen - * - * Copyright (C) 2006 Dave Ingram <dave@partis-project.net> - * Copyright (C) 2005 Michael Reinelt <michael@reinelt.co.at> - * Copyright (C) 2005 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net> - * - * This file is part of LCD4Linux. - * - * LCD4Linux is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * LCD4Linux is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - */ - -/* - * - * exported fuctions: - * - * struct DRIVER drv_G15 - * - */ - -#include "config.h" - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> - -#include <usb.h> -#include <fcntl.h> -#include <linux/input.h> -#include <linux/uinput.h> - -#include <unistd.h> -#include <sys/types.h> - -#include "debug.h" -#include "cfg.h" -#include "qprintf.h" -#include "udelay.h" -#include "plugin.h" -#include "drv.h" -#include "drv_generic_graphic.h" -#include "thread.h" - -/* Logitech: VendorID 0x046d */ -#define G15_VENDOR 0x046d -/* Logitech Keyboard G15: ProductID 0xc222, 0xc227 */ -/* Logitech Speaker Z10: ProductID 0x0a07 */ -#define G15_DEVICE 0xc222 -#define G15_DEVICE2 0xc227 -#define Z10_DEVICE 0x0a07 -#define M1730_DEVICE 0xc251 - -#if 0 -#define DEBUG(x) debug("%s(): %s", __FUNCTION__, x); -#else -#define DEBUG(x) -#endif - -#define KB_UPDOWN_PRESS - -static char Name[] = "G-15"; - -static usb_dev_handle *g15_lcd; - -static unsigned char *g15_image; - -unsigned char g_key_states[18]; -unsigned char m_key_states[4]; -unsigned char l_key_states[5]; - -static int uinput_fd; -static int kb_mutex; -static int kb_thread_pid; -static int kb_single_keypress = 0; - -static int usb_endpoint = 0; - - -/****************************************/ -/*** hardware dependant functions ***/ -/****************************************/ - - -void drv_G15_keyDown(unsigned char scancode) -{ - struct input_event event; - memset(&event, 0, sizeof(event)); - - event.type = EV_KEY; - event.code = scancode; - event.value = 1; - write(uinput_fd, &event, sizeof(event)); -} - -void drv_G15_keyUp(unsigned char scancode) -{ - struct input_event event; - memset(&event, 0, sizeof(event)); - - event.type = EV_KEY; - event.code = scancode; - event.value = 0; - write(uinput_fd, &event, sizeof(event)); -} - -void drv_G15_keyDownUp(unsigned char scancode) -{ - drv_G15_keyDown(scancode); - drv_G15_keyUp(scancode); - -} - -inline unsigned char drv_G15_evalScanCode(int key) -{ - /* first 12 G keys produce F1 - F12, thats 0x3a + key */ - if (key < 12) { - return 0x3a + key; - } - - /* the other keys produce Key '1' (above letters) + key, thats 0x1e + key */ - else { - return 0x1e + key - 12; /* sigh, half an hour to find -12 .... */ - } -} - -void drv_G15_processKeyEvent(unsigned char *buffer) -{ - const int g_scancode_offset = 167; - const int m_scancode_offset = 187; - const int l_scancode_offset = 191; - int i; - int is_set; - unsigned char m_key_new_states[4]; - unsigned char l_key_new_states[5]; - unsigned char orig_scancode; - -#if 0 - printf("%hhx %hhx %hhx %hhx %hhx %hhx %hhx %hhx %hhx \n\n", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], - buffer[5], buffer[6], buffer[7], buffer[8]); - usleep(100); -#endif - - if (buffer[0] == 0x01) { - DEBUG("Checking keys: "); - - for (i = 0; i < 18; ++i) { - orig_scancode = drv_G15_evalScanCode(i); - is_set = 0; - - if (buffer[1] == orig_scancode || buffer[2] == orig_scancode || buffer[3] == orig_scancode || - buffer[4] == orig_scancode || buffer[5] == orig_scancode) - is_set = 1; - - if (!is_set && g_key_states[i] != 0) { - /* key was pressed but is no more */ - if (!kb_single_keypress) - drv_G15_keyUp(g_scancode_offset + i); - g_key_states[i] = 0; - debug("G%d going up", (i + 1)); - } else if (is_set && g_key_states[i] == 0) { - if (!kb_single_keypress) - drv_G15_keyDown(g_scancode_offset + i); - else - drv_G15_keyDownUp(g_scancode_offset + i); - - g_key_states[i] = 1; - debug("G%d going down", (i + 1)); - } - } - } else { - if (buffer[0] == 0x02) { - memset(m_key_new_states, 0, sizeof(m_key_new_states)); - - if (buffer[6] & 0x01) - m_key_new_states[0] = 1; - if (buffer[7] & 0x02) - m_key_new_states[1] = 1; - if (buffer[8] & 0x04) - m_key_new_states[2] = 1; - if (buffer[7] & 0x40) - m_key_new_states[3] = 1; - - for (i = 0; i < 4; ++i) { - if (!m_key_new_states[i] && m_key_states[i] != 0) { - /* key was pressed but is no more */ - if (!kb_single_keypress) - drv_G15_keyUp(m_scancode_offset + i); - m_key_states[i] = 0; - debug("M%d going up", (i + 1)); - } else if (m_key_new_states[i] && m_key_states[i] == 0) { - if (!kb_single_keypress) - drv_G15_keyDown(m_scancode_offset + i); - else - drv_G15_keyDownUp(m_scancode_offset + i); - m_key_states[i] = 1; - debug("M%d going down", (i + 1)); - } - } - - memset(l_key_new_states, 0, sizeof(l_key_new_states)); - if (buffer[8] & 0x80) - l_key_new_states[0] = 1; - if (buffer[2] & 0x80) - l_key_new_states[1] = 1; - if (buffer[3] & 0x80) - l_key_new_states[2] = 1; - if (buffer[4] & 0x80) - l_key_new_states[3] = 1; - if (buffer[5] & 0x80) - l_key_new_states[4] = 1; - - for (i = 0; i < 5; ++i) { - if (!l_key_new_states[i] && l_key_states[i] != 0) { - /* key was pressed but is no more */ - if (!kb_single_keypress) - drv_G15_keyUp(l_scancode_offset + i); - l_key_states[i] = 0; - debug("L%d going up", (i + 1)); - } else if (l_key_new_states[i] && l_key_states[i] == 0) { - if (!kb_single_keypress) - drv_G15_keyDown(l_scancode_offset + i); - else - drv_G15_keyDownUp(l_scancode_offset + i); - l_key_states[i] = 1; - debug("L%d going down", (i + 1)); - } - } - - } - } -} - -void drv_G15_closeUIDevice() -{ - DEBUG("closing device"); - ioctl(uinput_fd, UI_DEV_DESTROY); - close(uinput_fd); -} - - -void drv_G15_initKeyHandling(char *device_filename) -{ - struct uinput_user_dev device; - int i; - DEBUG("Key Handling init") - uinput_fd = open(device_filename, O_RDWR); - - if (uinput_fd < 0) { - info("Error, could not open the uinput device"); - info("Compile your kernel for uinput, calling it a day now"); - info("mknod uinput c 10 223"); - abort(); - } - memset(&device, 0, sizeof(device)); - strncpy(device.name, "G15 Keys", UINPUT_MAX_NAME_SIZE); - device.id.bustype = BUS_USB; - device.id.version = 4; - - ioctl(uinput_fd, UI_SET_EVBIT, EV_KEY); - - for (i = 0; i < 256; ++i) - ioctl(uinput_fd, UI_SET_KEYBIT, i); - - write(uinput_fd, &device, sizeof(device)); - - if (ioctl(uinput_fd, UI_DEV_CREATE)) { - info("Failed to create input device"); - abort(); - } - -/* atexit(&closeDevice); */ - - memset(g_key_states, 0, sizeof(g_key_states)); - memset(m_key_states, 0, sizeof(m_key_states)); - memset(l_key_states, 0, sizeof(l_key_states)); -} - - -static void drv_G15_KBThread(void __attribute__ ((unused)) * notused) -{ - unsigned char buffer[9]; - int ret; - while (1) { - mutex_lock(kb_mutex); - ret = usb_bulk_read(g15_lcd, 0x81, (char *) buffer, 9, 10); -/* ret = usb_interrupt_read(g15_lcd, 0x81, (char*)buffer, 9, 10); */ - mutex_unlock(kb_mutex); - if (ret == 9) { - drv_G15_processKeyEvent(buffer); - } - } -} - -static int drv_G15_open() -{ - struct usb_bus *bus; - struct usb_device *dev; - char dname[32] = { 0 }; - int interf = -1; - int config = 1; - int retval; - - g15_lcd = NULL; - - info("%s: Scanning USB for G-15 keyboard or Z-10 speaker ...", Name); - - usb_init(); - usb_set_debug(0); // 0: no, 1 error, 2 warn, 3 info - debug("%s: found %d USB busses", Name, usb_find_busses()); - debug("%s: found %d USB devices", Name, usb_find_devices()); - - for (bus = usb_get_busses(); bus; bus = bus->next) { - for (dev = bus->devices; dev; dev = dev->next) { - debug("%s: open %s/%s/%s", Name, bus->dirname, dev->bus->dirname, dev->filename); - if (dev->descriptor.idVendor == G15_VENDOR) { - if ((g15_lcd = usb_open(dev))) { - // get vendor name if possible - if (dev->descriptor.iManufacturer) { - retval = usb_get_string_simple(g15_lcd, dev->descriptor.iManufacturer, dname, sizeof(dname)); - if (retval <= 0) { - snprintf(dname, sizeof(dname), "(unknown)"); - } - } - debug("%s: Found USB vendor ID 0x%x (%s), checking productID 0x%x...", - Name, G15_VENDOR, dname, dev->descriptor.idProduct); - switch (dev->descriptor.idProduct) { - case G15_DEVICE: - case G15_DEVICE2: - case M1730_DEVICE: - { - info("%s: Found Logitech G-15 or Dell M1730 Keyboard", Name); - interf = 0; - config = 1; - usb_endpoint = 0x02; - break; - } - case Z10_DEVICE: - { - info("%s: Found Logitech Z-10 Speaker", Name); - interf = 2; - usb_endpoint = 0x03; - break; - } - default: - debug("%s: Don't found USB product IDs 0x%x|0x%x/0x%x for G-15/M1730 or 0x%x for Z10", - Name, G15_DEVICE, G15_DEVICE2, M1730_DEVICE, Z10_DEVICE); - usb_close(g15_lcd); - } - - if (interf >= 0) { - debug("%s: Vendor 0x%x Product 0x%x found", - Name, dev->descriptor.idVendor, dev->descriptor.idProduct); - -#ifdef LIBUSB_HAS_GET_DRIVER_NP - /* detach from the kernel if we need to */ - retval = usb_get_driver_np(g15_lcd, interf, dname, 31); - debug("%s: Ret %i from usb_get_driver_np(interf.%d), Drivername %s", - Name, retval, interf, dname); - switch (retval) { - case -EPERM: - error("%s: Permission denied! eUID of this process is %i %s", - Name, geteuid(), geteuid() != 0 ? "(not root)" : ""); - //return -1; - break; - case -ENODATA: - error("%s: No data available! Device switched off?", Name); - //return -1; - break; - } -#ifdef LIBUSB_HAS_DETACH_KERNEL_DRIVER_NP - if (retval == 0 && strcmp(dname, "usbhid") == 0) { - debug("%s: detaching...", Name); - usb_detach_kernel_driver_np(g15_lcd, interf); - } -#endif // detach_kernel_driver_np -#endif // get_driver_np - - retval = usb_set_configuration(g15_lcd, config); - debug("%s: Ret %d from usb_set_configuration(%d)", Name, retval, config); - switch (retval) { - case -EPERM: - error("%s: Permission denied! eUID of this process is %i %s", - Name, geteuid(), geteuid() != 0 ? "(not root)" : ""); - return -1; - break; - case -EBUSY: - error("%s: Device or resource busy! Device switched off?", Name); - return -1; - break; - } - usleep(100); - retval = usb_claim_interface(g15_lcd, interf); - debug("%s: Ret %i from usb_claim_interface(%d)", Name, retval, interf); - return retval; - } - - } - } // G15_Vendor - } // all devices - } // all busses - - return -1; -} - - -static int drv_G15_close(void) -{ - usb_release_interface(g15_lcd, 0); - if (g15_lcd) - usb_close(g15_lcd); - - return 0; -} - - -static void drv_G15_update_img() -{ - int i, j, k; - unsigned char *output = malloc(DCOLS * DROWS * sizeof(unsigned char)); - int retval; - - DEBUG("entered"); - if (!output) - return; - - DEBUG("memory allocated"); - memset(output, 0, DCOLS * DROWS); - DEBUG("memory set"); - output[0] = 0x03; - DEBUG("first output set"); - - for (k = 0; k < 6; k++) { - for (i = 0; i < DCOLS; i++) { - int maxj = (k == 5) ? 3 : 8; - for (j = 0; j < maxj; j++) { - if (g15_image[(k * 1280) + i + (j * DCOLS)]) - output[32 + i + (k * DCOLS)] |= (1 << j); - } - } - } - - DEBUG("output array prepared"); - mutex_lock(kb_mutex); - retval = usb_interrupt_write(g15_lcd, usb_endpoint, (char *) output, 992, 1000); - //info("%s: Ret %i from usb_interrupt_write(endpoint %d)", Name, retval, usb_endpoint); - mutex_unlock(kb_mutex); - usleep(300); - - DEBUG("data written to LCD"); - - free(output); - - 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) -{ - int r, c; - - DEBUG("entered"); - - for (r = row; r < row + height; r++) { - for (c = col; c < col + width; c++) { - g15_image[r * DCOLS + c] = drv_generic_graphic_black(r, c); - } - } - - DEBUG("updating image"); - - drv_G15_update_img(); - - DEBUG("left"); -} - - -/* start graphic display */ -static int drv_G15_start(const char *section) -{ - char *s; - - DEBUG("entered"); - - /* read display size from config */ - DROWS = 43; - DCOLS = 160; - - DEBUG("display size set"); - - 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; - } - - 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; - } - - /* 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; - } - - DEBUG("Finished config stuff"); - - DEBUG("allocating image buffer"); - /* you surely want to allocate a framebuffer or something... */ - g15_image = malloc(DCOLS * DROWS * sizeof(unsigned char)); - if (!g15_image) - return -1; - DEBUG("allocated"); - memset(g15_image, 0, DCOLS * DROWS); - DEBUG("zeroed"); - - /* open communication with the display */ - DEBUG("opening display..."); - if (drv_G15_open() < 0) { - DEBUG("opening failed"); - return -1; - } - DEBUG("display open"); - - /* reset & initialize display */ - DEBUG("clearing display"); - drv_G15_update_img(); - DEBUG("done"); - - /* - if (cfg_number(section, "Contrast", 0, 0, 255, &contrast) > 0) { - drv_G15_contrast(contrast); - } - */ - s = cfg_get(section, "Uinput", ""); - if (s != NULL && *s != '\0') { - cfg_number(section, "SingleKeyPress", 0, 0, 1, &kb_single_keypress); - drv_G15_initKeyHandling(s); - - DEBUG("creating thread for keyboard"); - kb_mutex = mutex_create(); - kb_thread_pid = thread_create("G15_KBThread", drv_G15_KBThread, NULL); - - DEBUG("done"); - } - DEBUG("left"); - - return 0; -} - - -/****************************************/ -/*** plugins ***/ -/****************************************/ - -/* none */ - - -/****************************************/ -/*** exported functions ***/ -/****************************************/ - - -/* list models */ -int drv_G15_list(void) -{ - printf("Logitech G-15 or Z-10 / Dell M1730"); - return 0; -} - - -/* initialize driver & display */ -int drv_G15_init(const char *section, const int quiet) -{ - int ret; - - info("%s: %s", Name, "$Rev$"); - - DEBUG("entered"); - - /* real worker functions */ - drv_generic_graphic_real_blit = drv_G15_blit; - - /* 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; - - 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(); - } - } - - /* register plugins */ - /* none at the moment... */ - - - DEBUG("left"); - - return 0; -} - - - -/* close driver & display */ -int drv_G15_quit(const int quiet) -{ - info("%s: shutting down.", Name); - - DEBUG("clearing display"); - /* clear display */ - drv_generic_graphic_clear(); - - DEBUG("saying goodbye"); - /* say goodbye... */ - if (!quiet) { - drv_generic_graphic_greet("goodbye!", NULL); - } - - DEBUG("generic_graphic_quit()"); - drv_generic_graphic_quit(); - - mutex_destroy(kb_mutex); - usleep(10 * 1000); - thread_destroy(kb_thread_pid); - - drv_G15_closeUIDevice(); - DEBUG("closing UInputDev"); - - - DEBUG("closing connection"); - drv_G15_close(); - - DEBUG("freeing image alloc"); - free(g15_image); - - return (0); -} - - -DRIVER drv_G15 = { - .name = Name, - .list = drv_G15_list, - .init = drv_G15_init, - .quit = drv_G15_quit, -}; |
