parent
948fc1165f
commit
b91186d6a1
|
|
@ -28,6 +28,10 @@
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <BLEMIDI_Transport.h>
|
#include <BLEMIDI_Transport.h>
|
||||||
|
|
||||||
|
struct CustomBufferSizeSettings : public BLEMIDI_NAMESPACE::DefaultSettings {
|
||||||
|
static const size_t MaxBufferSize = 16;
|
||||||
|
};
|
||||||
|
|
||||||
#include <hardware/BLEMIDI_Client_ESP32.h>
|
#include <hardware/BLEMIDI_Client_ESP32.h>
|
||||||
|
|
||||||
//#include <hardware/BLEMIDI_ESP32_NimBLE.h>
|
//#include <hardware/BLEMIDI_ESP32_NimBLE.h>
|
||||||
|
|
@ -35,7 +39,7 @@
|
||||||
//#include <hardware/BLEMIDI_nRF52.h>
|
//#include <hardware/BLEMIDI_nRF52.h>
|
||||||
//#include <hardware/BLEMIDI_ArduinoBLE.h>
|
//#include <hardware/BLEMIDI_ArduinoBLE.h>
|
||||||
|
|
||||||
BLEMIDI_CREATE_DEFAULT_INSTANCE(); //Connect to first server found
|
BLEMIDI_CREATE_CUSTOM_INSTANCE("Esp32-BLE-MIDI", MIDI, CustomBufferSizeSettings); // Connect to first server found
|
||||||
|
|
||||||
//BLEMIDI_CREATE_INSTANCE("",MIDI) //Connect to the first server found
|
//BLEMIDI_CREATE_INSTANCE("",MIDI) //Connect to the first server found
|
||||||
//BLEMIDI_CREATE_INSTANCE("f2:c1:d9:36:e7:6b",MIDI) //Connect to a specific BLE address server
|
//BLEMIDI_CREATE_INSTANCE("f2:c1:d9:36:e7:6b",MIDI) //Connect to a specific BLE address server
|
||||||
|
|
|
||||||
|
|
@ -174,6 +174,7 @@ BEGIN_BLEMIDI_NAMESPACE
|
||||||
#define BLEMIDI_CLIENT_SECURITY_AUTH (BLEMIDI_CLIENT_BOND_DUMMY | BLEMIDI_CLIENT_MITM_DUMMY | BLEMIDI_CLIENT_PAIR_DUMMY)
|
#define BLEMIDI_CLIENT_SECURITY_AUTH (BLEMIDI_CLIENT_BOND_DUMMY | BLEMIDI_CLIENT_MITM_DUMMY | BLEMIDI_CLIENT_PAIR_DUMMY)
|
||||||
|
|
||||||
/** Define a class to handle the callbacks when advertisments are received */
|
/** Define a class to handle the callbacks when advertisments are received */
|
||||||
|
template <class _Settings>
|
||||||
class AdvertisedDeviceCallbacks : public NimBLEAdvertisedDeviceCallbacks
|
class AdvertisedDeviceCallbacks : public NimBLEAdvertisedDeviceCallbacks
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
@ -220,6 +221,7 @@ protected:
|
||||||
void scanEndedCB(NimBLEScanResults results);
|
void scanEndedCB(NimBLEScanResults results);
|
||||||
|
|
||||||
/** Define the class that performs Client Midi (nimBLE) */
|
/** Define the class that performs Client Midi (nimBLE) */
|
||||||
|
template <class _Settings>
|
||||||
class BLEMIDI_Client_ESP32
|
class BLEMIDI_Client_ESP32
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
@ -229,15 +231,14 @@ private:
|
||||||
BLERemoteService *pSvc = nullptr;
|
BLERemoteService *pSvc = nullptr;
|
||||||
bool firstTimeSend = true; //First writeValue get sends like Write with reponse for clean security flags. After first time, all messages are send like WriteNoResponse for increase transmision speed.
|
bool firstTimeSend = true; //First writeValue get sends like Write with reponse for clean security flags. After first time, all messages are send like WriteNoResponse for increase transmision speed.
|
||||||
|
|
||||||
BLEMIDI_Transport<class BLEMIDI_Client_ESP32> *_bleMidiTransport = nullptr;
|
BLEMIDI_Transport<class BLEMIDI_Client_ESP32<_Settings>, _Settings> *_bleMidiTransport = nullptr;
|
||||||
|
|
||||||
bool specificTarget = false;
|
bool specificTarget = false;
|
||||||
|
|
||||||
friend class AdvertisedDeviceCallbacks;
|
// TODO: somehow the forward declaration of the template class is not accepted by the compiler
|
||||||
friend class MyClientCallbacks;
|
// template <class> friend MyClientCallbacks;
|
||||||
friend class MIDI_NAMESPACE::MidiInterface<BLEMIDI_Transport<BLEMIDI_Client_ESP32>, MySettings>; //
|
|
||||||
|
|
||||||
AdvertisedDeviceCallbacks myAdvCB;
|
AdvertisedDeviceCallbacks<_Settings> myAdvCB;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QueueHandle_t mRxQueue;
|
QueueHandle_t mRxQueue;
|
||||||
|
|
@ -247,7 +248,7 @@ public:
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool begin(const char *, BLEMIDI_Transport<class BLEMIDI_Client_ESP32> *);
|
bool begin(const char *, BLEMIDI_Transport<class BLEMIDI_Client_ESP32<_Settings>, _Settings> *);
|
||||||
|
|
||||||
bool end()
|
bool end()
|
||||||
{
|
{
|
||||||
|
|
@ -294,61 +295,55 @@ protected:
|
||||||
_bleMidiTransport->receive(buffer, length);
|
_bleMidiTransport->receive(buffer, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
void connectCallbacks(MIDI_NAMESPACE::MidiInterface<BLEMIDI_Transport<BLEMIDI_Client_ESP32>, MySettings> *MIDIcallback);
|
void notifyCB(NimBLERemoteCharacteristic *pRemoteCharacteristic, uint8_t *pData, size_t length, bool isNotify);
|
||||||
|
|
||||||
|
void scan();
|
||||||
|
bool connect();
|
||||||
|
|
||||||
|
public: // TODO: somehow the forward declaration of the template class is not accepted by the compiler
|
||||||
void connected()
|
void connected()
|
||||||
{
|
{
|
||||||
if (_bleMidiTransport->_connectedCallback)
|
if (_bleMidiTransport->_connectedCallback)
|
||||||
{
|
|
||||||
_bleMidiTransport->_connectedCallback();
|
_bleMidiTransport->_connectedCallback();
|
||||||
}
|
|
||||||
firstTimeSend = true;
|
firstTimeSend = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void disconnected()
|
void disconnected()
|
||||||
{
|
{
|
||||||
if (_bleMidiTransport->_disconnectedCallback)
|
if (_bleMidiTransport->_disconnectedCallback)
|
||||||
{
|
|
||||||
_bleMidiTransport->_disconnectedCallback();
|
_bleMidiTransport->_disconnectedCallback();
|
||||||
}
|
|
||||||
firstTimeSend = true;
|
firstTimeSend = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void notifyCB(NimBLERemoteCharacteristic *pRemoteCharacteristic, uint8_t *pData, size_t length, bool isNotify);
|
|
||||||
|
|
||||||
void scan();
|
|
||||||
bool connect();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Define the class that performs interruption callbacks */
|
/** Define the class that performs interruption callbacks */
|
||||||
|
template <class _Settings>
|
||||||
class MyClientCallbacks : public BLEClientCallbacks
|
class MyClientCallbacks : public BLEClientCallbacks
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MyClientCallbacks(BLEMIDI_Client_ESP32 *bluetoothEsp32)
|
MyClientCallbacks(BLEMIDI_Client_ESP32<_Settings> *bluetoothEsp32)
|
||||||
: _bluetoothEsp32(bluetoothEsp32)
|
: _bluetoothEsp32(bluetoothEsp32)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
BLEMIDI_Client_ESP32 *_bluetoothEsp32 = nullptr;
|
BLEMIDI_Client_ESP32<_Settings> *_bluetoothEsp32 = nullptr;
|
||||||
|
|
||||||
uint32_t onPassKeyRequest()
|
uint32_t onPassKeyRequest()
|
||||||
{
|
{
|
||||||
return userOnPassKeyRequest();
|
return userOnPassKeyRequest();
|
||||||
};
|
};
|
||||||
|
|
||||||
void onConnect(BLEClient *pClient)
|
void onConnect(BLEClient*)
|
||||||
{
|
{
|
||||||
//Serial.println("##Connected##");
|
//Serial.println("##Connected##");
|
||||||
//pClient->updateConnParams(BLEMIDI_CLIENT_COMM_MIN_INTERVAL, BLEMIDI_CLIENT_COMM_MAX_INTERVAL, BLEMIDI_CLIENT_COMM_LATENCY, BLEMIDI_CLIENT_COMM_TIMEOUT);
|
//pClient->updateConnParams(BLEMIDI_CLIENT_COMM_MIN_INTERVAL, BLEMIDI_CLIENT_COMM_MAX_INTERVAL, BLEMIDI_CLIENT_COMM_LATENCY, BLEMIDI_CLIENT_COMM_TIMEOUT);
|
||||||
vTaskDelay(1);
|
vTaskDelay(1);
|
||||||
if (_bluetoothEsp32)
|
if (_bluetoothEsp32)
|
||||||
{
|
|
||||||
_bluetoothEsp32->connected();
|
_bluetoothEsp32->connected();
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void onDisconnect(BLEClient *pClient)
|
void onDisconnect(BLEClient*)
|
||||||
{
|
{
|
||||||
//Serial.print(pClient->getPeerAddress().toString().c_str());
|
//Serial.print(pClient->getPeerAddress().toString().c_str());
|
||||||
//Serial.println(" Disconnected - Starting scan");
|
//Serial.println(" Disconnected - Starting scan");
|
||||||
|
|
@ -403,7 +398,8 @@ protected:
|
||||||
##########################################
|
##########################################
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool BLEMIDI_Client_ESP32::begin(const char *deviceName, BLEMIDI_Transport<class BLEMIDI_Client_ESP32> *bleMidiTransport)
|
template <class _Settings>
|
||||||
|
bool BLEMIDI_Client_ESP32<_Settings>::begin(const char *deviceName, BLEMIDI_Transport<class BLEMIDI_Client_ESP32<_Settings>, _Settings> *bleMidiTransport)
|
||||||
{
|
{
|
||||||
_bleMidiTransport = bleMidiTransport;
|
_bleMidiTransport = bleMidiTransport;
|
||||||
|
|
||||||
|
|
@ -450,7 +446,8 @@ bool BLEMIDI_Client_ESP32::begin(const char *deviceName, BLEMIDI_Transport<class
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BLEMIDI_Client_ESP32::available(byte *pvBuffer)
|
template <class _Settings>
|
||||||
|
bool BLEMIDI_Client_ESP32<_Settings>::available(byte *pvBuffer)
|
||||||
{
|
{
|
||||||
if (myAdvCB.enableConnection)
|
if (myAdvCB.enableConnection)
|
||||||
{
|
{
|
||||||
|
|
@ -479,7 +476,8 @@ bool BLEMIDI_Client_ESP32::available(byte *pvBuffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Notification receiving handler callback */
|
/** Notification receiving handler callback */
|
||||||
void BLEMIDI_Client_ESP32::notifyCB(NimBLERemoteCharacteristic *pRemoteCharacteristic, uint8_t *pData, size_t length, bool isNotify)
|
template <class _Settings>
|
||||||
|
void BLEMIDI_Client_ESP32<_Settings>::notifyCB(NimBLERemoteCharacteristic *pRemoteCharacteristic, uint8_t *pData, size_t length, bool isNotify)
|
||||||
{
|
{
|
||||||
if (this->_characteristic == pRemoteCharacteristic) //Redundant protection
|
if (this->_characteristic == pRemoteCharacteristic) //Redundant protection
|
||||||
{
|
{
|
||||||
|
|
@ -487,7 +485,8 @@ void BLEMIDI_Client_ESP32::notifyCB(NimBLERemoteCharacteristic *pRemoteCharacter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BLEMIDI_Client_ESP32::scan()
|
template <class _Settings>
|
||||||
|
void BLEMIDI_Client_ESP32<_Settings>::scan()
|
||||||
{
|
{
|
||||||
// Retrieve a Scanner and set the callback you want to use to be informed when a new device is detected.
|
// Retrieve a Scanner and set the callback you want to use to be informed when a new device is detected.
|
||||||
// Specify that you want active scanning and start the
|
// Specify that you want active scanning and start the
|
||||||
|
|
@ -506,7 +505,8 @@ void BLEMIDI_Client_ESP32::scan()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
bool BLEMIDI_Client_ESP32::connect()
|
template <class _Settings>
|
||||||
|
bool BLEMIDI_Client_ESP32<_Settings>::connect()
|
||||||
{
|
{
|
||||||
using namespace std::placeholders; //<- for bind funtion in callback notification
|
using namespace std::placeholders; //<- for bind funtion in callback notification
|
||||||
|
|
||||||
|
|
@ -553,7 +553,7 @@ bool BLEMIDI_Client_ESP32::connect()
|
||||||
// Create and setup a new client
|
// Create and setup a new client
|
||||||
_client = BLEDevice::createClient();
|
_client = BLEDevice::createClient();
|
||||||
|
|
||||||
_client->setClientCallbacks(new MyClientCallbacks(this), false);
|
_client->setClientCallbacks(new MyClientCallbacks<_Settings>(this), false);
|
||||||
|
|
||||||
_client->setConnectionParams(BLEMIDI_CLIENT_COMM_MIN_INTERVAL, BLEMIDI_CLIENT_COMM_MAX_INTERVAL, BLEMIDI_CLIENT_COMM_LATENCY, BLEMIDI_CLIENT_COMM_TIMEOUT);
|
_client->setConnectionParams(BLEMIDI_CLIENT_COMM_MIN_INTERVAL, BLEMIDI_CLIENT_COMM_MAX_INTERVAL, BLEMIDI_CLIENT_COMM_LATENCY, BLEMIDI_CLIENT_COMM_TIMEOUT);
|
||||||
|
|
||||||
|
|
@ -622,7 +622,14 @@ void scanEndedCB(NimBLEScanResults results)
|
||||||
|
|
||||||
END_BLEMIDI_NAMESPACE
|
END_BLEMIDI_NAMESPACE
|
||||||
|
|
||||||
/*! \brief Create an instance for ESP32 named <DeviceName>, and adviertise it like "Prefix + <DeviceName> + Subfix"
|
/*! \brief Create a custom instance for ESP32 named <DeviceName>, and advertise it like "Prefix + <DeviceName> + Subfix"
|
||||||
|
It will try to connect to a specific server with equal name or addr than <DeviceName>. If <DeviceName> is "", it will connect to first midi server
|
||||||
|
*/
|
||||||
|
#define BLEMIDI_CREATE_CUSTOM_INSTANCE(DeviceName, Name, _Settings) \
|
||||||
|
BLEMIDI_NAMESPACE::BLEMIDI_Transport<BLEMIDI_NAMESPACE::BLEMIDI_Client_ESP32<_Settings>, _Settings> BLE##Name(DeviceName); \
|
||||||
|
MIDI_NAMESPACE::MidiInterface<BLEMIDI_NAMESPACE::BLEMIDI_Transport<BLEMIDI_NAMESPACE::BLEMIDI_Client_ESP32<_Settings>, _Settings>, BLEMIDI_NAMESPACE::MySettings> Name((BLEMIDI_NAMESPACE::BLEMIDI_Transport<BLEMIDI_NAMESPACE::BLEMIDI_Client_ESP32<_Settings>, _Settings> &)BLE##Name);
|
||||||
|
|
||||||
|
/*! \brief Create an instance for ESP32 named <DeviceName>, and advertise it like "Prefix + <DeviceName> + Subfix"
|
||||||
It will try to connect to a specific server with equal name or addr than <DeviceName>. If <DeviceName> is "", it will connect to first midi server
|
It will try to connect to a specific server with equal name or addr than <DeviceName>. If <DeviceName> is "", it will connect to first midi server
|
||||||
*/
|
*/
|
||||||
#define BLEMIDI_CREATE_INSTANCE(DeviceName, Name) \
|
#define BLEMIDI_CREATE_INSTANCE(DeviceName, Name) \
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue