]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Add RN42 Bluetooth module support
authorTravis La Marr <exiva@exiva.net>
Thu, 30 Mar 2017 03:03:04 +0000 (23:03 -0400)
committerTravis La Marr <exiva@exiva.net>
Thu, 30 Mar 2017 03:03:04 +0000 (23:03 -0400)
Added support for sending HID keycodes over the RN42/reflashed HC05 module. Tested on OS X and iOS.

tmk_core/common.mk
tmk_core/protocol/lufa.mk
tmk_core/protocol/lufa/bluetooth.h
tmk_core/protocol/lufa/lufa.c

index 47f6fc5719fc85933348c3333ed53cf0c4d633e5..3e0bd7dbc8692fbe1cedf8ca021c0fbe76d4f3f8 100644 (file)
@@ -107,6 +107,11 @@ ifeq ($(strip $(BLUETOOTH)), AdafruitEZKey)
                TMK_COMMON_DEFS += -DMODULE_ADAFRUIT_EZKEY
 endif
 
+ifeq ($(strip $(BLUETOOTH)), RN42)
+               TMK_COMMON_DEFS += -DBLUETOOTH_ENABLE
+               TMK_COMMON_DEFS += -DMODULE_RN42
+endif
+
 ifeq ($(strip $(ONEHAND_ENABLE)), yes)
     TMK_COMMON_DEFS += -DONEHAND_ENABLE
 endif
index 5b157797230abd99b2ff33be8b713db48943472a..7ce727dab0862d8b0610ba63c73551f3f3a38b90 100644 (file)
@@ -36,6 +36,11 @@ ifeq ($(strip $(BLUETOOTH)), AdafruitEZKey)
        $(TMK_DIR)/protocol/serial_uart.c
 endif
 
+ifeq ($(strip $(BLUETOOTH)), RN42)
+       LUFA_SRC += $(LUFA_DIR)/bluetooth.c \
+       $(TMK_DIR)/protocol/serial_uart.c
+endif
+
 ifeq ($(strip $(VIRTSER_ENABLE)), yes)
        LUFA_SRC += $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/CDCClassDevice.c
 endif
index 78ece1cd0b4cd716e6d421d37d9bc7471c73bc2c..f4b2f6f8b1c6b54ecb592a43a449099ba93f2361 100644 (file)
@@ -62,4 +62,18 @@ void bluefruit_serial_send(uint8_t data);
     (usage == AC_REFRESH           ? 0x0000  : \
     (usage == AC_BOOKMARKS         ? 0x0000  : 0)))))))))))))))))))
 
-#endif
\ No newline at end of file
+#define CONSUMER2RN42(usage) \
+    (usage == AUDIO_MUTE           ? 0x0040 : \
+    (usage == AUDIO_VOL_UP         ? 0x0010 : \
+    (usage == AUDIO_VOL_DOWN       ? 0x0020 : \
+    (usage == TRANSPORT_NEXT_TRACK ? 0x0100 : \
+    (usage == TRANSPORT_PREV_TRACK ? 0x0200 : \
+    (usage == TRANSPORT_STOP       ? 0x0400 : \
+    (usage == TRANSPORT_STOP_EJECT ? 0x0800 : \
+    (usage == TRANSPORT_PLAY_PAUSE ? 0x0080 : \
+    (usage == AL_EMAIL             ? 0x0200 : \
+    (usage == AL_LOCAL_BROWSER     ? 0x8000 : \
+    (usage == AC_SEARCH            ? 0x0400 : \
+    (usage == AC_HOME              ? 0x0100 : 0))))))))))))
+
+ #endif
index 60cba8d2a9897cf6978080c3c149c589c0586c3e..ae6129d1a28dfe185129cbef44abdb4d2424f35d 100644 (file)
@@ -606,6 +606,13 @@ static void send_keyboard(report_keyboard_t *report)
   if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) {
     #ifdef MODULE_ADAFRUIT_BLE
       adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys));
+    #elif MODULE_RN42
+       bluefruit_serial_send(0xFD);
+       bluefruit_serial_send(0x09);
+       bluefruit_serial_send(0x01);
+       for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) {
+         bluefruit_serial_send(report->raw[i]);
+       }
     #else
       bluefruit_serial_send(0xFD);
       for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) {
@@ -726,6 +733,16 @@ static void send_consumer(uint16_t data)
     if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) {
       #ifdef MODULE_ADAFRUIT_BLE
         adafruit_ble_send_consumer_key(data, 0);
+      #elif MODULE_RN42
+        static uint16_t last_data = 0;
+        if (data == last_data) return;
+        last_data = data;
+        uint16_t bitmap = CONSUMER2RN42(data);
+        bluefruit_serial_send(0xFD);
+        bluefruit_serial_send(0x03);
+        bluefruit_serial_send(0x03);
+        bluefruit_serial_send(bitmap&0xFF);
+        bluefruit_serial_send((bitmap>>8)&0xFF);
       #else
         static uint16_t last_data = 0;
         if (data == last_data) return;
@@ -1132,7 +1149,7 @@ int main(void)
     // midi_send_noteoff(&midi_device, 0, 64, 127);
 #endif
 
-#ifdef MODULE_ADAFRUIT_EZKEY
+#if defined(MODULE_ADAFRUIT_EZKEY) || defined(MODULE_RN42)
     serial_init();
 #endif