9 #ifndef __NBWIFIDRIVER_H 10 #define __NBWIFIDRIVER_H 14 #include <netinterface.h> 15 #include <constants.h> 21 #define WIFI_API_TASK_PRIO WIFI_RX_TASK_BASE_PRIO + MAX_WIFI_INTERFACES 22 #define MAX_OPTION_TABLES 256 // options have an 8-bit table id 23 #define WIFI_MAX_QUEUED_BUFFERS 8 24 #define WIFI_RX_MIN_BUFFER_THRESHHOLD 20 25 #define WIFI_INIT_BAUDRATE 230400 26 #define WIFI_RX_DELAY (TICKS_PER_SECOND/4) 27 #define WIFI_PEND_TIMEOUT (TICKS_PER_SECOND/2) 28 #define WIFI_UPDATE_MAX_PAYLOAD (ETH_MAX_SIZE - sizeof(NB::NBWifiAPIMessage::Header::APIRequest) - sizeof(NB::NBWifiAPIMessage::Request::FirmwareChunk)) 30 #define WIFI_SERIAL_SYNC_SEQ "a\x1B\x0B" 31 #define TOKEN_FIRST 'a' 32 #define TOKEN_MID '\x1B' 33 #define TOKEN_LAST '\x0B' 34 #define TOKEN_FIRST_COUNT 3 35 #define TOKEN_MID_COUNT 2 36 #define TOKEN_LAST_COUNT 1 38 #define MAX_PENDING_COMMANDS 5 39 #define FAILED_PACKET_LIMIT 5 41 #ifndef _STRUCT_PACKED 42 #define _STRUCT_PACKED __attribute__ ((__packed__)) 46 typedef void ( *ReceiveScanResultFunc )(
const nbWifiScanResult & ap );
52 class NBWifi :
public Wifi
63 struct responseWaiter {
70 struct commandsWaitingResponseStruct {
72 responseWaiter waitList[MAX_PENDING_COMMANDS];
77 volatile uint8_t currentCommandID;
79 volatile bool waitingForStatus;
82 commandsWaitingResponseStruct commandsWaitingResponse;
83 PoolPtr options[MAX_OPTION_TABLES];
84 PoolPtr connectConfigBuf;
86 char hardwareTypeOverflow[MAX_HARDWARE_TYPE_LENGTH + 1];
88 uint32_t slaveFirmwareOffset;
89 bool slaveUpdateReady;
94 NBWifi(
const NBWifi & rhs );
100 PoolPtr messageBuffer,
101 NB::NBWifiAPIMessage::Internal::InternalTypes internalType
104 void SendReconnectRequest();
106 bool ProcessRequest( PoolPtr messageBuffer, uint8_t requestType );
107 bool ProcessResponse( PoolPtr messageBuffer, uint8_t responseType );
108 void ProcessResponseID( PoolPtr messageBuffer );
109 bool ProcessScanResult( PoolPtr messageBuffer );
110 bool ProcessStatus( PoolPtr messageBuffer );
111 bool ProcessDeviceInfo( PoolPtr messageBuffer );
112 bool ProcessOptionTableResponse( PoolPtr messageBuffer );
114 bool ProcessCreditReport( PoolPtr messageBuffer );
116 bool DevFWSupported();
118 int AddWaitingCommand( uint8_t requestType, uint8_t commandID,
OS_MBOX *pmbox );
119 void RemoveWaitingCommand( uint8_t commandID );
120 int ReadyInterface();
122 void RetrieveOptionTable( uint8_t tableNum );
123 void RetrieveAllOptionTables( );
125 PoolPtr GetNetworkStatus();
126 PoolPtr GetDeviceInformation();
132 State_NotRegistered = 0,
133 State_TaskNotRunning = 1,
136 State_InvalidDevice = 4,
138 State_NotConfigured = 6,
139 State_NotConnected = 7,
145 int myInterfaceNumber;
149 uint32_t lastCreditCheckTick;
150 bool creditReportQueued;
151 bool creditReporting;
153 uint32_t lastReportTick;
154 NBWifiAPIMessage::Response::DeviceInfo devInfo;
155 DriverState currentState;
157 ReceiveScanResultFunc pfScanResultsCallback;
159 uint8_t availableCredits;
160 uint16_t pendingTxBuffers;
165 static uint32_t DriverStk[MAX_WIFI_INTERFACES][WIFI_TASK_STACK_SIZE];
166 static uint32_t APITaskStk[WIFI_TASK_STACK_SIZE];
168 NBWifi(CommBus busType,
int resetPinConnector,
int resetPinMum,
const char * name);
171 void SendBusMessage( PoolPtr txMessage,
bool waitForCredits =
true );
172 virtual void SendBusMessage_Core( PoolPtr txMessage ) = 0;
173 virtual void RXTask( ) = 0;
174 int RegisterDriver();
175 uint8_t GetNextCommandID();
176 void PushRXCreditReport( PoolPtr pp );
177 void PushPayloadCreditReport( PoolPtr &pp );
178 void ExternalReconnect(PoolPtr configMsg);
182 static void RXTaskLauncher(
void *wifiDriverObj );
183 static void APITask(
void *throwaway );
187 static void TransmitBuffer_0( PoolPtr txBuffer );
188 static void TransmitBuffer_1( PoolPtr txBuffer );
189 static void kill_0();
190 static void kill_1();
191 static BOOL linkActive_0();
192 static BOOL linkActive_1();
193 static void enab_multicast_0( MACADR macAddress, BOOL addAddress );
194 static void enab_multicast_1( MACADR macAddress, BOOL addAddress );
196 void TransmitBuffer( PoolPtr txBuffer );
197 virtual void TransmitBuffer_Core( PoolPtr txBuffer, uint8_t credits ) = 0;
198 void enab_multicast( MACADR macAddress, BOOL addAddress );
202 static int APIStartTask();
203 static void APIPause();
204 static void APIResume();
205 static void APIKill();
213 bool isRegistered()
const;
214 int GetWifiInterfaceNumber()
const;
215 int GetSystemInterfaceNumber()
const;
218 int ConnectWithOptions(
219 const char * ssid =
nullptr,
const char * passwd =
"",
220 uint8_t retryCount = CONNECT_RETRIES, uint8_t optionCount = 0,
221 uint16_t *optionList =
nullptr, uint8_t ssidLen = 0
225 const char * ssid =
nullptr,
const char * passwd =
"",
226 uint8_t retryCount = CONNECT_RETRIES
231 const char * ssid =
nullptr,
232 const char * passwd =
"",
233 uint8_t channel = DEFAULT_TABLE_LABEL_CHANNEL,
234 uint8_t security = DEFAULT_TABLE_LABEL_SEC,
235 uint8_t cipher = DEFAULT_TABLE_LABEL_CIPH,
239 int StartConfigAP(uint8_t channel = DEFAULT_TABLE_LABEL_CHANNEL)
override;
241 void Disconnect()
override;
244 nbWifiScanResult * Scan(
const char * ssid =
nullptr, uint8_t optionCount = 0, uint16_t *optionList =
nullptr)
override;
248 ReceiveScanResultFunc pfCallbackFunc,
const char * ssid =
nullptr,
249 uint8_t optionCount = 0, uint16_t *optionList =
nullptr 252 void StopAsyncScan();
255 int GetCurSSID(
char * buf,
int maxlen)
override;
256 MACADR GetCurBSSID()
override;
257 void GetCurrentAP(driverStatusStruct *ap)
override;
258 void GetDeviceInformation(nbWifiDeviceInfo *ap)
override;
259 bool Connected()
override;
260 int GetSignalStrength()
override;
261 uint8_t GetCurChannel()
override;
262 uint8_t GetSecurity()
override;
263 uint8_t GetCipher()
override;
264 uint8_t GetAvailableCredits() {
return availableCredits; };
267 int StoreSSIDPWToConfig(
char *ssid,
char *password,
int ssidLen = 0)
override;
268 int GetSSIDFromConfig(
char *returnBuf,
int maxLen )
override;
269 int GetKeyFromConfig(
char *returnBuf,
int maxLen )
override;
271 virtual void SendCreditRequest() = 0;
272 virtual void SendCreditReport( uint8_t credits = 0xFF) = 0;
273 void SetMAC(
const MACADR *newMAC,
bool waitForResponse =
true);
274 int SetITUCountry( NB::ITU_Country::CountryCode_t country );
275 bool GetLinkStatus();
277 bool UpdateSlaveFirmware( uint32_t imageLength,
const uint8_t *imageBuffer )
override;
278 bool ReadySlaveUpdate();
279 bool SendFirmwareChunk( uint32_t length,
const uint8_t *data );
280 bool FinishedSendingFirmware( uint32_t length,
const uint8_t *data );
281 virtual bool SetBusSpeed( uint32_t busSpeed ) = 0;
287 const char * ssid =
nullptr,
const char * passwd =
"",
288 uint8_t retryCount = CONNECT_RETRIES,
289 uint8_t security = DEFAULT_WIFI_SEC_ALL
291 int ConnectToAP( nbWifiConnect connect )
override;
294 bool DisplayOptionTable(uint8_t n);
295 void DisplayAllOptionTables();
297 static NB::Wifi* GetNewNBWifiSPIDriver();
298 static NB::Wifi* GetNewNBWifiSerialDriver();
302 extern NB::Wifi *theWifiIntf;
A FIFO is used to pass structures from one task to another. Note: Structures to be passed must have a...
Definition: nbrtos.h:736
Semaphores are used to control access to shared resource critical section, or to communicate between ...
Definition: nbrtos.h:318
Definition: dhcpv6_internal.h:34
An OS_CRIT object is used to establish critical sections of code that can only be run by one task at ...
Definition: nbrtos.h:893
Mailboxes are used to communicate between tasks.
Definition: nbrtos.h:391
void SetWifiSPISpeed(int busSpeed)
Set SPI bus speed.