Skip to content

Commit 9868fbf

Browse files
Merge pull request firmata#422 from cstawarz/ble_advertising_interval
Set Bluefruit LE advertising interval
2 parents 95782e0 + 5f21157 commit 9868fbf

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed

examples/StandardFirmataBLE/StandardFirmataBLE.ino

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -770,6 +770,10 @@ void setup()
770770

771771
stream.setLocalName(FIRMATA_BLE_LOCAL_NAME);
772772

773+
#ifdef FIRMATA_BLE_ADVERTISING_INTERVAL
774+
// set the BLE advertising interval
775+
stream.setAdvertisingInterval(FIRMATA_BLE_ADVERTISING_INTERVAL);
776+
#endif
773777
// set the BLE connection interval - this is the fastest interval you can read inputs
774778
stream.setConnectionInterval(FIRMATA_BLE_MIN_INTERVAL, FIRMATA_BLE_MAX_INTERVAL);
775779
// set how often the BLE TX buffer is flushed (if not full)

examples/StandardFirmataBLE/bleConfig.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@
7474
//#define BLUEFRUIT_LE_SPI
7575

7676
#ifdef BLUEFRUIT_LE_SPI
77+
// Value must be between 20ms and 10.24s
78+
#define FIRMATA_BLE_ADVERTISING_INTERVAL 20 // 20ms
79+
7780
// Both values must be between 10ms and 4s
7881
#define FIRMATA_BLE_MIN_INTERVAL 15 // 15ms
7982
#define FIRMATA_BLE_MAX_INTERVAL 30 // 30ms

utility/BluefruitLE_SPI_Stream.h

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class BluefruitLE_SPI_Stream : public Stream
1717
BluefruitLE_SPI_Stream(int8_t csPin, int8_t irqPin, int8_t rstPin);
1818

1919
void setLocalName(const char *localName);
20+
void setAdvertisingInterval(unsigned short advertisingInterval);
2021
void setConnectionInterval(unsigned short minConnInterval, unsigned short maxConnInterval);
2122
void setFlushInterval(int flushInterval);
2223

@@ -38,6 +39,7 @@ class BluefruitLE_SPI_Stream : public Stream
3839
Adafruit_BluefruitLE_SPI ble;
3940

4041
String localName;
42+
unsigned short advertisingInterval;
4143
unsigned short minConnInterval;
4244
unsigned short maxConnInterval;
4345

@@ -48,6 +50,7 @@ class BluefruitLE_SPI_Stream : public Stream
4850

4951
BluefruitLE_SPI_Stream::BluefruitLE_SPI_Stream(int8_t csPin, int8_t irqPin, int8_t rstPin) :
5052
ble(csPin, irqPin, rstPin),
53+
advertisingInterval(0),
5154
minConnInterval(0),
5255
maxConnInterval(0),
5356
txCount(0)
@@ -58,6 +61,11 @@ void BluefruitLE_SPI_Stream::setLocalName(const char *localName)
5861
this->localName = localName;
5962
}
6063

64+
void BluefruitLE_SPI_Stream::setAdvertisingInterval(unsigned short advertisingInterval)
65+
{
66+
this->advertisingInterval = advertisingInterval;
67+
}
68+
6169
void BluefruitLE_SPI_Stream::setConnectionInterval(unsigned short minConnInterval, unsigned short maxConnInterval)
6270
{
6371
this->minConnInterval = minConnInterval;
@@ -89,14 +97,16 @@ void BluefruitLE_SPI_Stream::begin()
8997
ble.println(localName);
9098
}
9199

92-
// Set connection interval
93-
if (minConnInterval > 0 && maxConnInterval > 0) {
94-
ble.print("AT+GAPINTERVALS=");
95-
ble.print(minConnInterval);
96-
ble.print(",");
97-
ble.print(maxConnInterval);
98-
ble.println(",,,");
99-
}
100+
// Set connection and advertising intervals
101+
ble.print("AT+GAPINTERVALS=");
102+
if (minConnInterval > 0) ble.print(minConnInterval);
103+
ble.print(",");
104+
if (maxConnInterval > 0) ble.print(maxConnInterval);
105+
ble.print(",");
106+
if (advertisingInterval > 0) ble.print(advertisingInterval);
107+
ble.print(",,"); // Always omit fast advertising timeout, hence two commas
108+
if (advertisingInterval > 0) ble.print(advertisingInterval);
109+
ble.println();
100110

101111
// Disable real and simulated mode switch (i.e. "+++") command
102112
ble.println("AT+MODESWITCHEN=local,0");

0 commit comments

Comments
 (0)