Bluetooth BLE HID Mouse for the AlterErgo device, based on Seeed Studio Tiny BLE.

Dependencies:   BLE_API BLE_HID mbed nRF51822

Fork of BLENano_HID by Yuuichi Akagawa

Revision:
2:0218f7d82bfa
Parent:
1:2749e6ff50ce
diff -r 2749e6ff50ce -r 0218f7d82bfa main.cpp
--- a/main.cpp	Sun Aug 26 10:51:20 2018 +0000
+++ b/main.cpp	Sun Aug 26 11:18:26 2018 +0000
@@ -220,32 +220,32 @@
             float fing4 = finger4.read();
             float batt = battery.read();
             
-            // If a finger was pressed and now has been released, send the keyUp event soon after.
+            // If a finger was pressed and now has been released, possibly send another event.
             if (press_keyup[1] && fing1 < FINGER1_RELEASE) {
                 press_keyup[1] = false;    // Clear the flag
-                //kbdServicePtr->keyUpCode();
-                HID_DEBUG("sent key up for 1.\n\r");
+                LOG("key up for 1.\n\r");
+                
+                // Nothing needs to be done for releasing a mouse click.
             }
             if (press_keyup[2] && fing2 < FINGER2_RELEASE) {
                 press_keyup[2] = false;    // Clear the flag
-                //send_keypress(FING2UP_KEYCODE, 2);
-                HID_DEBUG("sent final key down for 2.\n\r");
-                ble.waitForEvent(); // Add a slight delay
-                //wait(0.1);          // Add a slight delay
-                //ble.waitForEvent(); // Add a slight delay
-                //kbdServicePtr->keyUpCode();
-                HID_DEBUG("sent final key up for 2.\n\r");
-                press_keyup[2] = false;    // Clear the flag
+                LOG("key up for 2.\n\r");
+
+                // Nothing needs to be done for releasing a mouse click.
             }
             if (press_keyup[3] && fing3 < FINGER3_RELEASE) {
                 press_keyup[3] = false;    // Clear the flag
-                //kbdServicePtr->keyUpCode();
-                HID_DEBUG("sent key up for 3.\n\r");
+                LOG("key up for 3.\n\r");
+
+                // Stop the scrolling.
+                mouseServicePtr->setSpeed(0, 0, 0);
             }
             if (press_keyup[4] && fing4 < FINGER4_RELEASE) {
                 press_keyup[4] = false;    // Clear the flag
-                //kbdServicePtr->keyUpCode();
-                HID_DEBUG("sent key up for 4.\n\r");
+                LOG("key up for 4.\n\r");
+
+                // Stop the scrolling.
+                mouseServicePtr->setSpeed(0, 0, 0);
             }
             
 
@@ -288,47 +288,36 @@
             
             // Check if a finger was pressed
             if (fing1 > FINGER1_PRESS && !press_keyup[1]) {
-                //send_keypress(FING1_KEYCODE, 1);
-                HID_DEBUG("sent keypress %d for 1.\n\r");
-                //counter2+=20;
-                //LOG("%d\n\r", counter2);
+                LOG("finger 1.\n\r");
+                press_keyup[1] = true; // Don't trigger this event again until the finger has been released.
+                
+                mouseServicePtr->setButton(MOUSE_BUTTON_LEFT, BUTTON_DOWN);
+                wait(0.05);         // Add a slight delay
+                ble.waitForEvent(); // Add a slight delay
+                mouseServicePtr->setButton(MOUSE_BUTTON_LEFT, BUTTON_UP);
             }
             if (fing2 > FINGER2_PRESS && !press_keyup[2]) {
-                //send_keypress(FING2DOWN_KEYCODE, 2);
-                HID_DEBUG("sent keypress %d for 2.\n\r");
-                // Finger 2 is treated differently. We want to be able to hold down finger 2
-                // Without causing repeated keystrokes, so we will send an up press straight after the down press, 
-                // and a different key down and up when the fingure is released, so the client software can
-                // figure out the duration that it was held for.
+                LOG("finger 2.\n\r");
+                press_keyup[2] = true; // Don't trigger this event again until the finger has been released.
+                
+                mouseServicePtr->setButton(MOUSE_BUTTON_RIGHT, BUTTON_DOWN);
+                wait(0.05);         // Add a slight delay
                 ble.waitForEvent(); // Add a slight delay
-                //wait(0.1);          // Add a slight delay
-                //ble.waitForEvent(); // Add a slight delay
-                //kbdServicePtr->keyUpCode();
-                HID_DEBUG("sent initial key up for 2.\n\r");
+                mouseServicePtr->setButton(MOUSE_BUTTON_RIGHT, BUTTON_UP);
             }
             if (fing3 > FINGER3_PRESS && !press_keyup[3]) {
-                //send_keypress(FING3_KEYCODE, 3);               
-                HID_DEBUG("sent keypress %d for 3.\n\r");
-                //counter2++;
-                //send_keypress(counter2, 3);
-                //LOG("%d\n\r", counter2);
+                LOG("finger 3.\n\r");
+                press_keyup[3] = true; // Don't trigger this event again until the finger has been released.
 
-                LOG("send scroll down\n\r");
+                // Start scrolling down, until the user releases this finger.
                 mouseServicePtr->setSpeed(0, 0, 1);
-
-                wait(0.05);         // Add a slight delay
-                ble.waitForEvent(); // Add a slight delay
-                
-                mouseServicePtr->setSpeed(0, 0, 0);
-
             }
             if (fing4 > FINGER4_PRESS && !press_keyup[4]) {
-                //send_keypress(FING4_KEYCODE, 4);
-                HID_DEBUG("sent keypress %d for 4.\n\r");
-                //counter2--;
-                //send_keypress(counter2, 4);
-                //LOG("%d\n\r", counter2);
-                
+                LOG("finger 4.\n\r");
+                press_keyup[4] = true; // Don't trigger this event again until the finger has been released.
+
+                // Start scrolling up, until the user releases this finger.
+                mouseServicePtr->setSpeed(0, 0, -1);                
             }
         }
     }