Merge remote-tracking branch 'upstream/develop' into xap
This commit is contained in:
		
						commit
						3c66b9b0ec
					
				
					 7256 changed files with 77233 additions and 46094 deletions
				
			
		| 
						 | 
				
			
			@ -146,9 +146,7 @@ static void    send_keyboard(report_keyboard_t *report);
 | 
			
		|||
static void    send_mouse(report_mouse_t *report);
 | 
			
		||||
static void    send_system(uint16_t data);
 | 
			
		||||
static void    send_consumer(uint16_t data);
 | 
			
		||||
host_driver_t  lufa_driver = {
 | 
			
		||||
    keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer,
 | 
			
		||||
};
 | 
			
		||||
host_driver_t  lufa_driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer};
 | 
			
		||||
 | 
			
		||||
#ifdef VIRTSER_ENABLE
 | 
			
		||||
// clang-format off
 | 
			
		||||
| 
						 | 
				
			
			@ -400,7 +398,7 @@ static void Console_Task(void) {
 | 
			
		|||
void send_joystick_packet(joystick_t *joystick) {
 | 
			
		||||
    uint8_t timeout = 255;
 | 
			
		||||
 | 
			
		||||
    static joystick_report_t;
 | 
			
		||||
    static joystick_report_t r;
 | 
			
		||||
    r = (joystick_report_t) {
 | 
			
		||||
#    if JOYSTICK_AXES_COUNT > 0
 | 
			
		||||
        .axes =
 | 
			
		||||
| 
						 | 
				
			
			@ -617,6 +615,11 @@ void EVENT_USB_Device_ConfigurationChanged(void) {
 | 
			
		|||
    /* Setup joystick endpoint */
 | 
			
		||||
    ConfigSuccess &= Endpoint_ConfigureEndpoint((JOYSTICK_IN_EPNUM | ENDPOINT_DIR_IN), EP_TYPE_INTERRUPT, JOYSTICK_EPSIZE, 1);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(DIGITIZER_ENABLE) && !defined(DIGITIZER_SHARED_EP)
 | 
			
		||||
    /* Setup digitizer endpoint */
 | 
			
		||||
    ConfigSuccess &= Endpoint_ConfigureEndpoint((DIGITIZER_IN_EPNUM | ENDPOINT_DIR_IN), EP_TYPE_INTERRUPT, DIGITIZER_EPSIZE, 1);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* FIXME: Expose this table in the docs somehow
 | 
			
		||||
| 
						 | 
				
			
			@ -1075,6 +1078,23 @@ void virtser_send(const uint8_t byte) {
 | 
			
		|||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void send_digitizer(report_digitizer_t *report) {
 | 
			
		||||
#ifdef DIGITIZER_ENABLE
 | 
			
		||||
    uint8_t timeout = 255;
 | 
			
		||||
 | 
			
		||||
    if (USB_DeviceState != DEVICE_STATE_Configured) return;
 | 
			
		||||
 | 
			
		||||
    Endpoint_SelectEndpoint(DIGITIZER_IN_EPNUM);
 | 
			
		||||
 | 
			
		||||
    /* Check if write ready for a polling interval around 10ms */
 | 
			
		||||
    while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
 | 
			
		||||
    if (!Endpoint_IsReadWriteAllowed()) return;
 | 
			
		||||
 | 
			
		||||
    Endpoint_Write_Stream_LE(report, sizeof(report_digitizer_t), NULL);
 | 
			
		||||
    Endpoint_ClearIN();
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 * main
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
| 
						 | 
				
			
			@ -1087,8 +1107,13 @@ static void setup_mcu(void) {
 | 
			
		|||
    MCUSR &= ~_BV(WDRF);
 | 
			
		||||
    wdt_disable();
 | 
			
		||||
 | 
			
		||||
    /* Disable clock division */
 | 
			
		||||
// For boards running at 3.3V and crystal at 16 MHz
 | 
			
		||||
#if (F_CPU == 8000000 && F_USB == 16000000)
 | 
			
		||||
    /* Divide clock by 2 */
 | 
			
		||||
    clock_prescale_set(clock_div_2);
 | 
			
		||||
#else /* Disable clock division */
 | 
			
		||||
    clock_prescale_set(clock_div_1);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** \brief Setup USB
 | 
			
		||||
| 
						 | 
				
			
			@ -1105,18 +1130,16 @@ static void setup_usb(void) {
 | 
			
		|||
    USB_Device_EnableSOFEvents();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** \brief Main
 | 
			
		||||
 *
 | 
			
		||||
 * FIXME: Needs doc
 | 
			
		||||
 */
 | 
			
		||||
int main(void) __attribute__((weak));
 | 
			
		||||
int main(void) {
 | 
			
		||||
void protocol_setup(void) {
 | 
			
		||||
#ifdef MIDI_ENABLE
 | 
			
		||||
    setup_midi();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    setup_mcu();
 | 
			
		||||
    keyboard_setup();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void protocol_init(void) {
 | 
			
		||||
    setup_usb();
 | 
			
		||||
    sei();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1150,48 +1173,50 @@ int main(void) {
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
    print("Keyboard start.\n");
 | 
			
		||||
    while (1) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void protocol_task(void) {
 | 
			
		||||
#if !defined(NO_USB_STARTUP_CHECK)
 | 
			
		||||
        if (USB_DeviceState == DEVICE_STATE_Suspended) {
 | 
			
		||||
            print("[s]");
 | 
			
		||||
            while (USB_DeviceState == DEVICE_STATE_Suspended) {
 | 
			
		||||
                suspend_power_down();
 | 
			
		||||
                if (USB_Device_RemoteWakeupEnabled && suspend_wakeup_condition()) {
 | 
			
		||||
                    USB_Device_SendRemoteWakeup();
 | 
			
		||||
                    clear_keyboard();
 | 
			
		||||
    if (USB_DeviceState == DEVICE_STATE_Suspended) {
 | 
			
		||||
        print("[s]");
 | 
			
		||||
        while (USB_DeviceState == DEVICE_STATE_Suspended) {
 | 
			
		||||
            suspend_power_down();
 | 
			
		||||
            if (USB_Device_RemoteWakeupEnabled && suspend_wakeup_condition()) {
 | 
			
		||||
                USB_Device_SendRemoteWakeup();
 | 
			
		||||
                clear_keyboard();
 | 
			
		||||
 | 
			
		||||
#    if USB_SUSPEND_WAKEUP_DELAY > 0
 | 
			
		||||
                    // Some hubs, kvm switches, and monitors do
 | 
			
		||||
                    // weird things, with USB device state bouncing
 | 
			
		||||
                    // around wildly on wakeup, yielding race
 | 
			
		||||
                    // conditions that can corrupt the keyboard state.
 | 
			
		||||
                    //
 | 
			
		||||
                    // Pause for a while to let things settle...
 | 
			
		||||
                    wait_ms(USB_SUSPEND_WAKEUP_DELAY);
 | 
			
		||||
                // Some hubs, kvm switches, and monitors do
 | 
			
		||||
                // weird things, with USB device state bouncing
 | 
			
		||||
                // around wildly on wakeup, yielding race
 | 
			
		||||
                // conditions that can corrupt the keyboard state.
 | 
			
		||||
                //
 | 
			
		||||
                // Pause for a while to let things settle...
 | 
			
		||||
                wait_ms(USB_SUSPEND_WAKEUP_DELAY);
 | 
			
		||||
#    endif
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            suspend_wakeup_init();
 | 
			
		||||
        }
 | 
			
		||||
        suspend_wakeup_init();
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
        keyboard_task();
 | 
			
		||||
    keyboard_task();
 | 
			
		||||
 | 
			
		||||
#ifdef MIDI_ENABLE
 | 
			
		||||
        MIDI_Device_USBTask(&USB_MIDI_Interface);
 | 
			
		||||
    MIDI_Device_USBTask(&USB_MIDI_Interface);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef MODULE_ADAFRUIT_BLE
 | 
			
		||||
        adafruit_ble_task();
 | 
			
		||||
    adafruit_ble_task();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef VIRTSER_ENABLE
 | 
			
		||||
        virtser_task();
 | 
			
		||||
        CDC_Device_USBTask(&cdc_device);
 | 
			
		||||
    virtser_task();
 | 
			
		||||
    CDC_Device_USBTask(&cdc_device);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef RAW_ENABLE
 | 
			
		||||
        raw_hid_task();
 | 
			
		||||
    raw_hid_task();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef XAP_ENABLE
 | 
			
		||||
| 
						 | 
				
			
			@ -1199,12 +1224,8 @@ int main(void) {
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
#if !defined(INTERRUPT_CONTROL_ENDPOINT)
 | 
			
		||||
        USB_USBTask();
 | 
			
		||||
    USB_USBTask();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
        // Run housekeeping
 | 
			
		||||
        housekeeping_task();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint16_t wIndex, const void **const DescriptorAddress) { return get_usb_descriptor(wValue, wIndex, DescriptorAddress); }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue