mirror of
https://github.com/netfun2000/lcd4linux.git
synced 2026-02-27 09:44:34 +08:00
added support for Z-10 speaker to G-15 driver
git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@1039 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
This commit is contained in:
@@ -54,8 +54,13 @@
|
||||
#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
|
||||
@@ -81,6 +86,8 @@ static int kb_mutex;
|
||||
static int kb_thread_pid;
|
||||
static int kb_single_keypress = 0;
|
||||
|
||||
static int usb_endpoint = 0;
|
||||
|
||||
|
||||
/****************************************/
|
||||
/*** hardware dependant functions ***/
|
||||
@@ -302,37 +309,67 @@ 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...", Name);
|
||||
|
||||
usb_init();
|
||||
usb_set_debug(0);
|
||||
usb_find_busses();
|
||||
usb_find_devices();
|
||||
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 ((g15_lcd = usb_open(dev))) {
|
||||
if (dev->descriptor.idVendor == G15_VENDOR) {
|
||||
switch (dev->descriptor.idProduct) {
|
||||
case G15_DEVICE:
|
||||
case G15_DEVICE2:
|
||||
case M1730_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;
|
||||
info("%s: Found Logitech G-15 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:
|
||||
usb_close(g15_lcd);
|
||||
}
|
||||
|
||||
if (interf >= 0) {
|
||||
debug("%s: Vendor 0x%x Product 0x%x found",
|
||||
Name, dev->descriptor.idVendor, dev->descriptor.idProduct);
|
||||
//if (dev->descriptor.bNumConfigurations > 1) {
|
||||
/* 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);
|
||||
if (retval == 0 && strcmp(dname, "usbhid") == 0) {
|
||||
debug("%s: detaching...", Name);
|
||||
usb_detach_kernel_driver_np(g15_lcd, interf);
|
||||
}
|
||||
retval = usb_set_configuration(g15_lcd, config);
|
||||
debug("%s: Ret %d from usb_set_configuration(%d)", Name, retval, config);
|
||||
usleep(100);
|
||||
//}
|
||||
retval = usb_claim_interface(g15_lcd, interf);
|
||||
debug("%s: Ret %i from usb_claim_interface(%d)", Name, retval, interf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -356,6 +393,7 @@ static void drv_G15_update_img()
|
||||
{
|
||||
int i, j, k;
|
||||
unsigned char *output = malloc(160 * 43 * sizeof(unsigned char));
|
||||
int retval;
|
||||
|
||||
DEBUG("entered");
|
||||
if (!output)
|
||||
@@ -379,7 +417,10 @@ static void drv_G15_update_img()
|
||||
|
||||
DEBUG("output array prepared");
|
||||
mutex_lock(kb_mutex);
|
||||
usb_interrupt_write(g15_lcd, 0x02, (char *) output, 992, 1000);
|
||||
//retval = usb_interrupt_write(g15_lcd, 0x02, (char *) output, 992, 1000); // G15
|
||||
//retval = usb_interrupt_write(g15_lcd, 0x03, (char *) output, 992, 1000); // Z10
|
||||
retval = usb_interrupt_write(g15_lcd, usb_endpoint, (char *) output, 992, 1000);
|
||||
//info("%s: Ret %i from usb_interrupt_write(endpoint 2)", Name, retval);
|
||||
mutex_unlock(kb_mutex);
|
||||
usleep(300);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user