From 196724c62d8c09b30dabb9a8ff3246033d95315f Mon Sep 17 00:00:00 2001
From: Dean Camera <dean@fourwalledcubicle.com>
Date: Sun, 7 Feb 2010 07:31:53 +0000
Subject: Added keyboard modifier masks (HID_KEYBOARD_MODIFER_*) to the HID
 class driver and Keyboard demos.

---
 LUFA/Drivers/USB/Class/Common/HID.h | 50 ++++++++++++++++++++++++++++---------
 1 file changed, 38 insertions(+), 12 deletions(-)

(limited to 'LUFA/Drivers/USB/Class/Common')

diff --git a/LUFA/Drivers/USB/Class/Common/HID.h b/LUFA/Drivers/USB/Class/Common/HID.h
index b6af8af30..6f2d7c222 100644
--- a/LUFA/Drivers/USB/Class/Common/HID.h
+++ b/LUFA/Drivers/USB/Class/Common/HID.h
@@ -48,43 +48,67 @@
 
 	/* Macros: */
 		/** HID Class Specific Request to get the current HID report from the device. */
-		#define REQ_GetReport                0x01
+		#define REQ_GetReport                   0x01
 
 		/** HID Class Specific Request to get the current device idle count. */
-		#define REQ_GetIdle                  0x02
+		#define REQ_GetIdle                     0x02
 
 		/** HID Class Specific Request to set the current HID report to the device. */
-		#define REQ_SetReport                0x09
+		#define REQ_SetReport                   0x09
 
 		/** HID Class Specific Request to set the device's idle count. */
-		#define REQ_SetIdle                  0x0A
+		#define REQ_SetIdle                     0x0A
 
 		/** HID Class Specific Request to get the current HID report protocol mode. */
-		#define REQ_GetProtocol              0x03
+		#define REQ_GetProtocol                 0x03
 
 		/** HID Class Specific Request to set the current HID report protocol mode. */
-		#define REQ_SetProtocol              0x0B
+		#define REQ_SetProtocol                 0x0B
 
 		/** Descriptor header type value, to indicate a HID class HID descriptor. */
-		#define DTYPE_HID                    0x21
+		#define DTYPE_HID                       0x21
 		
 		/** Descriptor header type value, to indicate a HID class HID report descriptor. */
-		#define DTYPE_Report                 0x22
+		#define DTYPE_Report                    0x22
 		
 		/** Constant for the protocol value of a HID interface descriptor, indicating that the interface does not support
 		 *  any HID class boot protocol (see HID Class Specification).
 		 */
-		#define HID_NON_BOOT_PROTOCOL        0x00
+		#define HID_NON_BOOT_PROTOCOL           0x00
 
 		/** Constant for the protocol value of a HID interface descriptor, indicating that the interface supports the
 		 *  HID class Keyboard boot protocol (see HID Class Specification).
 		 */
-		#define HID_BOOT_KEYBOARD_PROTOCOL   0x01
+		#define HID_BOOT_KEYBOARD_PROTOCOL      0x01
 
 		/** Constant for the protocol value of a HID interface descriptor, indicating that the interface supports the
 		 *  HID class Mouse boot protocol (see HID Class Specification).
 		 */
-		#define HID_BOOT_MOUSE_PROTOCOL      0x02
+		#define HID_BOOT_MOUSE_PROTOCOL         0x02
+		
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's left control key is currently pressed. */
+		#define HID_KEYBOARD_MODIFER_LEFTCTRL   (1 << 0)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's left shift key is currently pressed. */
+		#define HID_KEYBOARD_MODIFER_LEFTSHIFT  (1 << 1)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's left alt key is currently pressed. */
+		#define HID_KEYBOARD_MODIFER_LEFTALT    (1 << 2)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's left GUI key is currently pressed. */
+		#define HID_KEYBOARD_MODIFER_LEFTGUI    (1 << 3)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's right control key is currently pressed. */
+		#define HID_KEYBOARD_MODIFER_RIGHTCTRL  (1 << 4)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's right shift key is currently pressed. */
+		#define HID_KEYBOARD_MODIFER_RIGHTSHIFT (1 << 5)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's right alt key is currently pressed. */
+		#define HID_KEYBOARD_MODIFER_RIGHTALT   (1 << 6)
+
+		/** Constant for a keyboard report modifier byte, indicating that the keyboard's right GUI key is currently pressed. */
+		#define HID_KEYBOARD_MODIFER_RIGHTGUI   (1 << 7)
 
 	/* Type Defines: */
 		/** Enum for the different types of HID reports. */
@@ -122,7 +146,9 @@
 		/** Type define for a standard Boot Protocol Keyboard report */
 		typedef struct
 		{
-			uint8_t Modifier; /**< Keyboard modifier byte, indicating pressed modifier keys (such as Shift, Control, etc.) */
+			uint8_t Modifier; /**< Keyboard modifier byte, indicating pressed modifier keys (a combination of
+			                   *   HID_KEYBOARD_MODIFER_* masks)
+			                   */
 			uint8_t Reserved; /**< Reserved for OEM use, always set to 0 */
 			uint8_t KeyCode[6]; /**< Key codes of the currently pressed keys */
 		} USB_KeyboardReport_Data_t;
-- 
cgit v1.2.3