1
0
Fork 0

Merge ChibiOS and LUFA descriptor support (#2362)

* Move lufa descriptor to protocol/usb_descriptor

* Try to compile usb_descriptor on ChibiOS

* Add lufa_utils for ChibiOS

Lufa USB descriptors for ChibiOS

* More lufa_util compatibility fixes

* First compiling version of shared USB descriptor

* Send the usb descriptors

* Fix the CONSOLE output on ChibiOS

* Add errors for unsupported interfaces

* Enable support for vitual serial port USB descriptors

* Implement virtual serial port for ChibiOS

* Cleanup the lufa_utils

Use the default lufa header files

* Add raw hid support for ChibiOS

This is completely untested

* Enable midi compilation on ChibiOS

* Move midi functionality out of lufa.c

* Don't register sysex callback when not needed

* ChibiOS compilation fixes

* Update ChibiOS submodule

* Fix the Midi USB descriptor

It didn't work properly when both Midi and Virtual serial port was enabled.

* Add MIDI support for ChibiOS

* Fix USB descriptor strings on ChibiOS

* Use serial usb driver for raw hid

* Generalize the ChibiOS stream like drivers

This makes the initialization much more simple and eliminates a lot of
the code duplication.

* Convert console output to chibios stream driver

* Fixes for ChibiOS update

* Update the ChibiOS contrib submodule

To include the usb data toggle synchronization fixes

* Fix duplicate reset enumeration on ChibiOS

* Add missing include

* Add number of endpoints check for ChibiOS

* Enable serial USB driver on all keyboards

* Add missing includes when API is enabled withot midi

* Add another missing inlcude
This commit is contained in:
fredizzimo 2018-02-08 22:07:46 +02:00 committed by Jack Humbert
parent 63c16f4b63
commit 53ff8a31b6
38 changed files with 761 additions and 1237 deletions

View file

@ -0,0 +1,42 @@
#include "progmem.h"
#include "stddef.h"
#include "inttypes.h"
#define ATTR_PACKED __attribute__ ((packed))
/** Concatenates the given input into a single token, via the C Preprocessor.
*
* \param[in] x First item to concatenate.
* \param[in] y Second item to concatenate.
*
* \return Concatenated version of the input.
*/
#define CONCAT(x, y) x ## y
/** CConcatenates the given input into a single token after macro expansion, via the C Preprocessor.
*
* \param[in] x First item to concatenate.
* \param[in] y Second item to concatenate.
*
* \return Concatenated version of the expanded input.
*/
#define CONCAT_EXPANDED(x, y) CONCAT(x, y)
#define CPU_TO_LE16(x) (x)
// We don't need anything from the following files, or we have defined it already
#define __LUFA_COMMON_H__
#define __USBMODE_H__
#define __USBEVENTS_H__
#define __HIDPARSER_H__
#define __USBCONTROLLER_AVR8_H__
#define __INCLUDE_FROM_USB_DRIVER
#define __INCLUDE_FROM_HID_DRIVER
#define __INCLUDE_FROM_CDC_DRIVER
#define __INCLUDE_FROM_AUDIO_DRIVER
#define __INCLUDE_FROM_MIDI_DRIVER
#include "lib/lufa/LUFA/Drivers/USB/Class/Common/HIDClassCommon.h"
#include "lib/lufa/LUFA/Drivers/USB/Class/Common/HIDReportData.h"
#include "lib/lufa/LUFA/Drivers/USB/Class/Common/CDCClassCommon.h"
#include "lib/lufa/LUFA/Drivers/USB/Class/Common/AudioClassCommon.h"
#include "lib/lufa/LUFA/Drivers/USB/Class/Common/MIDIClassCommon.h"
#include "lib/lufa/LUFA/Drivers/USB/Core/USBController.h"

View file

@ -41,6 +41,9 @@
#ifdef VISUALIZER_ENABLE
#include "visualizer/visualizer.h"
#endif
#ifdef MIDI_ENABLE
#include "qmk_midi.h"
#endif
#include "suspend.h"
#include "wait.h"
@ -65,6 +68,17 @@ host_driver_t chibios_driver = {
send_consumer
};
#ifdef VIRTSER_ENABLE
void virtser_task(void);
#endif
#ifdef RAW_HID_ENABLE
void raw_hid_task(void);
#endif
#ifdef CONSOLE_ENABLE
void console_task(void);
#endif
/* TESTING
* Amber LED blinker thread, times are in milliseconds.
@ -104,6 +118,10 @@ int main(void) {
/* init printf */
init_printf(NULL,sendchar_pf);
#ifdef MIDI_ENABLE
setup_midi();
#endif
#ifdef SERIAL_LINK_ENABLE
init_serial_link();
#endif
@ -182,5 +200,14 @@ int main(void) {
}
keyboard_task();
#ifdef CONSOLE_ENABLE
console_task();
#endif
#ifdef VIRTSER_ENABLE
virtser_task();
#endif
#ifdef RAW_HID_ENABLE
raw_hid_task();
#endif
}
}

File diff suppressed because it is too large Load diff

View file

@ -41,20 +41,6 @@ void init_usb_driver(USBDriver *usbp);
* ---------------
*/
/* main keyboard (6kro) */
#define KBD_INTERFACE 0
#define KBD_ENDPOINT 1
#define KBD_EPSIZE 8
#define KBD_REPORT_KEYS (KBD_EPSIZE - 2)
/* secondary keyboard */
#ifdef NKRO_ENABLE
#define NKRO_INTERFACE 4
#define NKRO_ENDPOINT 5
#define NKRO_EPSIZE 16
#define NKRO_REPORT_KEYS (NKRO_EPSIZE - 1)
#endif
/* extern report_keyboard_t keyboard_report_sent; */
/* keyboard IN request callback handler */
@ -75,10 +61,6 @@ void nkro_in_cb(USBDriver *usbp, usbep_t ep);
#ifdef MOUSE_ENABLE
#define MOUSE_INTERFACE 1
#define MOUSE_ENDPOINT 2
#define MOUSE_EPSIZE 8
/* mouse IN request callback handler */
void mouse_in_cb(USBDriver *usbp, usbep_t ep);
#endif /* MOUSE_ENABLE */
@ -90,10 +72,6 @@ void mouse_in_cb(USBDriver *usbp, usbep_t ep);
#ifdef EXTRAKEY_ENABLE
#define EXTRA_INTERFACE 3
#define EXTRA_ENDPOINT 4
#define EXTRA_EPSIZE 8
/* extrakey IN request callback handler */
void extra_in_cb(USBDriver *usbp, usbep_t ep);
@ -111,24 +89,12 @@ typedef struct {
#ifdef CONSOLE_ENABLE
#define CONSOLE_INTERFACE 2
#define CONSOLE_ENDPOINT 3
#define CONSOLE_EPSIZE 16
/* Number of IN reports that can be stored inside the output queue */
#define CONSOLE_QUEUE_CAPACITY 4
/* Console flush time */
#define CONSOLE_FLUSH_MS 50
/* Putchar over the USB console */
int8_t sendchar(uint8_t c);
/* Flush output (send everything immediately) */
void console_flush_output(void);
/* console IN request callback handler */
void console_in_cb(USBDriver *usbp, usbep_t ep);
#endif /* CONSOLE_ENABLE */
void sendchar_pf(void *p, char c);