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) {