| --- 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); |
| } |
| } |
| |