NetBurner 3.1
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>
24 #include <wifi/nbWifiConstants.h>
27 
28 #ifndef _STRUCT_PACKED
29 #define _STRUCT_PACKED __attribute__ ((__packed__))
30 #endif
31 
32 #define WIFI_INTERFACE_NAME "Wlan0"
33 #define MAX_WIFI_INTERFACES 1
34 #define WIFI_TASK_STACK_SIZE 4048
35 #define WIFI_RX_TASK_BASE_PRIO 18
36 #define WIFI_TX_FLOW_OFF_COUNT 120
37 
38 #define CONNECT_RETRIES (5)
39 #define DEFAULT_WIFI_SEC_ALL (255)
40 #define DEFAULT_WIFI_CH_ALL (255)
41 
42 #define STATUS_STALENESS_LIMIT (1*TICKS_PER_SECOND)
43 #define SCAN_STALENESS_LIMIT (20*TICKS_PER_SECOND)
44 
45 
46 #define CONNECT_TIMEOUT (60*TICKS_PER_SECOND)
47 #define SCAN_TIMEOUT (15*TICKS_PER_SECOND)
48 
49 #define PHY_BRDCST_DEST(x) ( (((uint8_t *)(x))[0] == 0xFF)\
50  && (((uint8_t *)(x))[1] == 0xFF)\
51  && (((uint8_t *)(x))[2] == 0xFF)\
52  && (((uint8_t *)(x))[3] == 0xFF)\
53  && (((uint8_t *)(x))[4] == 0xFF)\
54  & (((uint8_t *)(x))[5] == 0xFF))
55 
56 void SetWifiSPISpeed(int busSpeed);
57 
58 uint32_t FifoSize( const OS_FIFO *fifo );
59 
60 struct _STRUCT_PACKED nbWifiScanResult {
61  uint8_t lastAndBand;
62  uint8_t bssType;
63  uint8_t channel;
64  uint8_t security;
65  uint8_t cipher;
66  uint8_t ssidLength;
67  int16_t rssi;
68  MACADR bssid;
69  char ssid[SSID_MAX_LEN + 1];
70  struct nbWifiScanResult * next;
71 };
72 
73 enum wifiModule
74 {
75  NBWIFIIN = 0,
76  NBWIFIWILC
77 };
78 
79 enum busType
80 {
81  SPI = 0,
82  SERIAL
83 };
84 
85 namespace NB
86 {
87  struct nbWifiDeviceInfo {
88  uint8_t hardwareMajorRev;
89  uint8_t hardwareMinorRev;
90  uint8_t softwareMajorRev;
91  uint8_t softwareMinorRev;
92  MACADR hwAddr;
93  uint8_t hardwareTypeLength;
94  char hardwareType[]; // Placeholder for char array pobe_inter
95  };
96 
97  struct nbWifiScanResultList {
98  PoolPtr headBuffer;
99  PoolPtr tailBuffer;
100  nbWifiScanResult *head;
101  nbWifiScanResult *tail;
102  uint8_t count;
103  uint32_t tickLastUpdated;
104  };
105 
106  struct nbWifiConnect {
107  char ssid[SSID_MAX_LEN + 1];
108  uint8_t ssidLength;
109  uint8_t security;
110  char psk[PASS_MAX_LEN + 1];
111  uint8_t channel;
112  int retryCount;
113  };
114 
123  void PrintScanResult( nbWifiScanResult * scanResult);
124  void PrintScanResultList( nbWifiScanResult * firstResult );
125 
126  class Wifi : public ::EtherLikeInterface
127  {
128  public:
129  //NNDK 3.0: Testing config variables
130  config_string cfg_ssid{"", "SSID"};
131  config_pass cfg_key{"", "Password"};
132  config_chooser mode{"Connection Mode", "Client", "Client,Access Point"};
133  config_chooser security{"Security","Open","Open,WEP,WPA,WPA2"};
134  ConfigEndMarker;
135 
136  volatile bool autoReconnect;
141  uint8_t connected;
142  uint8_t ssidLength;
143  uint16_t txPower;
144  int16_t rssi;
145  uint8_t band;
146  uint8_t channel;
147  uint32_t maxTxRate;
148  uint8_t security;
149  uint8_t cipher;
150  MACADR bssid;
151  uint8_t bssType;
152  char ssid[SSID_MAX_LEN + 1];
153 
154  uint32_t tickLastUpdated;
155  };
156 
174  virtual int ConnectToAP(
175  const char * ssid = nullptr, const char * passwd = "",
176  uint8_t retryCount = CONNECT_RETRIES,
177  uint8_t security = DEFAULT_WIFI_SEC_ALL
178  ) = 0;
179 
200  virtual int ConnectToAP( nbWifiConnect connect ) = 0;
201 
229  virtual int StartAP(
230  const char * ssid = nullptr,
231  const char * passwd = "",
232  uint8_t channel = DEFAULT_TABLE_LABEL_CHANNEL,
233  uint8_t security = DEFAULT_TABLE_LABEL_SEC,
234  uint8_t cipher = DEFAULT_TABLE_LABEL_CIPH,
235  uint8_t ssidLen = 0
236  ) = 0;
237 
254  virtual int StartConfigAP(uint8_t channel = DEFAULT_TABLE_LABEL_CHANNEL) = 0;
255 
273  virtual nbWifiScanResult * Scan( const char * ssid = nullptr, uint8_t optionCount = 0, uint16_t *optionList = nullptr) = 0;
274 
281  virtual void Disconnect() = 0;
282 
286  static Wifi *wifiDrivers[MAX_WIFI_INTERFACES];
287 
298  static Wifi * GetDriverByInterfaceNumber( int interfaceNumber );
299 
305  static void SetDefaultITUCountry(NB::ITU_Country::CountryCode_t country);
314  virtual int SetITUCountry( NB::ITU_Country::CountryCode_t country ) = 0;
315 
322  virtual bool isRegistered() const = 0;
323 
332  virtual int GetWifiInterfaceNumber() const = 0;
333 
340  virtual int GetSystemInterfaceNumber() const = 0;
341 
342 
343  /************************* BEGIN Status Functions **************************/
360  virtual int StoreSSIDPWToConfig( char *ssid, char *password, int ssidLen = 0) = 0;
361 
368  virtual const char * GetDriverName();
369 
382  virtual int GetSSIDFromConfig( char *returnBuf, int maxLen ) = 0;
383 
396  virtual int GetKeyFromConfig( char *returnBuf, int maxLen ) = 0;
397 
411  virtual int GetCurSSID(char * buf, int maxlen) = 0;
412 
419  virtual MACADR GetCurBSSID() = 0;
420 
432  virtual void GetCurrentAP(driverStatusStruct *ap) = 0;
433 
443  virtual void GetDeviceInformation(nbWifiDeviceInfo *ap) = 0;
444 
455  virtual bool Connected() = 0;
456 
464  virtual int GetSignalStrength() = 0;
465 
474  virtual uint8_t GetCurChannel() = 0;
475 
484  virtual uint8_t GetSecurity() = 0;
485 
494  virtual uint8_t GetCipher() = 0;
495  /************************* END Status Functions ***************************/
496 
497 
507  virtual void TransmitBuffer( PoolPtr txBuffer ) = 0;
508 
517  virtual bool GetLinkStatus() = 0;
518 
531  virtual void enab_multicast( MACADR macAddress, BOOL addAddress ) = 0;
532 
541  virtual int APIStart() = 0;
542 
543 
544  /********************** BEGIN RXTask control methods ***********************/
555  virtual int Start() = 0;
556 
566  virtual void Pause() = 0;
567 
577  virtual void Resume() = 0;
578 
588  virtual void Kill() = 0;
589  /********************** END RXTask control methods **********************/
590 
591  Wifi();
592  Wifi( const Wifi & rhs );
593  virtual bool UpdateSlaveFirmware( uint32_t imageLength, const uint8_t *imageBuffer ) = 0;
594 
595  protected:
596  typedef enum {
597  Bus_Serial = 0,
598  Bus_SPI = 1,
599  Bus_SDIO = 2,
600  Bus_USB = 3,
601  Bus_PCI_E = 4,
602  Bus_Ethernet = 5,
603  Bus_Internal = 6,
604  } CommBus;
605 
606  typedef enum {
607  Mss_Serial = 1500,
608  Mss_SPI = 1500,
609  Mss_SDIO = 1500,
610  Mss_USB = 1500,
611  Mss_PCI_E = 1500,
612  Mss_Ethernet = 1480,
613  Mss_Internal = 1500,
614  } MssSizes;
615 
616  /* ---- Static members ---- */
617  static bool APITaskStarted;
618  static bool APITaskRunning;
619  static bool APIAbortTask;
620  static bool APIPauseTask;
621  static OS_SEM APITaskPauseSem;
622  static ITU_Country::CountryCode_t wifiCountry;
623  /* ---- End Static members ---- */
624 
625  /* ---- Data members ---- */
626  nbWifiScanResultList ScanResults;
627  bool scanComplete;
628  OS_MBOX scanMailbox;
629  /* ---- End Data members ---- */
630 
631  void (*DisconnectCB) (Wifi *wifiIntf);
632  driverStatusStruct connectionState;
633  CommBus busType;
634  OS_CRIT busTxCrit;
635  int resetPinConnector;
636  int resetPinNum;
637  bool taskStarted;
638  bool taskRunning;
639  bool abortTask;
640  bool pauseTask;
641  int myWifiNum; // WiFi Driver number, not the interface number
642 
643  Wifi(CommBus busType, int resetPinConnector, int resetPinMum, const char * name);
644  ~Wifi();
645 
646  virtual bool SetBusSpeed( uint32_t busSpeed ) = 0;
647  friend void ::SetWifiSPISpeed( int busSpeed );
648 
649  friend class WILC1000;
650  friend class WICED;
651  };
652 
653  struct SSID_t {
654  uint8_t len;
655  uint8_t ssid[SSID_MAX_LEN + 1];
656  };
657 }
658 
669 typedef struct
670 {
671  int spiModuleNum;
672  int connectorNum;
673  int csNum;
674  int csGpioPinNum;
675  int resetPinNum;
676  int irqNum;
677  int serialPortNum;
678  int chipEnablePinNum;
679  NB::Wifi* (*GetDriver)();
680 } wifi_init;
681 
682 extern wifi_init wifiInit;
683 extern NB::Wifi *theWifiIntf;
684 
685 #endif /* NBWIFIDRIVER_H_ */
uint8_t band
Refer to BANDSECTION for defenitions.
Definition: wifiDriver.h:145
A FIFO is used to pass structures from one task to another. Note: Structures to be passed must have a...
Definition: nbrtos.h:736
uint32_t maxTxRate
Max transmit data throughput.
Definition: wifiDriver.h:147
void PrintScanResult(nbWifiScanResult *scanResult)
Print the results of one scan result using iprintf.
Semaphores are used to control access to shared resource critical section, or to communicate between ...
Definition: nbrtos.h:318
uint8_t bssType
refer to OPTIONLISTBSSTYPE for defenitions
Definition: wifiDriver.h:151
NMC1500 IoT Application Interface Internal Types.
Definition: wifiDriver.h:669
uint8_t ssidLength
Length of the SSID string.
Definition: wifiDriver.h:142
Definition: dhcpv6_internal.h:34
Configuration object header file.
Definition: wifiDriver.h:140
uint8_t connected
1 if connected, 0 if disconnected
Definition: wifiDriver.h:141
uint8_t cipher
refer to OPTIONLISTCIPH for defenitions
Definition: wifiDriver.h:149
int16_t rssi
Recieved Signal Strength Indicator.
Definition: wifiDriver.h:144
uint32_t tickLastUpdated
CPU tick count of when this struct was last updated.
Definition: wifiDriver.h:154
uint8_t channel
802.11 channel
Definition: wifiDriver.h:146
char ssid[SSID_MAX_LEN+1]
Placeholder for char array pointer.
Definition: wifiDriver.h:152
uint8_t security
Security used: WEP, WPA, WPA2, open, uknown.
Definition: wifiDriver.h:148
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
NetBurner Buffers API.
MACADR bssid
Basic Service Set Identifier.
Definition: wifiDriver.h:150
uint16_t txPower
Transmit power.
Definition: wifiDriver.h:143
Mailboxes are used to communicate between tasks.
Definition: nbrtos.h:391
void SetWifiSPISpeed(int busSpeed)
Set SPI bus speed.