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.
gentoo-overlay/app-misc/logitech-applet/files/logitech-applet-0.4_pre1-mx...

140 lines
5.7 KiB

--- a/logitech_applet.c
+++ b/logitech_applet.c
@@ -40,6 +40,44 @@
#endif
#define VENDOR_LOGITECH 0x046D
+#define HAS_RES 0x01 /* mouse supports variable resolution */
+#define HAS_SS 0x02 /* mouse supports smart scroll control */
+#define HAS_CSR 0x04 /* mouse supports cordless status reporting and control */
+#define HAS_SSR 0x08 /* mouse supports smart scroll reporting */
+#define USE_CH2 0x10 /* mouse needs to use the second channel */
+
+struct device_table {
+ int idVendor;
+ int idProduct;
+ char* Model;
+ char* Name;
+ int flags;
+}
+
+device_table[] = {
+ { VENDOR_LOGITECH, 0xC00E, "M-BJ58", "Wheel Mouse Optical", HAS_RES },
+ { VENDOR_LOGITECH, 0xC00F, "M-BJ79", "MouseMan Traveler", HAS_RES },
+ { VENDOR_LOGITECH, 0xC012, "M-BL63B", "MouseMan Dual Optical", HAS_RES },
+ { VENDOR_LOGITECH, 0xC01B, "M-BP86", "MX310 Optical Mouse", HAS_RES },
+ { VENDOR_LOGITECH, 0xC01D, "M-BS81A", "MX510 Optical Mouse", HAS_RES | HAS_SS | HAS_SSR },
+ { VENDOR_LOGITECH, 0xC01E, "M-BS81A", "MX518 Optical Mouse", HAS_RES },
+ { VENDOR_LOGITECH, 0xC01F, "M-BS82", "MX300 Optical Mouse", HAS_RES },
+ { VENDOR_LOGITECH, 0xC024, "M-BP82", "MX300 Optical Mouse", HAS_RES },
+ { VENDOR_LOGITECH, 0xC025, "M-BP81A", "MX500 Optical Mouse", HAS_RES | HAS_SS | HAS_SSR },
+ { VENDOR_LOGITECH, 0xC031, "M-UT58A", "iFeel Mouse (silver)", HAS_RES },
+ { VENDOR_LOGITECH, 0xC051, "M-BS81A", "MX518 Optical Mouse", HAS_RES },
+ { VENDOR_LOGITECH, 0xC501, "C-BA4-MSE", "Mouse Receiver", HAS_CSR },
+ { VENDOR_LOGITECH, 0xC502, "C-UA3-DUAL", "Dual Receiver", HAS_CSR | USE_CH2},
+ { VENDOR_LOGITECH, 0xC504, "C-BD9-DUAL", "Cordless Freedom Optical", HAS_CSR | USE_CH2 },
+ { VENDOR_LOGITECH, 0xC505, "C-BG17-DUAL", "Cordless Elite Duo", HAS_SS | HAS_SSR | HAS_CSR | USE_CH2},
+ { VENDOR_LOGITECH, 0xC506, "C-BF16-MSE", "MX700 Optical Mouse", HAS_SS | HAS_CSR },
+ { VENDOR_LOGITECH, 0xC508, "C-BA4-MSE", "Cordless Optical TrackMan", HAS_SS | HAS_CSR },
+ { VENDOR_LOGITECH, 0xC50B, "967300-0403", "Cordless MX Duo Receiver", HAS_SS|HAS_CSR },
+ { VENDOR_LOGITECH, 0xC50E, "M-RAG97", "MX1000 Laser Mouse", HAS_SS | HAS_CSR },
+ { VENDOR_LOGITECH, 0xC702, "C-UF15", "Receiver for Cordless Presenter", HAS_CSR },
+ { 0, 0, 0, 0, 0 }
+};
+
int get_resolution(struct usb_device *dev)
{
@@ -141,7 +179,12 @@
return cruise;
}
-/* resolution should be 0x03 for 400cpi, 0x04 for 800cpi */
+/* resolution should be:
+ * - 0x03 for 400cpi
+ * - 0x04 for 800cpi
+ * - 0x05 for 1200cpi
+ * - 0x06 for 1600cpi (actually 1800cpi on newer MX518)
+ */
int set_resolution(struct usb_device *dev, int resolution)
{
usb_dev_handle *usb_h;
@@ -233,39 +276,6 @@
printf("Logitech Mouse Applet, Version %s\n", VERSION);
}
-#define HAS_RES 0x01 /* mouse supports variable resolution */
-#define HAS_SS 0x02 /* mouse supports smart scroll control */
-#define HAS_CSR 0x04 /* mouse supports cordless status reporting and control */
-#define HAS_SSR 0x08 /* mouse supports smart scroll reporting */
-#define USE_CH2 0x10 /* mouse needs to use the second channel */
-
-struct device_table {
- int idVendor;
- int idProduct;
- char* Model;
- char* Name;
- int flags;
-} device_table[] = {
- { VENDOR_LOGITECH, 0xC00E, "M-BJ58", "Wheel Mouse Optical", HAS_RES },
- { VENDOR_LOGITECH, 0xC00F, "M-BJ79", "MouseMan Traveler", HAS_RES },
- { VENDOR_LOGITECH, 0xC012, "M-BL63B", "MouseMan Dual Optical", HAS_RES },
- { VENDOR_LOGITECH, 0xC01B, "M-BP86", "MX310 Optical Mouse", HAS_RES },
- { VENDOR_LOGITECH, 0xC01D, "M-BS81A", "MX510 Optical Mouse", HAS_RES | HAS_SS | HAS_SSR },
- { VENDOR_LOGITECH, 0xC024, "M-BP82", "MX300 Optical Mouse", HAS_RES },
- { VENDOR_LOGITECH, 0xC025, "M-BP81A", "MX500 Optical Mouse", HAS_RES | HAS_SS | HAS_SSR },
- { VENDOR_LOGITECH, 0xC031, "M-UT58A", "iFeel Mouse (silver)", HAS_RES },
- { VENDOR_LOGITECH, 0xC501, "C-BA4-MSE", "Mouse Receiver", HAS_CSR },
- { VENDOR_LOGITECH, 0xC502, "C-UA3-DUAL", "Dual Receiver", HAS_CSR | USE_CH2},
- { VENDOR_LOGITECH, 0xC504, "C-BD9-DUAL", "Cordless Freedom Optical", HAS_CSR | USE_CH2 },
- { VENDOR_LOGITECH, 0xC505, "C-BG17-DUAL", "Cordless Elite Duo", HAS_SS | HAS_SSR | HAS_CSR | USE_CH2},
- { VENDOR_LOGITECH, 0xC506, "C-BF16-MSE", "MX700 Optical Mouse", HAS_SS | HAS_CSR },
- { VENDOR_LOGITECH, 0xC508, "C-BA4-MSE", "Cordless Optical TrackMan", HAS_SS | HAS_CSR },
- { VENDOR_LOGITECH, 0xC50B, "967300-0403", "Cordless MX Duo Receiver", HAS_SS|HAS_CSR },
- { VENDOR_LOGITECH, 0xC50E, "M-RAG97", "MX1000 Laser Mouse", HAS_SS | HAS_CSR },
- { VENDOR_LOGITECH, 0xC702, "C-UF15", "Receiver for Cordless Presenter", HAS_CSR },
- { 0, 0, 0, 0, 0 }
-};
-
int main(int argc, char **argv)
{
struct usb_bus *bus;
@@ -318,8 +328,12 @@
resolution = 400;
else if (!strcmp("800", optarg))
resolution = 800;
+ else if (!strcmp("1200", optarg))
+ resolution = 1200;
+ else if (!strcmp("1600", optarg))
+ resolution = 1600;
else
- printf("Bad argument (should be 400 or 800)\n");
+ printf("Bad argument (should be 400, 800, 1200 or 1600)\n");
break;
case 'v':
version();
@@ -363,14 +377,22 @@
break;
case 4: printf("800cpi\n");
break;
+ case 5: printf("1200cpi\n");
+ break;
+ case 6: printf("1600cpi\n");
+ break;
default: printf("(Unexpected result:%i)\n", resolution);
break;
}
} else {
if (400 == resolution)
set_resolution(dev, 0x03);
- else
+ else if (800 == resolution)
set_resolution(dev, 0x04);
+ else if (1200 == resolution)
+ set_resolution(dev, 0x05);
+ else
+ set_resolution(dev, 0x06);
}
}