wifi.h revision 2bb990bfd2580f9be93a413e3a5325057977a828
1cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/*
2cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
4cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * you may not use this file except in compliance with the License.
6cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * You may obtain a copy of the License at
7cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
8cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
10cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * See the License for the specific language governing permissions and
14cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * limitations under the License.
15cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */
16cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project
17cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#ifndef _WIFI_H
18cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#define _WIFI_H
19cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project
20cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#if __cplusplus
21cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectextern "C" {
22cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#endif
23cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project
24cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/**
25cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Load the Wi-Fi driver.
26cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
27cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @return 0 on success, < 0 on failure.
28cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */
29cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectint wifi_load_driver();
30cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project
31cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/**
32cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Unload the Wi-Fi driver.
33cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
34cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @return 0 on success, < 0 on failure.
35cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */
36cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectint wifi_unload_driver();
37cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project
38cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/**
392bb990bfd2580f9be93a413e3a5325057977a828Irfan Sheriff * Check if the Wi-Fi driver is loaded.
402bb990bfd2580f9be93a413e3a5325057977a828Irfan Sheriff *
412bb990bfd2580f9be93a413e3a5325057977a828Irfan Sheriff * @return 0 on success, < 0 on failure.
422bb990bfd2580f9be93a413e3a5325057977a828Irfan Sheriff */
432bb990bfd2580f9be93a413e3a5325057977a828Irfan Sheriffint is_wifi_driver_loaded();
442bb990bfd2580f9be93a413e3a5325057977a828Irfan Sheriff
452bb990bfd2580f9be93a413e3a5325057977a828Irfan Sheriff
462bb990bfd2580f9be93a413e3a5325057977a828Irfan Sheriff/**
47cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Start supplicant.
48cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
49cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @return 0 on success, < 0 on failure.
50cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */
51cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectint wifi_start_supplicant();
52cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project
53cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/**
54cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Stop supplicant.
55cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
56cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @return 0 on success, < 0 on failure.
57cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */
58cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectint wifi_stop_supplicant();
59cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project
60cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/**
61cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Open a connection to supplicant.
62cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
63cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @return 0 on success, < 0 on failure.
64cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */
65cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectint wifi_connect_to_supplicant();
66cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project
67cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/**
68cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Close connection supplicant.
69cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
70cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @return 0 on success, < 0 on failure.
71cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */
72cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectvoid wifi_close_supplicant_connection();
73cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project
74cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/**
75cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * wifi_wait_for_event() performs a blocking call to
76cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * get a Wi-Fi event and returns a string representing
77cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * a Wi-Fi event when it occurs.
78cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
79cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @param buf is the buffer that receives the event
80cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @param len is the maximum length of the buffer
81cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
82cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @returns number of bytes in buffer, 0 if no
83cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * event (for instance, no connection), and less than 0
84cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * if there is an error.
85cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */
86cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectint wifi_wait_for_event(char *buf, size_t len);
87cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project
88cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/**
89cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * wifi_command() issues a command to the Wi-Fi driver.
90cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
91cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Android extends the standard commands listed at
92cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * /link http://hostap.epitest.fi/wpa_supplicant/devel/ctrl_iface_page.html
93cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * to include support for sending commands to the driver:
94cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
95cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * <table border="2" cellspacing="2" cellpadding="2">
96cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *   <tr>
97cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td><strong>Command / Command summary</strong></td>
98cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td><strong>Form of Response</strong></td>
99cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td><strong>Processing</strong></td>
100cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *   </tr>
101cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *   <tr>
102cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>DRIVER START<BR>&nbsp;&nbsp;Turn on Wi-Fi Hardware</td>
103cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>OK if successful</td>
104cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>OK ? true : false</td>
105cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *   </tr>
106cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *   <tr>
107cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>DRIVER STOP<BR>&nbsp;&nbsp;Turn off Wi-Fi hardware</td>
108cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>OK if successful</td>
109cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>OK ? true : false</td>
110cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *   </tr>
111cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *   <tr>
112cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>DRIVER RSSI<BR>&nbsp;&nbsp;Return received signal strength indicator in -db for current AP</td>
113cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>&lt;ssid&gt; Rssi xx</td>
114cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>%*s %*s %d", &rssi</td>
115cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *   </tr>
116cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *   <tr>
117cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>DRIVER LINKSPEED<BR>&nbsp;&nbsp;Return link speed in MBPS</td>
118cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>LinkSpeed xx</td>
119cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>%*s %d", &linkspd</td>
120cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *   </tr>
121cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *   <tr>
122cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>DRIVER MACADDR<BR>&nbsp;&nbsp;Return mac address of the station</td>
123cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>Macaddr = xx.xx.xx.xx.xx.xx</td>
124cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>"%*s = %s", &macadr</td>
125cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *   </tr>
126cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *   <tr>
127cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>DRIVER SCAN-ACTIVE<BR>&nbsp;&nbsp;Set scan type to active</td>
128cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>"OK" if successful</td>
129cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>"OK" ? true : false</td>
130cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *   </tr>
131cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *   <tr>
132cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>DRIVER SCAN-PASSIVE<BR>&nbsp;&nbsp;Set scan type to passive</td>
133cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>"OK" if successful</td>
134cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *     <td>"OK" ? true : false</td>
135cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *   </tr>
136cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * </table>
137cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
138cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * See libs/android_runtime/android_net_wifi_Wifi.cpp for more information
139cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * describing how these and other commands are invoked.
140cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
141cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @param command is the string command
142cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @param reply is a buffer to receive a reply string
143cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @param reply_len on entry, this is the maximum length of
144cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *        the reply buffer. On exit, the number of
145cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *        bytes in the reply buffer.
146cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
147cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @return 0 if successful, < 0 if an error.
148cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */
149cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectint wifi_command(const char *command, char *reply, size_t *reply_len);
150cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project
151cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/**
152cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * do_dhcp_request() issues a dhcp request and returns the acquired
153cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * information.
154cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
155cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * All IPV4 addresses/mask are in network byte order.
156cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
157cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @param ipaddr return the assigned IPV4 address
158cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @param gateway return the gateway being used
159cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @param mask return the IPV4 mask
160cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @param dns1 return the IPV4 address of a DNS server
161cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @param dns2 return the IPV4 address of a DNS server
162cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @param server return the IPV4 address of DHCP server
163cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @param lease return the length of lease in seconds.
164cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project *
165cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * @return 0 if successful, < 0 if error.
166cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */
167cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectint do_dhcp_request(int *ipaddr, int *gateway, int *mask,
168cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project                   int *dns1, int *dns2, int *server, int *lease);
169cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project
170cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project/**
171cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project * Return the error string of the last do_dhcp_request().
172cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project */
173cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Projectconst char *get_dhcp_error_string();
174cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project
175cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#if __cplusplus
176cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project};  // extern "C"
177cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#endif
178cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project
179cc490161f6af9e4a6842ee827e4bfc43bc4509d5The Android Open Source Project#endif  // _WIFI_H
180