summary refs log tree commit diff
path: root/drivers/bluetooth/bluefruit_le.cpp
diff options
context:
space:
mode:
authorRyan <fauxpark@gmail.com>2022-09-30 03:38:09 +1000
committerGitHub <noreply@github.com>2022-09-29 18:38:09 +0100
commitf80058d96e2f1606f648166d320cda15986ced4c (patch)
treedb60471363d59bb52d124a276bde9cf93e93c591 /drivers/bluetooth/bluefruit_le.cpp
parentcbbb45c13f3de5ec28f62b6cd4a8b77143026500 (diff)
Start Bluetooth API (#18366)
Diffstat (limited to 'drivers/bluetooth/bluefruit_le.cpp')
-rw-r--r--drivers/bluetooth/bluefruit_le.cpp58
1 files changed, 20 insertions, 38 deletions
diff --git a/drivers/bluetooth/bluefruit_le.cpp b/drivers/bluetooth/bluefruit_le.cpp
index 50170b83fe..39c14ddd13 100644
--- a/drivers/bluetooth/bluefruit_le.cpp
+++ b/drivers/bluetooth/bluefruit_le.cpp
@@ -5,7 +5,7 @@
 #include <alloca.h>
 #include "debug.h"
 #include "timer.h"
-#include "action_util.h"
+#include "gpio.h"
 #include "ringbuffer.hpp"
 #include <string.h>
 #include "spi_master.h"
@@ -288,7 +288,7 @@ static void resp_buf_wait(const char *cmd) {
     }
 }
 
-static bool ble_init(void) {
+void bluefruit_le_init(void) {
     state.initialized  = false;
     state.configured   = false;
     state.is_connected = false;
@@ -307,7 +307,6 @@ static bool ble_init(void) {
     wait_ms(1000); // Give it a second to initialize
 
     state.initialized = true;
-    return state.initialized;
 }
 
 static inline uint8_t min(uint8_t a, uint8_t b) {
@@ -431,7 +430,7 @@ bool bluefruit_le_is_connected(void) {
 bool bluefruit_le_enable_keyboard(void) {
     char resbuf[128];
 
-    if (!state.initialized && !ble_init()) {
+    if (!state.initialized) {
         return false;
     }
 
@@ -613,41 +612,24 @@ static bool process_queue_item(struct queue_item *item, uint16_t timeout) {
     }
 }
 
-void bluefruit_le_send_keys(uint8_t hid_modifier_mask, uint8_t *keys, uint8_t nkeys) {
+void bluefruit_le_send_keyboard(report_keyboard_t *report) {
     struct queue_item item;
-    bool              didWait = false;
 
     item.queue_type   = QTKeyReport;
-    item.key.modifier = hid_modifier_mask;
-    item.added        = timer_read();
-
-    while (nkeys >= 0) {
-        item.key.keys[0] = keys[0];
-        item.key.keys[1] = nkeys >= 1 ? keys[1] : 0;
-        item.key.keys[2] = nkeys >= 2 ? keys[2] : 0;
-        item.key.keys[3] = nkeys >= 3 ? keys[3] : 0;
-        item.key.keys[4] = nkeys >= 4 ? keys[4] : 0;
-        item.key.keys[5] = nkeys >= 5 ? keys[5] : 0;
-
-        if (!send_buf.enqueue(item)) {
-            if (!didWait) {
-                dprint("wait for buf space\n");
-                didWait = true;
-            }
-            send_buf_send_one();
-            continue;
-        }
-
-        if (nkeys <= 6) {
-            return;
-        }
+    item.key.modifier = report->mods;
+    item.key.keys[0]  = report->keys[0];
+    item.key.keys[1]  = report->keys[1];
+    item.key.keys[2]  = report->keys[2];
+    item.key.keys[3]  = report->keys[3];
+    item.key.keys[4]  = report->keys[4];
+    item.key.keys[5]  = report->keys[5];
 
-        nkeys -= 6;
-        keys += 6;
+    while (!send_buf.enqueue(item)) {
+        send_buf_send_one();
     }
 }
 
-void bluefruit_le_send_consumer_key(uint16_t usage) {
+void bluefruit_le_send_consumer(uint16_t usage) {
     struct queue_item item;
 
     item.queue_type = QTConsumer;
@@ -658,15 +640,15 @@ void bluefruit_le_send_consumer_key(uint16_t usage) {
     }
 }
 
-void bluefruit_le_send_mouse_move(int8_t x, int8_t y, int8_t scroll, int8_t pan, uint8_t buttons) {
+void bluefruit_le_send_mouse(report_mouse_t *report) {
     struct queue_item item;
 
     item.queue_type        = QTMouseMove;
-    item.mousemove.x       = x;
-    item.mousemove.y       = y;
-    item.mousemove.scroll  = scroll;
-    item.mousemove.pan     = pan;
-    item.mousemove.buttons = buttons;
+    item.mousemove.x       = report->x;
+    item.mousemove.y       = report->y;
+    item.mousemove.scroll  = report->v;
+    item.mousemove.pan     = report->h;
+    item.mousemove.buttons = report->buttons;
 
     while (!send_buf.enqueue(item)) {
         send_buf_send_one();