9 #ifndef __NBWICEDDRIVER_H 10 #define __NBWICEDDRIVER_H 14 #include <netinterface.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 5 27 #define WIFI_PEND_TIMEOUT 10 28 #define WIFI_UPDATE_MAX_PAYLOAD (ETH_MAX_SIZE - sizeof(NBWifi::APIMessage::Header::APIRequest) - sizeof(NBWifi::APIMessage::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 40 #ifndef _STRUCT_PACKED 41 #define _STRUCT_PACKED __attribute__ ((__packed__)) 45 typedef void ( *ReceiveScanResultFunc )(
const nbWifiScanResult & ap );
53 class WICED :
public Master
58 State_NotRegistered = 0,
59 State_TaskNotRunning = 1,
62 State_InvalidDevice = 4,
64 State_NotConfigured = 6,
65 State_NotConnected = 7,
76 struct responseWaiter {
83 struct commandsWaitingResponseStruct {
85 responseWaiter waitList[MAX_PENDING_COMMANDS];
90 volatile uint8_t currentCommandID;
92 volatile bool waitingForStatus;
95 commandsWaitingResponseStruct commandsWaitingResponse;
96 PoolPtr options[MAX_OPTION_TABLES];
98 APIMessage::Response::DeviceInfo devInfo;
99 char hardwareTypeOverflow[MAX_HARDWARE_TYPE_LENGTH + 1];
101 DriverState currentState;
102 uint32_t slaveFirmwareOffset;
103 bool slaveUpdateReady;
108 WICED(
const WICED & rhs );
113 bool ProcessInternal(
114 PoolPtr messageBuffer,
115 NBWifi::APIMessage::Internal::InternalTypes internalType
118 void SendReconnectRequest();
120 bool ProcessRequest( PoolPtr messageBuffer, uint8_t requestType );
121 bool ProcessResponse( PoolPtr messageBuffer, uint8_t responseType );
122 void ProcessResponseID( PoolPtr messageBuffer );
123 bool ProcessScanResult( PoolPtr messageBuffer );
124 bool ProcessStatus( PoolPtr messageBuffer );
125 bool ProcessDeviceInfo( PoolPtr messageBuffer );
126 bool ProcessOptionTableResponse( PoolPtr messageBuffer );
128 bool ProcessCreditReport( PoolPtr messageBuffer );
130 bool DevFWSupported();
132 int AddWaitingCommand( uint8_t requestType, uint8_t commandID,
OS_MBOX *pmbox );
133 int ReadyInterface();
135 void RetrieveOptionTable(
int tableNum );
136 void RetrieveAllOptionTables( );
138 PoolPtr GetNetworkStatus();
139 PoolPtr GetDeviceInformation();
146 int myInterfaceNumber;
151 uint32_t lastCreditCheckTick;
152 bool creditReportQueued;
153 bool creditReporting;
155 uint32_t lastReportTick;
157 ReceiveScanResultFunc pfScanResultsCallback;
159 uint8_t availableCredits;
160 uint16_t pendingTxBuffers;
164 static uint32_t DriverStk[MAX_WIFI_INTERFACES][WIFI_TASK_STACK_SIZE];
165 static uint32_t APITaskStk[WIFI_TASK_STACK_SIZE];
167 WICED(CommBus busType,
int resetPinConnector,
int resetPinMum,
const char * name);
170 void SendBusMessage( PoolPtr txMessage,
bool waitForCredits =
true );
171 virtual void SendBusMessage_Core( PoolPtr txMessage ) = 0;
172 virtual void RXTask( ) = 0;
173 int RegisterDriver();
174 uint8_t GetNextCommandID();
175 void PushRXCreditReport( PoolPtr &pp );
176 void PushPayloadCreditReport( PoolPtr &pp );
180 static void RXTaskLauncher(
void *wifiDriverObj );
181 static void APITask(
void *throwaway );
185 static void TransmitBuffer_0( PoolPtr txBuffer );
186 static void TransmitBuffer_1( PoolPtr txBuffer );
187 static void kill_0();
188 static void kill_1();
189 static BOOL linkActive_0();
190 static BOOL linkActive_1();
191 static void enab_multicast_0( MACADR macAddress, BOOL addAddress );
192 static void enab_multicast_1( MACADR macAddress, BOOL addAddress );
194 void TransmitBuffer( PoolPtr txBuffer );
195 virtual void TransmitBuffer_Core( PoolPtr txBuffer, uint8_t credits ) = 0;
196 void enab_multicast( MACADR macAddress, BOOL addAddress );
200 static int APIStartTask();
201 static void APIPause();
202 static void APIResume();
203 static void APIKill();
211 bool isRegistered()
const;
212 int GetWifiInterfaceNumber()
const;
213 int GetSystemInterfaceNumber()
const;
216 int ConnectWithOptions(
217 const char * ssid =
nullptr,
const char * passwd =
"",
218 uint8_t retryCount = CONNECT_RETRIES, uint8_t optionCount = 0,
219 uint16_t *optionList =
nullptr, uint8_t ssidLen = 0
223 const char * ssid =
nullptr,
const char * passwd =
"",
224 uint8_t retryCount = CONNECT_RETRIES
229 const char * ssid =
nullptr,
230 const char * passwd =
"",
231 uint8_t channel = DEFAULT_TABLE_LABEL_CHANNEL,
232 uint8_t security = DEFAULT_TABLE_LABEL_SEC,
233 uint8_t cipher = DEFAULT_TABLE_LABEL_CIPH,
237 int StartConfigAP(uint8_t channel = DEFAULT_TABLE_LABEL_CHANNEL)
override;
239 void Disconnect()
override;
242 nbWifiScanResult * Scan(
const char * ssid =
nullptr, uint8_t optionCount = 0, uint16_t *optionList =
nullptr)
override;
246 ReceiveScanResultFunc pfCallbackFunc,
const char * ssid =
nullptr,
247 uint8_t optionCount = 0, uint16_t *optionList =
nullptr 250 void StopAsyncScan();
253 int GetCurSSID(
char * buf,
int maxlen)
override;
254 MACADR GetCurBSSID()
override;
255 void GetCurrentAP(driverStatusStruct *ap)
override;
256 void GetDeviceInformation(nbWifiDeviceInfo *ap)
override;
257 bool Connected()
override;
258 int GetSignalStrength()
override;
259 uint8_t GetCurChannel()
override;
260 uint8_t GetSecurity()
override;
261 uint8_t GetCipher()
override;
262 uint8_t GetAvailableCredits() {
return availableCredits; };
265 int StoreSSIDPWToConfig(
char *ssid,
char *password,
int ssidLen = 0)
override;
266 int GetSSIDFromConfig(
char *returnBuf,
int maxLen )
override;
267 int GetKeyFromConfig(
char *returnBuf,
int maxLen )
override;
269 virtual void SendCreditRequest() = 0;
270 virtual void SendCreditReport( uint8_t credits = 0xFF) = 0;
271 void SetMAC(
const MACADR *newMAC,
bool waitForResponse =
true);
272 bool GetLinkStatus();
274 bool UpdateSlaveFirmware( uint32_t imageLength,
const uint8_t *imageBuffer );
275 bool ReadySlaveUpdate();
276 bool SendFirmwareChunk( uint32_t length,
const uint8_t *data );
277 bool FinishedSendingFirmware( uint32_t length,
const uint8_t *data );
278 virtual bool SetBusSpeed( uint32_t busSpeed ) = 0;
285 const char * ssid =
nullptr,
const char * passwd =
"",
286 uint8_t retryCount = CONNECT_RETRIES,
287 uint8_t security = DEFAULT_WIFI_SEC_ALL
289 int ConnectToAP( nbWifiConnect connect )
override;
291 static NBWifi::Master* GetNewWicedSPIDriver();
292 static NBWifi::Master* GetNewWicedSerialDriver();
298 extern NBWifi::Master *theWifiIntf;
A FIFO is used to pass structures from one task to another. Note: Structures to be passed must have a...
Definition: nbrtos.h:683
void SetWifiSPISpeed(int busSpeed)
Set SPI bus speed.
Semaphores are used to control access to shared resource critical section, or to communicate between ...
Definition: nbrtos.h:289
NetBurner System Constants.
NBWifi namespace that encompaces the WiFi driver.
Definition: nbWifiBsp.h:15
An OS_CRIT object is used to establish critical sections of code that can only be run by one task at ...
Definition: nbrtos.h:840
Mailboxes are used to communicate between tasks.
Definition: nbrtos.h:362