]> git.armaanb.net Git - atreides.git/blobdiff - firmware/usb_keyboard.h
Add C firmware.
[atreides.git] / firmware / usb_keyboard.h
diff --git a/firmware/usb_keyboard.h b/firmware/usb_keyboard.h
new file mode 100644 (file)
index 0000000..b4ee6f4
--- /dev/null
@@ -0,0 +1,206 @@
+#ifndef usb_serial_h__
+#define usb_serial_h__
+
+#include <stdint.h>
+
+void usb_init(void);            // initialize everything
+uint8_t usb_configured(void);       // is the USB port configured
+
+int8_t usb_keyboard_press(uint8_t key, uint8_t modifier);
+int8_t usb_keyboard_send(void);
+extern uint8_t keyboard_modifier_keys;
+extern uint8_t keyboard_keys[6];
+extern volatile uint8_t keyboard_leds;
+
+// This file does not include the HID debug functions, so these empty
+// macros replace them with nothing, so users can compile code that
+// has calls to these functions.
+#define usb_debug_putchar(c)
+#define usb_debug_flush_output()
+
+
+#define KEY_CTRL    0x01
+#define KEY_SHIFT   0x02
+#define KEY_ALT     0x04
+#define KEY_GUI     0x08
+#define KEY_LEFT_CTRL   0x01
+#define KEY_LEFT_SHIFT  0x02
+#define KEY_LEFT_ALT    0x04
+#define KEY_LEFT_GUI    0x08
+#define KEY_RIGHT_CTRL  0x10
+#define KEY_RIGHT_SHIFT 0x20
+#define KEY_RIGHT_ALT   0x40
+#define KEY_RIGHT_GUI   0x80
+
+#define KEY_A       4
+#define KEY_B       5
+#define KEY_C       6
+#define KEY_D       7
+#define KEY_E       8
+#define KEY_F       9
+#define KEY_G       10
+#define KEY_H       11
+#define KEY_I       12
+#define KEY_J       13
+#define KEY_K       14
+#define KEY_L       15
+#define KEY_M       16
+#define KEY_N       17
+#define KEY_O       18
+#define KEY_P       19
+#define KEY_Q       20
+#define KEY_R       21
+#define KEY_S       22
+#define KEY_T       23
+#define KEY_U       24
+#define KEY_V       25
+#define KEY_W       26
+#define KEY_X       27
+#define KEY_Y       28
+#define KEY_Z       29
+#define KEY_1       30
+#define KEY_2       31
+#define KEY_3       32
+#define KEY_4       33
+#define KEY_5       34
+#define KEY_6       35
+#define KEY_7       36
+#define KEY_8       37
+#define KEY_9       38
+#define KEY_0       39
+#define KEY_ENTER   40
+#define KEY_ESC     41
+#define KEY_BACKSPACE   42
+#define KEY_TAB     43
+#define KEY_SPACE   44
+#define KEY_MINUS   45
+#define KEY_EQUAL   46
+#define KEY_LEFT_BRACE  47
+#define KEY_RIGHT_BRACE 48
+#define KEY_BACKSLASH   49
+#define KEY_NUMBER  50
+#define KEY_SEMICOLON   51
+#define KEY_QUOTE   52
+#define KEY_TILDE   53
+#define KEY_COMMA   54
+#define KEY_PERIOD  55
+#define KEY_SLASH   56
+#define KEY_CAPS_LOCK   57
+#define KEY_F1      58
+#define KEY_F2      59
+#define KEY_F3      60
+#define KEY_F4      61
+#define KEY_F5      62
+#define KEY_F6      63
+#define KEY_F7      64
+#define KEY_F8      65
+#define KEY_F9      66
+#define KEY_F10     67
+#define KEY_F11     68
+#define KEY_F12     69
+#define KEY_PRINTSCREEN 70
+#define KEY_SCROLL_LOCK 71
+#define KEY_PAUSE   72
+#define KEY_INSERT  73
+#define KEY_HOME    74
+#define KEY_PAGE_UP 75
+#define KEY_DELETE  76
+#define KEY_END     77
+#define KEY_PAGE_DOWN   78
+#define KEY_RIGHT   79
+#define KEY_LEFT    80
+#define KEY_DOWN    81
+#define KEY_UP      82
+#define KEY_NUM_LOCK    83
+#define KEYPAD_SLASH    84
+#define KEYPAD_ASTERIX  85
+#define KEYPAD_MINUS    86
+#define KEYPAD_PLUS 87
+#define KEYPAD_ENTER    88
+#define KEYPAD_1    89
+#define KEYPAD_2    90
+#define KEYPAD_3    91
+#define KEYPAD_4    92
+#define KEYPAD_5    93
+#define KEYPAD_6    94
+#define KEYPAD_7    95
+#define KEYPAD_8    96
+#define KEYPAD_9    97
+#define KEYPAD_0    98
+#define KEYPAD_PERIOD   99
+
+
+
+
+// Everything below this point is only intended for usb_serial.c
+#ifdef USB_SERIAL_PRIVATE_INCLUDE
+#include <avr/io.h>
+#include <avr/pgmspace.h>
+#include <avr/interrupt.h>
+
+#define EP_TYPE_CONTROL         0x00
+#define EP_TYPE_BULK_IN         0x81
+#define EP_TYPE_BULK_OUT        0x80
+#define EP_TYPE_INTERRUPT_IN        0xC1
+#define EP_TYPE_INTERRUPT_OUT       0xC0
+#define EP_TYPE_ISOCHRONOUS_IN      0x41
+#define EP_TYPE_ISOCHRONOUS_OUT     0x40
+
+#define EP_SINGLE_BUFFER        0x02
+#define EP_DOUBLE_BUFFER        0x06
+
+#define EP_SIZE(s)  ((s) == 64 ? 0x30 :         \
+                     ((s) == 32 ? 0x20 :        \
+                      ((s) == 16 ? 0x10 :       \
+                       0x00)))
+
+#define MAX_ENDPOINT        4
+
+#define LSB(n) (n & 255)
+#define MSB(n) ((n >> 8) & 255)
+
+#if defined(__AVR_AT90USB162__)
+#define HW_CONFIG()
+#define PLL_CONFIG() (PLLCSR = ((1<<PLLE)|(1<<PLLP0)))
+#define USB_CONFIG() (USBCON = (1<<USBE))
+#define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK)))
+#elif defined(__AVR_ATmega32U4__)
+#define HW_CONFIG() (UHWCON = 0x01)
+#define PLL_CONFIG() (PLLCSR = 0x12)
+#define USB_CONFIG() (USBCON = ((1<<USBE)|(1<<OTGPADE)))
+#define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK)))
+#elif defined(__AVR_AT90USB646__)
+#define HW_CONFIG() (UHWCON = 0x81)
+#define PLL_CONFIG() (PLLCSR = 0x1A)
+#define USB_CONFIG() (USBCON = ((1<<USBE)|(1<<OTGPADE)))
+#define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK)))
+#elif defined(__AVR_AT90USB1286__)
+#define HW_CONFIG() (UHWCON = 0x81)
+#define PLL_CONFIG() (PLLCSR = 0x16)
+#define USB_CONFIG() (USBCON = ((1<<USBE)|(1<<OTGPADE)))
+#define USB_FREEZE() (USBCON = ((1<<USBE)|(1<<FRZCLK)))
+#endif
+
+// standard control endpoint request types
+#define GET_STATUS          0
+#define CLEAR_FEATURE           1
+#define SET_FEATURE         3
+#define SET_ADDRESS         5
+#define GET_DESCRIPTOR          6
+#define GET_CONFIGURATION       8
+#define SET_CONFIGURATION       9
+#define GET_INTERFACE           10
+#define SET_INTERFACE           11
+// HID (human interface device)
+#define HID_GET_REPORT          1
+#define HID_GET_IDLE            2
+#define HID_GET_PROTOCOL        3
+#define HID_SET_REPORT          9
+#define HID_SET_IDLE            10
+#define HID_SET_PROTOCOL        11
+// CDC (communication class device)
+#define CDC_SET_LINE_CODING     0x20
+#define CDC_GET_LINE_CODING     0x21
+#define CDC_SET_CONTROL_LINE_STATE  0x22
+#endif
+#endif