2 * Network Configuration Module
4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 * This file declares wifi direct oem functions and structures.
23 * @file wifi-direct-ome.h
24 * @author Gibyoung Kim (lastkgb.kim@samsung.com)
28 #ifndef __WIFI_DIRECT_OEM_H__
29 #define __WIFI_DIRECT_OEM_H__
31 #define SUPPL_PLUGIN_PATH "/usr/lib/wifi-direct-plugin-wpasupplicant.so"
33 #define OEM_MACSTR_LEN 18
34 #define OEM_MACADDR_LEN 6
35 #define OEM_IPADDR_LEN 4
36 #define OEM_PINSTR_LEN 8
37 #define OEM_PASS_PHRASE_LEN 64
38 #define OEM_DEV_NAME_LEN 32
39 #define OEM_IFACE_NAME_LEN 16
40 #define OEM_SERVICE_TYPE_LEN 8
41 #define OEM_QUERY_ID_LEN 15
42 #define OEM_SERVICE_MAX_LEN 1024
45 WFD_OEM_SC_SUCCESS = 0,
46 WFD_OEM_SC_FAIL_INFO_CURRENTLY_UNAVAILABLE = 1,
47 WFD_OEM_SC_FAIL_INCOMPATIBLE_PARAMS = 2,
48 WFD_OEM_SC_FAIL_LIMIT_REACHED = 3,
49 WFD_OEM_SC_FAIL_INVALID_PARAMS = 4,
50 WFD_OEM_SC_FAIL_UNABLE_TO_ACCOMMODATE = 5,
51 WFD_OEM_SC_FAIL_PREV_PROTOCOL_ERROR = 6,
52 WFD_OEM_SC_FAIL_NO_COMMON_CHANNELS = 7,
53 WFD_OEM_SC_FAIL_UNKNOWN_GROUP = 8,
54 WFD_OEM_SC_FAIL_BOTH_GO_INTENT_15 = 9,
55 WFD_OEM_SC_FAIL_INCOMPATIBLE_PROV_METHOD = 10,
56 WFD_OEM_SC_FAIL_REJECTED_BY_USER = 11,
57 } wfd_oem_status_code_e;
60 WFD_OEM_WPA_STATE_DISCONNECTED,
61 WFD_OEM_WPA_STATE_INTERFACE_DISABLED,
62 WFD_OEM_WPA_STATE_INACTIVE,
63 WFD_OEM_WPA_STATE_SCANNING,
64 WFD_OEM_WPA_STATE_AUTHENTICATING,
65 WFD_OEM_WPA_STATE_ASSOCIATING,
66 WFD_OEM_WPA_STATE_ASSOCIATED,
67 WFD_OEM_WPA_STATE_4WAY_HANDSHAKE,
68 WFD_OEM_WPA_STATE_GROUP_HANDSHAKE,
69 WFD_OEM_WPA_STATE_COMPLETED,
70 WFD_OEM_WPA_STATE_MAX,
71 } ws_wpa_state_type_e;
75 WFD_OEM_EVENT_DEACTIVATED,
76 WFD_OEM_EVENT_PEER_FOUND,
77 WFD_OEM_EVENT_PEER_DISAPPEARED,
78 WFD_OEM_EVENT_DISCOVERY_FINISHED,
80 WFD_OEM_EVENT_PROV_DISC_REQ, // 5
81 WFD_OEM_EVENT_PROV_DISC_RESP,
82 WFD_OEM_EVENT_PROV_DISC_FAIL,
84 WFD_OEM_EVENT_GO_NEG_REQ,
85 WFD_OEM_EVENT_GO_NEG_FAIL,
86 WFD_OEM_EVENT_GO_NEG_DONE, // 10
87 WFD_OEM_EVENT_WPS_FAIL,
88 WFD_OEM_EVENT_WPS_DONE,
89 WFD_OEM_EVENT_KEY_NEG_FAIL,
90 WFD_OEM_EVENT_KEY_NEG_DONE,
92 WFD_OEM_EVENT_CONN_FAIL, // 15
93 WFD_OEM_EVENT_CONN_DONE,
95 WFD_OEM_EVENT_GROUP_CREATED,
96 WFD_OEM_EVENT_GROUP_DESTROYED,
98 WFD_OEM_EVENT_INVITATION_REQ,
99 WFD_OEM_EVENT_INVITATION_RES, // 20
100 WFD_OEM_EVENT_STA_CONNECTED,
101 WFD_OEM_EVENT_STA_DISCONNECTED,
103 WFD_OEM_EVENT_CONNECTED,
104 WFD_OEM_EVENT_DISCONNECTED,
106 WFD_OEM_EVENT_TERMINATING, // 25
108 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
109 WFD_OEM_EVENT_SERV_DISC_RESP,
110 WFD_OEM_EVENT_SERV_DISC_STARTED,
111 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
116 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
118 WFD_OEM_DISPLAY_TYPE_SOURCE,
119 WFD_OEM_DISPLAY_TYPE_PRISINK,
120 WFD_OEM_DISPLAY_TYPE_SECSINK,
121 WFD_OEM_DISPLAY_TYPE_DUAL,
122 } wfd_oem_display_type_e;
134 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
138 char dev_name[OEM_DEV_NAME_LEN+1];
139 unsigned char dev_addr[OEM_MACADDR_LEN];
140 unsigned char intf_addr[OEM_MACADDR_LEN];
141 unsigned char go_dev_addr[OEM_MACADDR_LEN];
150 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
151 wfd_oem_display_s display;
152 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
156 unsigned char p2p_dev_addr[OEM_MACADDR_LEN];
157 unsigned char p2p_intf_addr[OEM_MACADDR_LEN];
158 char name[OEM_DEV_NAME_LEN + 1];
165 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
166 wfd_oem_display_s display;
167 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
168 unsigned char p2p_go_addr[OEM_MACADDR_LEN];
169 } wfd_oem_dev_data_s;
172 char ssid[OEM_DEV_NAME_LEN+1];
173 unsigned char peer_device_addr[OEM_MACADDR_LEN];
174 unsigned char peer_intf_addr[OEM_MACADDR_LEN];
175 int persistent_group;
179 } wfd_oem_conn_data_s;
182 unsigned char go_dev_addr[OEM_MACADDR_LEN];
183 unsigned char bssid[OEM_MACADDR_LEN];
186 } wfd_oem_invite_data_s;
189 char ssid[OEM_DEV_NAME_LEN+1];
191 char pass[OEM_PASS_PHRASE_LEN+1];
192 unsigned char go_dev_addr[OEM_MACADDR_LEN];
193 } wfd_oem_group_data_s;
195 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
197 WFD_OEM_SERV_STATUS_SUCCESS,
198 WFD_OEM_SERV_STATUS_FAIL,
199 } wfd_oem_serv_status_e;
202 WFD_OEM_SERV_TYPE_ALL,
203 WFD_OEM_SERV_TYPE_BTADDR,
204 } wfd_oem_serv_type_e;
209 unsigned char data[OEM_MACADDR_LEN];
210 unsigned char value[20];
211 } wfd_oem_service_data_s;
212 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
216 unsigned char dev_addr[OEM_MACADDR_LEN]; // device address
217 unsigned char intf_addr[OEM_MACADDR_LEN];
219 char wps_pin[OEM_PINSTR_LEN+1]; // just for DISPLAY
220 char ifname[OEM_IFACE_NAME_LEN+1];
227 WFD_OEM_EDATA_TYPE_NONE,
228 WFD_OEM_EDATA_TYPE_DEVICE,
229 WFD_OEM_EDATA_TYPE_CONN,
230 WFD_OEM_EDATA_TYPE_INVITE,
231 WFD_OEM_EDATA_TYPE_GROUP,
232 WFD_OEM_EDATA_TYPE_SERVICE,
233 WFD_OEM_EDATA_TYPE_NEW_SERVICE,
237 WFD_OEM_SCAN_MODE_ACTIVE,
238 WFD_OEM_SCAN_MODE_PASSIVE,
239 } wfd_oem_scan_mode_e;
242 WFD_OEM_SCAN_TYPE_FULL,
243 WFD_OEM_SCAN_TYPE_SOCIAL,
244 WFD_OEM_SCAN_TYPE_SPECIFIC,
245 WFD_OEM_SCAN_TYPE_CHANNEL1,
246 WFD_OEM_SCAN_TYPE_CHANNEL6,
247 WFD_OEM_SCAN_TYPE_CHANNEL11,
248 WFD_OEM_SCAN_TYPE_GO_FREQ,
249 } wfd_oem_scan_type_e;
252 WFD_OEM_WPS_MODE_NONE,
253 WFD_OEM_WPS_MODE_PBC = 0x1,
254 WFD_OEM_WPS_MODE_DISPLAY = 0x2,
255 WFD_OEM_WPS_MODE_KEYPAD = 0x4,
256 } wfd_oem_wps_mode_e;
258 #define WFD_OEM_GROUP_FLAG_GROUP_OWNER 0x1
259 #define WFD_OEM_GROUP_FLAG_PERSISTENT_GROUP 0x2
262 WFD_OEM_CONN_TYPE_NONE,
263 WFD_OEM_CONN_TYPE_JOIN,
264 WFD_OEM_CONN_TYPE_AUTH,
265 WFD_OEM_CONN_TYPE_PERSISTENT = 0x4,
266 } wfd_oem_conn_flag_e;
269 WFD_OEM_DEV_ROLE_NONE,
272 } wfd_oem_dev_role_e;
280 } wfd_oem_scan_param_s;
284 int conn_flags; // join, auth, persistent
287 char wps_pin[OEM_PINSTR_LEN+1];
288 } wfd_oem_conn_param_s;
293 unsigned char go_dev_addr[OEM_MACADDR_LEN];
294 } wfd_oem_invite_param_s;
297 WFD_OEM_CONFIG_ATTR_STR_DEVICE_NAME,
298 WFD_OEM_CONFIG_ATTR_STR_SSID_POSTFIX,
299 WFD_OEM_CONFIG_ATTR_STR_COUNTRY,
300 WFD_OEM_CONFIG_ATTR_NUM_GO_INTENT,
301 WFD_OEM_CONFIG_ATTR_NUM_LISTEN_FREQ,
302 WFD_OEM_CONFIG_ATTR_NUM_OPER_FREQ,
303 WFD_OEM_CONFIG_ATTR_NUM_PREF_FREQ,
304 WFD_OEM_CONFIG_ATTR_NUM_PERSIST_RECONN,
305 WFD_OEM_CONFIG_ATTR_NUM_WIFI_DISPLAY,
306 WFD_OEM_CONFIG_ATTR_NUM_P2P_DISABLED,
307 WFD_OEM_CONFIG_ATTR_NUM_MAX_STA,
308 WFD_OEM_CONFIG_ATTR_LIMIT = WFD_OEM_CONFIG_ATTR_NUM_MAX_STA,
309 } wfd_oem_conf_attr_e;
311 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
313 WFD_OEM_SERVICE_TYPE_ALL,
314 WFD_OEM_SERVICE_TYPE_BONJOUR,
315 WFD_OEM_SERVICE_TYPE_UPNP,
316 WFD_OEM_SERVICE_TYPE_WS_DISCOVERY,
317 WFD_OEM_SERVICE_TYPE_WIFI_DISPLAY,
318 WFD_OEM_SERVICE_TYPE_BT_ADDR,
319 WFD_OEM_SERVICE_TYPE_CONTACT_INFO,
320 WFD_OEM_SERVICE_TYPE_VENDOR = 0xff,
321 } wfd_oem_service_type_e;
324 WFD_OEM_BONJOUR_RDATA_PTR = 0x0c,
325 WFD_OEM_BONJOUR_RDATA_TXT = 0x10,
326 }wfd_oem_bonjour_rdata_type_e;
329 /** Device address for which service discovery is requested */
330 char dev_addr[OEM_MACSTR_LEN+1];
332 /** service type requested */
333 char service_type[OEM_SERVICE_TYPE_LEN+1];
335 /** query identifier returned by wpa_supplicant for each service discovery request */
336 char query_id[OEM_QUERY_ID_LEN+1];
352 wfd_oem_bonjour_rdata_type_e rdata_type;
359 } wfd_oem_new_service_s;
360 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
365 char ssid[OEM_DEV_NAME_LEN + 1];
366 unsigned char go_mac_address[OEM_MACADDR_LEN];
367 } wfd_oem_persistent_group_s;
369 typedef int (*wfd_oem_event_cb) (void *user_data, void *event);
371 typedef struct _wfd_oem_ops_s {
372 int (*init) (wfd_oem_event_cb event_callback, void *user_data);
373 int (*deinit) (void);
374 int (*activate) (int concurrent);
375 int (*deactivate) (int concurrent);
376 int (*start_scan) (wfd_oem_scan_param_s *param);
377 int (*stop_scan) (void);
378 int (*get_visibility) (int *visibility);
379 int (*set_visibility) (int visibility);
380 int (*get_scan_result) (GList **peers, int *peer_count);
381 int (*get_peer_info) (unsigned char *peer_addr, wfd_oem_device_s **peer);
382 int (*prov_disc_req) (unsigned char *peer_addr, wfd_oem_wps_mode_e wps_mode, int join);
383 int (*connect) (unsigned char *peer_addr, wfd_oem_conn_param_s *param);
384 int (*disconnect) (unsigned char *peer_addr);
385 int (*reject_connection) (unsigned char *peer_addr);
386 int (*cancel_connection) (unsigned char *peer_addr);
387 int (*get_connected_peers) (GList **peers, int *peer_count);
388 int (*wps_start) (unsigned char *peer_addr, int wps_mode, const char *pin);
389 int (*enrollee_start) (unsigned char *peer_addr, int wps_mode, const char *pin);
390 int (*wps_cancel) (void);
391 int (*get_pin) (char *pin);
392 int (*set_pin) (char *pin);
393 // int (*generate_pin) (char *pin);
394 int (*get_supported_wps_mode) (int *wps_mode);
395 int (*create_group) (int persistent, int freq, const char *passphrase);
396 int (*destroy_group) (const char *ifname);
397 int (*invite) (unsigned char *peer_addr, wfd_oem_invite_param_s *param);
399 int (*get_dev_name) (char *dev_name);
400 int (*set_dev_name) (char *dev_name);
401 int (*get_dev_mac) (char *dev_mac);
402 int (*get_dev_type) (int *pri_dev_type, int *sec_dev_type);
403 int (*set_dev_type) (int pri_dev_type, int sec_dev_type);
404 int (*get_go_intent) (int *go_intent);
405 int (*set_go_intent) (int go_intent);
406 int (*set_country) (char *ccode);
407 // int (*get_country) (char **ccode);
409 int (*get_persistent_groups) (wfd_oem_persistent_group_s **groups, int *group_count);
410 int (*remove_persistent_group) (char *ssid, unsigned char *bssid);
411 int (*set_persistent_reconnect) (unsigned char *bssid, int reconnect);
413 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
414 int (*start_service_discovery) (unsigned char mac_addr[6], int service_type);
415 int (*cancel_service_discovery) (unsigned char mac_addr[6], int service_type);
417 int (*serv_add) (wfd_oem_new_service_s *service);
418 int (*serv_del) (wfd_oem_new_service_s *service);
419 int (*serv_disc_start) (wfd_oem_new_service_s *service);
420 int (*serv_disc_stop) (int handle);
421 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
423 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
424 int (*miracast_init) (int enable);
425 int (*set_display) (wfd_oem_display_s *wifi_display);
426 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
428 int (*refresh) (void);
432 int wfd_oem_init(wfd_oem_ops_s *ops, wfd_oem_event_cb event_callback, void *user_data);
433 int wfd_oem_destroy(wfd_oem_ops_s *ops);
434 int wfd_oem_activate(wfd_oem_ops_s *ops, int concurrent);
435 int wfd_oem_deactivate(wfd_oem_ops_s *ops, int concurrent);
436 int wfd_oem_start_scan(wfd_oem_ops_s *ops, wfd_oem_scan_param_s *param);
437 int wfd_oem_stop_scan(wfd_oem_ops_s *ops);
438 int wfd_oem_get_visibility(wfd_oem_ops_s *ops, int *visibility);
439 int wfd_oem_set_visibility(wfd_oem_ops_s *ops, int visibility);
440 int wfd_oem_get_scan_result(wfd_oem_ops_s *ops, GList **peers, int *peer_count);
441 int wfd_oem_get_peer_info(wfd_oem_ops_s *ops, unsigned char *peer_addr, wfd_oem_device_s **peer);
442 int wfd_oem_prov_disc_req(wfd_oem_ops_s *ops, unsigned char *peer_addr, wfd_oem_wps_mode_e wps_mode, int join);
443 int wfd_oem_connect(wfd_oem_ops_s *ops, unsigned char *peer_addr, wfd_oem_conn_param_s *param);
444 int wfd_oem_disconnect(wfd_oem_ops_s *ops, unsigned char *peer_addr);
445 int wfd_oem_reject_connection(wfd_oem_ops_s *ops, unsigned char *peer_addr);
446 int wfd_oem_cancel_connection(wfd_oem_ops_s *ops, unsigned char *peer_addr);
447 int wfd_oem_get_connected_peers(wfd_oem_ops_s *ops, GList **peers, int *peer_count);
448 int wfd_oem_wps_start(wfd_oem_ops_s *ops, unsigned char *peer_addr, int wps_mode, const char *pin);
449 int wfd_oem_enrollee_start(wfd_oem_ops_s *ops, unsigned char *peer_addr, int wps_mode, const char *pin);
450 int wfd_oem_wps_cancel(wfd_oem_ops_s *ops);
451 int wfd_oem_get_pin(wfd_oem_ops_s *ops, char *pin);
452 int wfd_oem_set_pin(wfd_oem_ops_s *ops, char *pin);
453 //int wfd_oem_generate_pin(wfd_oem_ops_s *ops, char *pin);
454 int wfd_oem_get_supported_wps_mode(wfd_oem_ops_s *ops, int *wps_mode);
455 int wfd_oem_create_group(wfd_oem_ops_s *ops, int persistent, int freq, const char *passphrase);
456 int wfd_oem_destroy_group(wfd_oem_ops_s *ops, const char *ifname);
457 int wfd_oem_invite(wfd_oem_ops_s *ops, unsigned char *peer_addr, wfd_oem_invite_param_s *param);
459 int wfd_oem_get_dev_name(wfd_oem_ops_s *ops, char *dev_name);
460 int wfd_oem_set_dev_name(wfd_oem_ops_s *ops, char *dev_name);
461 int wfd_oem_get_dev_mac(wfd_oem_ops_s *ops, char *dev_mac);
462 int wfd_oem_get_dev_type(wfd_oem_ops_s *ops, int *pri_dev_type, int *sec_dev_type);
463 int wfd_oem_set_dev_type(wfd_oem_ops_s *ops, int priv_dev_type, int sec_dev_type);
464 int wfd_oem_get_go_intent(wfd_oem_ops_s *ops, int *go_intent);
465 int wfd_oem_set_go_intent(wfd_oem_ops_s *ops, int go_intent);
466 int wfd_oem_set_country(wfd_oem_ops_s *ops, char *ccode);
468 int wfd_oem_get_persistent_groups(wfd_oem_ops_s *ops, wfd_oem_persistent_group_s **groups, int *group_count);
469 int wfd_oem_remove_persistent_group(wfd_oem_ops_s *ops, char *ssid, unsigned char *bssid);
470 int wfd_oem_set_persistent_reconnect(wfd_oem_ops_s *ops, unsigned char *bssid, int reconnect);
472 #ifdef TIZEN_FEATURE_SERVICE_DISCOVERY
473 int wfd_oem_start_service_discovery(wfd_oem_ops_s *ops, unsigned char *peer_addr, int service_type);
474 int wfd_oem_cancel_service_discovery(wfd_oem_ops_s *ops, unsigned char *peer_addr, int service_type);
476 int wfd_oem_serv_add(wfd_oem_ops_s *ops, wfd_oem_new_service_s *service);
477 int wfd_oem_serv_del(wfd_oem_ops_s *ops, wfd_oem_new_service_s *service);
478 int wfd_oem_serv_disc_start(wfd_oem_ops_s *ops, wfd_oem_new_service_s *service);
479 int wfd_oem_serv_disc_stop(wfd_oem_ops_s *ops, int handle);
480 #endif /* TIZEN_FEATURE_SERVICE_DISCOVERY */
482 #ifdef TIZEN_FEATURE_WIFI_DISPLAY
483 int wfd_oem_miracast_init(wfd_oem_ops_s *ops, int enable);
484 int wfd_oem_set_display(wfd_oem_ops_s *ops, wfd_oem_display_s *wifi_display);
485 #endif /* TIZEN_FEATURE_WIFI_DISPLAY */
487 int wfd_oem_refresh(wfd_oem_ops_s *ops);
489 #endif /* __WIFI_DIRECT_OEM_H__ */