diff Output/pjrcUSB/arm/usb_desc.h @ 449:45feb80a2ad1

Major USB update, fixes most (if not all) known issues USB - General - Refactored descriptors - Enabled/Disable USB endpoints - Added debug flags for special features - Code cleanup - Interface count calculation based off of enabled endpoints - Delayed wTotalLength calculation to simplify descriptor offsets - Re-ordered endpoints and interfaces - Added more debug output - Added usbInitTime to show how long keyboard initialization took (Useful when debugging bad init sequences) - Added function for usb_resume() which takes care of the resume sequence * Resume is now only called if packets are starting to timeout USB - Special Options - Added enableDeviceRestartOnUSBTimeout * A last resort hammer for bad USB Chipsets/OSs, don't use if you can help it * Disabled - Added enableUSBResume * Enables host resume wake-up signalling, required to wake a computer from sleep * Enabled - Added enableUSBLowPowerNegotiation * Enables power negotiation hack * Required to use firmware with an IPad and other hard-limit low-power USB hosts * Hasn't been tested with the recent changes * Disabled - Added enableUSBSuspend * Enables power down events on host USB bus suspend * Enabled USB - Keyboard - Attempted to cleanup HID SET_REPORT * Works much better * Still has an issue under Linux which generates *a lot* of NAKs (initializes quickly regardless) + Not present on other keyboards + SETUP -> OUT -> IN : This sequence is the problem + Specifically during the OUT phase - Enabled USB - CDC Virtual Serial Port - Code cleanup - Added convenience struct USBCDCLineCoding for easier debugging - Attempted to cleanup CDC_SET_LING_CODING * Works much better * Still has an issue under Linux which generates *a lot* of NAKs (initializes quickly regardless) + SETUP -> OUT -> IN : This sequence is the problem + Specifically during the OUT phase + Likely the same issues as HID SET_REPORT - Enabled USB - Mouse - Enabled USB - Joystick - Disabled USB - RawIO - Initial code, API not used yet - Disabled DFU - Updated load script, now faster
author Jacob Alexander <haata@kiibohd.com>
date Tue, 31 May 2016 00:19:45 -0700
parents 23a1868b4ac2
children
line wrap: on
line diff
--- a/Output/pjrcUSB/arm/usb_desc.h	Sun May 29 10:27:21 2016 -0700
+++ b/Output/pjrcUSB/arm/usb_desc.h	Tue May 31 00:19:45 2016 -0700
@@ -54,9 +54,18 @@
 #define DEVICE_SUBCLASS         0x00
 #define DEVICE_PROTOCOL         0x00
 #define EP0_SIZE                64
-#define NUM_ENDPOINTS           8
+#define NUM_ENDPOINTS           10 // XXX Can save some space if this can be calculated using KLL
 #define NUM_USB_BUFFERS         30
-#define NUM_INTERFACE           7
+
+// XXX Remember to update total interface count, if it isn't correct some OSs will not initialize USB
+//     Linux warns in dmesg
+//     Mac OSX login screen will not initialize
+#define KEYBOARD_INTERFACES     3 // Boot, NKRO, SysCtrl
+#define CDC_INTERFACES          2
+#define MOUSE_INTERFACES        1
+#define JOYSTICK_INTERFACES     1
+#define RAWIO_INTERFACES        1
+
 
 #define KEYBOARD_INTERFACE      0 // Keyboard
 #define KEYBOARD_ENDPOINT       1
@@ -70,52 +79,97 @@
 #define NKRO_KEYBOARD_INTERVAL  1
 #define NKRO_KEYBOARD_NAME      L"NKRO Keyboard"
 
+#define SYS_CTRL_INTERFACE      2 // Media Keys
+#define SYS_CTRL_ENDPOINT       3
+#define SYS_CTRL_SIZE           8
+#define SYS_CTRL_INTERVAL       1
+#define SYS_CTRL_NAME           L"Media Keys"
+
 #define CDC_IAD_DESCRIPTOR      1
-#define CDC_STATUS_INTERFACE    2
-#define CDC_DATA_INTERFACE      3 // Serial
-#define CDC_ACM_ENDPOINT        3
-#define CDC_RX_ENDPOINT         4
-#define CDC_TX_ENDPOINT         5
+#define CDC_STATUS_INTERFACE    3
+#define CDC_DATA_INTERFACE      4 // Serial
+#define CDC_ACM_ENDPOINT        4
+#define CDC_RX_ENDPOINT         5
+#define CDC_TX_ENDPOINT         6
 #define CDC_ACM_SIZE            16
 #define CDC_RX_SIZE             64
 #define CDC_TX_SIZE             64
 #define CDC_STATUS_NAME         L"Virtual Serial Port - Status"
 #define CDC_DATA_NAME           L"Virtual Serial Port - Data"
 
-#define MOUSE_INTERFACE         4 // Mouse
-#define MOUSE_ENDPOINT          6
+#define RAWIO_INTERFACE         5 // RawIO
+#define RAWIO_TX_ENDPOINT       7
+#define RAWIO_TX_SIZE           64
+#define RAWIO_TX_INTERVAL       1
+#define RAWIO_RX_ENDPOINT       8
+#define RAWIO_RX_SIZE           64
+#define RAWIO_RX_INTERVAL       1
+#define RAWIO_NAME              L"API Interface"
+
+#define MOUSE_INTERFACE         6 // Mouse
+#define MOUSE_ENDPOINT          9
 #define MOUSE_SIZE              8
 #define MOUSE_INTERVAL          1
 #define MOUSE_NAME              L"Mouse"
 
-#define JOYSTICK_INTERFACE      5 // Joystick
-#define JOYSTICK_ENDPOINT       7
+#define JOYSTICK_INTERFACE      7 // Joystick
+#define JOYSTICK_ENDPOINT       10
 #define JOYSTICK_SIZE           16
 #define JOYSTICK_INTERVAL       1
 #define JOYSTICK_NAME           L"Joystick"
 
-#define SYS_CTRL_INTERFACE      6 // Media Keys
-#define SYS_CTRL_ENDPOINT       8
-#define SYS_CTRL_SIZE           8
-#define SYS_CTRL_INTERVAL       1
-#define SYS_CTRL_NAME           L"Media Keys"
+
+// Descriptor sizes
+#define BASE_DESC_SIZE            (9)
+#define KEYBOARD_DESC_SIZE        (9+9+7)
+#define NKRO_KEYBOARD_DESC_SIZE   (9+9+7)
+#define SYS_CTRL_DESC_SIZE        (9+9+7)
+#define SERIAL_CDC_DESC_SIZE      (8+9+5+5+4+5+7+9+7+7)
+#define RAWIO_DESC_SIZE           (9+7+7)
+#define MOUSE_DESC_SIZE           (9+9+7)
+#define JOYSTICK_DESC_SIZE        (9+9+7)
 
-#define KEYBOARD_DESC_OFFSET      (9 + 9)
-#define NKRO_KEYBOARD_DESC_OFFSET (9 + 9+9+7 + 9)
-#define SERIAL_CDC_DESC_OFFSET    (9 + 9+9+7 + 9+9+7 + 8)
-#define MOUSE_DESC_OFFSET         (9 + 9+9+7 + 9+9+7 + 8+9+5+5+4+5+7+9+7+7 + 9)
-#define JOYSTICK_DESC_OFFSET      (9 + 9+9+7 + 9+9+7 + 8+9+5+5+4+5+7+9+7+7 + 9+9+7 + 9)
-#define SYS_CTRL_DESC_OFFSET      (9 + 9+9+7 + 9+9+7 + 8+9+5+5+4+5+7+9+7+7 + 9+9+7 + 9+9+7 + 9)
-#define CONFIG_DESC_SIZE          (9 + 9+9+7 + 9+9+7 + 8+9+5+5+4+5+7+9+7+7 + 9+9+7 + 9+9+7 + 9+9+7)
+// Descriptor offsets
+#define KEYBOARD_DESC_BASE_OFFSET ( \
+	BASE_DESC_SIZE + \
+	9 \
+)
+#define SERIAL_CDC_DESC_BASE_OFFSET ( \
+	BASE_DESC_SIZE + \
+	KEYBOARD_DESC_TOTAL_OFFSET + \
+	8 \
+)
+#define RAWIO_DESC_BASE_OFFSET ( \
+	BASE_DESC_SIZE + \
+	KEYBOARD_DESC_TOTAL_OFFSET + \
+	SERIAL_CDC_DESC_TOTAL_OFFSET + \
+	9 \
+)
+#define MOUSE_DESC_BASE_OFFSET ( \
+	BASE_DESC_SIZE + \
+	KEYBOARD_DESC_TOTAL_OFFSET + \
+	SERIAL_CDC_DESC_TOTAL_OFFSET + \
+	9 \
+)
+#define JOYSTICK_DESC_BASE_OFFSET ( \
+	BASE_DESC_SIZE + \
+	KEYBOARD_DESC_TOTAL_OFFSET + \
+	SERIAL_CDC_DESC_TOTAL_OFFSET + \
+	MOUSE_DESC_TOTAL_OFFSET + \
+	9 \
+)
+
 
 #define ENDPOINT1_CONFIG        ENDPOINT_TRANSIMIT_ONLY
 #define ENDPOINT2_CONFIG        ENDPOINT_TRANSIMIT_ONLY
 #define ENDPOINT3_CONFIG        ENDPOINT_TRANSIMIT_ONLY
-#define ENDPOINT4_CONFIG        ENDPOINT_RECEIVE_ONLY
-#define ENDPOINT5_CONFIG        ENDPOINT_TRANSIMIT_ONLY
+#define ENDPOINT4_CONFIG        ENDPOINT_TRANSIMIT_ONLY
+#define ENDPOINT5_CONFIG        ENDPOINT_RECEIVE_ONLY
 #define ENDPOINT6_CONFIG        ENDPOINT_TRANSIMIT_ONLY
 #define ENDPOINT7_CONFIG        ENDPOINT_TRANSIMIT_ONLY
-#define ENDPOINT8_CONFIG        ENDPOINT_TRANSIMIT_ONLY
+#define ENDPOINT8_CONFIG        ENDPOINT_RECEIVE_ONLY
+#define ENDPOINT9_CONFIG        ENDPOINT_TRANSIMIT_ONLY
+#define ENDPOINT10_CONFIG       ENDPOINT_TRANSIMIT_ONLY
 
 
 
@@ -139,3 +193,8 @@
 
 extern uint8_t *usb_bMaxPower;
 
+
+// ----- Functions -----
+
+void usb_set_config_descriptor_size();
+