@@ -49,18 +49,13 @@ extern "C" {
49
49
#include " utility/debug.h"
50
50
}
51
51
52
- static uint8_t SLAVESELECT = 10 ; // ss
53
- static uint8_t SLAVEREADY = 7 ; // handshake pin
54
- static uint8_t SLAVERESET = 5 ; // reset pin
55
-
56
52
static bool inverted_reset = false ;
53
+ SPIClass *WIFININA_SPIWIFI=&SPI;
54
+ int8_t WIFININA_SLAVESELECT = 10 , WIFININA_SLAVEREADY = 7 ,
55
+ WIFININA_SLAVERESET = 5 , WIFININA_SLAVEGPIO0 = 6 ;
57
56
58
57
#define DELAY_TRANSFER ()
59
58
60
- #ifndef SPIWIFI
61
- #define SPIWIFI SPI
62
- #endif
63
-
64
59
bool SpiDrv::initialized = false ;
65
60
66
61
void SpiDrv::begin ()
@@ -70,41 +65,56 @@ void SpiDrv::begin()
70
65
#endif
71
66
72
67
#ifdef SPIWIFI_SS
73
- SLAVESELECT = SPIWIFI_SS;
68
+ WIFININA_SLAVESELECT = SPIWIFI_SS;
74
69
#endif
75
-
70
+
76
71
#ifdef SPIWIFI_ACK
77
- SLAVEREADY = SPIWIFI_ACK;
72
+ WIFININA_SLAVEREADY = SPIWIFI_ACK;
78
73
#endif
79
-
74
+
80
75
#ifdef SPIWIFI_RESET
81
- SLAVERESET = (uint8_t )SPIWIFI_RESET;
76
+ WIFININA_SLAVERESET = (uint8_t )SPIWIFI_RESET;
77
+ #endif
78
+
79
+ #ifdef NINA_GPIO0
80
+ WIFININA_SLAVEGPIO0 = NINA_GPIO0;
81
+ #endif
82
+
83
+ #ifdef SPIWIFI
84
+ WIFININA_SPIWIFI = &SPIWIFI;
82
85
#endif
83
86
84
87
#ifdef ARDUINO_SAMD_MKRVIDOR4000
85
88
inverted_reset = false ;
86
89
#else
87
- if (SLAVERESET > PINS_COUNT) {
90
+ #ifdef PINS_COUNT
91
+ if (WIFININA_SLAVERESET > PINS_COUNT) {
88
92
inverted_reset = true ;
89
- SLAVERESET = ~SLAVERESET ;
93
+ WIFININA_SLAVERESET = ~WIFININA_SLAVERESET ;
90
94
}
91
95
#endif
96
+ #endif
97
+
98
+ WIFININA_SPIWIFI->begin ();
99
+ pinMode (WIFININA_SLAVESELECT, OUTPUT);
100
+ pinMode (WIFININA_SLAVEREADY, INPUT);
101
+ pinMode (WIFININA_SLAVERESET, OUTPUT);
92
102
93
- SPIWIFI.begin ();
94
- pinMode (SLAVESELECT, OUTPUT);
95
- pinMode (SLAVEREADY, INPUT);
96
- pinMode (SLAVERESET, OUTPUT);
97
- pinMode (NINA_GPIO0, OUTPUT);
103
+ if (WIFININA_SLAVEGPIO0 >= 0 ) {
104
+ pinMode (WIFININA_SLAVEGPIO0, OUTPUT);
105
+ digitalWrite (WIFININA_SLAVEGPIO0, HIGH);
106
+ }
98
107
99
- digitalWrite (NINA_GPIO0, HIGH);
100
- digitalWrite (SLAVESELECT, HIGH);
101
- digitalWrite (SLAVERESET, inverted_reset ? HIGH : LOW);
108
+ digitalWrite (WIFININA_SLAVESELECT, HIGH);
109
+ digitalWrite (WIFININA_SLAVERESET, inverted_reset ? HIGH : LOW);
102
110
delay (10 );
103
- digitalWrite (SLAVERESET , inverted_reset ? LOW : HIGH);
111
+ digitalWrite (WIFININA_SLAVERESET , inverted_reset ? LOW : HIGH);
104
112
delay (750 );
105
113
106
- digitalWrite (NINA_GPIO0, LOW);
107
- pinMode (NINA_GPIO0, INPUT);
114
+ if (WIFININA_SLAVEGPIO0 >= 0 ) {
115
+ digitalWrite (WIFININA_SLAVEGPIO0, LOW);
116
+ pinMode (WIFININA_SLAVEGPIO0, INPUT);
117
+ }
108
118
109
119
#ifdef _DEBUG_
110
120
INIT_TRIGGER ()
@@ -114,36 +124,36 @@ void SpiDrv::begin()
114
124
}
115
125
116
126
void SpiDrv::end () {
117
- digitalWrite (SLAVERESET , inverted_reset ? HIGH : LOW);
127
+ digitalWrite (WIFININA_SLAVERESET , inverted_reset ? HIGH : LOW);
118
128
119
- pinMode (SLAVESELECT , INPUT);
129
+ pinMode (WIFININA_SLAVESELECT , INPUT);
120
130
121
- SPIWIFI. end ();
131
+ WIFININA_SPIWIFI-> end ();
122
132
123
133
initialized = false ;
124
134
}
125
135
126
136
void SpiDrv::spiSlaveSelect ()
127
137
{
128
- SPIWIFI. beginTransaction (SPISettings (8000000 , MSBFIRST, SPI_MODE0));
129
- digitalWrite (SLAVESELECT, LOW);
138
+ WIFININA_SPIWIFI-> beginTransaction (SPISettings (8000000 , MSBFIRST, SPI_MODE0));
139
+ digitalWrite (WIFININA_SLAVESELECT, LOW);
130
140
131
141
// wait for up to 5 ms for the NINA to indicate it is not ready for transfer
132
142
// the timeout is only needed for the case when the shield or module is not present
133
- for (unsigned long start = millis (); (digitalRead (SLAVEREADY ) != HIGH) && (millis () - start) < 5 ;);
143
+ for (unsigned long start = millis (); (digitalRead (WIFININA_SLAVEREADY ) != HIGH) && (millis () - start) < 5 ;);
134
144
}
135
145
136
146
137
147
void SpiDrv::spiSlaveDeselect ()
138
148
{
139
- digitalWrite (SLAVESELECT ,HIGH);
140
- SPIWIFI. endTransaction ();
149
+ digitalWrite (WIFININA_SLAVESELECT ,HIGH);
150
+ WIFININA_SPIWIFI-> endTransaction ();
141
151
}
142
152
143
153
144
154
char SpiDrv::spiTransfer (volatile char data)
145
155
{
146
- char result = SPIWIFI. transfer (data);
156
+ char result = WIFININA_SPIWIFI-> transfer (data);
147
157
DELAY_TRANSFER ();
148
158
149
159
return result; // return the received byte
@@ -197,10 +207,10 @@ char SpiDrv::readChar()
197
207
return 0 ; \
198
208
}else \
199
209
200
- #define waitSlaveReady () (digitalRead(SLAVEREADY ) == LOW)
201
- #define waitSlaveSign () (digitalRead(SLAVEREADY ) == HIGH)
202
- #define waitSlaveSignalH () while (digitalRead(SLAVEREADY ) != HIGH){}
203
- #define waitSlaveSignalL () while (digitalRead(SLAVEREADY ) != LOW){}
210
+ #define waitSlaveReady () (digitalRead(WIFININA_SLAVEREADY ) == LOW)
211
+ #define waitSlaveSign () (digitalRead(WIFININA_SLAVEREADY ) == HIGH)
212
+ #define waitSlaveSignalH () while (digitalRead(WIFININA_SLAVEREADY ) != HIGH){}
213
+ #define waitSlaveSignalL () while (digitalRead(WIFININA_SLAVEREADY ) != LOW){}
204
214
205
215
void SpiDrv::waitForSlaveSign ()
206
216
{
@@ -562,7 +572,10 @@ void SpiDrv::sendCmd(uint8_t cmd, uint8_t numParam)
562
572
563
573
int SpiDrv::available ()
564
574
{
565
- return (digitalRead (NINA_GPIO0) != LOW);
575
+ if (WIFININA_SLAVEGPIO0 >= 0 ) {
576
+ return (digitalRead (WIFININA_SLAVEGPIO0) != LOW);
577
+ }
578
+ return true ;
566
579
}
567
580
568
581
SpiDrv spiDrv;
0 commit comments