ArDrone SDK 1.8 added
[mardrone] / mardrone / ARDrone_SDK_Version_1_8_20110726 / Examples / Linux / Navigation / Sources / common / mobile_wifi.c
1  
2 #include <iwlib.h>
3
4 int connect_wifi()
5 {
6   struct iwreq wrq;
7   char essid[IW_ESSID_MAX_SIZE + 1];
8   unsigned char key[IW_ENCODING_TOKEN_MAX];
9   int32_t keylen = 0;
10
11   int wlsock = iw_sockets_open();
12
13   const char *itfName = "wlan0";
14   const char *networkName = "linksys";
15   const char *com_key = "9F1C3EE11CBA230B27BF1C1B6F";
16   if(wlsock < 0)
17     return -1;
18
19   memset(&wrq,0,sizeof(struct iwreq));
20
21   keylen = iw_in_key_full(wlsock, itfName, com_key, key, &wrq.u.data.flags);
22   if(keylen <= 0)
23     return -1;
24
25   wrq.u.data.length   = keylen;
26   wrq.u.data.pointer  = (caddr_t) key;
27   wrq.u.data.flags |= IW_ENCODE_RESTRICTED;
28
29   if(iw_set_ext(wlsock, itfName, SIOCSIWENCODE, &wrq) < 0)
30     return -1;
31
32   memset(&wrq,0,sizeof(struct iwreq));
33
34   wrq.u.mode = IW_MODE_INFRA;
35
36   if(iw_set_ext( wlsock, itfName, SIOCSIWMODE, &wrq) < 0)
37     return -1;
38
39   if(strlen(networkName) > IW_ESSID_MAX_SIZE)
40     return -1;
41
42   memset(essid,0,IW_ESSID_MAX_SIZE + 1);
43   memset(&wrq,0,sizeof(struct iwreq));
44
45   strncpy(essid,networkName,strlen(networkName));
46   wrq.u.essid.flags = 1;
47   wrq.u.essid.pointer = (caddr_t) essid;
48   wrq.u.essid.length = strlen(essid) + 1;
49
50   if(iw_set_ext( wlsock, itfName, SIOCSIWESSID, &wrq) < 0)
51     return -1;
52
53   iw_sockets_close(wlsock);
54
55   return 0;
56
57 }
58