ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / Examples / Linux / Navigation / Sources / common / mobile_wifi.c
diff --git a/mardrone/ARDrone_SDK_Version_1_8_20110726/Examples/Linux/Navigation/Sources/common/mobile_wifi.c b/mardrone/ARDrone_SDK_Version_1_8_20110726/Examples/Linux/Navigation/Sources/common/mobile_wifi.c
new file mode 100644 (file)
index 0000000..7d2f283
--- /dev/null
@@ -0,0 +1,58 @@
+#include <iwlib.h>
+
+int connect_wifi()
+{
+  struct iwreq wrq;
+  char essid[IW_ESSID_MAX_SIZE + 1];
+  unsigned char key[IW_ENCODING_TOKEN_MAX];
+  int32_t keylen = 0;
+
+  int wlsock = iw_sockets_open();
+
+  const char *itfName = "wlan0";
+  const char *networkName = "linksys";
+  const char *com_key = "9F1C3EE11CBA230B27BF1C1B6F";
+  if(wlsock < 0)
+    return -1;
+
+  memset(&wrq,0,sizeof(struct iwreq));
+
+  keylen = iw_in_key_full(wlsock, itfName, com_key, key, &wrq.u.data.flags);
+  if(keylen <= 0)
+    return -1;
+
+  wrq.u.data.length   = keylen;
+  wrq.u.data.pointer  = (caddr_t) key;
+  wrq.u.data.flags |= IW_ENCODE_RESTRICTED;
+
+  if(iw_set_ext(wlsock, itfName, SIOCSIWENCODE, &wrq) < 0)
+    return -1;
+
+  memset(&wrq,0,sizeof(struct iwreq));
+
+  wrq.u.mode = IW_MODE_INFRA;
+
+  if(iw_set_ext( wlsock, itfName, SIOCSIWMODE, &wrq) < 0)
+    return -1;
+
+  if(strlen(networkName) > IW_ESSID_MAX_SIZE)
+    return -1;
+
+  memset(essid,0,IW_ESSID_MAX_SIZE + 1);
+  memset(&wrq,0,sizeof(struct iwreq));
+
+  strncpy(essid,networkName,strlen(networkName));
+  wrq.u.essid.flags = 1;
+  wrq.u.essid.pointer = (caddr_t) essid;
+  wrq.u.essid.length = strlen(essid) + 1;
+
+  if(iw_set_ext( wlsock, itfName, SIOCSIWESSID, &wrq) < 0)
+    return -1;
+
+  iw_sockets_close(wlsock);
+
+  return 0;
+
+}
+