added USB_EXTRA feature to HHKB/V-USB
This commit is contained in:
		
							parent
							
								
									068c31a7ba
								
							
						
					
					
						commit
						74f7e19863
					
				
					 7 changed files with 166 additions and 78 deletions
				
			
		|  | @ -122,11 +122,15 @@ uint8_t command_proc(void) | ||||||
| #endif | #endif | ||||||
| #ifdef USB_EXTRA_ENABLE | #ifdef USB_EXTRA_ENABLE | ||||||
|         case KB_ESC: |         case KB_ESC: | ||||||
|  | #ifdef HOST_PJRC | ||||||
|             if (suspend && remote_wakeup) { |             if (suspend && remote_wakeup) { | ||||||
|                 usb_remote_wakeup(); |                 usb_remote_wakeup(); | ||||||
|             } else { |             } else { | ||||||
|                 usb_extra_system_send(SYSTEM_POWER_DOWN); |                 host_system_send(SYSTEM_POWER_DOWN); | ||||||
|             } |             } | ||||||
|  | #else | ||||||
|  |             host_system_send(SYSTEM_POWER_DOWN); | ||||||
|  | #endif | ||||||
|             break; |             break; | ||||||
| #endif | #endif | ||||||
|         case KB_BSPC: |         case KB_BSPC: | ||||||
|  |  | ||||||
|  | @ -42,7 +42,7 @@ F_CPU = 20000000 | ||||||
| #   comment out to disable the options. | #   comment out to disable the options. | ||||||
| # | # | ||||||
| MOUSEKEY_ENABLE = yes	# Mouse keys | MOUSEKEY_ENABLE = yes	# Mouse keys | ||||||
| #USB_EXTRA_ENABLE = yes	# Enhanced feature for Windows(Audio control and System control) | USB_EXTRA_ENABLE = yes	# Enhanced feature for Windows(Audio control and System control) | ||||||
| #USB_NKRO_ENABLE = yes	# USB Nkey Rollover | #USB_NKRO_ENABLE = yes	# USB Nkey Rollover | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										22
									
								
								host.h
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								host.h
									
										
									
									
									
								
							|  | @ -4,6 +4,11 @@ | ||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | /* report id */ | ||||||
|  | #define REPORT_ID_MOUSE     1 | ||||||
|  | #define REPORT_ID_SYSTEM    2 | ||||||
|  | #define REPORT_ID_AUDIO     3 | ||||||
|  | 
 | ||||||
| /* keyboard Modifiers in boot protocol report */ | /* keyboard Modifiers in boot protocol report */ | ||||||
| #define BIT_LCTRL   (1<<0) | #define BIT_LCTRL   (1<<0) | ||||||
| #define BIT_LSHIFT  (1<<1) | #define BIT_LSHIFT  (1<<1) | ||||||
|  | @ -25,6 +30,16 @@ | ||||||
| #define MOUSE_BTN4 (1<<3) | #define MOUSE_BTN4 (1<<3) | ||||||
| #define MOUSE_BTN5 (1<<4) | #define MOUSE_BTN5 (1<<4) | ||||||
| 
 | 
 | ||||||
|  | // Consumer Page(0x0C) Consumer Control(0x01)
 | ||||||
|  | #define AUDIO_VOL_UP		(1<<0) | ||||||
|  | #define AUDIO_VOL_DOWN		(1<<1) | ||||||
|  | #define AUDIO_MUTE		(1<<2) | ||||||
|  | 
 | ||||||
|  | // Generic Desktop Page(0x01) System Control(0x80)
 | ||||||
|  | #define SYSTEM_POWER_DOWN	(1<<0) | ||||||
|  | #define SYSTEM_SLEEP		(1<<1) | ||||||
|  | #define SYSTEM_WAKE_UP		(1<<2) | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| #if defined(HOST_PJRC) | #if defined(HOST_PJRC) | ||||||
| #   include "usb.h" | #   include "usb.h" | ||||||
|  | @ -44,6 +59,7 @@ typedef struct { | ||||||
| } report_keyboard_t; | } report_keyboard_t; | ||||||
| 
 | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
|  |     uint8_t report_id; | ||||||
|     uint8_t buttons; |     uint8_t buttons; | ||||||
|     int8_t x; |     int8_t x; | ||||||
|     int8_t y; |     int8_t y; | ||||||
|  | @ -74,6 +90,12 @@ uint8_t host_get_first_key(void); | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| void host_send_keyboard_report(void); | void host_send_keyboard_report(void); | ||||||
|  | #if defined(MOUSEKEY_ENABLE) || defined(PS2_MOUSE_ENABLE) | ||||||
| void host_mouse_send(report_mouse_t *report); | void host_mouse_send(report_mouse_t *report); | ||||||
|  | #endif | ||||||
|  | #ifdef USB_EXTRA_ENABLE | ||||||
|  | void host_system_send(uint8_t data); | ||||||
|  | void host_audio_send(uint8_t data); | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
							
								
								
									
										20
									
								
								keyboard.c
									
										
									
									
									
								
							
							
						
						
									
										20
									
								
								keyboard.c
									
										
									
									
									
								
							|  | @ -11,9 +11,7 @@ | ||||||
| #ifdef MOUSEKEY_ENABLE | #ifdef MOUSEKEY_ENABLE | ||||||
| #include "mousekey.h" | #include "mousekey.h" | ||||||
| #endif | #endif | ||||||
| /* TODO: shoud make new API */ |  | ||||||
| #ifdef USB_EXTRA_ENABLE | #ifdef USB_EXTRA_ENABLE | ||||||
| #include "usb_extra.h" |  | ||||||
| #include <util/delay.h> | #include <util/delay.h> | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | @ -68,23 +66,27 @@ void keyboard_proc(void) | ||||||
| #ifdef USB_EXTRA_ENABLE | #ifdef USB_EXTRA_ENABLE | ||||||
|             // audio control & system control
 |             // audio control & system control
 | ||||||
|             else if (code == KB_MUTE) { |             else if (code == KB_MUTE) { | ||||||
|                 usb_extra_audio_send(AUDIO_MUTE); |                 host_audio_send(AUDIO_MUTE); | ||||||
|                 usb_extra_audio_send(0); |  | ||||||
|                 _delay_ms(500); |                 _delay_ms(500); | ||||||
|  |                 host_audio_send(0); | ||||||
|             } else if (code == KB_VOLU) { |             } else if (code == KB_VOLU) { | ||||||
|                 usb_extra_audio_send(AUDIO_VOL_UP); |                 host_audio_send(AUDIO_VOL_UP); | ||||||
|                 usb_extra_audio_send(0); |  | ||||||
|                 _delay_ms(200); |                 _delay_ms(200); | ||||||
|  |                 host_audio_send(0); | ||||||
|             } else if (code == KB_VOLD) { |             } else if (code == KB_VOLD) { | ||||||
|                 usb_extra_audio_send(AUDIO_VOL_DOWN); |                 host_audio_send(AUDIO_VOL_DOWN); | ||||||
|                 usb_extra_audio_send(0); |  | ||||||
|                 _delay_ms(200); |                 _delay_ms(200); | ||||||
|  |                 host_audio_send(0); | ||||||
|             } else if (code == KB_PWR) { |             } else if (code == KB_PWR) { | ||||||
|  | #ifdef HOST_PJRC | ||||||
|                 if (suspend && remote_wakeup) { |                 if (suspend && remote_wakeup) { | ||||||
|                     usb_remote_wakeup(); |                     usb_remote_wakeup(); | ||||||
|                 } else { |                 } else { | ||||||
|                     usb_extra_system_send(SYSTEM_POWER_DOWN); |                     host_system_send(SYSTEM_POWER_DOWN); | ||||||
|                 } |                 } | ||||||
|  | #else | ||||||
|  |                 host_system_send(SYSTEM_POWER_DOWN); | ||||||
|  | #endif | ||||||
|                 _delay_ms(1000); |                 _delay_ms(1000); | ||||||
|             } |             } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
							
								
								
									
										19
									
								
								pjrc/host.c
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								pjrc/host.c
									
										
									
									
									
								
							|  | @ -2,7 +2,12 @@ | ||||||
| #include <avr/interrupt.h> | #include <avr/interrupt.h> | ||||||
| #include "usb_keycodes.h" | #include "usb_keycodes.h" | ||||||
| #include "usb_keyboard.h" | #include "usb_keyboard.h" | ||||||
|  | #if defined(MOUSEKEY_ENABLE) || defined(PS2_MOUSE_ENABLE) | ||||||
| #include "usb_mouse.h" | #include "usb_mouse.h" | ||||||
|  | #endif | ||||||
|  | #ifdef USB_EXTRA_ENABLE | ||||||
|  | #include "usb_extra.h" | ||||||
|  | #endif | ||||||
| #include "debug.h" | #include "debug.h" | ||||||
| #include "host.h" | #include "host.h" | ||||||
| #include "util.h" | #include "util.h" | ||||||
|  | @ -104,10 +109,24 @@ void host_send_keyboard_report(void) | ||||||
|     usb_keyboard_send_report(keyboard_report); |     usb_keyboard_send_report(keyboard_report); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | #if defined(MOUSEKEY_ENABLE) || defined(PS2_MOUSE_ENABLE) | ||||||
| void host_mouse_send(report_mouse_t *report) | void host_mouse_send(report_mouse_t *report) | ||||||
| { | { | ||||||
|     usb_mouse_send(report->x, report->y, report->v, report->h, report->buttons); |     usb_mouse_send(report->x, report->y, report->v, report->h, report->buttons); | ||||||
| } | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifdef USB_EXTRA_ENABLE | ||||||
|  | void host_system_send(uint8_t data) | ||||||
|  | { | ||||||
|  |     usb_extra_system_send(data); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void host_audio_send(uint8_t data) | ||||||
|  | { | ||||||
|  |     usb_extra_audio_send(data); | ||||||
|  | } | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| static inline void add_key_byte(uint8_t code) | static inline void add_key_byte(uint8_t code) | ||||||
|  |  | ||||||
|  | @ -682,7 +682,11 @@ ISR(USB_GEN_vect) | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|                 /* TODO: should keep IDLE rate on each keyboard interface */ |                 /* TODO: should keep IDLE rate on each keyboard interface */ | ||||||
|  | #ifdef USB_NKRO_ENABLE | ||||||
| 		if (!keyboard_nkro && usb_keyboard_idle_config && (++div4 & 3) == 0) { | 		if (!keyboard_nkro && usb_keyboard_idle_config && (++div4 & 3) == 0) { | ||||||
|  | #else | ||||||
|  | 		if (usb_keyboard_idle_config && (++div4 & 3) == 0) { | ||||||
|  | #endif | ||||||
| 			UENUM = KBD_ENDPOINT; | 			UENUM = KBD_ENDPOINT; | ||||||
| 			if (UEINTX & (1<<RWAL)) { | 			if (UEINTX & (1<<RWAL)) { | ||||||
| 				usb_keyboard_idle_count++; | 				usb_keyboard_idle_count++; | ||||||
|  |  | ||||||
							
								
								
									
										171
									
								
								vusb/host.c
									
										
									
									
									
								
							
							
						
						
									
										171
									
								
								vusb/host.c
									
										
									
									
									
								
							|  | @ -133,14 +133,41 @@ void host_send_keyboard_report(void) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | #if defined(MOUSEKEY_ENABLE) || defined(PS2_MOUSE_ENABLE) | ||||||
| void host_mouse_send(report_mouse_t *report) | void host_mouse_send(report_mouse_t *report) | ||||||
| { | { | ||||||
|  |     report->report_id = REPORT_ID_MOUSE; | ||||||
|     if (usbInterruptIsReady3()) { |     if (usbInterruptIsReady3()) { | ||||||
|         usbSetInterrupt3((void *)report, sizeof(*report)); |         usbSetInterrupt3((void *)report, sizeof(*report)); | ||||||
|     } else { |     } else { | ||||||
|         debug("Int3 not ready\n"); |         debug("Int3 not ready\n"); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifdef USB_EXTRA_ENABLE | ||||||
|  | void host_system_send(uint8_t data) | ||||||
|  | { | ||||||
|  |     static uint8_t report[] = { REPORT_ID_SYSTEM, 0 }; | ||||||
|  |     report[1] = data; | ||||||
|  |     if (usbInterruptIsReady3()) { | ||||||
|  |         usbSetInterrupt3((void *)&report, sizeof(report)); | ||||||
|  |     } else { | ||||||
|  |         debug("Int3 not ready\n"); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void host_audio_send(uint8_t data) | ||||||
|  | { | ||||||
|  |     static uint8_t report[] = { REPORT_ID_AUDIO, 0 }; | ||||||
|  |     report[1] = data; | ||||||
|  |     if (usbInterruptIsReady3()) { | ||||||
|  |         usbSetInterrupt3((void *)&report, sizeof(report)); | ||||||
|  |     } else { | ||||||
|  |         debug("Int3 not ready\n"); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -265,77 +292,87 @@ PROGMEM uchar keyboard_hid_report[] = { | ||||||
|  * http://www.microsoft.com/whdc/device/input/wheel.mspx
 |  * http://www.microsoft.com/whdc/device/input/wheel.mspx
 | ||||||
|  */ |  */ | ||||||
| PROGMEM uchar mouse_hid_report[] = { | PROGMEM uchar mouse_hid_report[] = { | ||||||
|     /* from HID 1.11 spec example */ |     /* mouse */ | ||||||
|     0x05, 0x01,        // USAGE_PAGE (Generic Desktop)
 |     0x05, 0x01,        // USAGE_PAGE (Generic Desktop)
 | ||||||
|     0x09, 0x02,        // USAGE (Mouse)
 |     0x09, 0x02,        // USAGE (Mouse)
 | ||||||
|     0xa1, 0x01,        // COLLECTION (Application)
 |     0xa1, 0x01,        // COLLECTION (Application)
 | ||||||
|     0x09, 0x02,        //   USAGE (Mouse)
 |     0x85, 0x01,        //   REPORT_ID (1)
 | ||||||
|     0xa1, 0x02,        //   COLLECTION (Logical)
 |     0x09, 0x01,        //   USAGE (Pointer)
 | ||||||
|     0x09, 0x01,        //     USAGE (Pointer)
 |     0xa1, 0x00,        //   COLLECTION (Physical)
 | ||||||
|     0xa1, 0x00,        //     COLLECTION (Physical)
 |                        // ----------------------------  Buttons
 | ||||||
|                        // ------------------------------  Buttons
 |     0x05, 0x09,        //     USAGE_PAGE (Button)
 | ||||||
|     0x05, 0x09,        //       USAGE_PAGE (Button)
 |     0x19, 0x01,        //     USAGE_MINIMUM (Button 1)
 | ||||||
|     0x19, 0x01,        //       USAGE_MINIMUM (Button 1)
 |     0x29, 0x05,        //     USAGE_MAXIMUM (Button 5)
 | ||||||
|     0x29, 0x05,        //       USAGE_MAXIMUM (Button 5)
 |     0x15, 0x00,        //     LOGICAL_MINIMUM (0)
 | ||||||
|     0x15, 0x00,        //       LOGICAL_MINIMUM (0)
 |     0x25, 0x01,        //     LOGICAL_MAXIMUM (1)
 | ||||||
|     0x25, 0x01,        //       LOGICAL_MAXIMUM (1)
 |     0x75, 0x01,        //     REPORT_SIZE (1)
 | ||||||
|     0x75, 0x01,        //       REPORT_SIZE (1)
 |     0x95, 0x05,        //     REPORT_COUNT (5)
 | ||||||
|     0x95, 0x05,        //       REPORT_COUNT (5)
 |     0x81, 0x02,        //     INPUT (Data,Var,Abs)
 | ||||||
|     0x81, 0x02,        //       INPUT (Data,Var,Abs)
 |                        // ----------------------------  Padding
 | ||||||
|                        // ------------------------------  Padding
 |     0x75, 0x03,        //     REPORT_SIZE (3)
 | ||||||
|     0x75, 0x03,        //       REPORT_SIZE (3)
 |     0x95, 0x01,        //     REPORT_COUNT (1)
 | ||||||
|     0x95, 0x01,        //       REPORT_COUNT (1)
 |     0x81, 0x03,        //     INPUT (Cnst,Var,Abs)
 | ||||||
|     0x81, 0x03,        //       INPUT (Cnst,Var,Abs)
 |                        // ----------------------------  X,Y position
 | ||||||
|                        // ------------------------------  X,Y position
 |     0x05, 0x01,        //     USAGE_PAGE (Generic Desktop)
 | ||||||
|     0x05, 0x01,        //       USAGE_PAGE (Generic Desktop)
 |     0x09, 0x30,        //     USAGE (X)
 | ||||||
|     0x09, 0x30,        //       USAGE (X)
 |     0x09, 0x31,        //     USAGE (Y)
 | ||||||
|     0x09, 0x31,        //       USAGE (Y)
 |     0x15, 0x81,        //     LOGICAL_MINIMUM (-127)
 | ||||||
|     0x15, 0x81,        //       LOGICAL_MINIMUM (-127)
 |     0x25, 0x7f,        //     LOGICAL_MAXIMUM (127)
 | ||||||
|     0x25, 0x7f,        //       LOGICAL_MAXIMUM (127)
 |     0x75, 0x08,        //     REPORT_SIZE (8)
 | ||||||
|     0x75, 0x08,        //       REPORT_SIZE (8)
 |     0x95, 0x02,        //     REPORT_COUNT (2)
 | ||||||
|     0x95, 0x02,        //       REPORT_COUNT (2)
 |     0x81, 0x06,        //     INPUT (Data,Var,Rel)
 | ||||||
|     0x81, 0x06,        //       INPUT (Data,Var,Rel)
 |                        // ----------------------------  Vertical wheel
 | ||||||
|     0xa1, 0x02,        //       COLLECTION (Logical)
 |     0x09, 0x38,        //     USAGE (Wheel)
 | ||||||
|                        // ------------------------------  Vertical wheel res multiplier
 |     0x15, 0x81,        //     LOGICAL_MINIMUM (-127)
 | ||||||
|     0x09, 0x48,        //         USAGE (Resolution Multiplier)
 |     0x25, 0x7f,        //     LOGICAL_MAXIMUM (127)
 | ||||||
|     0x15, 0x00,        //         LOGICAL_MINIMUM (0)
 |     0x35, 0x00,        //     PHYSICAL_MINIMUM (0)        - reset physical
 | ||||||
|     0x25, 0x01,        //         LOGICAL_MAXIMUM (1)
 |     0x45, 0x00,        //     PHYSICAL_MAXIMUM (0)
 | ||||||
|     0x35, 0x01,        //         PHYSICAL_MINIMUM (1)
 |     0x75, 0x08,        //     REPORT_SIZE (8)
 | ||||||
|     0x45, 0x04,        //         PHYSICAL_MAXIMUM (4)
 |     0x95, 0x01,        //     REPORT_COUNT (1)
 | ||||||
|     0x75, 0x02,        //         REPORT_SIZE (2)
 |     0x81, 0x06,        //     INPUT (Data,Var,Rel)
 | ||||||
|     0x95, 0x01,        //         REPORT_COUNT (1)
 |                        // ----------------------------  Horizontal wheel
 | ||||||
|     0xa4,              //         PUSH
 |     0x05, 0x0c,        //     USAGE_PAGE (Consumer Devices)
 | ||||||
|     0xb1, 0x02,        //         FEATURE (Data,Var,Abs)
 |     0x0a, 0x38, 0x02,  //     USAGE (AC Pan)
 | ||||||
|                        // ------------------------------  Vertical wheel
 |     0x15, 0x81,        //     LOGICAL_MINIMUM (-127)
 | ||||||
|     0x09, 0x38,        //         USAGE (Wheel)
 |     0x25, 0x7f,        //     LOGICAL_MAXIMUM (127)
 | ||||||
|     0x15, 0x81,        //         LOGICAL_MINIMUM (-127)
 |     0x75, 0x08,        //     REPORT_SIZE (8)
 | ||||||
|     0x25, 0x7f,        //         LOGICAL_MAXIMUM (127)
 |     0x95, 0x01,        //     REPORT_COUNT (1)
 | ||||||
|     0x35, 0x00,        //         PHYSICAL_MINIMUM (0)        - reset physical
 |     0x81, 0x06,        //     INPUT (Data,Var,Rel)
 | ||||||
|     0x45, 0x00,        //         PHYSICAL_MAXIMUM (0)
 |  | ||||||
|     0x75, 0x08,        //         REPORT_SIZE (8)
 |  | ||||||
|     0x81, 0x06,        //         INPUT (Data,Var,Rel)
 |  | ||||||
|     0xc0,              //       END_COLLECTION
 |  | ||||||
|     0xa1, 0x02,        //       COLLECTION (Logical)
 |  | ||||||
|                        // ------------------------------  Horizontal wheel res multiplier
 |  | ||||||
|     0x09, 0x48,        //         USAGE (Resolution Multiplier)
 |  | ||||||
|     0xb4,              //         POP
 |  | ||||||
|     0xb1, 0x02,        //         FEATURE (Data,Var,Abs)
 |  | ||||||
|                        // ------------------------------  Padding for Feature report
 |  | ||||||
|     0x35, 0x00,        //         PHYSICAL_MINIMUM (0)        - reset physical
 |  | ||||||
|     0x45, 0x00,        //         PHYSICAL_MAXIMUM (0)
 |  | ||||||
|     0x75, 0x04,        //         REPORT_SIZE (4)
 |  | ||||||
|     0xb1, 0x03,        //         FEATURE (Cnst,Var,Abs)
 |  | ||||||
|                        // ------------------------------  Horizontal wheel
 |  | ||||||
|     0x05, 0x0c,        //         USAGE_PAGE (Consumer Devices)
 |  | ||||||
|     0x0a, 0x38, 0x02,  //         USAGE (AC Pan)
 |  | ||||||
|     0x15, 0x81,        //         LOGICAL_MINIMUM (-127)
 |  | ||||||
|     0x25, 0x7f,        //         LOGICAL_MAXIMUM (127)
 |  | ||||||
|     0x75, 0x08,        //         REPORT_SIZE (8)
 |  | ||||||
|     0x81, 0x06,        //         INPUT (Data,Var,Rel)
 |  | ||||||
|     0xc0,              //       END_COLLECTION
 |  | ||||||
|     0xc0,              //     END_COLLECTION
 |  | ||||||
|     0xc0,              //   END_COLLECTION
 |     0xc0,              //   END_COLLECTION
 | ||||||
|     0xc0               // END_COLLECTION
 |     0xc0,              // END_COLLECTION
 | ||||||
|  |     /* system */ | ||||||
|  |     0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
 | ||||||
|  |     0x09, 0x80,                    // USAGE (System Control)
 | ||||||
|  |     0xa1, 0x01,                    // COLLECTION (Application)
 | ||||||
|  |     0x85, 0x02,                    //   REPORT_ID (2)
 | ||||||
|  |     0x19, 0x81,                    //   USAGE_MINIMUM (System Power Down)
 | ||||||
|  |     0x29, 0x83,                    //   USAGE_MAXIMUM (System Wake Up)
 | ||||||
|  |     0x75, 0x01,                    //   REPORT_SIZE (1)
 | ||||||
|  |     0x95, 0x03,                    //   REPORT_COUNT (3)
 | ||||||
|  |     0x81, 0x06,                    //   INPUT (Data,Var,Rel)
 | ||||||
|  |     0x95, 0x05,                    //   REPORT_COUNT (5)
 | ||||||
|  |     0x81, 0x07,                    //   INPUT (Cnst,Var,Rel)
 | ||||||
|  |     0xc0,                          // END_COLLECTION
 | ||||||
|  |     /* audio */ | ||||||
|  |     0x05, 0x0c,                    // USAGE_PAGE (Consumer Devices)
 | ||||||
|  |     0x09, 0x01,                    // USAGE (Consumer Control)
 | ||||||
|  |     0xa1, 0x01,                    // COLLECTION (Application)
 | ||||||
|  |     0x85, 0x03,                    //   REPORT_ID (3)
 | ||||||
|  |     0x09, 0xe9,                    //   USAGE (Volume Up)
 | ||||||
|  |     0x09, 0xea,                    //   USAGE (Volume Down)
 | ||||||
|  |     0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
 | ||||||
|  |     0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
 | ||||||
|  |     0x75, 0x01,                    //   REPORT_SIZE (1)
 | ||||||
|  |     0x95, 0x02,                    //   REPORT_COUNT (2)
 | ||||||
|  |     0x81, 0x02,                    //   INPUT (Data,Var,Abs)
 | ||||||
|  |     0x09, 0xe2,                    //   USAGE (Mute)
 | ||||||
|  |     0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
 | ||||||
|  |     0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
 | ||||||
|  |     0x95, 0x01,                    //   REPORT_COUNT (1)
 | ||||||
|  |     0x81, 0x06,                    //   INPUT (Data,Var,Rel)
 | ||||||
|  |     0x95, 0x05,                    //   REPORT_COUNT (5)
 | ||||||
|  |     0x81, 0x07,                    //   INPUT (Cnst,Var,Abs)
 | ||||||
|  |     0xc0,                          // END_COLLECTION
 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 tmk
						tmk