Add Wifi Direct Service Discovery
[platform/core/connectivity/wifi-direct-manager.git] / oem / wifi-direct-oem.h
1 /*
2  * Network Configuration Module
3  *
4  * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19
20 /**
21  * This file declares wifi direct oem functions and structures.
22  *
23  * @file                wifi-direct-ome.h
24  * @author      Gibyoung Kim (lastkgb.kim@samsung.com)
25  * @version     0.7
26  */
27
28 #ifndef __WIFI_DIRECT_OEM_H__
29 #define __WIFI_DIRECT_OEM_H__
30
31 #define SUPPL_PLUGIN_PATH "/usr/lib/wifi-direct-plugin-wpasupplicant.so"
32
33 #define OEM_MACSTR_LEN 18
34 #define OEM_MACADDR_LEN 6
35 #define OEM_PINSTR_LEN 8
36 #define OEM_PASS_PHRASE_LEN 8
37 #define OEM_DEV_NAME_LEN 32
38 #define OEM_IFACE_NAME_LEN 16
39
40 typedef enum {
41         WFD_OEM_EVENT_NONE,
42         WFD_OEM_EVENT_DEACTIVATED,
43         WFD_OEM_EVENT_PEER_FOUND,
44         WFD_OEM_EVENT_PEER_DISAPPEARED,
45         WFD_OEM_EVENT_DISCOVERY_FINISHED,
46
47         WFD_OEM_EVENT_PROV_DISC_REQ,    // 5
48         WFD_OEM_EVENT_PROV_DISC_DISPLAY,
49         WFD_OEM_EVENT_PROV_DISC_KEYPAD,
50         WFD_OEM_EVENT_PROV_DISC_RESP,
51         WFD_OEM_EVENT_PROV_DISC_FAIL,
52
53         WFD_OEM_EVENT_GO_NEG_REQ,       // 10
54         WFD_OEM_EVENT_GO_NEG_FAIL,
55         WFD_OEM_EVENT_GO_NEG_DONE,
56         WFD_OEM_EVENT_WPS_FAIL,
57         WFD_OEM_EVENT_WPS_DONE,
58         WFD_OEM_EVENT_KEY_NEG_FAIL,     // 15
59         WFD_OEM_EVENT_KEY_NEG_DONE,
60
61         WFD_OEM_EVENT_CONN_FAIL,
62         WFD_OEM_EVENT_CONN_DONE,
63
64         WFD_OEM_EVENT_GROUP_CREATED,
65         WFD_OEM_EVENT_GROUP_DESTROYED,  // 20
66
67         WFD_OEM_EVENT_INVITATION_REQ,
68         WFD_OEM_EVENT_INVITATION_RES,
69         WFD_OEM_EVENT_STA_CONNECTED,
70         WFD_OEM_EVENT_STA_DISCONNECTED,
71
72         WFD_OEM_EVENT_CONNECTED,        // 25
73         WFD_OEM_EVENT_DISCONNECTED,
74
75         WFD_OEM_EVENT_SERV_DISC_RESP,
76
77         WFD_OEM_EVENT_TERMINATING,
78
79         WFD_OEM_EVENT_MAX,
80 } wfd_oem_event_e;
81
82 typedef struct {
83         int age;
84         char dev_name[OEM_DEV_NAME_LEN+1];
85         unsigned char dev_addr[OEM_MACADDR_LEN];
86         unsigned char intf_addr[OEM_MACADDR_LEN];
87         unsigned char go_dev_addr[OEM_MACADDR_LEN];
88         int channel;
89         int dev_role;
90         int config_methods;
91         int pri_dev_type;
92         int sec_dev_type;
93         int dev_flags;
94         int group_flags;
95         int wps_mode;
96
97         int wfd_dev_info;
98         int wfd_ctrl_port;
99         int wfd_max_tput;
100 } wfd_oem_device_s;
101
102 typedef struct {
103         unsigned char p2p_dev_addr[OEM_MACADDR_LEN];
104         unsigned char p2p_intf_addr[OEM_MACADDR_LEN];
105         char name[OEM_DEV_NAME_LEN + 1];
106         int pri_dev_type;
107         int sec_dev_type;
108         int config_methods;
109         int dev_flags;
110         int group_flags;
111         int dev_role;
112         unsigned char p2p_go_addr[OEM_MACADDR_LEN];
113 } wfd_oem_dev_data_s;
114
115 typedef struct {
116         unsigned char peer_intf_addr[OEM_MACADDR_LEN];
117         int dev_pwd_id;
118         int status;
119         int error;
120 } wfd_oem_conn_data_s;
121
122 typedef struct {
123         unsigned char go_dev_addr[OEM_MACADDR_LEN];
124         unsigned char bssid[OEM_MACADDR_LEN];
125         int listen;
126         int status;
127 } wfd_oem_invite_data_s;
128
129 typedef struct {
130         char ssid[OEM_DEV_NAME_LEN+1];
131         int freq;
132         char pass[OEM_PASS_PHRASE_LEN+1];
133         unsigned char go_dev_addr[OEM_MACADDR_LEN];
134 } wfd_oem_group_data_s;
135
136 typedef struct {
137         int event_id;
138         unsigned char dev_addr[OEM_MACADDR_LEN];        // device address
139         unsigned char intf_addr[OEM_MACADDR_LEN];
140         int wps_mode;
141         char wps_pin[OEM_PINSTR_LEN+1]; // just for DISPLAY
142         char ifname[OEM_IFACE_NAME_LEN+1];
143         int dev_role;
144         int edata_type;
145         void *edata;
146 } wfd_oem_event_s;
147
148 typedef enum {
149         WFD_OEM_EDATA_TYPE_NONE,
150         WFD_OEM_EDATA_TYPE_DEVICE,
151         WFD_OEM_EDATA_TYPE_CONN,
152         WFD_OEM_EDATA_TYPE_INVITE,
153         WFD_OEM_EDATA_TYPE_GROUP,
154         WFD_OEM_EDATA_TYPE_SERVICE,
155 } ws_event_type_e;
156
157 typedef enum {
158         WFD_OEM_SCAN_MODE_ACTIVE,
159         WFD_OEM_SCAN_MODE_PASSIVE,
160 } wfd_oem_scan_mode_e;
161
162 typedef enum {
163         WFD_OEM_SCAN_TYPE_FULL,
164         WFD_OEM_SCAN_TYPE_SOCIAL,
165         WFD_OEM_SCAN_TYPE_SPECIFIC,
166 } wfd_oem_scan_type_e;
167
168 typedef enum {
169         WFD_OEM_WPS_MODE_NONE,
170         WFD_OEM_WPS_MODE_PBC = 0x1,
171         WFD_OEM_WPS_MODE_DISPLAY = 0x2,
172         WFD_OEM_WPS_MODE_KEYPAD = 0x4,
173 } wfd_oem_wps_mode_e;
174
175 #define WFD_OEM_GROUP_FLAG_GROUP_OWNER 0x1
176 #define WFD_OEM_GROUP_FLAG_PERSISTENT_GROUP 0x2
177
178 typedef enum {
179         WFD_OEM_CONN_TYPE_NONE,
180         WFD_OEM_CONN_TYPE_JOIN,
181         WFD_OEM_CONN_TYPE_AUTH,
182         WFD_OEM_CONN_TYPE_PERSISTENT = 0x4,
183 } wfd_oem_conn_flag_e;
184
185 typedef enum {
186         WFD_OEM_DEV_ROLE_NONE,
187         WFD_OEM_DEV_ROLE_GC,
188         WFD_OEM_DEV_ROLE_GO,
189 } wfd_oem_dev_role_e;
190
191 typedef enum
192 {
193         WFD_OEM_SERVICE_ALL,
194         WFD_OEM_SERVICE_BONJOUR,
195         WFD_OEM_SERVICE_UPNP,
196         WFD_OEM_SERVICE_WSDISCOVERY,
197         WFD_OEM_SERVICE_WIFIDISPLAY,
198         WFD_OEM_SERVICE_VENDORSPEC = 0xff,
199 } wfd_oem_service_e;
200
201 typedef struct {
202         int scan_mode;
203         int scan_time;
204         int scan_type;
205         int freq;
206         int refresh;
207 } wfd_oem_scan_param_s;
208
209 typedef struct {
210         int wps_mode;
211         int conn_flags; // join, auth, persistent
212         int go_intent;
213         int freq;
214         char wps_pin[OEM_PINSTR_LEN+1];
215 } wfd_oem_conn_param_s;
216
217 typedef struct {
218         int net_id;
219         char *ifname;
220         unsigned char go_dev_addr[OEM_MACADDR_LEN];
221 } wfd_oem_invite_param_s;
222
223 typedef struct
224 {
225         int network_id;
226         char ssid[OEM_DEV_NAME_LEN + 1];
227         unsigned char go_mac_address[OEM_MACADDR_LEN];
228 } wfd_oem_persistent_group_s;
229
230 typedef int (*wfd_oem_event_cb) (void *user_data, void *event);
231
232 typedef struct _wfd_oem_ops_s {
233         int (*init) (wfd_oem_event_cb event_callback, void *user_data);
234         int (*deinit) (void);
235         int (*activate) (void);
236         int (*deactivate) (void);
237         int (*start_scan) (wfd_oem_scan_param_s *param);
238         int (*stop_scan) (void);
239         int (*get_visibility) (int *visibility);
240         int (*set_visibility) (int visibility);
241         int (*get_scan_result) (GList **peers, int *peer_count);
242         int (*get_peer_info) (unsigned char *peer_addr, wfd_oem_device_s **peer);
243         int (*prov_disc_req) (unsigned char *peer_addr, wfd_oem_wps_mode_e wps_mode, int join);
244         int (*connect) (unsigned char *peer_addr, wfd_oem_conn_param_s *param);
245         int (*disconnect) (unsigned char *peer_addr);
246         int (*reject_connection) (unsigned char *peer_addr);
247         int (*cancel_connection) (unsigned char *peer_addr);
248         int (*get_connected_peers) (GList **peers, int *peer_count);
249         int (*wps_start) (unsigned char *peer_addr, int wps_mode, const char *pin);
250         int (*enrollee_start) (unsigned char *peer_addr, int wps_mode, const char *pin);
251         int (*wps_cancel) (void);
252         int (*get_pin) (char *pin);
253         int (*set_pin) (char *pin);
254 //      int (*generate_pin) (char *pin);
255         int (*get_supported_wps_mode) (int *wps_mode);
256         int (*create_group) (int persistent, int freq);
257         int (*destroy_group) (const char *ifname);
258         int (*invite) (unsigned char *peer_addr, wfd_oem_invite_param_s *param);
259
260         int (*get_dev_name) (char *dev_name);
261         int (*set_dev_name) (char *dev_name);
262         int (*get_dev_mac) (char *dev_mac);
263         int (*get_dev_type) (int *pri_dev_type, int *sec_dev_type);
264         int (*set_dev_type) (int pri_dev_type, int sec_dev_type);
265         int (*get_go_intent) (int *go_intent);
266         int (*set_go_intent) (int go_intent);
267
268         int (*get_persistent_groups) (wfd_oem_persistent_group_s **groups, int *group_count);
269         int (*remove_persistent_group) (char *ssid, unsigned char *bssid);
270         int (*set_persistent_reconnect) (unsigned char *bssid, int reconnect);
271
272         int (*service_add) (wfd_oem_service_e type,char *data);
273         int (*service_del) (wfd_oem_service_e type,char *data);
274         int (*serv_disc_req) (unsigned char* MAC, wfd_oem_service_e type,char *data);
275         int (*serv_disc_cancel) (int identifier);
276
277 } wfd_oem_ops_s;
278
279 int wfd_oem_init(wfd_oem_ops_s *ops, wfd_oem_event_cb event_callback, void *user_data);
280 int wfd_oem_destroy(wfd_oem_ops_s *ops);
281 int wfd_oem_activate(wfd_oem_ops_s *ops);
282 int wfd_oem_deactivate(wfd_oem_ops_s *ops);
283 int wfd_oem_start_scan(wfd_oem_ops_s *ops, wfd_oem_scan_param_s *param);
284 int wfd_oem_stop_scan(wfd_oem_ops_s *ops);
285 int wfd_oem_get_visibility(wfd_oem_ops_s *ops, int *visibility);
286 int wfd_oem_set_visibility(wfd_oem_ops_s *ops, int visibility);
287 int wfd_oem_get_scan_result(wfd_oem_ops_s *ops, GList **peers, int *peer_count);
288 int wfd_oem_get_peer_info(wfd_oem_ops_s *ops, unsigned char *peer_addr, wfd_oem_device_s **peer);
289 int wfd_oem_prov_disc_req(wfd_oem_ops_s *ops, unsigned char *peer_addr, wfd_oem_wps_mode_e wps_mode, int join);
290 int wfd_oem_connect(wfd_oem_ops_s *ops, unsigned char *peer_addr, wfd_oem_conn_param_s *param);
291 int wfd_oem_disconnect(wfd_oem_ops_s *ops, unsigned char *peer_addr);
292 int wfd_oem_reject_connection(wfd_oem_ops_s *ops, unsigned char *peer_addr);
293 int wfd_oem_cancel_connection(wfd_oem_ops_s *ops, unsigned char *peer_addr);
294 int wfd_oem_get_connected_peers(wfd_oem_ops_s *ops, GList **peers, int *peer_count);
295 int wfd_oem_wps_start(wfd_oem_ops_s *ops, unsigned char *peer_addr, int wps_mode, const char *pin);
296 int wfd_oem_enrollee_start(wfd_oem_ops_s *ops, unsigned char *peer_addr, int wps_mode, const char *pin);
297 int wfd_oem_wps_cancel(wfd_oem_ops_s *ops);
298 int wfd_oem_get_pin(wfd_oem_ops_s *ops, char *pin);
299 int wfd_oem_set_pin(wfd_oem_ops_s *ops, char *pin);
300 //int wfd_oem_generate_pin(wfd_oem_ops_s *ops, char *pin);
301 int wfd_oem_get_supported_wps_mode(wfd_oem_ops_s *ops, int *wps_mode);
302 int wfd_oem_create_group(wfd_oem_ops_s *ops, int persistent, int freq);
303 int wfd_oem_destroy_group(wfd_oem_ops_s *ops, const char *ifname);
304 int wfd_oem_invite(wfd_oem_ops_s *ops, unsigned char *peer_addr, wfd_oem_invite_param_s *param);
305
306 int wfd_oem_get_dev_name(wfd_oem_ops_s *ops, char *dev_name);
307 int wfd_oem_set_dev_name(wfd_oem_ops_s *ops, char *dev_name);
308 int wfd_oem_get_dev_mac(wfd_oem_ops_s *ops, char *dev_mac);
309 int wfd_oem_get_dev_type(wfd_oem_ops_s *ops, int *pri_dev_type, int *sec_dev_type);
310 int wfd_oem_set_dev_type(wfd_oem_ops_s *ops, int priv_dev_type, int sec_dev_type);
311 int wfd_oem_get_go_intent(wfd_oem_ops_s *ops, int *go_intent);
312 int wfd_oem_set_go_intent(wfd_oem_ops_s *ops, int go_intent);
313
314 int wfd_oem_get_persistent_groups(wfd_oem_ops_s *ops, wfd_oem_persistent_group_s **groups, int *group_count);
315 int wfd_oem_remove_persistent_group(wfd_oem_ops_s *ops, char *ssid, unsigned char *bssid);
316 int wfd_oem_set_persistent_reconnect(wfd_oem_ops_s *ops, unsigned char *bssid, int reconnect);
317
318 int wfd_oem_service_add(wfd_oem_ops_s *ops, wfd_oem_service_e type, char *data);
319 int wfd_oem_service_del(wfd_oem_ops_s *ops, wfd_oem_service_e type, char *data);
320 int wfd_oem_serv_disc_req(wfd_oem_ops_s *ops, unsigned char* MAC, wfd_oem_service_e type, char *data);
321 int wfd_oem_serv_disc_cancel(wfd_oem_ops_s *ops, int identifier);
322
323 #endif /* __WIFI_DIRECT_OEM_H__ */