aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorRyan <fauxpark@gmail.com>2021-10-09 02:15:20 +1100
committerGitHub <noreply@github.com>2021-10-08 16:15:20 +0100
commitdb41a3426c594fccac149b99b810e207cd069d65 (patch)
tree56237380cb3b3b83a4f9802d975a570843984f79 /drivers
parent00fd4044334022b5bbace987f8ab94b72e9f49bc (diff)
downloadqmk_firmware-db41a3426c594fccac149b99b810e207cd069d65.tar.gz
qmk_firmware-db41a3426c594fccac149b99b810e207cd069d65.zip
Improve Adafruit BLE configuration defines (#14749)
* Improve Adafruit BLE configuration defines * Formatting
Diffstat (limited to 'drivers')
-rw-r--r--drivers/bluetooth/adafruit_ble.cpp44
1 files changed, 21 insertions, 23 deletions
diff --git a/drivers/bluetooth/adafruit_ble.cpp b/drivers/bluetooth/adafruit_ble.cpp
index 3f2cc3573..34a780e9a 100644
--- a/drivers/bluetooth/adafruit_ble.cpp
+++ b/drivers/bluetooth/adafruit_ble.cpp
@@ -16,24 +16,22 @@
16// These are the pin assignments for the 32u4 boards. 16// These are the pin assignments for the 32u4 boards.
17// You may define them to something else in your config.h 17// You may define them to something else in your config.h
18// if yours is wired up differently. 18// if yours is wired up differently.
19#ifndef AdafruitBleResetPin 19#ifndef ADAFRUIT_BLE_RST_PIN
20# define AdafruitBleResetPin D4 20# define ADAFRUIT_BLE_RST_PIN D4
21#endif 21#endif
22 22
23#ifndef AdafruitBleCSPin 23#ifndef ADAFRUIT_BLE_CS_PIN
24# define AdafruitBleCSPin B4 24# define ADAFRUIT_BLE_CS_PIN B4
25#endif 25#endif
26 26
27#ifndef AdafruitBleIRQPin 27#ifndef ADAFRUIT_BLE_IRQ_PIN
28# define AdafruitBleIRQPin E6 28# define ADAFRUIT_BLE_IRQ_PIN E6
29#endif 29#endif
30 30
31#ifndef AdafruitBleSpiClockSpeed 31#ifndef ADAFRUIT_BLE_SCK_DIVISOR
32# define AdafruitBleSpiClockSpeed 4000000UL // SCK frequency 32# define ADAFRUIT_BLE_SCK_DIVISOR 2 // 4MHz SCK/8MHz CPU, calculated for Feather 32U4 BLE
33#endif 33#endif
34 34
35#define SCK_DIVISOR (F_CPU / AdafruitBleSpiClockSpeed)
36
37#define SAMPLE_BATTERY 35#define SAMPLE_BATTERY
38#define ConnectionUpdateInterval 1000 /* milliseconds */ 36#define ConnectionUpdateInterval 1000 /* milliseconds */
39 37
@@ -145,7 +143,7 @@ static bool at_command_P(const char *cmd, char *resp, uint16_t resplen, bool ver
145 143
146// Send a single SDEP packet 144// Send a single SDEP packet
147static bool sdep_send_pkt(const struct sdep_msg *msg, uint16_t timeout) { 145static bool sdep_send_pkt(const struct sdep_msg *msg, uint16_t timeout) {
148 spi_start(AdafruitBleCSPin, false, 0, SCK_DIVISOR); 146 spi_start(ADAFRUIT_BLE_CS_PIN, false, 0, ADAFRUIT_BLE_SCK_DIVISOR);
149 uint16_t timerStart = timer_read(); 147 uint16_t timerStart = timer_read();
150 bool success = false; 148 bool success = false;
151 bool ready = false; 149 bool ready = false;
@@ -159,7 +157,7 @@ static bool sdep_send_pkt(const struct sdep_msg *msg, uint16_t timeout) {
159 // Release it and let it initialize 157 // Release it and let it initialize
160 spi_stop(); 158 spi_stop();
161 wait_us(SdepBackOff); 159 wait_us(SdepBackOff);
162 spi_start(AdafruitBleCSPin, false, 0, SCK_DIVISOR); 160 spi_start(ADAFRUIT_BLE_CS_PIN, false, 0, ADAFRUIT_BLE_SCK_DIVISOR);
163 } while (timer_elapsed(timerStart) < timeout); 161 } while (timer_elapsed(timerStart) < timeout);
164 162
165 if (ready) { 163 if (ready) {
@@ -192,7 +190,7 @@ static bool sdep_recv_pkt(struct sdep_msg *msg, uint16_t timeout) {
192 bool ready = false; 190 bool ready = false;
193 191
194 do { 192 do {
195 ready = readPin(AdafruitBleIRQPin); 193 ready = readPin(ADAFRUIT_BLE_IRQ_PIN);
196 if (ready) { 194 if (ready) {
197 break; 195 break;
198 } 196 }
@@ -200,7 +198,7 @@ static bool sdep_recv_pkt(struct sdep_msg *msg, uint16_t timeout) {
200 } while (timer_elapsed(timerStart) < timeout); 198 } while (timer_elapsed(timerStart) < timeout);
201 199
202 if (ready) { 200 if (ready) {
203 spi_start(AdafruitBleCSPin, false, 0, SCK_DIVISOR); 201 spi_start(ADAFRUIT_BLE_CS_PIN, false, 0, ADAFRUIT_BLE_SCK_DIVISOR);
204 202
205 do { 203 do {
206 // Read the command type, waiting for the data to be ready 204 // Read the command type, waiting for the data to be ready
@@ -209,7 +207,7 @@ static bool sdep_recv_pkt(struct sdep_msg *msg, uint16_t timeout) {
209 // Release it and let it initialize 207 // Release it and let it initialize
210 spi_stop(); 208 spi_stop();
211 wait_us(SdepBackOff); 209 wait_us(SdepBackOff);
212 spi_start(AdafruitBleCSPin, false, 0, SCK_DIVISOR); 210 spi_start(ADAFRUIT_BLE_CS_PIN, false, 0, ADAFRUIT_BLE_SCK_DIVISOR);
213 continue; 211 continue;
214 } 212 }
215 213
@@ -235,7 +233,7 @@ static void resp_buf_read_one(bool greedy) {
235 return; 233 return;
236 } 234 }
237 235
238 if (readPin(AdafruitBleIRQPin)) { 236 if (readPin(ADAFRUIT_BLE_IRQ_PIN)) {
239 struct sdep_msg msg; 237 struct sdep_msg msg;
240 238
241 again: 239 again:
@@ -246,7 +244,7 @@ static void resp_buf_read_one(bool greedy) {
246 dprintf("recv latency %dms\n", TIMER_DIFF_16(timer_read(), last_send)); 244 dprintf("recv latency %dms\n", TIMER_DIFF_16(timer_read(), last_send));
247 } 245 }
248 246
249 if (greedy && resp_buf.peek(last_send) && readPin(AdafruitBleIRQPin)) { 247 if (greedy && resp_buf.peek(last_send) && readPin(ADAFRUIT_BLE_IRQ_PIN)) {
250 goto again; 248 goto again;
251 } 249 }
252 } 250 }
@@ -297,16 +295,16 @@ static bool ble_init(void) {
297 state.configured = false; 295 state.configured = false;
298 state.is_connected = false; 296 state.is_connected = false;
299 297
300 setPinInput(AdafruitBleIRQPin); 298 setPinInput(ADAFRUIT_BLE_IRQ_PIN);
301 299
302 spi_init(); 300 spi_init();
303 301
304 // Perform a hardware reset 302 // Perform a hardware reset
305 setPinOutput(AdafruitBleResetPin); 303 setPinOutput(ADAFRUIT_BLE_RST_PIN);
306 writePinHigh(AdafruitBleResetPin); 304 writePinHigh(ADAFRUIT_BLE_RST_PIN);
307 writePinLow(AdafruitBleResetPin); 305 writePinLow(ADAFRUIT_BLE_RST_PIN);
308 wait_ms(10); 306 wait_ms(10);
309 writePinHigh(AdafruitBleResetPin); 307 writePinHigh(ADAFRUIT_BLE_RST_PIN);
310 308
311 wait_ms(1000); // Give it a second to initialize 309 wait_ms(1000); // Give it a second to initialize
312 310
@@ -509,7 +507,7 @@ void adafruit_ble_task(void) {
509 resp_buf_read_one(true); 507 resp_buf_read_one(true);
510 send_buf_send_one(SdepShortTimeout); 508 send_buf_send_one(SdepShortTimeout);
511 509
512 if (resp_buf.empty() && (state.event_flags & UsingEvents) && readPin(AdafruitBleIRQPin)) { 510 if (resp_buf.empty() && (state.event_flags & UsingEvents) && readPin(ADAFRUIT_BLE_IRQ_PIN)) {
513 // Must be an event update 511 // Must be an event update
514 if (at_command_P(PSTR("AT+EVENTSTATUS"), resbuf, sizeof(resbuf))) { 512 if (at_command_P(PSTR("AT+EVENTSTATUS"), resbuf, sizeof(resbuf))) {
515 uint32_t mask = strtoul(resbuf, NULL, 16); 513 uint32_t mask = strtoul(resbuf, NULL, 16);