Merge pull request #916 from wez/ble_4

Connect the adafruit ble code to the lufa main loop
This commit is contained in:
Jack Humbert 2016-12-03 10:12:38 -05:00 committed by GitHub
commit 464f7d9687
1 changed files with 71 additions and 11 deletions

View File

@ -52,6 +52,7 @@
#include "descriptor.h" #include "descriptor.h"
#include "lufa.h" #include "lufa.h"
#include "quantum.h" #include "quantum.h"
#include <util/atomic.h>
#ifdef NKRO_ENABLE #ifdef NKRO_ENABLE
#include "keycode_config.h" #include "keycode_config.h"
@ -67,13 +68,16 @@
#ifdef BLUETOOTH_ENABLE #ifdef BLUETOOTH_ENABLE
#include "bluetooth.h" #include "bluetooth.h"
#endif #endif
#ifdef ADAFRUIT_BLE_ENABLE
#include "adafruit_ble.h"
#endif
#ifdef VIRTSER_ENABLE #ifdef VIRTSER_ENABLE
#include "virtser.h" #include "virtser.h"
#endif #endif
#if (defined(RGB_MIDI) | defined(RGBLIGHT_ANIMATIONS)) & defined(RGBLIGHT_ENABLE) #if (defined(RGB_MIDI) | defined(RGBLIGHT_ANIMATIONS)) & defined(RGBLIGHT_ENABLE)
#include "rgblight.h" #include "rgblight.h"
#endif #endif
#ifdef MIDI_ENABLE #ifdef MIDI_ENABLE
@ -297,7 +301,9 @@ void EVENT_USB_Device_WakeUp()
#ifdef CONSOLE_ENABLE #ifdef CONSOLE_ENABLE
static bool console_flush = false; static bool console_flush = false;
#define CONSOLE_FLUSH_SET(b) do { \ #define CONSOLE_FLUSH_SET(b) do { \
uint8_t sreg = SREG; cli(); console_flush = b; SREG = sreg; \ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {\
console_flush = b; \
} \
} while (0) } while (0)
// called every 1ms // called every 1ms
@ -501,9 +507,35 @@ static uint8_t keyboard_leds(void)
return keyboard_led_stats; return keyboard_led_stats;
} }
#define SendToUSB 1
#define SendToBT 2
#define SendToBLE 4
static inline uint8_t where_to_send(void) {
#ifdef ADAFRUIT_BLE_ENABLE
#if 0
if (adafruit_ble_is_connected()) {
// For testing, send to BLE as a priority
return SendToBLE;
}
#endif
// This is the real policy
if (USB_DeviceState != DEVICE_STATE_Configured) {
if (adafruit_ble_is_connected()) {
return SendToBLE;
}
}
#endif
return ((USB_DeviceState == DEVICE_STATE_Configured) ? SendToUSB : 0)
#ifdef BLUETOOTH_ENABLE
|| SendToBT
#endif
;
}
static void send_keyboard(report_keyboard_t *report) static void send_keyboard(report_keyboard_t *report)
{ {
#ifdef BLUETOOTH_ENABLE #ifdef BLUETOOTH_ENABLE
bluefruit_serial_send(0xFD); bluefruit_serial_send(0xFD);
for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) { for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) {
@ -512,9 +544,17 @@ static void send_keyboard(report_keyboard_t *report)
#endif #endif
uint8_t timeout = 255; uint8_t timeout = 255;
uint8_t where = where_to_send();
if (USB_DeviceState != DEVICE_STATE_Configured) #ifdef ADAFRUIT_BLE_ENABLE
return; if (where & SendToBLE) {
adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys));
}
#endif
if (!(where & SendToUSB)) {
return;
}
/* Select the Keyboard Report Endpoint */ /* Select the Keyboard Report Endpoint */
#ifdef NKRO_ENABLE #ifdef NKRO_ENABLE
@ -567,8 +607,17 @@ static void send_mouse(report_mouse_t *report)
uint8_t timeout = 255; uint8_t timeout = 255;
if (USB_DeviceState != DEVICE_STATE_Configured) uint8_t where = where_to_send();
return;
#ifdef ADAFRUIT_BLE_ENABLE
if (where & SendToBLE) {
// FIXME: mouse buttons
adafruit_ble_send_mouse_move(report->x, report->y, report->v, report->h);
}
#endif
if (!(where & SendToUSB)) {
return;
}
/* Select the Mouse Report Endpoint */ /* Select the Mouse Report Endpoint */
Endpoint_SelectEndpoint(MOUSE_IN_EPNUM); Endpoint_SelectEndpoint(MOUSE_IN_EPNUM);
@ -626,9 +675,16 @@ static void send_consumer(uint16_t data)
#endif #endif
uint8_t timeout = 255; uint8_t timeout = 255;
uint8_t where = where_to_send();
if (USB_DeviceState != DEVICE_STATE_Configured) #ifdef ADAFRUIT_BLE_ENABLE
return; if (where & SendToBLE) {
adafruit_ble_send_consumer_key(data, 0);
}
#endif
if (!(where & SendToUSB)) {
return;
}
report_extra_t r = { report_extra_t r = {
.report_id = REPORT_ID_CONSUMER, .report_id = REPORT_ID_CONSUMER,
@ -1038,7 +1094,7 @@ int main(void)
print("Keyboard start.\n"); print("Keyboard start.\n");
while (1) { while (1) {
#ifndef BLUETOOTH_ENABLE #if !defined(BLUETOOTH_ENABLE) && !defined(ADAFRUIT_BLE_ENABLE)
while (USB_DeviceState == DEVICE_STATE_Suspended) { while (USB_DeviceState == DEVICE_STATE_Suspended) {
print("[s]"); print("[s]");
suspend_power_down(); suspend_power_down();
@ -1054,11 +1110,15 @@ int main(void)
midi_device_process(&midi_device); midi_device_process(&midi_device);
// MIDI_Task(); // MIDI_Task();
#endif #endif
#if defined(RGBLIGHT_ANIMATIONS) & defined(RGBLIGHT_ENABLE) #if defined(RGBLIGHT_ANIMATIONS) & defined(RGBLIGHT_ENABLE)
rgblight_task(); rgblight_task();
#endif #endif
#ifdef ADAFRUIT_BLE_ENABLE
adafruit_ble_task();
#endif
#ifdef VIRTSER_ENABLE #ifdef VIRTSER_ENABLE
virtser_task(); virtser_task();
CDC_Device_USBTask(&cdc_device); CDC_Device_USBTask(&cdc_device);