From dad42b4dde4b7edc1880f4b5ea727397d8a6794e Mon Sep 17 00:00:00 2001 From: Roberto Date: Thu, 23 Dec 2021 18:41:39 +0100 Subject: [PATCH 1/2] Force New Connection Add functionalities for https://github.com/lathoub/Arduino-BLE-MIDI/issues/40 issue. --- src/hardware/BLEMIDI_Client_ESP32.h | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/hardware/BLEMIDI_Client_ESP32.h b/src/hardware/BLEMIDI_Client_ESP32.h index dd81b58..94eb4f5 100644 --- a/src/hardware/BLEMIDI_Client_ESP32.h +++ b/src/hardware/BLEMIDI_Client_ESP32.h @@ -96,7 +96,7 @@ static uint32_t userOnPassKeyRequest() return passkey; }; - /* +/* ###### BLE COMMUNICATION PARAMS ###### */ /** Set connection parameters: @@ -117,6 +117,23 @@ static uint32_t userOnPassKeyRequest() #define BLEMIDI_CLIENT_COMM_LATENCY 0 // #define BLEMIDI_CLIENT_COMM_TIMEOUT 200 //2000ms +/* +###### BLE FORCE NEW CONNECTION ###### +*/ + +/** + * This parameter force to skip the "soft-reconnection" and force to create a new connection after a disconnect event. + * "Soft-reconnection" save some time and energy in comparation with performming a new connection, but some BLE devices + * don't support or don't perform correctly a "soft-reconnection" after a disconnection event. + * Uncomment this define if your device doesn't work propertily after a reconnection. + * +*/ +#define BLEMIDI_FORCE_NEW_CONNECTION + +/** + * +*/ + /* ############################################# ############ USER DEFINES END ############### @@ -340,6 +357,13 @@ protected: _bluetoothEsp32->disconnected(); } +#ifdef BLEMIDI_FORCE_NEW_CONNECTION + // Renew Client + NimBLEDevice::deleteClient(pClient); + //NimBLEDevice::createClient(); + pClient = nullptr; +#endif // BLEMIDI_FORCE_NEW_CONNECTION + //Try reconnection or search a new one NimBLEDevice::getScan()->start(1, scanEndedCB); } @@ -481,6 +505,7 @@ bool BLEMIDI_Client_ESP32::connect() { using namespace std::placeholders; //<- for bind funtion in callback notification +#ifndef BLEMIDI_FORCE_NEW_CONNECTION /** Check if we have a client we should reuse first * Special case when we already know this device * This saves considerable time and power. @@ -512,6 +537,7 @@ bool BLEMIDI_Client_ESP32::connect() NimBLEDevice::deleteClient(_client); _client = nullptr; } +#endif //BLEMIDI_FORCE_NEW_CONNECTION if (NimBLEDevice::getClientListSize() >= NIMBLE_MAX_CONNECTIONS) { From ebe18daaea8b1cea0826bbeae893402d12b73f2c Mon Sep 17 00:00:00 2001 From: Roberto Date: Tue, 18 Jan 2022 16:51:55 +0100 Subject: [PATCH 2/2] Bug fixed of https://github.com/RobertoHE/Arduino-BLE-MIDI/commit/dad42b4dde4b7edc1880f4b5ea727397d8a6794e#diff-bf9bc149421b933caf483239631a8722a328bfd41cd331fa986737433b42fcd7. --- src/hardware/BLEMIDI_Client_ESP32.h | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/hardware/BLEMIDI_Client_ESP32.h b/src/hardware/BLEMIDI_Client_ESP32.h index 94eb4f5..d1642fc 100644 --- a/src/hardware/BLEMIDI_Client_ESP32.h +++ b/src/hardware/BLEMIDI_Client_ESP32.h @@ -75,6 +75,7 @@ * * Uncomment what you need * These are the default values. + * You can select some simultaneously. */ #define BLEMIDI_CLIENT_BOND //#define BLEMIDI_CLIENT_MITM @@ -86,7 +87,7 @@ */ static uint32_t userOnPassKeyRequest() { - //FILL WITH YOUR CUSTOM AUTH METHOD or PASSKEY + //FILL WITH YOUR CUSTOM AUTH METHOD CODE or PASSKEY //FOR EXAMPLE: uint32_t passkey = 123456; @@ -96,7 +97,7 @@ static uint32_t userOnPassKeyRequest() return passkey; }; -/* + /* ###### BLE COMMUNICATION PARAMS ###### */ /** Set connection parameters: @@ -128,7 +129,7 @@ static uint32_t userOnPassKeyRequest() * Uncomment this define if your device doesn't work propertily after a reconnection. * */ -#define BLEMIDI_FORCE_NEW_CONNECTION +//#define BLEMIDI_FORCE_NEW_CONNECTION /** * @@ -355,12 +356,16 @@ protected: if (_bluetoothEsp32) { _bluetoothEsp32->disconnected(); +#ifdef BLEMIDI_FORCE_NEW_CONNECTION + // Try reconnection or search a new one + _bluetoothEsp32->scan(); +#endif // BLEMIDI_FORCE_NEW_CONNECTION } #ifdef BLEMIDI_FORCE_NEW_CONNECTION // Renew Client NimBLEDevice::deleteClient(pClient); - //NimBLEDevice::createClient(); + NimBLEDevice::createClient(); pClient = nullptr; #endif // BLEMIDI_FORCE_NEW_CONNECTION