Skip to content

Commit d78bd24

Browse files
authored
Merge pull request #5 from facchinm/pointer_spi
Turn spi_port into a pointer to an SPI object
2 parents 225d2c3 + 1117196 commit d78bd24

File tree

2 files changed

+107
-103
lines changed

2 files changed

+107
-103
lines changed

src/SigFox.cpp

Lines changed: 106 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ void SIGFOXClass::noDebug() {
7070
int SIGFOXClass::begin()
7171
{
7272
#ifdef SIGFOX_SPI
73-
spi_port = SIGFOX_SPI;
73+
spi_port = &SIGFOX_SPI;
7474
reset_pin = SIGFOX_RES_PIN;
7575
poweron_pin = SIGFOX_PWRON_PIN;
7676
interrupt_pin = SIGFOX_EVENT_PIN;
@@ -95,9 +95,9 @@ int SIGFOXClass::begin()
9595
digitalWrite(reset_pin, LOW);
9696
delay(10);
9797
digitalWrite(reset_pin, HIGH);
98-
spi_port.begin();
99-
spi_port.setDataMode(SPI_MODE0);
100-
spi_port.setBitOrder(MSBFIRST);
98+
spi_port->begin();
99+
spi_port->setDataMode(SPI_MODE0);
100+
spi_port->setBitOrder(MSBFIRST);
101101

102102
delay(100);
103103

@@ -109,7 +109,7 @@ int SIGFOXClass::begin()
109109

110110
int SIGFOXClass::begin(SPIClass& spi, int reset, int poweron, int interrupt, int chip_select, int led)
111111
{
112-
spi_port = spi;
112+
spi_port = &spi;
113113
reset_pin = reset;
114114
poweron_pin = poweron;
115115
interrupt_pin = interrupt;
@@ -132,14 +132,14 @@ int SIGFOXClass::send(unsigned char mess[], int len, bool rx)
132132

133133
digitalWrite(chip_select_pin, LOW);
134134
delay(1);
135-
spi_port.beginTransaction(SPICONFIG);
135+
spi_port->beginTransaction(SPICONFIG);
136136
if (len > 12) len = 12;
137137
int i = 0;
138138

139-
spi_port.transfer(0x07);
140-
spi_port.transfer(len);
141-
spi_port.transfer(mess, len);
142-
spi_port.endTransaction();
139+
spi_port->transfer(0x07);
140+
spi_port->transfer(len);
141+
spi_port->transfer(mess, len);
142+
spi_port->endTransaction();
143143
delay(1);
144144
digitalWrite(chip_select_pin, HIGH);
145145

@@ -149,13 +149,13 @@ int SIGFOXClass::send(unsigned char mess[], int len, bool rx)
149149

150150
digitalWrite(chip_select_pin, LOW);
151151
delay(1);
152-
spi_port.beginTransaction(SPICONFIG);
152+
spi_port->beginTransaction(SPICONFIG);
153153
if (rx) {
154-
spi_port.transfer(0x0E);
154+
spi_port->transfer(0x0E);
155155
} else {
156-
spi_port.transfer(0x0D);
156+
spi_port->transfer(0x0D);
157157
}
158-
spi_port.endTransaction();
158+
spi_port->endTransaction();
159159
delay(1);
160160
digitalWrite(chip_select_pin, HIGH);
161161
int ret = 99;
@@ -166,8 +166,10 @@ int SIGFOXClass::send(unsigned char mess[], int len, bool rx)
166166
}
167167

168168
if (!debugging) {
169+
#ifdef SIGFOX_SPI
169170
LowPower.attachInterruptWakeup(interrupt_pin, NULL, FALLING);
170171
LowPower.sleep(timeout);
172+
#endif
171173
if (digitalRead(interrupt_pin) == 0) {
172174
status();
173175
ret = statusCode(SIGFOX);
@@ -196,11 +198,11 @@ int SIGFOXClass::send(unsigned char mess[], int len, bool rx)
196198
if (sig == 0 && rx) {
197199
digitalWrite(chip_select_pin, LOW);
198200
delay(1);
199-
spi_port.beginTransaction(SPICONFIG);
200-
spi_port.transfer(0x10);
201-
spi_port.transfer(MAX_RX_BUF_LEN);
202-
spi_port.transfer(rx_buffer, MAX_RX_BUF_LEN);
203-
spi_port.endTransaction();
201+
spi_port->beginTransaction(SPICONFIG);
202+
spi_port->transfer(0x10);
203+
spi_port->transfer(MAX_RX_BUF_LEN);
204+
spi_port->transfer(rx_buffer, MAX_RX_BUF_LEN);
205+
spi_port->endTransaction();
204206
delay(1);
205207
digitalWrite(chip_select_pin, HIGH);
206208

@@ -217,19 +219,21 @@ int SIGFOXClass::sendBit(bool value){
217219

218220
digitalWrite(chip_select_pin, LOW);
219221
delay(1);
220-
spi_port.beginTransaction(SPICONFIG);
222+
spi_port->beginTransaction(SPICONFIG);
221223

222-
spi_port.transfer(0x0B);
223-
spi_port.transfer(value ? 1 : 0);
224-
spi_port.endTransaction();
224+
spi_port->transfer(0x0B);
225+
spi_port->transfer(value ? 1 : 0);
226+
spi_port->endTransaction();
225227
delay(1);
226228
digitalWrite(chip_select_pin, HIGH);
227229

228230
int timeout = 7000; //7 seconds
229231

230232
if (!debugging) {
233+
#ifdef SIGFOX_SPI
231234
LowPower.attachInterruptWakeup(interrupt_pin, NULL, FALLING);
232235
LowPower.sleep(timeout);
236+
#endif
233237
if (digitalRead(interrupt_pin) == 0) {
234238
status();
235239
return statusCode(SIGFOX);
@@ -309,9 +313,9 @@ int SIGFOXClass::parsePacket() {
309313

310314
int SIGFOXClass::calibrateCrystal() {
311315
digitalWrite(chip_select_pin, LOW);
312-
spi_port.beginTransaction(SPICONFIG);
313-
spi_port.transfer(0x14);
314-
spi_port.endTransaction();
316+
spi_port->beginTransaction(SPICONFIG);
317+
spi_port->transfer(0x14);
318+
spi_port->endTransaction();
315319
delay(1);
316320
digitalWrite(chip_select_pin, HIGH);
317321
delay(1);
@@ -403,14 +407,14 @@ char* SIGFOXClass::getStatusSig()
403407
void SIGFOXClass::status()
404408
{
405409
digitalWrite(chip_select_pin, LOW);
406-
spi_port.beginTransaction(SPICONFIG);
407-
spi_port.transfer(0x0A);
408-
spi_port.transfer(0);
409-
ssm = spi_port.transfer(0);
410-
atm = spi_port.transfer(0);
411-
sig = spi_port.transfer(0);
412-
sig2 = spi_port.transfer(0);
413-
spi_port.endTransaction();
410+
spi_port->beginTransaction(SPICONFIG);
411+
spi_port->transfer(0x0A);
412+
spi_port->transfer(0);
413+
ssm = spi_port->transfer(0);
414+
atm = spi_port->transfer(0);
415+
sig = spi_port->transfer(0);
416+
sig2 = spi_port->transfer(0);
417+
spi_port->endTransaction();
414418
digitalWrite(chip_select_pin, HIGH);
415419
delay(1);
416420
}
@@ -419,9 +423,9 @@ float SIGFOXClass::internalTemperature()
419423
{
420424
digitalWrite(chip_select_pin, LOW);
421425
delay(1);
422-
spi_port.beginTransaction(SPICONFIG);
423-
spi_port.transfer(0x14);
424-
spi_port.endTransaction();
426+
spi_port->beginTransaction(SPICONFIG);
427+
spi_port->transfer(0x14);
428+
spi_port->endTransaction();
425429
delay(1);
426430
digitalWrite(chip_select_pin, HIGH);
427431
delay(1);
@@ -439,17 +443,17 @@ float SIGFOXClass::internalTemperature()
439443

440444
digitalWrite(chip_select_pin, LOW);
441445
delay(1);
442-
spi_port.beginTransaction(SPICONFIG);
443-
spi_port.transfer(0x13);
444-
spi_port.transfer(0);
445-
vlidle = spi_port.transfer(0);
446-
vhidle = spi_port.transfer(0);
447-
vlactive = spi_port.transfer(0);
448-
vhactive = spi_port.transfer(0);
449-
temperatureL = spi_port.transfer(0);
450-
temperatureH = spi_port.transfer(0);
446+
spi_port->beginTransaction(SPICONFIG);
447+
spi_port->transfer(0x13);
448+
spi_port->transfer(0);
449+
vlidle = spi_port->transfer(0);
450+
vhidle = spi_port->transfer(0);
451+
vlactive = spi_port->transfer(0);
452+
vhactive = spi_port->transfer(0);
453+
temperatureL = spi_port->transfer(0);
454+
temperatureH = spi_port->transfer(0);
451455
delay(1);
452-
spi_port.endTransaction();
456+
spi_port->endTransaction();
453457
digitalWrite(chip_select_pin, HIGH);
454458
delay(1);
455459

@@ -461,17 +465,17 @@ char* SIGFOXClass::readConfig(int* len)
461465

462466
digitalWrite(chip_select_pin, LOW);
463467
delay(1);
464-
spi_port.beginTransaction(SPICONFIG);
465-
spi_port.transfer(0x1F);
466-
spi_port.endTransaction();
468+
spi_port->beginTransaction(SPICONFIG);
469+
spi_port->transfer(0x1F);
470+
spi_port->endTransaction();
467471
digitalWrite(chip_select_pin, HIGH);
468472

469473
delay(5);
470474

471475
digitalWrite(chip_select_pin, LOW);
472-
spi_port.beginTransaction(SPICONFIG);
473-
spi_port.transfer(0x20);
474-
spi_port.transfer(0);
476+
spi_port->beginTransaction(SPICONFIG);
477+
spi_port->transfer(0x20);
478+
spi_port->transfer(0);
475479
tx_freq = SPI.transfer(0) | tx_freq << 8;
476480
tx_freq = SPI.transfer(0) | tx_freq << 8;
477481
tx_freq = SPI.transfer(0) | tx_freq << 8;
@@ -480,9 +484,9 @@ char* SIGFOXClass::readConfig(int* len)
480484
rx_freq = SPI.transfer(0) | rx_freq << 8;
481485
rx_freq = SPI.transfer(0) | rx_freq << 8;
482486
rx_freq = SPI.transfer(0) | rx_freq << 8;
483-
repeat = spi_port.transfer(0);
484-
configuration = spi_port.transfer(0);
485-
spi_port.endTransaction();
487+
repeat = spi_port->transfer(0);
488+
configuration = spi_port->transfer(0);
489+
spi_port->endTransaction();
486490
delay(1);
487491
digitalWrite(chip_select_pin, HIGH);
488492
delay(1);
@@ -499,12 +503,12 @@ char* SIGFOXClass::readConfig(int* len)
499503
String SIGFOXClass::AtmVersion()
500504
{
501505
digitalWrite(chip_select_pin, LOW);
502-
spi_port.beginTransaction(SPICONFIG);
503-
spi_port.transfer(0x06);
504-
spi_port.transfer(0);
505-
byte mv = spi_port.transfer(0);
506-
byte lv = spi_port.transfer(0);
507-
spi_port.endTransaction();
506+
spi_port->beginTransaction(SPICONFIG);
507+
spi_port->transfer(0x06);
508+
spi_port->transfer(0);
509+
byte mv = spi_port->transfer(0);
510+
byte lv = spi_port->transfer(0);
511+
spi_port->endTransaction();
508512
digitalWrite(chip_select_pin, HIGH);
509513
delay(1);
510514
snprintf(buffer, BLEN, "%d.%d", mv, lv);
@@ -514,12 +518,12 @@ String SIGFOXClass::AtmVersion()
514518
String SIGFOXClass::SigVersion()
515519
{
516520
digitalWrite(chip_select_pin, LOW);
517-
spi_port.beginTransaction(SPICONFIG);
518-
spi_port.transfer(0x06);
519-
spi_port.transfer(0);
520-
byte mv = spi_port.transfer(0);
521-
byte lv = spi_port.transfer(0);
522-
spi_port.endTransaction();
521+
spi_port->beginTransaction(SPICONFIG);
522+
spi_port->transfer(0x06);
523+
spi_port->transfer(0);
524+
byte mv = spi_port->transfer(0);
525+
byte lv = spi_port->transfer(0);
526+
spi_port->endTransaction();
523527
digitalWrite(chip_select_pin, HIGH);
524528
delay(1);
525529
snprintf(buffer, BLEN, "%d.%d", mv, lv);
@@ -529,14 +533,14 @@ String SIGFOXClass::SigVersion()
529533
String SIGFOXClass::ID()
530534
{
531535
digitalWrite(chip_select_pin, LOW);
532-
spi_port.beginTransaction(SPICONFIG);
533-
spi_port.transfer(0x12);
534-
spi_port.transfer(0);
535-
byte ID3 = spi_port.transfer(0);
536-
byte ID2 = spi_port.transfer(0);
537-
byte ID1 = spi_port.transfer(0);
538-
byte ID0 = spi_port.transfer(0);
539-
spi_port.endTransaction();
536+
spi_port->beginTransaction(SPICONFIG);
537+
spi_port->transfer(0x12);
538+
spi_port->transfer(0);
539+
byte ID3 = spi_port->transfer(0);
540+
byte ID2 = spi_port->transfer(0);
541+
byte ID1 = spi_port->transfer(0);
542+
byte ID0 = spi_port->transfer(0);
543+
spi_port->endTransaction();
540544
digitalWrite(chip_select_pin, HIGH);
541545
delay(1);
542546
snprintf(buffer, BLEN, "%02X%02X%02X%02X", ID0, ID1, ID2, ID3);
@@ -547,13 +551,13 @@ String SIGFOXClass::PAC()
547551
{
548552
uint8_t pac[16];
549553
digitalWrite(chip_select_pin, LOW);
550-
spi_port.beginTransaction(SPICONFIG);
551-
spi_port.transfer(0x0F);
552-
spi_port.transfer(0);
554+
spi_port->beginTransaction(SPICONFIG);
555+
spi_port->transfer(0x0F);
556+
spi_port->transfer(0);
553557
for (int i = 0; i < 16; i++) {
554-
pac[i] = spi_port.transfer(0);
558+
pac[i] = spi_port->transfer(0);
555559
}
556-
spi_port.endTransaction();
560+
spi_port->endTransaction();
557561
digitalWrite(chip_select_pin, HIGH);
558562
delay(1);
559563
for (int i = 0; i < 8; i++) {
@@ -565,39 +569,39 @@ String SIGFOXClass::PAC()
565569
void SIGFOXClass::reset()
566570
{
567571
digitalWrite(chip_select_pin, LOW);
568-
spi_port.beginTransaction(SPICONFIG);
569-
spi_port.transfer(0x01);
570-
spi_port.endTransaction();
572+
spi_port->beginTransaction(SPICONFIG);
573+
spi_port->transfer(0x01);
574+
spi_port->endTransaction();
571575
digitalWrite(chip_select_pin, HIGH);
572576
delay(1);
573577
}
574578

575579
void SIGFOXClass::testMode(bool on)
576580
{
577581
digitalWrite(chip_select_pin, LOW);
578-
spi_port.beginTransaction(SPICONFIG);
579-
spi_port.transfer(0x17);
582+
spi_port->beginTransaction(SPICONFIG);
583+
spi_port->transfer(0x17);
580584
if (on) {
581-
spi_port.transfer(0x11);
585+
spi_port->transfer(0x11);
582586
} else {
583-
spi_port.transfer(0x00);
587+
spi_port->transfer(0x00);
584588
}
585-
spi_port.endTransaction();
589+
spi_port->endTransaction();
586590
digitalWrite(chip_select_pin, HIGH);
587591
delay(1);
588592
}
589593

590594
void SIGFOXClass::setMode(Country EUMode, TxRxMode tx_rx)
591595
{
592596
digitalWrite(chip_select_pin, LOW);
593-
spi_port.beginTransaction(SPICONFIG);
594-
spi_port.transfer(0x11);
595-
spi_port.transfer(0);
596-
spi_port.transfer(1);
597-
spi_port.transfer(0x2);
597+
spi_port->beginTransaction(SPICONFIG);
598+
spi_port->transfer(0x11);
599+
spi_port->transfer(0);
600+
spi_port->transfer(1);
601+
spi_port->transfer(0x2);
598602
uint8_t mode = (0x3 << 4) | (1 << 3) | (EUMode << 2) | (tx_rx << 1) | 1;
599-
spi_port.transfer(mode);
600-
spi_port.endTransaction();
603+
spi_port->transfer(mode);
604+
spi_port->endTransaction();
601605
digitalWrite(chip_select_pin, HIGH);
602606
delay(1);
603607

@@ -616,9 +620,9 @@ void SIGFOXClass::setMode(Country EUMode, TxRxMode tx_rx)
616620
}
617621

618622
digitalWrite(chip_select_pin, LOW);
619-
spi_port.beginTransaction(SPICONFIG);
620-
spi_port.transfer(0x05);
621-
spi_port.endTransaction();
623+
spi_port->beginTransaction(SPICONFIG);
624+
spi_port->transfer(0x05);
625+
spi_port->endTransaction();
622626
digitalWrite(chip_select_pin, HIGH);
623627
delay(100);
624628
}
@@ -629,9 +633,9 @@ void SIGFOXClass::end()
629633
delay(1);
630634
digitalWrite(chip_select_pin, LOW);
631635
delay(1);
632-
spi_port.beginTransaction(SPICONFIG);
633-
spi_port.transfer(0x05);
634-
spi_port.endTransaction();
636+
spi_port->beginTransaction(SPICONFIG);
637+
spi_port->transfer(0x05);
638+
spi_port->endTransaction();
635639
delay(1);
636640
digitalWrite(chip_select_pin, HIGH);
637641
delay(1);

0 commit comments

Comments
 (0)