NetBurner 3.5.6
PDF Version
wifiDriver.h
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>
24#include <wifi/nbWifiConstants.h>
25#include <wifi/nbwifi/nbWifiMsgStructs.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
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
int connect(const IPADDR &ipAddress, uint16_t remotePort, uint32_t timeout)
Establish a TCP connection to a remote host.
Definition tcp.h:1547
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
Main buffer structure for network and serial communication.
Definition buffers.h:90
Definition wifiDriver.h:697