diff options
Diffstat (limited to 'drivers/bluetooth')
-rw-r--r-- | drivers/bluetooth/bluetooth.c | 74 | ||||
-rw-r--r-- | drivers/bluetooth/bluetooth.h | 39 | ||||
-rw-r--r-- | drivers/bluetooth/bluetooth_drivers.c | 71 |
3 files changed, 132 insertions, 52 deletions
diff --git a/drivers/bluetooth/bluetooth.c b/drivers/bluetooth/bluetooth.c index d5382401e7..e61e24e1f2 100644 --- a/drivers/bluetooth/bluetooth.c +++ b/drivers/bluetooth/bluetooth.c @@ -1,62 +1,32 @@ -/* - * Copyright 2022 - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ +// Copyright 2025 QMK +// SPDX-License-Identifier: GPL-2.0-or-later #include "bluetooth.h" -#if defined(BLUETOOTH_BLUEFRUIT_LE) -# include "bluefruit_le.h" -#elif defined(BLUETOOTH_RN42) -# include "rn42.h" -#endif - -void bluetooth_init(void) { -#if defined(BLUETOOTH_BLUEFRUIT_LE) - bluefruit_le_init(); -#elif defined(BLUETOOTH_RN42) - rn42_init(); -#endif -} +__attribute__((weak)) void bluetooth_init(void) {} -void bluetooth_task(void) { -#if defined(BLUETOOTH_BLUEFRUIT_LE) - bluefruit_le_task(); -#endif -} +__attribute__((weak)) void bluetooth_task(void) {} -void bluetooth_send_keyboard(report_keyboard_t *report) { -#if defined(BLUETOOTH_BLUEFRUIT_LE) - bluefruit_le_send_keyboard(report); -#elif defined(BLUETOOTH_RN42) - rn42_send_keyboard(report); -#endif +__attribute__((weak)) bool bluetooth_is_connected(void) { + return true; } -void bluetooth_send_mouse(report_mouse_t *report) { -#if defined(BLUETOOTH_BLUEFRUIT_LE) - bluefruit_le_send_mouse(report); -#elif defined(BLUETOOTH_RN42) - rn42_send_mouse(report); -#endif +__attribute__((weak)) bool bluetooth_can_send_nkro(void) { + return false; } -void bluetooth_send_consumer(uint16_t usage) { -#if defined(BLUETOOTH_BLUEFRUIT_LE) - bluefruit_le_send_consumer(usage); -#elif defined(BLUETOOTH_RN42) - rn42_send_consumer(usage); -#endif +__attribute__((weak)) uint8_t bluetooth_keyboard_leds(void) { + return 0; } + +__attribute__((weak)) void bluetooth_send_keyboard(report_keyboard_t *report) {} + +__attribute__((weak)) void bluetooth_send_nkro(report_nkro_t *report) {} + +__attribute__((weak)) void bluetooth_send_mouse(report_mouse_t *report) {} + +__attribute__((weak)) void bluetooth_send_consumer(uint16_t usage) {} + +__attribute__((weak)) void bluetooth_send_system(uint16_t usage) {} + +__attribute__((weak)) void bluetooth_send_raw_hid(uint8_t *data, uint8_t length) {} diff --git a/drivers/bluetooth/bluetooth.h b/drivers/bluetooth/bluetooth.h index 2e4d0df538..bbd41a9194 100644 --- a/drivers/bluetooth/bluetooth.h +++ b/drivers/bluetooth/bluetooth.h @@ -31,6 +31,23 @@ void bluetooth_init(void); void bluetooth_task(void); /** + * \brief Detects if Bluetooth is connected. + * + * \return `true` if connected, `false` otherwise. + */ +bool bluetooth_is_connected(void); + +/** + * \brief Detects if `bluetooth_send_nkro` should be used over `bluetooth_send_keyboard`. + */ +bool bluetooth_can_send_nkro(void); + +/** + * \brief Get current LED state. + */ +uint8_t bluetooth_keyboard_leds(void); + +/** * \brief Send a keyboard report. * * \param report The keyboard report to send. @@ -38,6 +55,13 @@ void bluetooth_task(void); void bluetooth_send_keyboard(report_keyboard_t *report); /** + * \brief Send a nkro report. + * + * \param report The nkro report to send. + */ +void bluetooth_send_nkro(report_nkro_t *report); + +/** * \brief Send a mouse report. * * \param report The mouse report to send. @@ -50,3 +74,18 @@ void bluetooth_send_mouse(report_mouse_t *report); * \param usage The consumer usage to send. */ void bluetooth_send_consumer(uint16_t usage); + +/** + * \brief Send a system usage. + * + * \param usage The system usage to send. + */ +void bluetooth_send_system(uint16_t usage); + +/** + * \brief Send a raw_hid packet. + * + * \param data A pointer to the buffer to be sent. Always 32 bytes in length. + * \param length The length of the buffer. Always 32. + */ +void bluetooth_send_raw_hid(uint8_t *data, uint8_t length); diff --git a/drivers/bluetooth/bluetooth_drivers.c b/drivers/bluetooth/bluetooth_drivers.c new file mode 100644 index 0000000000..b91d4501e6 --- /dev/null +++ b/drivers/bluetooth/bluetooth_drivers.c @@ -0,0 +1,71 @@ +/* + * Copyright 2022 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "bluetooth.h" + +#if defined(BLUETOOTH_BLUEFRUIT_LE) +# include "bluefruit_le.h" +#elif defined(BLUETOOTH_RN42) +# include "rn42.h" +#endif + +void bluetooth_init(void) { +#if defined(BLUETOOTH_BLUEFRUIT_LE) + bluefruit_le_init(); +#elif defined(BLUETOOTH_RN42) + rn42_init(); +#endif +} + +void bluetooth_task(void) { +#if defined(BLUETOOTH_BLUEFRUIT_LE) + bluefruit_le_task(); +#endif +} + +bool bluetooth_is_connected(void) { +#if defined(BLUETOOTH_BLUEFRUIT_LE) + return bluefruit_le_is_connected(); +#else + // TODO: drivers should check if BT is connected here + return true; +#endif +} + +void bluetooth_send_keyboard(report_keyboard_t *report) { +#if defined(BLUETOOTH_BLUEFRUIT_LE) + bluefruit_le_send_keyboard(report); +#elif defined(BLUETOOTH_RN42) + rn42_send_keyboard(report); +#endif +} + +void bluetooth_send_mouse(report_mouse_t *report) { +#if defined(BLUETOOTH_BLUEFRUIT_LE) + bluefruit_le_send_mouse(report); +#elif defined(BLUETOOTH_RN42) + rn42_send_mouse(report); +#endif +} + +void bluetooth_send_consumer(uint16_t usage) { +#if defined(BLUETOOTH_BLUEFRUIT_LE) + bluefruit_le_send_consumer(usage); +#elif defined(BLUETOOTH_RN42) + rn42_send_consumer(usage); +#endif +} |