The WDCInterface is is a drop-in replacement for an EthernetInterface class that allows the user to connect to the Internet with a Wistron NeWeb Corporation (WNC) M14A2A Series data module using the standard network Socket API's. This interface class is used in the AT&T Cellular IoT Starter Kit which is sold by Avnet (http://cloudconnectkits.org/product/att-cellular-iot-starter-kit).

Dependencies:   WncControllerK64F

Dependents:   WNCProximityMqtt Pubnub_ATT_IoT_SK_WNC_sync BluemixDemo BluemixQS ... more

See the WNCInterface README in the Wiki tab for detailed information on this library.

Revision:
0:55ec71dc0347
Child:
3:1d7e6ed11269
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WNCInterface.h	Wed Sep 21 14:30:06 2016 +0000
@@ -0,0 +1,140 @@
+/* =====================================================================
+   Copyright © 2016, Avnet (R)
+
+   Contributors:
+     * James Flynn, www.em.avnet.com 
+ 
+   Licensed under the Apache License, Version 2.0 (the "License"); 
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, 
+   software distributed under the License is distributed on an 
+   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
+   either express or implied. See the License for the specific 
+   language governing permissions and limitations under the License.
+
+    @file          WNCInterface.h
+    @version       1.0
+    @date          Sept 2016
+
+======================================================================== */
+
+
+#include <stddef.h>
+#include "WncControllerK64F/WncControllerK64F.h"
+
+#ifndef _WNCINTERFACE_H_
+#define _WNCINTERFACE_H_
+
+#define WNC_DEBUG   1   //1=enable the WNC debug port
+                                //0=disable the WNC debug port
+#define STOP_ON_FE  1   //1=hang forever if a fatal error occurs
+                //0=simply return failed response for all socket calls
+#define DISPLAY_FE  1   //1 to display the fatal error when it occurs
+                //0 to NOT display the fatal error
+#define APN_DEFAULT     "m2m.com.attz"
+                        
+//
+// WNC Error Handling macros & data
+//
+#define FATAL_FLAG  WncController_fk::WncController::WNC_NO_RESPONSE
+#define WNC_GOOD    WncController_fk::WncController::WNC_ON
+
+#define RETfail return -1
+#define RETvoid return
+#define RETnull return NULL
+#define DORET(x) RET##x
+
+#define TOSTR(x) #x
+#define INTSTR(x) TOSTR(x)
+#define FATAL_STR __FILE__ ":" INTSTR(__LINE__)
+
+#if DISPLAY_FE == 1
+#define PFE     printf("WNC FAILED @ %s\r\n", FATAL_STR)
+#else
+#define PFE
+#endif
+
+#if STOP_ON_FE == 1
+#define FATAL_WNC_ERROR(v)  {extern char *_fatal_err_loc;_fatal_err_loc=FATAL_STR;PFE;while(1);}
+#else
+#define FATAL_WNC_ERROR(v)  {extern char *_fatal_err_loc;_fatal_err_loc=FATAL_STR;PFE;DORET(v);}
+#endif
+
+
+// Because the WncController has intermixed socket & interface functionallity
+// will need to make the Socket class a friend of the Interface class. This 
+// will allow the Socket class to get to the WNC functions needed for the
+// socket. Forward reference the class
+
+class Socket;
+class Endpoint;
+class UDPSocket;
+class TCPSocketConnection;
+
+class WNCInterface
+{
+  class WncControllerK64F;  //forward reference the Controller Class
+  friend class TCPSocketConnection;
+  friend class UDPSocket;
+  friend class Endpoint;
+  friend class Socket;
+
+public:
+  /** Create WNC Data Module Interface Instance for the device (M14A2A) */
+  WNCInterface();
+
+  /** Initialize the interface (no connection at this point).
+  * \return 0 on success, a negative number on failure
+  */
+  static int init(const char* apn=NULL, int debug=0); 
+
+  /** Open an LTE internet data connection
+      @return 0 on success, error code on failure
+  */
+  int connect(void);
+
+  /** Disconnect
+  * Bring the interface down
+  * \return 0 on success, a negative number on failure
+  */
+  static int disconnect();
+  
+  /** Because the WNCInterface is cellular based there is no MAC Ethernet address to return, so this function
+   *  returns a bogus MAC address created from the ICCD on the SIM that is being used.
+   * \return a pointer to a pesudo-MAC string containing "NN:NN:NN:NN:NN:NN"
+   */
+  static char* getMACAddress();
+  
+  /** Get the IP address of your Ethernet interface
+   * \return a pointer to a string containing the IP address
+   */
+  static char* getIPAddress();
+
+  /** Get the Gateway address of your Ethernet interface
+   * \return a pointer to a string containing the Gateway address
+   */
+  static char* getGateway();
+
+  /** Get the Network mask of your Ethernet interface
+   * \return a pointer to a string containing the Network mask
+   */
+  static char* getNetworkMask();
+  
+  /** Manipulate the debug output of the WncController, for debug purposes.
+   * \return nothing.
+   */
+  void doDebug(int val);  //doing this so I can get to the wnc controller pointer
+
+private:
+  static WncController_fk::WncIpStats myNetStats;     //maintaint the network statistics
+  static WncControllerK64F_fk::WncControllerK64F *_pwnc;  //pointer to the WncController instance
+  static string mac;
+};
+
+#endif /* _WNCINTERFACE_ */
+
+