diff options
Diffstat (limited to 'tmk_core/protocol')
| -rw-r--r-- | tmk_core/protocol/arm_atsam/main_arm_atsam.c | 24 | ||||
| -rw-r--r-- | tmk_core/protocol/arm_atsam/md_rgb_matrix_programs.c | 2 | ||||
| -rw-r--r-- | tmk_core/protocol/arm_atsam/usb/udi_device_conf.h | 14 | ||||
| -rw-r--r-- | tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c | 29 | ||||
| -rw-r--r-- | tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h | 1 | ||||
| -rw-r--r-- | tmk_core/protocol/chibios/chibios.c | 7 | ||||
| -rw-r--r-- | tmk_core/protocol/chibios/usb_main.c | 85 | ||||
| -rw-r--r-- | tmk_core/protocol/chibios/usb_util.c | 1 | ||||
| -rw-r--r-- | tmk_core/protocol/host.c | 150 | ||||
| -rw-r--r-- | tmk_core/protocol/host.h | 9 | ||||
| -rw-r--r-- | tmk_core/protocol/host_driver.h | 8 | ||||
| -rw-r--r-- | tmk_core/protocol/lufa/lufa.c | 146 | ||||
| -rw-r--r-- | tmk_core/protocol/report.h | 6 | ||||
| -rw-r--r-- | tmk_core/protocol/usb_descriptor.c | 12 | ||||
| -rw-r--r-- | tmk_core/protocol/vusb/vusb.c | 52 | ||||
| -rw-r--r-- | tmk_core/protocol/vusb/vusb.h | 2 | 
16 files changed, 188 insertions, 360 deletions
| diff --git a/tmk_core/protocol/arm_atsam/main_arm_atsam.c b/tmk_core/protocol/arm_atsam/main_arm_atsam.c index 8ee9e042e7..1ccfbfb54a 100644 --- a/tmk_core/protocol/arm_atsam/main_arm_atsam.c +++ b/tmk_core/protocol/arm_atsam/main_arm_atsam.c @@ -37,14 +37,13 @@ void    main_subtasks(void);  uint8_t keyboard_leds(void);  void    send_keyboard(report_keyboard_t *report);  void    send_mouse(report_mouse_t *report); -void    send_system(uint16_t data); -void    send_consumer(uint16_t data); +void    send_extra(report_extra_t *report);  #ifdef DEFERRED_EXEC_ENABLE  void deferred_exec_task(void);  #endif // DEFERRED_EXEC_ENABLE -host_driver_t arm_atsam_driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer}; +host_driver_t arm_atsam_driver = {keyboard_leds, send_keyboard, send_mouse, send_extra};  uint8_t led_states; @@ -114,33 +113,20 @@ void send_mouse(report_mouse_t *report) {  #endif // MOUSEKEY_ENABLE  } +void send_extra(report_extra_t *report) {  #ifdef EXTRAKEY_ENABLE -void send_extra(uint8_t report_id, uint16_t data) {      uint32_t irqflags;      irqflags = __get_PRIMASK();      __disable_irq();      __DMB(); -    udi_hid_exk_report.desc.report_id   = report_id; -    udi_hid_exk_report.desc.report_data = data; -    udi_hid_exk_b_report_valid          = 1; +    memcpy(udi_hid_exk_report, report, UDI_HID_EXK_REPORT_SIZE); +    udi_hid_exk_b_report_valid = 1;      udi_hid_exk_send_report();      __DMB();      __set_PRIMASK(irqflags); -} -#endif // EXTRAKEY_ENABLE - -void send_system(uint16_t data) { -#ifdef EXTRAKEY_ENABLE -    send_extra(REPORT_ID_SYSTEM, data); -#endif // EXTRAKEY_ENABLE -} - -void send_consumer(uint16_t data) { -#ifdef EXTRAKEY_ENABLE -    send_extra(REPORT_ID_CONSUMER, data);  #endif // EXTRAKEY_ENABLE  } diff --git a/tmk_core/protocol/arm_atsam/md_rgb_matrix_programs.c b/tmk_core/protocol/arm_atsam/md_rgb_matrix_programs.c index 69b3ad574c..58fc4efd9c 100644 --- a/tmk_core/protocol/arm_atsam/md_rgb_matrix_programs.c +++ b/tmk_core/protocol/arm_atsam/md_rgb_matrix_programs.c @@ -95,7 +95,7 @@ led_setup_t leds_rainbow_s[] = {  void *led_setups[] = {leds_rainbow_s, leds_rainbow_ns, leds_teal_salmon, leds_yellow, leds_red, leds_green, leds_blue, leds_white, leds_white_with_red_stripe, leds_black_with_red_stripe, leds_off}; -const uint8_t led_setups_count = sizeof(led_setups) / sizeof(led_setups[0]); +const uint8_t led_setups_count = ARRAY_SIZE(led_setups);  #    endif // USE_MASSDROP_CONFIGURATOR  #endif     // RGB_MATRIX_ENABLE
\ No newline at end of file diff --git a/tmk_core/protocol/arm_atsam/usb/udi_device_conf.h b/tmk_core/protocol/arm_atsam/usb/udi_device_conf.h index eeed196275..a3c6f1c397 100644 --- a/tmk_core/protocol/arm_atsam/usb/udi_device_conf.h +++ b/tmk_core/protocol/arm_atsam/usb/udi_device_conf.h @@ -352,21 +352,9 @@ typedef struct {  // clang-format on -// set report buffer (from host) -extern uint8_t udi_hid_exk_report_set; -  // report buffer  #    define UDI_HID_EXK_REPORT_SIZE 3 - -typedef union { -    struct { -        uint8_t  report_id; -        uint16_t report_data; -    } desc; -    uint8_t raw[UDI_HID_EXK_REPORT_SIZE]; -} udi_hid_exk_report_t; - -extern udi_hid_exk_report_t udi_hid_exk_report; +extern uint8_t udi_hid_exk_report[UDI_HID_EXK_REPORT_SIZE];  COMPILER_PACK_RESET() diff --git a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c index be4f2bb0c9..5d681a8b71 100644 --- a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c +++ b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.c @@ -371,13 +371,13 @@ static uint8_t udi_hid_exk_rate;  COMPILER_WORD_ALIGNED  static uint8_t udi_hid_exk_protocol; -COMPILER_WORD_ALIGNED -uint8_t udi_hid_exk_report_set; +// COMPILER_WORD_ALIGNED +// uint8_t udi_hid_exk_report_set;  bool udi_hid_exk_b_report_valid;  COMPILER_WORD_ALIGNED -udi_hid_exk_report_t udi_hid_exk_report; +uint8_t udi_hid_exk_report[UDI_HID_EXK_REPORT_SIZE];  static bool udi_hid_exk_b_report_trans_ongoing; @@ -415,39 +415,24 @@ UDC_DESC_STORAGE udi_hid_exk_report_desc_t udi_hid_exk_report_desc = {{      //clang-format on  }}; -static bool udi_hid_exk_setreport(void); -  static void udi_hid_exk_report_sent(udd_ep_status_t status, iram_size_t nb_sent, udd_ep_id_t ep); -static void udi_hid_exk_setreport_valid(void); -  bool udi_hid_exk_enable(void) {      // Initialize internal values      udi_hid_exk_rate                   = 0;      udi_hid_exk_protocol               = 0;      udi_hid_exk_b_report_trans_ongoing = false; -    memset(udi_hid_exk_report.raw, 0, UDI_HID_EXK_REPORT_SIZE); +    memset(udi_hid_exk_report, 0, UDI_HID_EXK_REPORT_SIZE);      udi_hid_exk_b_report_valid = false;      return UDI_HID_EXK_ENABLE_EXT();  }  void udi_hid_exk_disable(void) { UDI_HID_EXK_DISABLE_EXT(); } -bool udi_hid_exk_setup(void) { return udi_hid_setup(&udi_hid_exk_rate, &udi_hid_exk_protocol, (uint8_t *)&udi_hid_exk_report_desc, udi_hid_exk_setreport); } +bool udi_hid_exk_setup(void) { return udi_hid_setup(&udi_hid_exk_rate, &udi_hid_exk_protocol, (uint8_t *)&udi_hid_exk_report_desc, NULL); }  uint8_t udi_hid_exk_getsetting(void) { return 0; } -static bool udi_hid_exk_setreport(void) { -    if ((USB_HID_REPORT_TYPE_OUTPUT == (udd_g_ctrlreq.req.wValue >> 8)) && (0 == (0xFF & udd_g_ctrlreq.req.wValue)) && (1 == udd_g_ctrlreq.req.wLength)) { -        // Report OUT type on report ID 0 from USB Host -        udd_g_ctrlreq.payload      = &udi_hid_exk_report_set; -        udd_g_ctrlreq.callback     = udi_hid_exk_setreport_valid; -        udd_g_ctrlreq.payload_size = 1; -        return true; -    } -    return false; -} -  bool udi_hid_exk_send_report(void) {      if (!main_b_exk_enable) {          return false; @@ -457,7 +442,7 @@ bool udi_hid_exk_send_report(void) {          return false;      } -    memcpy(udi_hid_exk_report_trans, udi_hid_exk_report.raw, UDI_HID_EXK_REPORT_SIZE); +    memcpy(udi_hid_exk_report_trans, udi_hid_exk_report, UDI_HID_EXK_REPORT_SIZE);      udi_hid_exk_b_report_valid         = false;      udi_hid_exk_b_report_trans_ongoing = udd_ep_run(UDI_HID_EXK_EP_IN | USB_EP_DIR_IN, false, udi_hid_exk_report_trans, UDI_HID_EXK_REPORT_SIZE, udi_hid_exk_report_sent); @@ -474,8 +459,6 @@ static void udi_hid_exk_report_sent(udd_ep_status_t status, iram_size_t nb_sent,      }  } -static void udi_hid_exk_setreport_valid(void) {} -  #endif  // EXTRAKEY_ENABLE  //******************************************************************************************** diff --git a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h index a330014498..e17538fa70 100644 --- a/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h +++ b/tmk_core/protocol/arm_atsam/usb/udi_hid_kbd.h @@ -79,7 +79,6 @@ bool                              udi_hid_nkro_send_report(void);  #ifdef EXTRAKEY_ENABLE  extern UDC_DESC_STORAGE udi_api_t udi_api_hid_exk;  extern bool                       udi_hid_exk_b_report_valid; -extern uint8_t                    udi_hid_exk_report_set;  bool                              udi_hid_exk_send_report(void);  #endif // EXTRAKEY_ENABLE diff --git a/tmk_core/protocol/chibios/chibios.c b/tmk_core/protocol/chibios/chibios.c index c9a480c325..10a976608a 100644 --- a/tmk_core/protocol/chibios/chibios.c +++ b/tmk_core/protocol/chibios/chibios.c @@ -58,13 +58,10 @@  uint8_t keyboard_leds(void);  void    send_keyboard(report_keyboard_t *report);  void    send_mouse(report_mouse_t *report); -void    send_system(uint16_t data); -void    send_consumer(uint16_t data); -void    send_programmable_button(uint32_t data); -void    send_digitizer(report_digitizer_t *report); +void    send_extra(report_extra_t *report);  /* host struct */ -host_driver_t chibios_driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer, send_programmable_button}; +host_driver_t chibios_driver = {keyboard_leds, send_keyboard, send_mouse, send_extra};  #ifdef VIRTSER_ENABLE  void virtser_task(void); diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c index eb9ef82554..5eda5dd09f 100644 --- a/tmk_core/protocol/chibios/usb_main.c +++ b/tmk_core/protocol/chibios/usb_main.c @@ -50,10 +50,6 @@  extern keymap_config_t keymap_config;  #endif -#ifdef JOYSTICK_ENABLE -#    include "joystick.h" -#endif -  /* ---------------------------------------------------------   *       Global interface variables and declarations   * --------------------------------------------------------- @@ -738,6 +734,7 @@ void init_usb_driver(USBDriver *usbp) {       * after a reset.       */      usbDisconnectBus(usbp); +    usbStop(usbp);      wait_ms(50);      usbStart(usbp, &usbcfg);      usbConnectBus(usbp); @@ -746,8 +743,8 @@ void init_usb_driver(USBDriver *usbp) {  }  __attribute__((weak)) void restart_usb_driver(USBDriver *usbp) { -    usbStop(usbp);      usbDisconnectBus(usbp); +    usbStop(usbp);  #if USB_SUSPEND_WAKEUP_DELAY > 0      // Some hubs, kvm switches, and monitors do @@ -946,8 +943,8 @@ void shared_in_cb(USBDriver *usbp, usbep_t ep) {   * ---------------------------------------------------------   */ +void send_extra(report_extra_t *report) {  #ifdef EXTRAKEY_ENABLE -static void send_extra(uint8_t report_id, uint16_t data) {      osalSysLock();      if (usbGetDriverStateI(&USB_DRIVER) != USB_ACTIVE) {          osalSysUnlock(); @@ -965,27 +962,12 @@ static void send_extra(uint8_t report_id, uint16_t data) {          }      } -    static report_extra_t report; -    report = (report_extra_t){.report_id = report_id, .usage = data}; - -    usbStartTransmitI(&USB_DRIVER, SHARED_IN_EPNUM, (uint8_t *)&report, sizeof(report_extra_t)); +    usbStartTransmitI(&USB_DRIVER, SHARED_IN_EPNUM, (uint8_t *)report, sizeof(report_extra_t));      osalSysUnlock(); -} -#endif - -void send_system(uint16_t data) { -#ifdef EXTRAKEY_ENABLE -    send_extra(REPORT_ID_SYSTEM, data); -#endif -} - -void send_consumer(uint16_t data) { -#ifdef EXTRAKEY_ENABLE -    send_extra(REPORT_ID_CONSUMER, data);  #endif  } -void send_programmable_button(uint32_t data) { +void send_programmable_button(report_programmable_button_t *report) {  #ifdef PROGRAMMABLE_BUTTON_ENABLE      osalSysLock();      if (usbGetDriverStateI(&USB_DRIVER) != USB_ACTIVE) { @@ -1003,13 +985,8 @@ void send_programmable_button(uint32_t data) {              return;          }      } -    static report_programmable_button_t report = { -        .report_id = REPORT_ID_PROGRAMMABLE_BUTTON, -    }; - -    report.usage = data; -    usbStartTransmitI(&USB_DRIVER, SHARED_IN_EPNUM, (uint8_t *)&report, sizeof(report)); +    usbStartTransmitI(&USB_DRIVER, SHARED_IN_EPNUM, (uint8_t *)report, sizeof(report_programmable_button_t));      osalSysUnlock();  #endif  } @@ -1163,59 +1140,15 @@ void virtser_task(void) {  #endif +void send_joystick(report_joystick_t *report) {  #ifdef JOYSTICK_ENABLE - -void send_joystick_packet(joystick_t *joystick) { -    static joystick_report_t rep; -    rep = (joystick_report_t) { -#    if JOYSTICK_AXES_COUNT > 0 -        .axes = -        { joystick->axes[0], - -#        if JOYSTICK_AXES_COUNT >= 2 -          joystick->axes[1], -#        endif -#        if JOYSTICK_AXES_COUNT >= 3 -          joystick->axes[2], -#        endif -#        if JOYSTICK_AXES_COUNT >= 4 -          joystick->axes[3], -#        endif -#        if JOYSTICK_AXES_COUNT >= 5 -          joystick->axes[4], -#        endif -#        if JOYSTICK_AXES_COUNT >= 6 -          joystick->axes[5], -#        endif -        }, -#    endif // JOYSTICK_AXES_COUNT>0 - -#    if JOYSTICK_BUTTON_COUNT > 0 -        .buttons = { -            joystick->buttons[0], - -#        if JOYSTICK_BUTTON_COUNT > 8 -            joystick->buttons[1], -#        endif -#        if JOYSTICK_BUTTON_COUNT > 16 -            joystick->buttons[2], -#        endif -#        if JOYSTICK_BUTTON_COUNT > 24 -            joystick->buttons[3], -#        endif -        } -#    endif // JOYSTICK_BUTTON_COUNT>0 -    }; - -    // chnWrite(&drivers.joystick_driver.driver, (uint8_t *)&rep, sizeof(rep));      osalSysLock();      if (usbGetDriverStateI(&USB_DRIVER) != USB_ACTIVE) {          osalSysUnlock();          return;      } -    usbStartTransmitI(&USB_DRIVER, JOYSTICK_IN_EPNUM, (uint8_t *)&rep, sizeof(joystick_report_t)); +    usbStartTransmitI(&USB_DRIVER, JOYSTICK_IN_EPNUM, (uint8_t *)report, sizeof(report_joystick_t));      osalSysUnlock(); -} -  #endif +} diff --git a/tmk_core/protocol/chibios/usb_util.c b/tmk_core/protocol/chibios/usb_util.c index c8b435db0c..a8c7d9a228 100644 --- a/tmk_core/protocol/chibios/usb_util.c +++ b/tmk_core/protocol/chibios/usb_util.c @@ -17,6 +17,7 @@  #include "usb_util.h"  void usb_disconnect(void) { +    usbDisconnectBus(&USBD1);      usbStop(&USBD1);  } diff --git a/tmk_core/protocol/host.c b/tmk_core/protocol/host.c index 3d8604d541..b441d2d5d9 100644 --- a/tmk_core/protocol/host.c +++ b/tmk_core/protocol/host.c @@ -16,13 +16,24 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  */  #include <stdint.h> -//#include <avr/interrupt.h>  #include "keyboard.h"  #include "keycode.h"  #include "host.h"  #include "util.h"  #include "debug.h" -#include "digitizer.h" + +#ifdef DIGITIZER_ENABLE +#    include "digitizer.h" +#endif + +#ifdef JOYSTICK_ENABLE +#    include "joystick.h" +#endif + +#ifdef BLUETOOTH_ENABLE +#    include "bluetooth.h" +#    include "outputselect.h" +#endif  #ifdef NKRO_ENABLE  #    include "keycode_config.h" @@ -30,9 +41,8 @@ extern keymap_config_t keymap_config;  #endif  static host_driver_t *driver; -static uint16_t       last_system_report              = 0; -static uint16_t       last_consumer_report            = 0; -static uint32_t       last_programmable_button_report = 0; +static uint16_t       last_system_usage   = 0; +static uint16_t       last_consumer_usage = 0;  void host_set_driver(host_driver_t *d) {      driver = d; @@ -63,6 +73,13 @@ led_t host_keyboard_led_state(void) {  /* send report */  void host_keyboard_send(report_keyboard_t *report) { +#ifdef BLUETOOTH_ENABLE +    if (where_to_send() == OUTPUT_BLUETOOTH) { +        bluetooth_send_keyboard(report); +        return; +    } +#endif +      if (!driver) return;  #if defined(NKRO_ENABLE) && defined(NKRO_SHARED_EP)      if (keyboard_protocol && keymap_config.nkro) { @@ -90,6 +107,13 @@ void host_keyboard_send(report_keyboard_t *report) {  }  void host_mouse_send(report_mouse_t *report) { +#ifdef BLUETOOTH_ENABLE +    if (where_to_send() == OUTPUT_BLUETOOTH) { +        bluetooth_send_mouse(report); +        return; +    } +#endif +      if (!driver) return;  #ifdef MOUSE_SHARED_EP      report->report_id = REPORT_ID_MOUSE; @@ -102,29 +126,97 @@ void host_mouse_send(report_mouse_t *report) {      (*driver->send_mouse)(report);  } -void host_system_send(uint16_t report) { -    if (report == last_system_report) return; -    last_system_report = report; +void host_system_send(uint16_t usage) { +    if (usage == last_system_usage) return; +    last_system_usage = usage;      if (!driver) return; -    (*driver->send_system)(report); + +    report_extra_t report = { +        .report_id = REPORT_ID_SYSTEM, +        .usage     = usage, +    }; +    (*driver->send_extra)(&report);  } -void host_consumer_send(uint16_t report) { -    if (report == last_consumer_report) return; -    last_consumer_report = report; +void host_consumer_send(uint16_t usage) { +    if (usage == last_consumer_usage) return; +    last_consumer_usage = usage; + +#ifdef BLUETOOTH_ENABLE +    if (where_to_send() == OUTPUT_BLUETOOTH) { +        bluetooth_send_consumer(usage); +        return; +    } +#endif      if (!driver) return; -    (*driver->send_consumer)(report); + +    report_extra_t report = { +        .report_id = REPORT_ID_CONSUMER, +        .usage     = usage, +    }; +    (*driver->send_extra)(&report);  } -void host_digitizer_send(digitizer_t *digitizer) { +#ifdef JOYSTICK_ENABLE +void host_joystick_send(joystick_t *joystick) {      if (!driver) return; +    report_joystick_t report = { +#    if JOYSTICK_AXES_COUNT > 0 +        .axes = +            { +                joystick->axes[0], + +#        if JOYSTICK_AXES_COUNT >= 2 +                joystick->axes[1], +#        endif +#        if JOYSTICK_AXES_COUNT >= 3 +                joystick->axes[2], +#        endif +#        if JOYSTICK_AXES_COUNT >= 4 +                joystick->axes[3], +#        endif +#        if JOYSTICK_AXES_COUNT >= 5 +                joystick->axes[4], +#        endif +#        if JOYSTICK_AXES_COUNT >= 6 +                joystick->axes[5], +#        endif +            }, +#    endif + +#    if JOYSTICK_BUTTON_COUNT > 0 +        .buttons = +            { +                joystick->buttons[0], + +#        if JOYSTICK_BUTTON_COUNT > 8 +                joystick->buttons[1], +#        endif +#        if JOYSTICK_BUTTON_COUNT > 16 +                joystick->buttons[2], +#        endif +#        if JOYSTICK_BUTTON_COUNT > 24 +                joystick->buttons[3], +#        endif +            }, +#    endif +    }; + +    send_joystick(&report); +} +#endif + +__attribute__((weak)) void send_joystick(report_joystick_t *report) {} + +#ifdef DIGITIZER_ENABLE +void host_digitizer_send(digitizer_t *digitizer) {      report_digitizer_t report = { -#ifdef DIGITIZER_SHARED_EP +#    ifdef DIGITIZER_SHARED_EP          .report_id = REPORT_ID_DIGITIZER, -#endif +#    endif          .tip     = digitizer->tipswitch & 0x1,          .inrange = digitizer->inrange & 0x1,          .x       = (uint16_t)(digitizer->x * 0x7FFF), @@ -133,25 +225,27 @@ void host_digitizer_send(digitizer_t *digitizer) {      send_digitizer(&report);  } +#endif  __attribute__((weak)) void send_digitizer(report_digitizer_t *report) {} -void host_programmable_button_send(uint32_t report) { -    if (report == last_programmable_button_report) return; -    last_programmable_button_report = report; +#ifdef PROGRAMMABLE_BUTTON_ENABLE +void host_programmable_button_send(uint32_t data) { +    report_programmable_button_t report = { +        .report_id = REPORT_ID_PROGRAMMABLE_BUTTON, +        .usage     = data, +    }; -    if (!driver) return; -    (*driver->send_programmable_button)(report); +    send_programmable_button(&report);  } +#endif -uint16_t host_last_system_report(void) { -    return last_system_report; -} +__attribute__((weak)) void send_programmable_button(report_programmable_button_t *report) {} -uint16_t host_last_consumer_report(void) { -    return last_consumer_report; +uint16_t host_last_system_usage(void) { +    return last_system_usage;  } -uint32_t host_last_programmable_button_report(void) { -    return last_programmable_button_report; +uint16_t host_last_consumer_usage(void) { +    return last_consumer_usage;  } diff --git a/tmk_core/protocol/host.h b/tmk_core/protocol/host.h index 6b15f0d0c1..dfa86cd7b5 100644 --- a/tmk_core/protocol/host.h +++ b/tmk_core/protocol/host.h @@ -45,13 +45,12 @@ uint8_t host_keyboard_leds(void);  led_t   host_keyboard_led_state(void);  void    host_keyboard_send(report_keyboard_t *report);  void    host_mouse_send(report_mouse_t *report); -void    host_system_send(uint16_t data); -void    host_consumer_send(uint16_t data); +void    host_system_send(uint16_t usage); +void    host_consumer_send(uint16_t usage);  void    host_programmable_button_send(uint32_t data); -uint16_t host_last_system_report(void); -uint16_t host_last_consumer_report(void); -uint32_t host_last_programmable_button_report(void); +uint16_t host_last_system_usage(void); +uint16_t host_last_consumer_usage(void);  #ifdef __cplusplus  } diff --git a/tmk_core/protocol/host_driver.h b/tmk_core/protocol/host_driver.h index affd0dcb34..7dc6c3d810 100644 --- a/tmk_core/protocol/host_driver.h +++ b/tmk_core/protocol/host_driver.h @@ -27,9 +27,9 @@ typedef struct {      uint8_t (*keyboard_leds)(void);      void (*send_keyboard)(report_keyboard_t *);      void (*send_mouse)(report_mouse_t *); -    void (*send_system)(uint16_t); -    void (*send_consumer)(uint16_t); -    void (*send_programmable_button)(uint32_t); +    void (*send_extra)(report_extra_t *);  } host_driver_t; -void send_digitizer(report_digitizer_t *report);
\ No newline at end of file +void send_joystick(report_joystick_t *report); +void send_digitizer(report_digitizer_t *report); +void send_programmable_button(report_programmable_button_t *report); diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index b4b03357a3..f27256a0e8 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -61,19 +61,6 @@  extern keymap_config_t keymap_config;  #endif -#ifdef AUDIO_ENABLE -#    include "audio.h" -#endif - -#ifdef BLUETOOTH_ENABLE -#    include "outputselect.h" -#    ifdef BLUETOOTH_BLUEFRUIT_LE -#        include "bluefruit_le.h" -#    elif BLUETOOTH_RN42 -#        include "rn42.h" -#    endif -#endif -  #ifdef VIRTSER_ENABLE  #    include "virtser.h"  #endif @@ -86,10 +73,6 @@ extern keymap_config_t keymap_config;  #    include "raw_hid.h"  #endif -#ifdef JOYSTICK_ENABLE -#    include "joystick.h" -#endif -  uint8_t keyboard_idle = 0;  /* 0: Boot Protocol, 1: Report Protocol(default) */  uint8_t        keyboard_protocol  = 1; @@ -101,10 +84,8 @@ static report_keyboard_t keyboard_report_sent;  static uint8_t keyboard_leds(void);  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); -static void    send_programmable_button(uint32_t data); -host_driver_t  lufa_driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer, send_programmable_button}; +static void    send_extra(report_extra_t *report); +host_driver_t  lufa_driver = {keyboard_leds, send_keyboard, send_mouse, send_extra};  #ifdef VIRTSER_ENABLE  // clang-format off @@ -271,51 +252,10 @@ static void Console_Task(void) {  /*******************************************************************************   * Joystick   ******************************************************************************/ +void send_joystick(report_joystick_t *report) {  #ifdef JOYSTICK_ENABLE -void send_joystick_packet(joystick_t *joystick) {      uint8_t timeout = 255; -    static joystick_report_t r; -    r = (joystick_report_t) { -#    if JOYSTICK_AXES_COUNT > 0 -        .axes = -        { joystick->axes[0], - -#        if JOYSTICK_AXES_COUNT >= 2 -          joystick->axes[1], -#        endif -#        if JOYSTICK_AXES_COUNT >= 3 -          joystick->axes[2], -#        endif -#        if JOYSTICK_AXES_COUNT >= 4 -          joystick->axes[3], -#        endif -#        if JOYSTICK_AXES_COUNT >= 5 -          joystick->axes[4], -#        endif -#        if JOYSTICK_AXES_COUNT >= 6 -          joystick->axes[5], -#        endif -        }, -#    endif // JOYSTICK_AXES_COUNT>0 - -#    if JOYSTICK_BUTTON_COUNT > 0 -        .buttons = { -            joystick->buttons[0], - -#        if JOYSTICK_BUTTON_COUNT > 8 -            joystick->buttons[1], -#        endif -#        if JOYSTICK_BUTTON_COUNT > 16 -            joystick->buttons[2], -#        endif -#        if JOYSTICK_BUTTON_COUNT > 24 -            joystick->buttons[3], -#        endif -        } -#    endif // JOYSTICK_BUTTON_COUNT>0 -    }; -      /* Select the Joystick Report Endpoint */      Endpoint_SelectEndpoint(JOYSTICK_IN_EPNUM); @@ -325,12 +265,12 @@ void send_joystick_packet(joystick_t *joystick) {      if (!Endpoint_IsReadWriteAllowed()) return;      /* Write Joystick Report Data */ -    Endpoint_Write_Stream_LE(&r, sizeof(joystick_report_t), NULL); +    Endpoint_Write_Stream_LE(report, sizeof(report_joystick_t), NULL);      /* Finalize the stream transfer to send the last packet */      Endpoint_ClearIN(); -}  #endif +}  /*******************************************************************************   * USB Events @@ -482,7 +422,7 @@ void EVENT_USB_Device_ConfigurationChanged(void) {  #ifdef MIDI_ENABLE      /* Setup MIDI stream endpoints */      ConfigSuccess &= Endpoint_ConfigureEndpoint((MIDI_STREAM_IN_EPNUM | ENDPOINT_DIR_IN), EP_TYPE_BULK, MIDI_STREAM_EPSIZE, 1); -    ConfigSuccess &= Endpoint_ConfigureEndpoint((MIDI_STREAM_OUT_EPNUM | ENDPOINT_DIR_IN), EP_TYPE_BULK, MIDI_STREAM_EPSIZE, 1); +    ConfigSuccess &= Endpoint_ConfigureEndpoint((MIDI_STREAM_OUT_EPNUM | ENDPOINT_DIR_OUT), EP_TYPE_BULK, MIDI_STREAM_EPSIZE, 1);  #endif  #ifdef VIRTSER_ENABLE @@ -649,17 +589,6 @@ static uint8_t keyboard_leds(void) {  static void send_keyboard(report_keyboard_t *report) {      uint8_t timeout = 255; -#ifdef BLUETOOTH_ENABLE -    if (where_to_send() == OUTPUT_BLUETOOTH) { -#    ifdef BLUETOOTH_BLUEFRUIT_LE -        bluefruit_le_send_keys(report->mods, report->keys, sizeof(report->keys)); -#    elif BLUETOOTH_RN42 -        rn42_send_keyboard(report); -#    endif -        return; -    } -#endif -      /* Select the Keyboard Report Endpoint */      uint8_t ep   = KEYBOARD_IN_EPNUM;      uint8_t size = KEYBOARD_REPORT_SIZE; @@ -696,18 +625,6 @@ static void send_mouse(report_mouse_t *report) {  #ifdef MOUSE_ENABLE      uint8_t timeout = 255; -#    ifdef BLUETOOTH_ENABLE -    if (where_to_send() == OUTPUT_BLUETOOTH) { -#        ifdef BLUETOOTH_BLUEFRUIT_LE -        // FIXME: mouse buttons -        bluefruit_le_send_mouse_move(report->x, report->y, report->v, report->h, report->buttons); -#        elif BLUETOOTH_RN42 -        rn42_send_mouse(report); -#        endif -        return; -    } -#    endif -      /* Select the Mouse Report Endpoint */      Endpoint_SelectEndpoint(MOUSE_IN_EPNUM); @@ -746,50 +663,15 @@ static void send_report(void *report, size_t size) {   *   * FIXME: Needs doc   */ +static void send_extra(report_extra_t *report) {  #ifdef EXTRAKEY_ENABLE -static void send_extra(uint8_t report_id, uint16_t data) { -    static report_extra_t r; -    r = (report_extra_t){.report_id = report_id, .usage = data}; -    send_report(&r, sizeof(r)); -} -#endif - -/** \brief Send System - * - * FIXME: Needs doc - */ -static void send_system(uint16_t data) { -#ifdef EXTRAKEY_ENABLE -    send_extra(REPORT_ID_SYSTEM, data); -#endif -} - -/** \brief Send Consumer - * - * FIXME: Needs doc - */ -static void send_consumer(uint16_t data) { -#ifdef EXTRAKEY_ENABLE -#    ifdef BLUETOOTH_ENABLE -    if (where_to_send() == OUTPUT_BLUETOOTH) { -#        ifdef BLUETOOTH_BLUEFRUIT_LE -        bluefruit_le_send_consumer_key(data); -#        elif BLUETOOTH_RN42 -        rn42_send_consumer(data); -#        endif -        return; -    } -#    endif - -    send_extra(REPORT_ID_CONSUMER, data); +    send_report(report, sizeof(report_extra_t));  #endif  } -static void send_programmable_button(uint32_t data) { +void send_programmable_button(report_programmable_button_t *report) {  #ifdef PROGRAMMABLE_BUTTON_ENABLE -    static report_programmable_button_t r; -    r = (report_programmable_button_t){.report_id = REPORT_ID_PROGRAMMABLE_BUTTON, .usage = data}; -    send_report(&r, sizeof(r)); +    send_report(report, sizeof(report_programmable_button_t));  #endif  } @@ -1028,10 +910,6 @@ void protocol_pre_init(void) {      setup_usb();      sei(); -#if defined(BLUETOOTH_RN42) -    rn42_init(); -#endif -      /* wait for USB startup & debug output */  #ifdef WAIT_FOR_USB @@ -1083,10 +961,6 @@ void protocol_post_task(void) {      MIDI_Device_USBTask(&USB_MIDI_Interface);  #endif -#ifdef BLUETOOTH_BLUEFRUIT_LE -    bluefruit_le_task(); -#endif -  #ifdef VIRTSER_ENABLE      virtser_task();      CDC_Device_USBTask(&cdc_device); diff --git a/tmk_core/protocol/report.h b/tmk_core/protocol/report.h index 735ccdb4a1..8bc4a57c0c 100644 --- a/tmk_core/protocol/report.h +++ b/tmk_core/protocol/report.h @@ -245,7 +245,7 @@ typedef struct {  #if JOYSTICK_BUTTON_COUNT > 0      uint8_t buttons[(JOYSTICK_BUTTON_COUNT - 1) / 8 + 1];  #endif -} __attribute__((packed)) joystick_report_t; +} __attribute__((packed)) report_joystick_t;  /* keycode to system usage */  static inline uint16_t KEYCODE2SYSTEM(uint8_t key) { @@ -292,6 +292,10 @@ static inline uint16_t KEYCODE2CONSUMER(uint8_t key) {              return AL_CALCULATOR;          case KC_MY_COMPUTER:              return AL_LOCAL_BROWSER; +        case KC_CONTROL_PANEL: +            return AL_CONTROL_PANEL; +        case KC_ASSISTANT: +            return AL_ASSISTANT;          case KC_WWW_SEARCH:              return AC_SEARCH;          case KC_WWW_HOME: diff --git a/tmk_core/protocol/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c index 21795cef60..7117d2fc11 100644 --- a/tmk_core/protocol/usb_descriptor.c +++ b/tmk_core/protocol/usb_descriptor.c @@ -1046,7 +1046,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = {   */  const USB_Descriptor_String_t PROGMEM LanguageString = {      .Header = { -        .Size                   = USB_STRING_LEN(1), +        .Size                   = 4,          .Type                   = DTYPE_String      },      .UnicodeString              = {LANGUAGE_ID_ENG} @@ -1054,24 +1054,24 @@ const USB_Descriptor_String_t PROGMEM LanguageString = {  const USB_Descriptor_String_t PROGMEM ManufacturerString = {      .Header = { -        .Size                   = USB_STRING_LEN(sizeof(STR(MANUFACTURER)) - 1), // Subtract 1 for null terminator +        .Size                   = sizeof(USBSTR(MANUFACTURER)),          .Type                   = DTYPE_String      }, -    .UnicodeString              = LSTR(MANUFACTURER) +    .UnicodeString              = USBSTR(MANUFACTURER)  };  const USB_Descriptor_String_t PROGMEM ProductString = {      .Header = { -        .Size                   = USB_STRING_LEN(sizeof(STR(PRODUCT)) - 1), // Subtract 1 for null terminator +        .Size                   = sizeof(USBSTR(PRODUCT)),          .Type                   = DTYPE_String      }, -    .UnicodeString              = LSTR(PRODUCT) +    .UnicodeString              = USBSTR(PRODUCT)  };  #if defined(SERIAL_NUMBER)  const USB_Descriptor_String_t PROGMEM SerialNumberString = {      .Header = { -        .Size                   = USB_STRING_LEN(sizeof(SERIAL_NUMBER) - 1), // Subtract 1 for null terminator +        .Size                   = sizeof(USBSTR(SERIAL_NUMBER)),          .Type                   = DTYPE_String      },      .UnicodeString              = USBSTR(SERIAL_NUMBER) diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c index d07cc0d27e..84b01b203e 100644 --- a/tmk_core/protocol/vusb/vusb.c +++ b/tmk_core/protocol/vusb/vusb.c @@ -224,11 +224,9 @@ void console_task(void) {  static uint8_t keyboard_leds(void);  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); -static void    send_programmable_button(uint32_t data); +static void    send_extra(report_extra_t *report); -static host_driver_t driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer, send_programmable_button}; +static host_driver_t driver = {keyboard_leds, send_keyboard, send_mouse, send_extra};  host_driver_t *vusb_driver(void) {      return &driver; @@ -269,31 +267,11 @@ static void send_mouse(report_mouse_t *report) {  #endif  } +static void send_extra(report_extra_t *report) {  #ifdef EXTRAKEY_ENABLE -static void send_extra(uint8_t report_id, uint16_t data) { -    static uint8_t  last_id   = 0; -    static uint16_t last_data = 0; -    if ((report_id == last_id) && (data == last_data)) return; -    last_id   = report_id; -    last_data = data; - -    static report_extra_t report; -    report = (report_extra_t){.report_id = report_id, .usage = data};      if (usbInterruptIsReadyShared()) { -        usbSetInterruptShared((void *)&report, sizeof(report_extra_t)); +        usbSetInterruptShared((void *)report, sizeof(report_extra_t));      } -} -#endif - -static void send_system(uint16_t data) { -#ifdef EXTRAKEY_ENABLE -    send_extra(REPORT_ID_SYSTEM, data); -#endif -} - -static void send_consumer(uint16_t data) { -#ifdef EXTRAKEY_ENABLE -    send_extra(REPORT_ID_CONSUMER, data);  #endif  } @@ -305,16 +283,10 @@ void send_digitizer(report_digitizer_t *report) {  #endif  } -static void send_programmable_button(uint32_t data) { +void send_programmable_button(report_programmable_button_t *report) {  #ifdef PROGRAMMABLE_BUTTON_ENABLE -    static report_programmable_button_t report = { -        .report_id = REPORT_ID_PROGRAMMABLE_BUTTON, -    }; - -    report.usage = data; -      if (usbInterruptIsReadyShared()) { -        usbSetInterruptShared((void *)&report, sizeof(report)); +        usbSetInterruptShared((void *)report, sizeof(report_programmable_button_t));      }  #endif  } @@ -672,7 +644,7 @@ const PROGMEM uchar console_hid_report[] = {  // clang-format off  const PROGMEM usbStringDescriptor_t usbStringDescriptorZero = {      .header = { -        .bLength         = USB_STRING_LEN(1), +        .bLength         = 4,          .bDescriptorType = USBDESCR_STRING      },      .bString             = {0x0409} // US English @@ -680,24 +652,24 @@ const PROGMEM usbStringDescriptor_t usbStringDescriptorZero = {  const PROGMEM usbStringDescriptor_t usbStringDescriptorManufacturer = {      .header = { -        .bLength         = USB_STRING_LEN(sizeof(STR(MANUFACTURER)) - 1), +        .bLength         = sizeof(USBSTR(MANUFACTURER)),          .bDescriptorType = USBDESCR_STRING      }, -    .bString             = LSTR(MANUFACTURER) +    .bString             = USBSTR(MANUFACTURER)  };  const PROGMEM usbStringDescriptor_t usbStringDescriptorProduct = {      .header = { -        .bLength         = USB_STRING_LEN(sizeof(STR(PRODUCT)) - 1), +        .bLength         = sizeof(USBSTR(PRODUCT)),          .bDescriptorType = USBDESCR_STRING      }, -    .bString             = LSTR(PRODUCT) +    .bString             = USBSTR(PRODUCT)  };  #if defined(SERIAL_NUMBER)  const PROGMEM usbStringDescriptor_t usbStringDescriptorSerial = {      .header = { -        .bLength         = USB_STRING_LEN(sizeof(SERIAL_NUMBER) - 1), +        .bLength         = sizeof(USBSTR(SERIAL_NUMBER)),          .bDescriptorType = USBDESCR_STRING      },      .bString             = USBSTR(SERIAL_NUMBER) diff --git a/tmk_core/protocol/vusb/vusb.h b/tmk_core/protocol/vusb/vusb.h index b1ecc98f37..c5cb27ded6 100644 --- a/tmk_core/protocol/vusb/vusb.h +++ b/tmk_core/protocol/vusb/vusb.h @@ -118,8 +118,6 @@ typedef struct usbConfigurationDescriptor {  #endif  } __attribute__((packed)) usbConfigurationDescriptor_t; -#define USB_STRING_LEN(s) (sizeof(usbDescriptorHeader_t) + ((s) << 1)) -  extern bool vusb_suspended;  host_driver_t *vusb_driver(void); | 
