Adafruit Feather BLE / BLE Friend mouse buttons support
This commit is contained in:
parent
80707d529c
commit
f0fc2db4e2
|
@ -87,6 +87,7 @@ struct queue_item {
|
||||||
uint16_t consumer;
|
uint16_t consumer;
|
||||||
struct __attribute__((packed)) {
|
struct __attribute__((packed)) {
|
||||||
int8_t x, y, scroll, pan;
|
int8_t x, y, scroll, pan;
|
||||||
|
uint8_t buttons;
|
||||||
} mousemove;
|
} mousemove;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -699,6 +700,22 @@ static bool process_queue_item(struct queue_item *item, uint16_t timeout) {
|
||||||
strcpy_P(fmtbuf, PSTR("AT+BLEHIDMOUSEMOVE=%d,%d,%d,%d"));
|
strcpy_P(fmtbuf, PSTR("AT+BLEHIDMOUSEMOVE=%d,%d,%d,%d"));
|
||||||
snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->mousemove.x,
|
snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->mousemove.x,
|
||||||
item->mousemove.y, item->mousemove.scroll, item->mousemove.pan);
|
item->mousemove.y, item->mousemove.scroll, item->mousemove.pan);
|
||||||
|
if (!at_command(cmdbuf, NULL, 0, true, timeout)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
strcpy_P(cmdbuf, PSTR("AT+BLEHIDMOUSEBUTTON="));
|
||||||
|
if (item->mousemove.buttons & MOUSE_BTN1) {
|
||||||
|
strcat(cmdbuf, "L");
|
||||||
|
}
|
||||||
|
if (item->mousemove.buttons & MOUSE_BTN2) {
|
||||||
|
strcat(cmdbuf, "R");
|
||||||
|
}
|
||||||
|
if (item->mousemove.buttons & MOUSE_BTN3) {
|
||||||
|
strcat(cmdbuf, "M");
|
||||||
|
}
|
||||||
|
if (item->mousemove.buttons == 0) {
|
||||||
|
strcat(cmdbuf, "0");
|
||||||
|
}
|
||||||
return at_command(cmdbuf, NULL, 0, true, timeout);
|
return at_command(cmdbuf, NULL, 0, true, timeout);
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
|
@ -757,7 +774,7 @@ bool adafruit_ble_send_consumer_key(uint16_t keycode, int hold_duration) {
|
||||||
|
|
||||||
#ifdef MOUSE_ENABLE
|
#ifdef MOUSE_ENABLE
|
||||||
bool adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll,
|
bool adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll,
|
||||||
int8_t pan) {
|
int8_t pan, uint8_t buttons) {
|
||||||
struct queue_item item;
|
struct queue_item item;
|
||||||
|
|
||||||
item.queue_type = QTMouseMove;
|
item.queue_type = QTMouseMove;
|
||||||
|
@ -765,6 +782,7 @@ bool adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll,
|
||||||
item.mousemove.y = y;
|
item.mousemove.y = y;
|
||||||
item.mousemove.scroll = scroll;
|
item.mousemove.scroll = scroll;
|
||||||
item.mousemove.pan = pan;
|
item.mousemove.pan = pan;
|
||||||
|
item.mousemove.buttons = buttons;
|
||||||
|
|
||||||
while (!send_buf.enqueue(item)) {
|
while (!send_buf.enqueue(item)) {
|
||||||
send_buf_send_one();
|
send_buf_send_one();
|
||||||
|
|
|
@ -43,7 +43,7 @@ extern bool adafruit_ble_send_consumer_key(uint16_t keycode, int hold_duration);
|
||||||
* The parameters are signed and indicate positive of negative direction
|
* The parameters are signed and indicate positive of negative direction
|
||||||
* change. */
|
* change. */
|
||||||
extern bool adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll,
|
extern bool adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll,
|
||||||
int8_t pan);
|
int8_t pan, uint8_t buttons);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Compute battery voltage by reading an analog pin.
|
/* Compute battery voltage by reading an analog pin.
|
||||||
|
|
|
@ -669,7 +669,7 @@ static void send_mouse(report_mouse_t *report)
|
||||||
if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) {
|
if (where == OUTPUT_BLUETOOTH || where == OUTPUT_USB_AND_BT) {
|
||||||
#ifdef MODULE_ADAFRUIT_BLE
|
#ifdef MODULE_ADAFRUIT_BLE
|
||||||
// FIXME: mouse buttons
|
// FIXME: mouse buttons
|
||||||
adafruit_ble_send_mouse_move(report->x, report->y, report->v, report->h);
|
adafruit_ble_send_mouse_move(report->x, report->y, report->v, report->h, report->buttons);
|
||||||
#else
|
#else
|
||||||
bluefruit_serial_send(0xFD);
|
bluefruit_serial_send(0xFD);
|
||||||
bluefruit_serial_send(0x00);
|
bluefruit_serial_send(0x00);
|
||||||
|
|
Loading…
Reference in New Issue