forked from mfulz_github/qmk_firmware
		
	Merge pull request #1342 from priyadi/adafruit-mouse-buttons
Adafruit Feather BLE / BLE Friend mouse buttons support
This commit is contained in:
		
						commit
						4549b0417e
					
				@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user