NetBurner 3.1
nbWifiWilcDriver.h
Go to the documentation of this file.
1 /*NB_REVISION*/
2 
3 /*NB_COPYRIGHT*/
4 
9 #ifndef NBWILCDRIVER_H_
10 #define NBWILCDRIVER_H_
11 
12 #include <wifi/wifiDriver.h>
14 #include <constants.h>
15 
16 #define WILC_Q_SIZE 220
17 #define WIFI_RX_FLOW_OFF_COUNT BUFFER_POOL_SIZE/2
18 
19 #define DEFAULT_WIFI_SCAN_SLOTS_PER_CHANNEL 6
20 #define DEFAULT_WIFI_SCAN_SLOT_TIME 50
21 
22 #define WIFI_RX_FLAG (0x01)
23 #define WIFI_TX_FLAG (0x02)
24 #define WIFI_STA_CON_FLAG (0x04)
25 #define WIFI_STA_DISCON_FLAG (0x08)
26 #define WIFI_AP_START_FLAG (0x0F)
27 #define WIFI_AP_STOP_FLAG (0x10)
28 #define WIFI_CON_INFO_FLAG (0x20)
29 #define WIFI_ANY_FLAG (0xFF)
30 
31 struct lastConnected
32 {
33  uint8_t ssid[SSID_MAX_LEN];
34  uint8_t ssidLen;
35  uint8_t psk[PASS_MAX_LEN];
36  uint8_t securityType;
37 };
38 
39 
40 namespace NB
41 {
42  class NBWifiWILC : public Wifi
43  {
44  public:
45  static NB::Wifi* GetNewWilcDriver();
46 
47  // static functions for use with interface blocks
48  static void TransmitBuffer_0( PoolPtr txBuffer );
49  static void TransmitBuffer_1( PoolPtr txBuffer );
50  static void kill_0();
51  static void kill_1();
52  static BOOL linkActive_0();
53  static BOOL linkActive_1();
54  static void enab_multicast_0( MACADR macAddress, BOOL addAddress );
55  static void enab_multicast_1( MACADR macAddress, BOOL addAddress );
56 
57  void TransmitBuffer( PoolPtr txBuffer ) override;
58  int SetITUCountry( NB::ITU_Country::CountryCode_t country );
59  bool GetLinkStatus() override; // does not perform a bus communication, fast
60  void enab_multicast( MACADR macAddress, BOOL addAddress ) override;
61  int APIStart() override;
62 
63  // RXTask control methods
64  int Start() override;
65  void Pause() override;
66  void Resume() override;
67  void Kill() override;
68 
69  int ConnectToAP(
70  const char * ssid = nullptr, const char * passwd = "",
71  uint8_t retryCount = CONNECT_RETRIES,
72  uint8_t security = DEFAULT_WIFI_SEC_ALL
73  ) override;
74  int ConnectToAP( nbWifiConnect connect ) override;
75  int StartAP(
76  const char * ssid = nullptr,
77  const char * passwd = "",
78  uint8_t channel = DEFAULT_TABLE_LABEL_CHANNEL,
79  uint8_t security = DEFAULT_TABLE_LABEL_SEC,
80  uint8_t cipher = DEFAULT_TABLE_LABEL_CIPH,
81  uint8_t ssidLen = 0
82  ) override;
83 
84  int StartConfigAP(uint8_t channel = DEFAULT_TABLE_LABEL_CHANNEL) override;
85 
86  // Results of Scan are valid until the next call to 'Scan' or 'FreeScanList'
87  nbWifiScanResult * Scan( const char * ssid = nullptr, uint8_t optionCount = 0, uint16_t *optionList = nullptr) override;
88  void FreeScanList();
89 
90  void Disconnect() override;
91  int StartAsyncScan( uint8_t channel = DEFAULT_WIFI_CH_ALL, const char * ssid = nullptr, uint8_t optionCount = 0, uint16_t *optionList = nullptr);
92  void SetScanResult(tstrM2mWifiscanResult * scanResult, uint8_t numAPFound);
93  void StopAP();
94 
95  // Utility Functions
96  int StoreSSIDPWToConfig( char *ssid, char *password, int ssidLen = 0) override;
97  int GetSSIDFromConfig( char *returnBuf, int maxLen ) override;
98  int GetKeyFromConfig( char *returnBuf, int maxLen ) override;
99 
100  bool isRegistered() const override;
101  int GetWifiInterfaceNumber() const override; // Get WiFi driver number
102  int GetSystemInterfaceNumber() const override; // Get Wifi Interface number
103 
104  //Status functions:
105  int GetCurSSID(char * buf, int maxlen) override;
106  MACADR GetCurBSSID() override;
107  void GetCurrentAP(driverStatusStruct *ap) override;
108  void GetDeviceInformation(nbWifiDeviceInfo *ap) override;
109  bool Connected() override; // performs a bus communication to query the module, slow
110  int GetSignalStrength() override;
111  uint8_t GetCurChannel() override;
112  uint8_t GetSecurity() override;
113  uint8_t GetCipher() override;
114  void GetMACAddress(MACADR* macAddr);
115 
116  void SetWifiEventFlag(uint8_t flag, bool setNotClear);
117  void SetConnectState(tstrM2MConnInfo * ConnInfo, bool connected, int ssidLen, MACADR * mac, bool STAmode);
118  virtual bool SetBusSpeed( uint32_t busSpeed ) = 0;
119  bool UpdateSlaveFirmware( uint32_t imageLength, const uint8_t *imageBuffer ) override;
120  friend void ::SetWifiSPISpeed( int busSpeed );
121 
123  volatile bool gbConnectedWifi;
124  volatile bool processingConnectRequest;
126  bool gbAPStarted;
128  bool gbDhcpServerStarted;
129 
130  volatile unsigned char gu8ChipMode;
131  volatile unsigned char gu8ChipSleep;
132  volatile unsigned char gu8HifSizeDone;
133 
134  private:
135  void ReadyInterface();
136  PoolPtr GetDeviceInformation();
137  int AddWaitingCommand( uint8_t requestType, uint8_t commandID, OS_MBOX *pmbox );
138 
139  protected:
140  static uint32_t DriverStk[MAX_WIFI_INTERFACES][USER_TASK_STK_SIZE];
141  volatile bool bFatalError;
142 
143  friend class Wifi;
144 
145 
146  void TransmitBuffer_Core( PoolPtr txBuffer, uint8_t credits ); //TODO: change back to virtual
147 
148  int RegisterDriver();
149  virtual void WifiTask() = 0;
150  static void WifiTaskLauncher(void *wifiDriverObj);
151 
152  uint32_t numAPFound;
153  uint32_t scanResultIndex;
154  uint32_t sta_connected;
155 
156  OS_Q wifiMsgQueue;
157  CommBus busType;
158  OS_SEM WifiTxFlowCtrl;
159  OS_SEM taskPauseSem;
160  OS_FLAGS wifiEventFlag;
161  bool hardwareInitialized;
162  uint8_t chipsetIntfNum; // WILC interface number. Differentiated by client/AP mode
163  int chipEnablePinNum;
164 
165  char softAPName[SSID_MAX_LEN + 1];
166  volatile lastConnected lastConnection;
167 
168  /* ---- Constructors ---- */
169  NBWifiWILC(CommBus busType, int resetPinConnector, int resetPinMum, int chipEnablePinNum, const char * name); // , int resetPinConnector, int resetPinMum);
170  ~NBWifiWILC();
171  };
172 }
173 
174 extern NB::Wifi * theWifiIntf;
175 
176 #endif // NBWILCDRIVER_H_
Semaphores are used to control access to shared resource critical section, or to communicate between ...
Definition: nbrtos.h:318
A queue functions as a fixed size FIFO for communication between tasks.
Definition: nbrtos.h:531
NMC1500 IoT Application Interface Internal Types.
Wi-Fi Scan Result.
Definition: m2m_types.h:1006
Definition: dhcpv6_internal.h:34
M2M Provisioning Information obtained from the HTTP Provisioning server.
Definition: m2m_types.h:1399
NetBurner Wifi API.
Mailboxes are used to communicate between tasks.
Definition: nbrtos.h:391
An OS_FLAGS object is used to set, clear, and pend on a set of flags that is held and maintained by t...
Definition: nbrtos.h:1009
void SetWifiSPISpeed(int busSpeed)
Set SPI bus speed.