You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
288 lines
9.1 KiB
288 lines
9.1 KiB
- Support for other hardware
|
|
- ssr comment in the mouse array.
|
|
- Use of defines for numeric constants to improve code readability.
|
|
- Debian patch integrated
|
|
|
|
diff -Nuar --exclude '*~' lomoco-1.0.old/src/lomoco.c lomoco-1.0/src/lomoco.c
|
|
--- lomoco-1.0.old/src/lomoco.c 2006-03-01 06:10:05.000000000 -0800
|
|
+++ lomoco-1.0/src/lomoco.c 2006-04-30 02:38:05.107430674 -0700
|
|
@@ -32,11 +32,12 @@
|
|
* model: you can find on the hardware, look for M/N: ...
|
|
* csr: mouse with receiver (wireless)
|
|
* res: mouse has resolution control
|
|
- * sms: mouse has smart control
|
|
+ * ssr: mouse has smart scroll reporting
|
|
+ * sms: mouse has smart scroll
|
|
* dual: dual receiver (wireless mouse+wireless keyboard)
|
|
*
|
|
* product id, name, model, csr, res, ssr, sms, dual */
|
|
-mouse_t mice [] = {
|
|
+static mouse_t mice [] = {
|
|
{0xc00e, "Wheel Mouse Optical", "M-BJ58", 0, 1, 0, 0, 0},
|
|
{0xc00f, "MouseMan Traveler", "M-BJ79", 0, 1, 0, 0, 0},
|
|
{0xc012, "MouseMan Dual Optical", "M-BL63B", 0, 1, 0, 0, 0},
|
|
@@ -42,6 +42,7 @@
|
|
{0xc012, "MouseMan Dual Optical", "M-BL63B", 0, 1, 0, 0, 0},
|
|
{0xc01d, "MX510 Optical Mouse", "M-BS81A", 0, 1, 1, 1, 0},
|
|
{0xc01e, "MX518 Optical Mouse", "M-BS81A", 0, 1, 1, 0, 0},
|
|
+ {0xc051, "MX518 Optical Mouse", "M-BS81A", 0, 1, 1, 0, 0},
|
|
{0xc024, "MX300 Optical Mouse", "M-BP82", 0, 1, 0, 0, 0},
|
|
{0xc01b, "MX310 Optical Mouse", "M-BP86", 0, 1, 0, 0, 0},
|
|
{0xc025, "MX500 Optical Mouse", "M-BP81A", 0, 1, 1, 1, 0},
|
|
@@ -49,50 +50,37 @@
|
|
{0xc041, "G5 Laser Gaming Mouse", "M-UAC113", 0, 1, 0, 1, 0},
|
|
{0xc501, "Mouse Receiver", "C-BA4-MSE", 1, 0, 0, 0, 0},
|
|
{0xc502, "Dual Receiver", "C-UA3-DUAL", 1, 0, 0, 0, 1},
|
|
- {0xc503, "Receiver for MX900 Receiver", "C-UJ16A", 1, 0, 0, 1, 0},
|
|
+ {0xc503, "Receiver for MX900", "C-UJ16A", 1, 0, 0, 1, 0},
|
|
{0xc504, "Receiver for Cordless Freedom Optical", "C-BD9-DUAL", 1, 0, 0, 0, 1},
|
|
{0xc505, "Receiver for Cordless Elite Duo", "C-BG17-DUAL", 1, 0, 0, 0, 1},
|
|
{0xc506, "Receiver for MX700 Optical Mouse", "C-BF16-MSE", 1, 0, 0, 1, 0},
|
|
{0xc508, "Receiver for Cordless Optical TrackMan", "C-BA4-MSE", 1, 0, 0, 1, 0},
|
|
- {0xc702, "Receiver for Cordless Presenter", "C-UF15", 1, 0, 0, 0, 0},
|
|
- {0xc704, "Receiver for diNovo Media Desktop", "C-BQ16A", 1, 0, 1, 1, 0},
|
|
+
|
|
+ /* From Michele Noberasco <s4t4n@gentoo.org> */
|
|
+ {0xc50a, "Reciveer for Cordless Optical Mouse for Notebooks", "C-BJ27-MSE", 1, 0, 0, 0, 0},
|
|
+
|
|
+ /* From Robin H. Johnson <robbat2@gentoo.org> */
|
|
+ {0xc50b, "Receiver for Cordless Desktop MX", "C-BK16A-DUAL",1, 0, 0, 1, 1},
|
|
+
|
|
/* From Markus Wiesner <m_wiesner@gmx.net> */
|
|
{0xc50e, "Receiver for MX1000 Laser", "C-BN34", 1, 0, 1, 1, 0},
|
|
{0xc512, "Receiver for Cordless Desktop MX3100 Laser", "C-BO34", 1, 0, 0, 1, 1},
|
|
+
|
|
+ {0xc702, "Receiver for Cordless Presenter", "C-UF15", 1, 0, 0, 0, 0},
|
|
+ {0xc704, "Receiver for diNovo Media Desktop", "C-BQ16A", 1, 0, 1, 1, 0},
|
|
{0x0000, NULL, NULL, 0, 0, 0, 0}
|
|
};
|
|
|
|
-
|
|
/*
|
|
- * Description: Query the mouse and report all cordless mouse specific infos
|
|
+ * Description: Print out a set of CSR data
|
|
* e.g. receiver type, mouse type, battery status
|
|
*
|
|
- * Parameters: mouse_t *m
|
|
- * mouse struct with the mouse specs
|
|
- * struct usb_dev_handle *handle
|
|
- * usb device handle of the mouse
|
|
- * unsigned int addr
|
|
- * address for dual receivers
|
|
+ * Parameters: unsigned char* buf
|
|
+ * result from query_csr internals
|
|
*
|
|
* Return: void
|
|
*/
|
|
-static void query_csr(mouse_t *m, struct usb_dev_handle *handle,
|
|
- unsigned int addr) {
|
|
- unsigned char buf[12] = {0};
|
|
-
|
|
- if (usb_control_msg ( handle,
|
|
- USB_TYPE_VENDOR | USB_ENDPOINT_IN,
|
|
- 0x09,
|
|
- (0x0003 | addr),
|
|
- (0x0000 | addr),
|
|
- (char *) buf,
|
|
- 8,
|
|
- TIMEOUT ) != 8) {
|
|
-
|
|
- perror("Writing to USB device: CSR");
|
|
- exit(EXIT_FAILURE);
|
|
- }
|
|
-
|
|
+static void print_csr(unsigned char* buf) {
|
|
/* We have not obtained blocks P6 P0 P4 P5 P8 P9 PB0 PB1 */
|
|
|
|
/* Is a C504 receiver busy? */
|
|
@@ -111,6 +99,7 @@
|
|
case 0x3c: printf ("C508\n"); break;
|
|
case 0x3d: printf ("C506\n"); break;
|
|
case 0x3e: printf ("C505\n"); break;
|
|
+ case 0x3f: printf ("C50B\n"); break;
|
|
case 0x42: printf ("C512\n"); break;
|
|
default: printf ("Unknown (type %x)\n", P0);
|
|
}
|
|
@@ -138,6 +127,7 @@
|
|
case 0x82: printf ("Cordless Optical TrackMan\n"); break;
|
|
case 0x8A: printf ("MX700 Cordless Optical Mouse\n"); break;
|
|
case 0x8B: printf ("MX700 Cordless Optical Mouse (2ch)\n"); break;
|
|
+ case 0x94: printf ("Cordless Optical Mouse for Notebooks\n"); break;
|
|
default: printf ("Unknown (type %x)\n", P4);
|
|
}
|
|
|
|
@@ -199,6 +189,38 @@
|
|
}
|
|
}
|
|
|
|
+/*
|
|
+ * Description: Query the mouse and report all cordless mouse specific infos
|
|
+ * e.g. receiver type, mouse type, battery status
|
|
+ *
|
|
+ * Parameters: mouse_t *m
|
|
+ * mouse struct with the mouse specs
|
|
+ * struct usb_dev_handle *handle
|
|
+ * usb device handle of the mouse
|
|
+ * unsigned int addr
|
|
+ * address for dual receivers
|
|
+ *
|
|
+ * Return: void
|
|
+ */
|
|
+static void query_csr(mouse_t *m, struct usb_dev_handle *handle,
|
|
+ unsigned int addr) {
|
|
+ unsigned char buf[12] = {0};
|
|
+
|
|
+ if (usb_control_msg ( handle,
|
|
+ USB_TYPE_VENDOR | USB_ENDPOINT_IN,
|
|
+ REQUEST_MOUSE_CSR,
|
|
+ (0x0003 | addr),
|
|
+ (0x0000 | addr),
|
|
+ (char *) buf,
|
|
+ 8,
|
|
+ TIMEOUT ) != 8) {
|
|
+
|
|
+ perror("Writing to USB device: CSR");
|
|
+ exit(EXIT_FAILURE);
|
|
+ }
|
|
+ print_csr(buf);
|
|
+
|
|
+}
|
|
|
|
/*
|
|
* Description: Query the mouse and report the current resolution
|
|
@@ -218,8 +240,8 @@
|
|
|
|
if (usb_control_msg ( handle,
|
|
USB_TYPE_VENDOR | USB_ENDPOINT_IN,
|
|
- 0x01,
|
|
- (0x000e | addr),
|
|
+ REQUEST_MOUSE_GET_RES_SSR,
|
|
+ (VALUE_MOUSE_GET_RES | addr),
|
|
(0x0000 | addr),
|
|
(char *) buf,
|
|
1,
|
|
@@ -255,8 +277,8 @@
|
|
if (m->has_ssr) {
|
|
if (usb_control_msg ( handle,
|
|
USB_TYPE_VENDOR | USB_ENDPOINT_IN,
|
|
- 0x01,
|
|
- (0x0017 | addr),
|
|
+ REQUEST_MOUSE_GET_RES_SSR,
|
|
+ (VALUE_MOUSE_GET_SSR | addr),
|
|
(0x0000 | addr),
|
|
(char*) buf,
|
|
1,
|
|
@@ -394,8 +416,8 @@
|
|
assert ((set_channel == 1) || (set_channel == 2));
|
|
if (usb_control_msg ( handle,
|
|
USB_TYPE_VENDOR,
|
|
- 0x02,
|
|
- (0x0008 | addr),
|
|
+ REQUEST_MOUSE_PUT_RES_SMS,
|
|
+ (VALUE_MOUSE_CHANNEL | addr),
|
|
((set_channel - 1) | addr),
|
|
NULL,
|
|
0,
|
|
@@ -412,8 +434,8 @@
|
|
if (set_unlock) {
|
|
if (usb_control_msg ( handle,
|
|
USB_TYPE_VENDOR,
|
|
- 0x02,
|
|
- (0x06 | addr),
|
|
+ REQUEST_MOUSE_PUT_RES_SMS,
|
|
+ (VALUE_MOUSE_UNLOCK | addr),
|
|
(0x1 | addr),
|
|
NULL,
|
|
0,
|
|
@@ -430,8 +452,8 @@
|
|
if (set_lock) {
|
|
if (usb_control_msg ( handle,
|
|
USB_TYPE_VENDOR,
|
|
- 0x02,
|
|
- (0x0006 | addr),
|
|
+ REQUEST_MOUSE_PUT_RES_SMS,
|
|
+ (VALUE_MOUSE_UNLOCK | addr),
|
|
(0x0000 | addr),
|
|
NULL,
|
|
0,
|
|
@@ -448,8 +470,8 @@
|
|
if (set_clear) {
|
|
if (usb_control_msg ( handle,
|
|
USB_TYPE_VENDOR,
|
|
- 0x09,
|
|
- (0x0004 | addr),
|
|
+ REQUEST_MOUSE_CSR,
|
|
+ (VALUE_MOUSE_CLEAR | addr),
|
|
(0x0000 | addr),
|
|
NULL,
|
|
0,
|
|
@@ -483,8 +505,8 @@
|
|
|
|
if (usb_control_msg ( handle,
|
|
USB_TYPE_VENDOR,
|
|
- 0x0002,
|
|
- 0x000e,
|
|
+ REQUEST_MOUSE_PUT_RES_SMS,
|
|
+ VALUE_MOUSE_PUT_RES,
|
|
(set_res / 400) + 2,
|
|
NULL,
|
|
0,
|
|
@@ -514,8 +536,8 @@
|
|
assert ((set_sms == 1) || (set_sms == -1));
|
|
if (usb_control_msg ( handle,
|
|
USB_TYPE_VENDOR,
|
|
- 0x02,
|
|
- 0x0017,
|
|
+ REQUEST_MOUSE_PUT_RES_SMS,
|
|
+ VALUE_MOUSE_PUT_SSR,
|
|
(set_sms == 1 ? 0x0001 : 0x0000),
|
|
NULL,
|
|
0,
|
|
@@ -641,7 +663,7 @@
|
|
/* Do we support this device? If so, list it. */
|
|
if ((m = find_mouse (device)) != NULL) {
|
|
|
|
- printf ("%s.%s: %04x:%04x %s (%s) Caps: %s%s%s\n",
|
|
+ printf ("%s.%s: %04x:%04x %s (%s) Caps: %s%s%s%s\n",
|
|
device->bus->dirname,
|
|
device->filename,
|
|
device->descriptor.idVendor,
|
|
@@ -650,6 +672,7 @@
|
|
m->model,
|
|
m->has_csr? "CSR ": "",
|
|
m->has_res? "RES ": "",
|
|
+ m->has_ssr? "SSR ": "",
|
|
m->has_sms? "SMS ": ""
|
|
);
|
|
}
|
|
@@ -667,7 +671,7 @@
|
|
device->filename,
|
|
device->descriptor.idVendor,
|
|
device->descriptor.idProduct,
|
|
- ret ? product : "Unknown"
|
|
+ ret > 0 ? product : "Unknown"
|
|
);
|
|
continue;
|
|
}
|
|
diff -Nuar --exclude '*~' lomoco-1.0.old/src/lomoco.h lomoco-1.0/src/lomoco.h
|
|
--- lomoco-1.0.old/src/lomoco.h 2006-03-01 06:10:05.000000000 -0800
|
|
+++ lomoco-1.0/src/lomoco.h 2006-04-30 02:34:04.381175920 -0700
|
|
@@ -97,4 +97,17 @@
|
|
int is_dual;
|
|
} mouse_t;
|
|
|
|
+
|
|
+#define REQUEST_MOUSE_CSR 0x09
|
|
+#define VALUE_MOUSE_GET 0x0003
|
|
+#define VALUE_MOUSE_CLEAR 0x0004
|
|
+#define REQUEST_MOUSE_GET_RES_SSR 0x01
|
|
+#define VALUE_MOUSE_GET_RES 0x000e
|
|
+#define VALUE_MOUSE_GET_SSR 0x0017
|
|
+#define REQUEST_MOUSE_PUT_RES_SMS 0x02
|
|
+#define VALUE_MOUSE_UNLOCK 0x0006
|
|
+#define VALUE_MOUSE_CHANNEL 0x0008
|
|
+#define VALUE_MOUSE_PUT_RES 0x000e
|
|
+#define VALUE_MOUSE_PUT_SSR 0x0017
|
|
+
|
|
#endif /* __LOMOCO_H */
|