NetBurner 3.5.6
PDF Version
wifiDriver.h
Go to the documentation of this file.
1/*NB_REVISION*/
2
3/*NB_COPYRIGHT*/
4
15#ifndef __WIFIDRIVER_H
16#define __WIFIDRIVER_H
17
18#include <buffers.h>
19#include <nettypes.h>
20#include <config_obj.h>
21#include <netinterface.h>
22#include <constants.h>
23#include <utils.h>
26#include <wifi/wilc/microchip/driver/m2m_types.h>
27#include <json_lexer.h>
28
29#ifndef _STRUCT_PACKED
30#define _STRUCT_PACKED __attribute__((__packed__))
31#endif
32
33#define WIFI_INTERFACE_NAME "Wlan0"
34#define MAX_WIFI_INTERFACES 1
35#define WIFI_TASK_STACK_SIZE 4048
36#define WIFI_RX_TASK_BASE_PRIO 18
37#define WIFI_TX_FLOW_OFF_COUNT 120
38
39#define CONNECT_RETRIES (5)
40#define DEFAULT_WIFI_SEC_ALL (255)
41#define DEFAULT_WIFI_CH_ALL (255)
42
43#define STATUS_STALENESS_LIMIT (1 * TICKS_PER_SECOND)
44//#define STATUS_STALENESS_LIMIT (TICKS_PER_SECOND*2)
45#define SCAN_STALENESS_LIMIT (20 * TICKS_PER_SECOND)
46
47#define CONNECT_TIMEOUT (60 * TICKS_PER_SECOND)
48#define RECONNECT_TIMEOUT (20 * TICKS_PER_SECOND)
49#define SCAN_TIMEOUT (15 * TICKS_PER_SECOND)
50
51#define DRIVER_STATUS_CHECK_INTERVAL (5 * TICKS_PER_SECOND)
52#define STATUS_AUTO_REQUEST_LIMIT (5 * TICKS_PER_SECOND)
53#define STATUS_ERROR_TIMEOUT (30 * TICKS_PER_SECOND)
54#define WIFI_RX_ERROR_TIMEOUT (300 * TICKS_PER_SECOND)
55#define MAX_RX_TASK_TIMEOUT_COUNT (2)
56
57#define PHY_BRDCST_DEST(x) \
58 ((((uint8_t *)(x))[0] == 0xFF) && (((uint8_t *)(x))[1] == 0xFF) && (((uint8_t *)(x))[2] == 0xFF) && (((uint8_t *)(x))[3] == 0xFF) && \
59 (((uint8_t *)(x))[4] == 0xFF) & (((uint8_t *)(x))[5] == 0xFF))
60
61extern bool def_wifi_quiet;
62
63void SetWifiSPISpeed(int busSpeed);
64
65uint32_t FifoSize(const OS_FIFO *fifo);
66
67struct _STRUCT_PACKED nbWifiScanResult
68{
69 uint8_t lastAndBand;
70 uint8_t bssType;
71 uint8_t channel;
72 uint8_t security;
73 uint8_t cipher;
74 uint8_t ssidLength;
75 int16_t rssi;
76 MACADR bssid;
77 char ssid[SSID_MAX_LEN + 1];
78 struct nbWifiScanResult *next;
79};
80
81enum wifiModule
82{
83 NBWIFIIN = 0,
84 NBWIFIWILC
85};
86
87enum busType
88{
89 SPI = 0,
90 SERIAL
91};
92
93namespace NB
94{
95struct nbWifiDeviceInfo
96{
97 uint8_t hardwareMajorRev;
98 uint8_t hardwareMinorRev;
99 uint8_t softwareMajorRev;
100 uint8_t softwareMinorRev;
101 MACADR hwAddr;
102 uint8_t hardwareTypeLength;
103 char hardwareType[]; // Placeholder for char array pobe_inter
104};
105
106struct nbWifiScanResultList
107{
108 PoolPtr headBuffer;
109 PoolPtr tailBuffer;
110 nbWifiScanResult *head;
111 nbWifiScanResult *tail;
112 uint8_t count;
113 uint32_t tickLastUpdated;
114};
115
116struct nbWifiConnect
117{
118 char ssid[SSID_MAX_LEN + 1];
119 uint8_t ssidLength;
120 uint8_t security;
121 char psk[PASS_MAX_LEN + 1];
122 uint8_t channel;
123 int retryCount;
124};
125
133void PrintScanResult(nbWifiScanResult *scanResult);
134void PrintScanResultList(nbWifiScanResult *firstResult);
135
145ParsedJsonDataSet ConvertScanResultsToJSON(nbWifiScanResult *scanResults);
146
147class Wifi : public ::EtherLikeInterface
148{
149 public:
150 // NNDK 3.0: Testing config variables
151 config_string cfg_ssid{"", "SSID"};
152 config_pass cfg_key{"", "Password"};
153 config_chooser mode{"Connection Mode", "Client", "Client,Access Point"};
154 config_chooser security{"Security", "Any", "Open,WEP,WPA,WPA2,Any"};
155 config_bool wifiQuiet{def_wifi_quiet, "ConnectQuiet", "Suppress connection serial print statements"};
156 ConfigEndMarker;
157
158 volatile bool autoReconnect;
163 {
164 uint8_t connected;
165 uint8_t ssidLength;
166 uint16_t txPower;
167 int16_t rssi;
168 uint8_t band;
169 uint8_t channel;
170 uint32_t maxTxRate;
171 uint8_t security;
172 uint8_t cipher;
174 uint8_t bssType;
175 char ssid[SSID_MAX_LEN + 1];
176
178 };
179
199 virtual int ConnectToAP(const char *ssid = nullptr,
200 const char *passwd = "",
201 uint8_t retryCount = CONNECT_RETRIES,
202 uint8_t security = DEFAULT_WIFI_SEC_ALL) = 0;
203
226 virtual int ConnectToAP(nbWifiConnect connect) = 0;
227
256 virtual int StartAP(const char *ssid = nullptr,
257 const char *passwd = "",
258 uint8_t channel = DEFAULT_TABLE_LABEL_CHANNEL,
259 uint8_t security = DEFAULT_TABLE_LABEL_SEC,
260 uint8_t cipher = DEFAULT_TABLE_LABEL_CIPH,
261 uint8_t ssidLen = 0) = 0;
262
279 virtual int StartConfigAP(uint8_t channel = DEFAULT_TABLE_LABEL_CHANNEL) = 0;
280
299 virtual nbWifiScanResult *Scan(const char *ssid = nullptr, uint8_t optionCount = 0, uint16_t *optionList = nullptr) = 0;
300
307 virtual void Disconnect() = 0;
308
312 static Wifi *wifiDrivers[MAX_WIFI_INTERFACES];
313
324 static Wifi *GetDriverByInterfaceNumber(int interfaceNumber);
325
331 static void SetDefaultITUCountry(NB::ITU_Country::CountryCode_t country);
340 virtual int SetITUCountry(NB::ITU_Country::CountryCode_t country) = 0;
341
348 virtual bool isRegistered() const = 0;
349
358 virtual int GetWifiInterfaceNumber() const = 0;
359
367 [[deprecated]] virtual int GetSystemInterfaceNumber() const = 0;
368
369 /************************* BEGIN Status Functions **************************/
386 virtual int StoreSSIDPWToConfig(char *ssid, char *password, int ssidLen = 0) = 0;
387
394 virtual const char *GetDriverName();
395
408 virtual int GetSSIDFromConfig(char *returnBuf, int maxLen) = 0;
409
422 virtual int GetKeyFromConfig(char *returnBuf, int maxLen) = 0;
423
437 virtual int GetCurSSID(char *buf, int maxlen) = 0;
438
445 virtual MACADR GetCurBSSID() = 0;
446
458 virtual void GetCurrentAP(driverStatusStruct *ap) = 0;
459
469 virtual void GetDeviceInformation(nbWifiDeviceInfo *ap) = 0;
470
481 virtual bool Connected() = 0;
482
490 virtual int GetSignalStrength() = 0;
491
500 virtual int GetCurChannel() = 0;
501
510 virtual int GetSecurity() = 0;
511
520 virtual int GetCipher() = 0;
521 /************************* END Status Functions ***************************/
522
532 virtual void TransmitBuffer(PoolPtr txBuffer) = 0;
533
542 virtual bool GetLinkStatus() = 0;
543
556 virtual void enab_multicast(MACADR macAddress, BOOL addAddress) = 0;
557
566 virtual int APIStart() = 0;
567
568 /********************** BEGIN RXTask control methods ***********************/
579 virtual int Start() = 0;
580
590 virtual void Pause() = 0;
591
601 virtual void Resume() = 0;
602
612 virtual void Kill() = 0;
613 /********************** END RXTask control methods **********************/
614
615 Wifi();
616 Wifi(const Wifi &rhs);
617 virtual bool UpdateSlaveFirmware(uint32_t imageLength, const uint8_t *imageBuffer) = 0;
618
619 protected:
620 typedef enum
621 {
622 Bus_Serial = 0,
623 Bus_SPI = 1,
624 Bus_SDIO = 2,
625 Bus_USB = 3,
626 Bus_PCI_E = 4,
627 Bus_Ethernet = 5,
628 Bus_Internal = 6,
629 } CommBus;
630
631 typedef enum
632 {
633 Mss_Serial = 1500,
634 Mss_SPI = 1500,
635 Mss_SDIO = 1500,
636 Mss_USB = 1500,
637 Mss_PCI_E = 1500,
638 Mss_Ethernet = 1480,
639 Mss_Internal = 1500,
640 } MssSizes;
641
642 /* ---- Static members ---- */
643 static bool APITaskStarted;
644 static bool APITaskRunning;
645 static bool APIAbortTask;
646 static bool APIPauseTask;
647 static OS_SEM APITaskPauseSem;
648 static ITU_Country::CountryCode_t wifiCountry;
649 /* ---- End Static members ---- */
650
651 /* ---- Data members ---- */
652 nbWifiScanResultList ScanResults;
653 bool scanComplete;
654 OS_MBOX scanMailbox;
655 /* ---- End Data members ---- */
656
657 void (*DisconnectCB)(Wifi *wifiIntf);
658 driverStatusStruct connectionState;
659 CommBus busType;
660 OS_CRIT busTxCrit;
661 int resetPinConnector;
662 int resetPinNum;
663 bool taskStarted;
664 bool taskRunning;
665 bool abortTask;
666 bool pauseTask;
667 int myWifiNum; // WiFi Driver number, not the interface number
668
669 Wifi(CommBus busType, int resetPinConnector, int resetPinMum, const char *name);
670 ~Wifi();
671
672 virtual bool SetBusSpeed(uint32_t busSpeed) = 0;
673 friend void ::SetWifiSPISpeed(int busSpeed);
674
675 friend class WILC1000;
676 friend class WICED;
677};
678
679struct SSID_t
680{
681 uint8_t len;
682 uint8_t ssid[SSID_MAX_LEN + 1];
683};
684} // namespace NB
685
696typedef struct
697{
698 int spiModuleNum;
699 int connectorNum;
700 int csNum;
701 int csGpioPinNum;
702 int resetPinNum;
703 int irqNum;
704 int serialPortNum;
705 int chipEnablePinNum;
706 NB::Wifi *(*GetDriver)();
707} wifi_init;
708
709extern wifi_init wifiInit;
710extern NB::Wifi *theWifiIntf;
711extern NB::Wifi *wlan0;
712
713#endif /* NBWIFIDRIVER_H_ */
714
NetBurner Buffers API.
Used to store and manipulate MAC addresses.
Definition nettypes.h:69
A class to create, read, and modify a JSON object.
Definition json_lexer.h:535
Boolean Configuration Variable.
Definition config_obj.h:997
Chooser Configuration Variable - Select From a List of Items.
Definition config_obj.h:2027
Password string Configuration Variable.
Definition config_obj.h:1343
String Configuration Variable.
Definition config_obj.h:1127
Configuration object header file.
NetBurner System Constants.
int connect(const IPADDR &ipAddress, uint16_t remotePort, uint32_t timeout)
Make an outgoing TCP connection to a remote host.
Definition tcp.h:119
NetBurner JSON Lexer. See the JSON Lexer page for complete documentation.
Wifi Constants.
NetBurner Network Interface Header File.
NetBurner IPADDR4 Class. See the IPADDR4 Class page for complete documentation.
Definition wifiDriver.h:163
uint32_t tickLastUpdated
CPU tick count of when this struct was last updated.
Definition wifiDriver.h:177
uint16_t txPower
Transmit power.
Definition wifiDriver.h:166
uint32_t maxTxRate
Max transmit data throughput.
Definition wifiDriver.h:170
uint8_t connected
1 if connected, 0 if disconnected
Definition wifiDriver.h:164
uint8_t channel
802.11 channel
Definition wifiDriver.h:169
uint8_t cipher
refer to OPTIONLISTCIPH for defenitions
Definition wifiDriver.h:172
uint8_t security
Security used: WEP, WPA, WPA2, open, uknown.
Definition wifiDriver.h:171
uint8_t ssidLength
Length of the SSID string.
Definition wifiDriver.h:165
int16_t rssi
Recieved Signal Strength Indicator.
Definition wifiDriver.h:167
uint8_t bssType
refer to OPTIONLISTBSSTYPE for defenitions
Definition wifiDriver.h:174
char ssid[SSID_MAX_LEN+1]
Placeholder for char array pointer.
Definition wifiDriver.h:175
uint8_t band
Frequency band.
Definition wifiDriver.h:168
MACADR bssid
Basic Service Set Identifier.
Definition wifiDriver.h:173
An OS_CRIT object is used to establish critical sections of code that can only be run by one task at ...
Definition nbrtos.h:1110
Definition nbrtos.h:932
Mailboxes single value storage locations used to communicate between tasks.
Definition nbrtos.h:522
Semaphores are used to control access to shared resources or or to communicate between tasks in a mul...
Definition nbrtos.h:411
Main buffer structure for network and serial communication.
Definition buffers.h:90
Definition wifiDriver.h:697
NetBurner Utilities API.
ParsedJsonDataSet ConvertScanResultsToJSON(nbWifiScanResult *scanResults)
Convert the WiFi scan results into a JSON Object.
void PrintScanResult(nbWifiScanResult *scanResult)
Print the results of one scan result using iprintf.