ESP_IOT v2.5
IOT ESP Coding
BLEClientNetworking.cpp File Reference
#include "BLEClientNetworking.h"
#include <NimBLEDevice.h>
#include "../../Defines.h"
Include dependency graph for BLEClientNetworking.cpp:

Go to the source code of this file.

Classes

class  ClientCallbacks
 
class  AdvertisedDeviceCallbacks
 

Macros

#define NEW_WAY
 

Functions

void scanEndedCB_BLEClient (NimBLEScanResults results)
 NOTE: this is called all the time... 4.22.22 –even if the "scan-stop" invoked. More...
 
boolean useBLEClient ()
 returns if the BLEClient is turned on.. note, if connected to a BLE device, then disconnect More...
 
void skipNameOrAddress_BLEClientNetworking (char *nameOrAddress)
 an address or name to skip (for at least 1 time) More...
 
void stopSkip_BLEClientNetworking ()
 stops the skip after found something.. More...
 
boolean containsSkipAddress (String deviceInfo)
 helper for skip, checking if an actuall address in the skip name or address More...
 
void notifyCB (NimBLERemoteCharacteristic *pRemoteCharacteristic, uint8_t *pData, size_t length, bool isNotify)
 
bool connectToServer_BLEClient ()
 
boolean isConnectedBLEClient ()
 returns whether connected over BLE as a client to a server(like a ESP feeder) More...
 
void sendFeedCommandBLEClient ()
 sends the "feed" command over bluetooth to the connected device.. More...
 
void sendCommandBLEClient_13orLess (String cmdString)
 send a string of 13 characters or less More...
 
void sendCommandBLEClient (String cmdString)
 
void setup_BLEClientNetworking (char *serviceName, char *serviceUUID, char *characteristicUUID)
 the setup() and loop() passing the serviceName to look for.. More...
 
void disconnect_BLEClientNetworking ()
 try to disconnect.. More...
 
void loop_BLEClientNetworking ()
 the loop() More...
 

Variables

NimBLEClient * _pClient = nullptr
 
int _skipAddressCount = 0
 skip logic More...
 
int _maxSkipAddressCount = 4
 
char _skipNameOrAddress_BLEClientNetworking [50]
 address to skip (for a number of times) .. how about 1 for now.. More...
 

Macro Definition Documentation

◆ NEW_WAY

#define NEW_WAY

Function Documentation

◆ connectToServer_BLEClient()

bool connectToServer_BLEClient ( )

Handles the provisioning of clients and connects / interfaces with the server

Check if we have a client we should reuse first

Special case when we already know this device, we send false as the second argument in connect() to prevent refreshing the service database. This saves considerable time and power.

We don't already have a client that knows this device, we will check for a client that is disconnected that we can use.

No client to reuse? Create a new one.

Set initial connection parameters: These settings are 15ms interval, 0 latency, 120ms timout. These settings are safe for 3 clients to connect reliably, can go faster if you have less connections. Timeout should be a multiple of the interval, minimum is 100ms. Min interval: 12 * 1.25ms = 15, Max interval: 12 * 1.25ms = 15, 0 latency, 51 * 10ms = 510ms timeout

[in] minInterval The minimum connection interval in 1.25ms units. [in] maxInterval The maximum connection interval in 1.25ms units. [in] latency The number of packets allowed to skip (extends max interval). [in] timeout The timeout time in 10ms units before disconnecting. [in] scanInterval The scan interval to use when attempting to connect in 0.625ms units. [in] scanWindow The scan window to use when attempting to connect in 0.625ms units.

Set how long we are willing to wait for the connection to complete (seconds), default is 30.

Created a client but failed to connect, don't need to keep it as it has no data

Now we can read/write/subscribe the charateristics of the services we are interested in

Try to get our new service == DEAD (for now.. this is not in the GEN3)

THIS IS A new ESP32 feeder

called to set a preference (which will be an identifier and a string, which can be converted to a number or boolean)

THIS IS A new ESP32 feeder

called to set a preference (which will be an identifier and a string, which can be converted to a number or boolean)

make sure it's not null

make sure it's not null

registerForNotify() has been deprecated and replaced with subscribe() / unsubscribe(). Subscribe parameter defaults are: notifications=true, notifyCallback=nullptr, response=false. Unsubscribe parameter defaults are: response=false.

Disconnect if subscribe failed

Send false as first argument to subscribe to indications instead of notifications

Disconnect if subscribe failed

make sure it's not null

make sure it's not null

Disconnect if write failed

registerForNotify() has been deprecated and replaced with subscribe() / unsubscribe(). Subscribe parameter defaults are: notifications=true, notifyCallback=nullptr, response=false. Unsubscribe parameter defaults are: response=false.

Disconnect if subscribe failed

Send false as first argument to subscribe to indications instead of notifications

Disconnect if subscribe failed

Definition at line 399 of file BLEClientNetworking.cpp.

◆ containsSkipAddress()

boolean containsSkipAddress ( String  deviceInfo)

helper for skip, checking if an actuall address in the skip name or address

Definition at line 71 of file BLEClientNetworking.cpp.

Here is the call graph for this function:

◆ disconnect_BLEClientNetworking()

void disconnect_BLEClientNetworking ( )

try to disconnect..

force saying it's disconnected

Definition at line 1007 of file BLEClientNetworking.cpp.

Here is the caller graph for this function:

◆ isConnectedBLEClient()

boolean isConnectedBLEClient ( )

returns whether connected over BLE as a client to a server(like a ESP feeder)

Definition at line 738 of file BLEClientNetworking.cpp.

Here is the caller graph for this function:

◆ loop_BLEClientNetworking()

void loop_BLEClientNetworking ( )

the loop()

a specialy display for now.. 1 = C connected BLE

try 4.22.22

note: https://github.com/espressif/esp-idf/issues/5105 Might address the error I see:

Definition at line 1025 of file BLEClientNetworking.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ notifyCB()

void notifyCB ( NimBLERemoteCharacteristic *  pRemoteCharacteristic,
uint8_t *  pData,
size_t  length,
bool  isNotify 
)

Notification / Indication receiving handler callback

Definition at line 376 of file BLEClientNetworking.cpp.

◆ scanEndedCB_BLEClient()

void scanEndedCB_BLEClient ( NimBLEScanResults  results)

NOTE: this is called all the time... 4.22.22 –even if the "scan-stop" invoked.

Callback to process the results of the last scan or restart it

Definition at line 391 of file BLEClientNetworking.cpp.

Here is the caller graph for this function:

◆ sendCommandBLEClient()

void sendCommandBLEClient ( String  cmdString)

FOR NOW THIS IS HERE.. but it should be more generic. eg: sendBluetoothCommand() .. send the feed command NOTE: if we are a gateway (gen3) then this won't work, as it's not talking back..

if GEN3 then this handshaking will not work.. so just send the cmd, if longer than 1 character, it hangs .. so don't send

Definition at line 829 of file BLEClientNetworking.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sendCommandBLEClient_13orLess()

void sendCommandBLEClient_13orLess ( String  cmdString)

send a string of 13 characters or less

send a string of 13 or less characters.

FOR NOW THIS IS HERE.. but it should be more generic. eg: sendBluetoothCommand() .. send the feed command

if (FeedFlag == true) flag is set in button_task Set the characteristic's value to be the array of bytes that is actually a string. this sets a value to the GATT which is the trigger value for the BLE server feeder

delay

check for the acknowledge from the server which is 0x01

Definition at line 877 of file BLEClientNetworking.cpp.

Here is the caller graph for this function:

◆ sendFeedCommandBLEClient()

void sendFeedCommandBLEClient ( )

sends the "feed" command over bluetooth to the connected device..

FOR NOW THIS IS HERE.. but it should be more generic. eg: sendBluetoothCommand() .. send the feed command

Definition at line 751 of file BLEClientNetworking.cpp.

Here is the caller graph for this function:

◆ setup_BLEClientNetworking()

void setup_BLEClientNetworking ( char *  serviceName,
char *  serviceUUID,
char *  characteristicUUID 
)

the setup() and loop() passing the serviceName to look for..

the 'setup' for this module BLEClientNetworking. Here the service name is added (and potentially more later)

address to skip (for a number of times) .. how about 1 for now..

start the bluetooth discovery..

Initialize NimBLE, no device name spcified as we are not advertising

Set the IO capabilities of the device, each option will trigger a different pairing method. BLE_HS_IO_KEYBOARD_ONLY - Passkey pairing BLE_HS_IO_DISPLAY_YESNO - Numeric comparison pairing BLE_HS_IO_NO_INPUT_OUTPUT - DEFAULT setting - just works pairing

2 different ways to set security - both calls achieve the same result. no bonding, no man in the middle protection, secure connections.

These are the default values, only shown here for demonstration.

Optional: set the transmit power, default is 3db

+9db

Optional: set any devices you don't want to get advertisments from

create new scan

create a callback that gets called when advertisers are found

Set scan interval (how often) and window (how long) in milliseconds

Active scan will gather scan response data from advertisers but will use more energy from both devices

Start scanning for advertisers for the scan time specified (in seconds) 0 = forever Optional callback for when scanning stops.

Definition at line 940 of file BLEClientNetworking.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ skipNameOrAddress_BLEClientNetworking()

void skipNameOrAddress_BLEClientNetworking ( char *  nameOrAddress)

an address or name to skip (for at least 1 time)

Definition at line 56 of file BLEClientNetworking.cpp.

Here is the caller graph for this function:

◆ stopSkip_BLEClientNetworking()

void stopSkip_BLEClientNetworking ( )

stops the skip after found something..

Definition at line 65 of file BLEClientNetworking.cpp.

◆ useBLEClient()

boolean useBLEClient ( )

returns if the BLEClient is turned on.. note, if connected to a BLE device, then disconnect

Definition at line 44 of file BLEClientNetworking.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ _maxSkipAddressCount

int _maxSkipAddressCount = 4

Definition at line 52 of file BLEClientNetworking.cpp.

◆ _pClient

NimBLEClient* _pClient = nullptr

Definition at line 41 of file BLEClientNetworking.cpp.

◆ _skipAddressCount

int _skipAddressCount = 0

skip logic

Definition at line 51 of file BLEClientNetworking.cpp.

◆ _skipNameOrAddress_BLEClientNetworking

char _skipNameOrAddress_BLEClientNetworking[50]

address to skip (for a number of times) .. how about 1 for now..

Definition at line 54 of file BLEClientNetworking.cpp.