From d485401c99fb7c6869a8f2eb6efc277b6d58cf08 Mon Sep 17 00:00:00 2001 From: Cemu0 Date: Wed, 14 Sep 2022 18:49:18 +0700 Subject: [PATCH 1/5] init commit, connected not work --- BleConnectionStatus.cpp | 18 ----- BleConnectionStatus.h | 21 ------ BleMouse.cpp | 158 ++++++++++++++++++++++++++++++---------- BleMouse.h | 44 ++++++++--- 4 files changed, 153 insertions(+), 88 deletions(-) delete mode 100644 BleConnectionStatus.cpp delete mode 100644 BleConnectionStatus.h diff --git a/BleConnectionStatus.cpp b/BleConnectionStatus.cpp deleted file mode 100644 index f01183b..0000000 --- a/BleConnectionStatus.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include "BleConnectionStatus.h" - -BleConnectionStatus::BleConnectionStatus(void) { -} - -void BleConnectionStatus::onConnect(BLEServer* pServer) -{ - this->connected = true; - BLE2902* desc = (BLE2902*)this->inputMouse->getDescriptorByUUID(BLEUUID((uint16_t)0x2902)); - desc->setNotifications(true); -} - -void BleConnectionStatus::onDisconnect(BLEServer* pServer) -{ - this->connected = false; - BLE2902* desc = (BLE2902*)this->inputMouse->getDescriptorByUUID(BLEUUID((uint16_t)0x2902)); - desc->setNotifications(false); -} diff --git a/BleConnectionStatus.h b/BleConnectionStatus.h deleted file mode 100644 index b703150..0000000 --- a/BleConnectionStatus.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef ESP32_BLE_CONNECTION_STATUS_H -#define ESP32_BLE_CONNECTION_STATUS_H -#include "sdkconfig.h" -#if defined(CONFIG_BT_ENABLED) - -#include -#include "BLE2902.h" -#include "BLECharacteristic.h" - -class BleConnectionStatus : public BLEServerCallbacks -{ -public: - BleConnectionStatus(void); - bool connected = false; - void onConnect(BLEServer* pServer); - void onDisconnect(BLEServer* pServer); - BLECharacteristic* inputMouse; -}; - -#endif // CONFIG_BT_ENABLED -#endif // ESP32_BLE_CONNECTION_STATUS_H diff --git a/BleMouse.cpp b/BleMouse.cpp index 2bcdd4c..f0bf655 100644 --- a/BleMouse.cpp +++ b/BleMouse.cpp @@ -1,14 +1,21 @@ -#include -#include -#include -#include "BLE2902.h" -#include "BLEHIDDevice.h" +// #include +// #include +// #include +// #include "BLE2902.h" +// #include "BLEHIDDevice.h" + +#include +#include +#include +#include + + #include "HIDTypes.h" #include "HIDKeyboardTypes.h" #include #include "sdkconfig.h" -#include "BleConnectionStatus.h" +// #include "BleConnectionStatus.h" #include "BleMouse.h" #if defined(CONFIG_ARDUHAL_ESP_LOG) @@ -19,6 +26,9 @@ static const char* LOG_TAG = "BLEDevice"; #endif +// Report IDs: +#define MOUSE_ID 0x01 + static const uint8_t _hidReportDescriptor[] = { USAGE_PAGE(1), 0x01, // USAGE_PAGE (Generic Desktop) USAGE(1), 0x02, // USAGE (Mouse) @@ -60,19 +70,68 @@ static const uint8_t _hidReportDescriptor[] = { END_COLLECTION(0) // END_COLLECTION }; -BleMouse::BleMouse(std::string deviceName, std::string deviceManufacturer, uint8_t batteryLevel) : - _buttons(0), - hid(0) -{ - this->deviceName = deviceName; - this->deviceManufacturer = deviceManufacturer; - this->batteryLevel = batteryLevel; - this->connectionStatus = new BleConnectionStatus(); -} +BleMouse::BleMouse(std::string deviceName, std::string deviceManufacturer, uint8_t batteryLevel) + : hid(0) + , deviceName(std::string(deviceName).substr(0, 15)) + , deviceManufacturer(std::string(deviceManufacturer).substr(0,15)) + , batteryLevel(batteryLevel) {} void BleMouse::begin(void) { - xTaskCreate(this->taskServer, "server", 20000, (void *)this, 5, NULL); + BLEDevice::init(deviceName); + + BLEServer* pServer = BLEDevice::createServer(); + pServer->setCallbacks(this); + + hid = new BLEHIDDevice(pServer); + inputMouse = hid->inputReport(MOUSE_ID); // <-- input REPORTID from report map + // outputMouse = hid->outputReport(MOUSE_ID); // ??? what is this doing ? + + // outputMouse->setCallbacks(this); + // inputMediaKeys = hid->inputReport(MEDIA_KEYS_ID); + + // xTaskCreate(this->taskServer, "server", 20000, (void *)this, 5, NULL); + // BleMouse* bleMouseInstance = (BleMouse *) pvParameter; //static_cast(pvParameter); + // BLEDevice::init(bleMouseInstance->deviceName); + // BLEServer *pServer = BLEDevice::createServer(); + // pServer->setCallbacks(bleMouseInstance->connectionStatus); + + // bleMouseInstance->hid = new BLEHIDDevice(pServer); + // bleMouseInstance->inputMouse = bleMouseInstance->hid->inputReport(0); // <-- input REPORTID from report map + // bleMouseInstance->connectionStatus->inputMouse = bleMouseInstance->inputMouse; + + hid->manufacturer()->setValue(deviceManufacturer); + + hid->pnp(0x02, 0xe502, 0xa111, 0x0210); + hid->hidInfo(0x00,0x02); + + BLEDevice::setSecurityAuth(true, true, true); + + + // BLESecurity *pSecurity = new BLESecurity(); + + // pSecurity->setAuthenticationMode(ESP_LE_AUTH_BOND); + + hid->reportMap((uint8_t*)_hidReportDescriptor, sizeof(_hidReportDescriptor)); + hid->startServices(); + + onStarted(pServer); + + advertising = pServer->getAdvertising(); + advertising->setAppearance(HID_MOUSE); + advertising->addServiceUUID(hid->hidService()->getUUID()); + advertising->setScanResponse(false); + advertising->start(); + hid->setBatteryLevel(batteryLevel); + + // BLEAdvertising *pAdvertising = pServer->getAdvertising(); + // pAdvertising->setAppearance(HID_MOUSE); + // pAdvertising->addServiceUUID(bleMouseInstance->hid->hidService()->getUUID()); + // pAdvertising->start(); + // bleMouseInstance->hid->setBatteryLevel(bleMouseInstance->batteryLevel); + + ESP_LOGD(LOG_TAG, "Advertising started!"); + } void BleMouse::end(void) @@ -99,6 +158,10 @@ void BleMouse::move(signed char x, signed char y, signed char wheel, signed char m[4] = hWheel; this->inputMouse->setValue(m, 5); this->inputMouse->notify(); + #if defined(USE_NIMBLE) + // vTaskDelay(delayTicks); + this->delay_ms(_delay_ms); + #endif // USE_NIMBLE } } @@ -129,7 +192,7 @@ bool BleMouse::isPressed(uint8_t b) } bool BleMouse::isConnected(void) { - return this->connectionStatus->connected; + return this->connected; } void BleMouse::setBatteryLevel(uint8_t level) { @@ -138,36 +201,51 @@ void BleMouse::setBatteryLevel(uint8_t level) { this->hid->setBatteryLevel(this->batteryLevel); } -void BleMouse::taskServer(void* pvParameter) { - BleMouse* bleMouseInstance = (BleMouse *) pvParameter; //static_cast(pvParameter); - BLEDevice::init(bleMouseInstance->deviceName); - BLEServer *pServer = BLEDevice::createServer(); - pServer->setCallbacks(bleMouseInstance->connectionStatus); +void BleMouse::onConnect(BLEServer* pServer) { + this->connected = true; + ESP_LOGD(LOG_TAG, "Connected"); - bleMouseInstance->hid = new BLEHIDDevice(pServer); - bleMouseInstance->inputMouse = bleMouseInstance->hid->inputReport(0); // <-- input REPORTID from report map - bleMouseInstance->connectionStatus->inputMouse = bleMouseInstance->inputMouse; - bleMouseInstance->hid->manufacturer()->setValue(bleMouseInstance->deviceManufacturer); +#if !defined(USE_NIMBLE) - bleMouseInstance->hid->pnp(0x02, 0xe502, 0xa111, 0x0210); - bleMouseInstance->hid->hidInfo(0x00,0x02); + BLE2902* desc = (BLE2902*)this->inputKeyboard->getDescriptorByUUID(BLEUUID((uint16_t)0x2902)); + desc->setNotifications(true); + desc = (BLE2902*)this->inputMediaKeys->getDescriptorByUUID(BLEUUID((uint16_t)0x2902)); + desc->setNotifications(true); - BLESecurity *pSecurity = new BLESecurity(); +#endif // !USE_NIMBLE - pSecurity->setAuthenticationMode(ESP_LE_AUTH_BOND); +} - bleMouseInstance->hid->reportMap((uint8_t*)_hidReportDescriptor, sizeof(_hidReportDescriptor)); - bleMouseInstance->hid->startServices(); +void BleMouse::onDisconnect(BLEServer* pServer) { + this->connected = false; - bleMouseInstance->onStarted(pServer); +#if !defined(USE_NIMBLE) - BLEAdvertising *pAdvertising = pServer->getAdvertising(); - pAdvertising->setAppearance(HID_MOUSE); - pAdvertising->addServiceUUID(bleMouseInstance->hid->hidService()->getUUID()); - pAdvertising->start(); - bleMouseInstance->hid->setBatteryLevel(bleMouseInstance->batteryLevel); + BLE2902* desc = (BLE2902*)this->inputKeyboard->getDescriptorByUUID(BLEUUID((uint16_t)0x2902)); + desc->setNotifications(false); + desc = (BLE2902*)this->inputMediaKeys->getDescriptorByUUID(BLEUUID((uint16_t)0x2902)); + desc->setNotifications(false); - ESP_LOGD(LOG_TAG, "Advertising started!"); - vTaskDelay(portMAX_DELAY); //delay(portMAX_DELAY); + advertising->start(); + +#endif // !USE_NIMBLE } + +void BleMouse::onWrite(BLECharacteristic* me) { + uint8_t* value = (uint8_t*)(me->getValue().c_str()); + // (void)value; + // _keyboardLedsStatus = *value; + ESP_LOGI(LOG_TAG, "special keys: %d", *value); +} + +void BleMouse::delay_ms(uint64_t ms) { + uint64_t m = esp_timer_get_time(); + if(ms){ + uint64_t e = (m + (ms * 1000)); + if(m > e){ //overflow + while(esp_timer_get_time() > e) { } + } + while(esp_timer_get_time() < e) {} + } +} \ No newline at end of file diff --git a/BleMouse.h b/BleMouse.h index 8b4ab9b..942c540 100644 --- a/BleMouse.h +++ b/BleMouse.h @@ -1,11 +1,24 @@ #ifndef ESP32_BLE_MOUSE_H #define ESP32_BLE_MOUSE_H -#include "sdkconfig.h" + + #if defined(CONFIG_BT_ENABLED) -#include "BleConnectionStatus.h" -#include "BLEHIDDevice.h" -#include "BLECharacteristic.h" +// #include "BleConnectionStatus.h" +// #include "BLEHIDDevice.h" +// #include "BLECharacteristic.h" + +#include "NimBLECharacteristic.h" +#include "NimBLEHIDDevice.h" +#include "sdkconfig.h" + +#define BLEDevice NimBLEDevice +#define BLEServerCallbacks NimBLEServerCallbacks +#define BLECharacteristicCallbacks NimBLECharacteristicCallbacks +#define BLEHIDDevice NimBLEHIDDevice +#define BLECharacteristic NimBLECharacteristic +#define BLEAdvertising NimBLEAdvertising +#define BLEServer NimBLEServer #define MOUSE_LEFT 1 #define MOUSE_RIGHT 2 @@ -14,17 +27,26 @@ #define MOUSE_FORWARD 16 #define MOUSE_ALL (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE) # For compatibility with the Mouse library -class BleMouse { +class BleMouse : public BLEServerCallbacks, public BLECharacteristicCallbacks +{ private: uint8_t _buttons; - BleConnectionStatus* connectionStatus; + // BleConnectionStatus* connectionStatus; BLEHIDDevice* hid; BLECharacteristic* inputMouse; + // BLECharacteristic* outputMouse; + BLEAdvertising* advertising; + + uint8_t batteryLevel; + bool connected = false; + uint32_t _delay_ms = 7; void buttons(uint8_t b); void rawAction(uint8_t msg[], char msgSize); - static void taskServer(void* pvParameter); + void delay_ms(uint64_t ms); + + // static void taskServer(void* pvParameter); public: - BleMouse(std::string deviceName = "ESP32 Bluetooth Mouse", std::string deviceManufacturer = "Espressif", uint8_t batteryLevel = 100); + BleMouse(std::string deviceName = "ESP32 BLEMouse", std::string deviceManufacturer = "Espressif", uint8_t batteryLevel = 100); void begin(void); void end(void); void click(uint8_t b = MOUSE_LEFT); @@ -34,11 +56,15 @@ class BleMouse { bool isPressed(uint8_t b = MOUSE_LEFT); // check LEFT by default bool isConnected(void); void setBatteryLevel(uint8_t level); - uint8_t batteryLevel; + // uint8_t batteryLevel; std::string deviceManufacturer; std::string deviceName; protected: virtual void onStarted(BLEServer *pServer) { }; + virtual void onConnect(BLEServer* pServer) override; + virtual void onDisconnect(BLEServer* pServer) override; + virtual void onWrite(BLECharacteristic* me) override; + }; #endif // CONFIG_BT_ENABLED From c01bb80347b036ef5593b78f79284c76401aa8e5 Mon Sep 17 00:00:00 2001 From: Cemu0 Date: Wed, 14 Sep 2022 19:33:11 +0700 Subject: [PATCH 2/5] worked on windows10 --- BleMouse.cpp | 11 ++++++----- BleMouse.h | 6 +++++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/BleMouse.cpp b/BleMouse.cpp index f0bf655..3526197 100644 --- a/BleMouse.cpp +++ b/BleMouse.cpp @@ -1,3 +1,4 @@ +#include "BleMouse.h" // #include // #include // #include @@ -11,12 +12,11 @@ #include "HIDTypes.h" -#include "HIDKeyboardTypes.h" +// #include "HIDKeyboardTypes.h" #include #include "sdkconfig.h" // #include "BleConnectionStatus.h" -#include "BleMouse.h" #if defined(CONFIG_ARDUHAL_ESP_LOG) #include "esp32-hal-log.h" @@ -27,7 +27,7 @@ #endif // Report IDs: -#define MOUSE_ID 0x01 +#define MOUSE_ID 0x00 static const uint8_t _hidReportDescriptor[] = { USAGE_PAGE(1), 0x01, // USAGE_PAGE (Generic Desktop) @@ -102,7 +102,8 @@ void BleMouse::begin(void) hid->manufacturer()->setValue(deviceManufacturer); - hid->pnp(0x02, 0xe502, 0xa111, 0x0210); + // hid->pnp(0x02, 0xe502, 0xa111, 0x0210); + hid->pnp(0x02, vid, pid, version); hid->hidInfo(0x00,0x02); BLEDevice::setSecurityAuth(true, true, true); @@ -156,7 +157,7 @@ void BleMouse::move(signed char x, signed char y, signed char wheel, signed char m[2] = y; m[3] = wheel; m[4] = hWheel; - this->inputMouse->setValue(m, 5); + this->inputMouse->setValue((uint8_t*)m, sizeof(m)); this->inputMouse->notify(); #if defined(USE_NIMBLE) // vTaskDelay(delayTicks); diff --git a/BleMouse.h b/BleMouse.h index 942c540..34a3793 100644 --- a/BleMouse.h +++ b/BleMouse.h @@ -1,5 +1,6 @@ #ifndef ESP32_BLE_MOUSE_H #define ESP32_BLE_MOUSE_H +#include "sdkconfig.h" #if defined(CONFIG_BT_ENABLED) @@ -10,7 +11,6 @@ #include "NimBLECharacteristic.h" #include "NimBLEHIDDevice.h" -#include "sdkconfig.h" #define BLEDevice NimBLEDevice #define BLEServerCallbacks NimBLEServerCallbacks @@ -44,6 +44,10 @@ class BleMouse : public BLEServerCallbacks, public BLECharacteristicCallbacks void rawAction(uint8_t msg[], char msgSize); void delay_ms(uint64_t ms); + uint16_t vid = 0x05ac; + uint16_t pid = 0x820a; + uint16_t version = 0x0210; + // static void taskServer(void* pvParameter); public: BleMouse(std::string deviceName = "ESP32 BLEMouse", std::string deviceManufacturer = "Espressif", uint8_t batteryLevel = 100); From 2d38fb8497aa89a4ee8f2fa834f62a89ac501cc0 Mon Sep 17 00:00:00 2001 From: Cemu0 Date: Wed, 14 Sep 2022 21:04:30 +0700 Subject: [PATCH 3/5] Add compatible with current branch --- BleConnectionStatus.cpp | 18 +++++++ BleConnectionStatus.h | 21 ++++++++ BleMouse.cpp | 112 +++++++++++++++++++++++++++------------- BleMouse.h | 52 ++++++++++++++++--- 4 files changed, 159 insertions(+), 44 deletions(-) create mode 100644 BleConnectionStatus.cpp create mode 100644 BleConnectionStatus.h diff --git a/BleConnectionStatus.cpp b/BleConnectionStatus.cpp new file mode 100644 index 0000000..3ff1791 --- /dev/null +++ b/BleConnectionStatus.cpp @@ -0,0 +1,18 @@ +#include "BleConnectionStatus.h" + +BleConnectionStatus::BleConnectionStatus(void) { +} + +void BleConnectionStatus::onConnect(BLEServer* pServer) +{ + this->connected = true; + BLE2902* desc = (BLE2902*)this->inputMouse->getDescriptorByUUID(BLEUUID((uint16_t)0x2902)); + desc->setNotifications(true); +} + +void BleConnectionStatus::onDisconnect(BLEServer* pServer) +{ + this->connected = false; + BLE2902* desc = (BLE2902*)this->inputMouse->getDescriptorByUUID(BLEUUID((uint16_t)0x2902)); + desc->setNotifications(false); +} \ No newline at end of file diff --git a/BleConnectionStatus.h b/BleConnectionStatus.h new file mode 100644 index 0000000..7267e97 --- /dev/null +++ b/BleConnectionStatus.h @@ -0,0 +1,21 @@ +#ifndef ESP32_BLE_CONNECTION_STATUS_H +#define ESP32_BLE_CONNECTION_STATUS_H +#include "sdkconfig.h" +#if defined(CONFIG_BT_ENABLED) + +#include +#include "BLE2902.h" +#include "BLECharacteristic.h" + +class BleConnectionStatus : public BLEServerCallbacks +{ +public: + BleConnectionStatus(void); + bool connected = false; + void onConnect(BLEServer* pServer); + void onDisconnect(BLEServer* pServer); + BLECharacteristic* inputMouse; +}; + +#endif // CONFIG_BT_ENABLED +#endif // ESP32_BLE_CONNECTION_STATUS_H \ No newline at end of file diff --git a/BleMouse.cpp b/BleMouse.cpp index 3526197..e2d113d 100644 --- a/BleMouse.cpp +++ b/BleMouse.cpp @@ -1,22 +1,27 @@ #include "BleMouse.h" -// #include -// #include -// #include -// #include "BLE2902.h" -// #include "BLEHIDDevice.h" +#if defined(USE_NIMBLE) #include #include #include #include +#else + +#include +#include +#include +#include "BLE2902.h" +#include "BLEHIDDevice.h" +#include "HIDKeyboardTypes.h" +#include "BleConnectionStatus.h" + +#endif #include "HIDTypes.h" -// #include "HIDKeyboardTypes.h" #include #include "sdkconfig.h" -// #include "BleConnectionStatus.h" #if defined(CONFIG_ARDUHAL_ESP_LOG) #include "esp32-hal-log.h" @@ -69,15 +74,27 @@ static const uint8_t _hidReportDescriptor[] = { END_COLLECTION(0), // END_COLLECTION END_COLLECTION(0) // END_COLLECTION }; - +#if defined(USE_NIMBLE) BleMouse::BleMouse(std::string deviceName, std::string deviceManufacturer, uint8_t batteryLevel) : hid(0) , deviceName(std::string(deviceName).substr(0, 15)) , deviceManufacturer(std::string(deviceManufacturer).substr(0,15)) , batteryLevel(batteryLevel) {} - +#else +BleMouse::BleMouse(std::string deviceName, std::string deviceManufacturer, uint8_t batteryLevel) : + _buttons(0), + hid(0) +{ + this->deviceName = deviceName; + this->deviceManufacturer = deviceManufacturer; + this->batteryLevel = batteryLevel; + this->connectionStatus = new BleConnectionStatus(); +} +#endif void BleMouse::begin(void) { + #if defined(USE_NIMBLE) + BLEDevice::init(deviceName); BLEServer* pServer = BLEDevice::createServer(); @@ -133,6 +150,9 @@ void BleMouse::begin(void) ESP_LOGD(LOG_TAG, "Advertising started!"); + #else + xTaskCreate(this->taskServer, "server", 20000, (void *)this, 5, NULL); + #endif } void BleMouse::end(void) @@ -193,7 +213,11 @@ bool BleMouse::isPressed(uint8_t b) } bool BleMouse::isConnected(void) { - return this->connected; + #if defined(USE_NIMBLE) + return this->connected; + #else + return this->connectionStatus->connected; + #endif } void BleMouse::setBatteryLevel(uint8_t level) { @@ -202,41 +226,19 @@ void BleMouse::setBatteryLevel(uint8_t level) { this->hid->setBatteryLevel(this->batteryLevel); } +#if defined(USE_NIMBLE) void BleMouse::onConnect(BLEServer* pServer) { this->connected = true; - ESP_LOGD(LOG_TAG, "Connected"); - - -#if !defined(USE_NIMBLE) - - BLE2902* desc = (BLE2902*)this->inputKeyboard->getDescriptorByUUID(BLEUUID((uint16_t)0x2902)); - desc->setNotifications(true); - desc = (BLE2902*)this->inputMediaKeys->getDescriptorByUUID(BLEUUID((uint16_t)0x2902)); - desc->setNotifications(true); - -#endif // !USE_NIMBLE - } void BleMouse::onDisconnect(BLEServer* pServer) { this->connected = false; - -#if !defined(USE_NIMBLE) - - BLE2902* desc = (BLE2902*)this->inputKeyboard->getDescriptorByUUID(BLEUUID((uint16_t)0x2902)); - desc->setNotifications(false); - desc = (BLE2902*)this->inputMediaKeys->getDescriptorByUUID(BLEUUID((uint16_t)0x2902)); - desc->setNotifications(false); - - advertising->start(); - -#endif // !USE_NIMBLE } +// this shouldn't void BleMouse::onWrite(BLECharacteristic* me) { uint8_t* value = (uint8_t*)(me->getValue().c_str()); - // (void)value; - // _keyboardLedsStatus = *value; + // is this can be use for future ? ESP_LOGI(LOG_TAG, "special keys: %d", *value); } @@ -249,4 +251,42 @@ void BleMouse::delay_ms(uint64_t ms) { } while(esp_timer_get_time() < e) {} } -} \ No newline at end of file +} +#endif // !USE_NIMBLE + +#if ! defined(USE_NIMBLE) +void BleMouse::taskServer(void* pvParameter) { + BleMouse* bleMouseInstance = (BleMouse *) pvParameter; //static_cast(pvParameter); + BLEDevice::init(bleMouseInstance->deviceName); + BLEServer *pServer = BLEDevice::createServer(); + pServer->setCallbacks(bleMouseInstance->connectionStatus); + + bleMouseInstance->hid = new BLEHIDDevice(pServer); + bleMouseInstance->inputMouse = bleMouseInstance->hid->inputReport(0); // <-- input REPORTID from report map + bleMouseInstance->connectionStatus->inputMouse = bleMouseInstance->inputMouse; + + bleMouseInstance->hid->manufacturer()->setValue(bleMouseInstance->deviceManufacturer); + + bleMouseInstance->hid->pnp(0x02, 0xe502, 0xa111, 0x0210); + bleMouseInstance->hid->hidInfo(0x00,0x02); + + BLESecurity *pSecurity = new BLESecurity(); + + pSecurity->setAuthenticationMode(ESP_LE_AUTH_BOND); + + bleMouseInstance->hid->reportMap((uint8_t*)_hidReportDescriptor, sizeof(_hidReportDescriptor)); + bleMouseInstance->hid->startServices(); + + bleMouseInstance->onStarted(pServer); + + BLEAdvertising *pAdvertising = pServer->getAdvertising(); + pAdvertising->setAppearance(HID_MOUSE); + pAdvertising->addServiceUUID(bleMouseInstance->hid->hidService()->getUUID()); + pAdvertising->start(); + bleMouseInstance->hid->setBatteryLevel(bleMouseInstance->batteryLevel); + + ESP_LOGD(LOG_TAG, "Advertising started!"); + vTaskDelay(portMAX_DELAY); //delay(portMAX_DELAY); +} +#endif + diff --git a/BleMouse.h b/BleMouse.h index 34a3793..d871f6b 100644 --- a/BleMouse.h +++ b/BleMouse.h @@ -1,3 +1,6 @@ +// uncomment the following line to use NimBLE library +//#define USE_NIMBLE + #ifndef ESP32_BLE_MOUSE_H #define ESP32_BLE_MOUSE_H #include "sdkconfig.h" @@ -5,9 +8,7 @@ #if defined(CONFIG_BT_ENABLED) -// #include "BleConnectionStatus.h" -// #include "BLEHIDDevice.h" -// #include "BLECharacteristic.h" +#if defined(USE_NIMBLE) #include "NimBLECharacteristic.h" #include "NimBLEHIDDevice.h" @@ -20,6 +21,14 @@ #define BLEAdvertising NimBLEAdvertising #define BLEServer NimBLEServer +#else + +#include "BleConnectionStatus.h" +#include "BLEHIDDevice.h" +#include "BLECharacteristic.h" + +#endif // USE_NIMBLE + #define MOUSE_LEFT 1 #define MOUSE_RIGHT 2 #define MOUSE_MIDDLE 4 @@ -27,14 +36,13 @@ #define MOUSE_FORWARD 16 #define MOUSE_ALL (MOUSE_LEFT | MOUSE_RIGHT | MOUSE_MIDDLE) # For compatibility with the Mouse library +#if defined(USE_NIMBLE) class BleMouse : public BLEServerCallbacks, public BLECharacteristicCallbacks { private: uint8_t _buttons; - // BleConnectionStatus* connectionStatus; BLEHIDDevice* hid; BLECharacteristic* inputMouse; - // BLECharacteristic* outputMouse; BLEAdvertising* advertising; uint8_t batteryLevel; @@ -48,9 +56,8 @@ class BleMouse : public BLEServerCallbacks, public BLECharacteristicCallbacks uint16_t pid = 0x820a; uint16_t version = 0x0210; - // static void taskServer(void* pvParameter); public: - BleMouse(std::string deviceName = "ESP32 BLEMouse", std::string deviceManufacturer = "Espressif", uint8_t batteryLevel = 100); + BleMouse(std::string deviceName = "ESP32 Bluetooth Mouse", std::string deviceManufacturer = "Espressif", uint8_t batteryLevel = 100); void begin(void); void end(void); void click(uint8_t b = MOUSE_LEFT); @@ -60,7 +67,7 @@ class BleMouse : public BLEServerCallbacks, public BLECharacteristicCallbacks bool isPressed(uint8_t b = MOUSE_LEFT); // check LEFT by default bool isConnected(void); void setBatteryLevel(uint8_t level); - // uint8_t batteryLevel; + std::string deviceManufacturer; std::string deviceName; protected: @@ -68,8 +75,37 @@ class BleMouse : public BLEServerCallbacks, public BLECharacteristicCallbacks virtual void onConnect(BLEServer* pServer) override; virtual void onDisconnect(BLEServer* pServer) override; virtual void onWrite(BLECharacteristic* me) override; +}; +#else +class BleMouse { +private: + uint8_t _buttons; + BleConnectionStatus* connectionStatus; + BLEHIDDevice* hid; + BLECharacteristic* inputMouse; + void buttons(uint8_t b); + void rawAction(uint8_t msg[], char msgSize); + static void taskServer(void* pvParameter); +public: + BleMouse(std::string deviceName = "ESP32 Bluetooth Mouse", std::string deviceManufacturer = "Espressif", uint8_t batteryLevel = 100); + void begin(void); + void end(void); + void click(uint8_t b = MOUSE_LEFT); + void move(signed char x, signed char y, signed char wheel = 0, signed char hWheel = 0); + void press(uint8_t b = MOUSE_LEFT); // press LEFT by default + void release(uint8_t b = MOUSE_LEFT); // release LEFT by default + bool isPressed(uint8_t b = MOUSE_LEFT); // check LEFT by default + bool isConnected(void); + void setBatteryLevel(uint8_t level); + uint8_t batteryLevel; + std::string deviceManufacturer; + std::string deviceName; +protected: + virtual void onStarted(BLEServer *pServer) { }; }; +#endif + #endif // CONFIG_BT_ENABLED #endif // ESP32_BLE_MOUSE_H From e551d55c1ff6c4a3d3d16bba0ed7ab1bdfc0ed0c Mon Sep 17 00:00:00 2001 From: Cemu0 Date: Wed, 14 Sep 2022 21:38:51 +0700 Subject: [PATCH 4/5] compatible with current branch --- BleMouse.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/BleMouse.cpp b/BleMouse.cpp index e2d113d..cbb94e4 100644 --- a/BleMouse.cpp +++ b/BleMouse.cpp @@ -1,6 +1,6 @@ -#include "BleMouse.h" #if defined(USE_NIMBLE) +#include "BleMouse.h" #include #include #include @@ -15,6 +15,7 @@ #include "BLEHIDDevice.h" #include "HIDKeyboardTypes.h" #include "BleConnectionStatus.h" +#include "BleMouse.h" #endif From 8b85fa60d4899a588537f2bdd0ae10400db3283a Mon Sep 17 00:00:00 2001 From: Cemu0 Date: Wed, 14 Sep 2022 22:45:02 +0700 Subject: [PATCH 5/5] Remove comments --- BleMouse.cpp | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/BleMouse.cpp b/BleMouse.cpp index cbb94e4..96603ca 100644 --- a/BleMouse.cpp +++ b/BleMouse.cpp @@ -103,34 +103,14 @@ void BleMouse::begin(void) hid = new BLEHIDDevice(pServer); inputMouse = hid->inputReport(MOUSE_ID); // <-- input REPORTID from report map - // outputMouse = hid->outputReport(MOUSE_ID); // ??? what is this doing ? - - // outputMouse->setCallbacks(this); - // inputMediaKeys = hid->inputReport(MEDIA_KEYS_ID); - - // xTaskCreate(this->taskServer, "server", 20000, (void *)this, 5, NULL); - // BleMouse* bleMouseInstance = (BleMouse *) pvParameter; //static_cast(pvParameter); - // BLEDevice::init(bleMouseInstance->deviceName); - // BLEServer *pServer = BLEDevice::createServer(); - // pServer->setCallbacks(bleMouseInstance->connectionStatus); - - // bleMouseInstance->hid = new BLEHIDDevice(pServer); - // bleMouseInstance->inputMouse = bleMouseInstance->hid->inputReport(0); // <-- input REPORTID from report map - // bleMouseInstance->connectionStatus->inputMouse = bleMouseInstance->inputMouse; hid->manufacturer()->setValue(deviceManufacturer); - // hid->pnp(0x02, 0xe502, 0xa111, 0x0210); hid->pnp(0x02, vid, pid, version); hid->hidInfo(0x00,0x02); BLEDevice::setSecurityAuth(true, true, true); - - // BLESecurity *pSecurity = new BLESecurity(); - - // pSecurity->setAuthenticationMode(ESP_LE_AUTH_BOND); - hid->reportMap((uint8_t*)_hidReportDescriptor, sizeof(_hidReportDescriptor)); hid->startServices(); @@ -143,12 +123,6 @@ void BleMouse::begin(void) advertising->start(); hid->setBatteryLevel(batteryLevel); - // BLEAdvertising *pAdvertising = pServer->getAdvertising(); - // pAdvertising->setAppearance(HID_MOUSE); - // pAdvertising->addServiceUUID(bleMouseInstance->hid->hidService()->getUUID()); - // pAdvertising->start(); - // bleMouseInstance->hid->setBatteryLevel(bleMouseInstance->batteryLevel); - ESP_LOGD(LOG_TAG, "Advertising started!"); #else