return ops->get_supported_wps_mode(wps_mode);
}
-int wfd_oem_create_group(wfd_oem_ops_s *ops, int persistent, int freq, const char *passphrase)
+int wfd_oem_create_group(wfd_oem_ops_s *ops, wfd_oem_group_param_s *param)
{
if (!ops || !ops->create_group) {
return -1;
}
- return ops->create_group(persistent, freq, passphrase);
+ return ops->create_group(param);
}
int wfd_oem_destroy_group(wfd_oem_ops_s *ops, const char *ifname)
} wfd_oem_conn_param_s;
typedef struct {
+ int persistent;
+ int persistent_group_id;
+ int freq;
+ char passphrase[OEM_PASS_PHRASE_LEN + 1];
+} wfd_oem_group_param_s;
+
+typedef struct {
int net_id;
char *ifname;
unsigned char go_dev_addr[OEM_MACADDR_LEN];
int (*set_pin) (char *pin);
int (*generate_pin) (char **pin);
int (*get_supported_wps_mode) (int *wps_mode);
- int (*create_group) (int persistent, int freq, const char *passphrase);
+ int (*create_group) (wfd_oem_group_param_s *param);
int (*destroy_group) (const char *ifname);
int (*invite) (unsigned char *peer_addr, wfd_oem_invite_param_s *param);
int wfd_oem_set_pin(wfd_oem_ops_s *ops, char *pin);
int wfd_oem_generate_pin(wfd_oem_ops_s *ops, char **pin);
int wfd_oem_get_supported_wps_mode(wfd_oem_ops_s *ops, int *wps_mode);
-int wfd_oem_create_group(wfd_oem_ops_s *ops, int persistent, int freq, const char *passphrase);
+int wfd_oem_create_group(wfd_oem_ops_s *ops, wfd_oem_group_param_s *param);
int wfd_oem_destroy_group(wfd_oem_ops_s *ops, const char *ifname);
int wfd_oem_invite(wfd_oem_ops_s *ops, unsigned char *peer_addr, wfd_oem_invite_param_s *param);
Name: wifi-direct-manager
Summary: Wi-Fi Direct manger
-Version: 1.2.119
+Version: 1.2.120
Release: 1
Group: Network & Connectivity/Wireless
License: Apache-2.0
#define SUPPLICANT_P2P_GROUP SUPPLICANT_INTERFACE ".Group"
#define SUPPLICANT_P2P_PERSISTENTGROUP SUPPLICANT_INTERFACE ".PersistentGroup"
+#define SUPPLICANT_PERSISTENT_GROUPS_PART "PersistentGroups"
+
#define SUPPLICANT_METHOD_GETINTERFACE "GetInterface"
#define SUPPLICANT_METHOD_REMOVEINTERFACE "RemoveInterface"
#define SUPPLICANT_METHOD_CREATEINTERFACE "CreateInterface"
int ws_set_pin(char *pin);
int ws_generate_pin(char **pin);
int ws_get_supported_wps_mode();
-int ws_create_group(int persistent, int freq, const char *passphrase);
+int ws_create_group(wfd_oem_group_param_s *param);
int ws_destroy_group(const char *ifname);
int ws_invite(unsigned char *peer_addr, wfd_oem_invite_param_s *param);
int ws_wps_start(unsigned char *peer_addr, int wps_mode, const char *pin);
/* subscribe interface p2p signal */
}
-int ws_create_group(int persistent, int freq, const char *passphrase)
+int ws_create_group(wfd_oem_group_param_s *param)
{
__WDP_LOG_FUNC_ENTER__;
GDBusConnection *g_dbus = NULL;
GVariantBuilder *builder = NULL;
GVariant *value = NULL;
dbus_method_param_s params;
+ char persistent_group_obj_path[OBJECT_PATH_MAX] = {0,};
int res = 0;
if (!g_pd) {
builder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}") );
- if (persistent)
+ if (param->persistent > 0) {
g_variant_builder_add(builder, "{sv}", "persistent",
g_variant_new_boolean(TRUE));
- else
+ if(param->persistent == 2) {
+ g_snprintf(persistent_group_obj_path, OBJECT_PATH_MAX,
+ "%s/" SUPPLICANT_PERSISTENT_GROUPS_PART "/%d",
+ g_pd->iface_path, param->persistent_group_id);
+ g_variant_builder_add(builder, "{sv}", "persistent_group_object",
+ g_variant_new_object_path(persistent_group_obj_path));
+ }
+
+ } else {
g_variant_builder_add(builder, "{sv}", "persistent",
g_variant_new_boolean(FALSE));
+ }
- if (passphrase && strlen(passphrase) > 0)
+ if (param->passphrase && strlen(param->passphrase) > 0)
g_variant_builder_add(builder, "{sv}", "passphrase",
- g_variant_new_string(passphrase));
+ g_variant_new_string(param->passphrase));
- if (freq)
+ if (param->freq)
g_variant_builder_add(builder, "{sv}", "frequency",
- g_variant_new_int32(freq));
+ g_variant_new_int32(param->freq));
value = g_variant_new ("(a{sv})", builder);
g_variant_builder_unref (builder);
int ws_set_pin(char *pin);
int ws_generate_pin(char **pin);
int ws_get_supported_wps_mode();
-int ws_create_group(int persistent, int freq, const char *passphrase);
+int ws_create_group(wfd_oem_group_param_s *param);
int ws_destroy_group(const char *ifname);
int ws_invite(unsigned char *peer_addr, wfd_oem_invite_param_s *param);
int ws_wps_start(unsigned char *peer_addr, int wps_mode, const char *pin);
return 0;
}
-int ws_create_group(int persistent, int freq, const char *passphrase)
+int ws_create_group(wfd_oem_group_param_s *param)
{
__WDP_LOG_FUNC_ENTER__;
ws_sock_data_s *sock = g_pd->common;
return -1;
}
- if (persistent) {
- snprintf(cmd, sizeof(cmd), WS_CMD_P2P_GROUP_ADD WS_STR_PERSISTENT);
+ if (param->persistent) {
+ if(param->persistent == 2)
+ sprintf(cmd, sizeof(cmd), WS_CMD_P2P_GROUP_ADD WS_STR_PERSISTENT "=%d",
+ param->persistent_group_id);
+ else
+ snprintf(cmd, sizeof(cmd), WS_CMD_P2P_GROUP_ADD WS_STR_PERSISTENT);
} else {
if (passphrase[0] != '\0') {
- g_snprintf(cmd, sizeof(cmd), WS_CMD_P2P_GROUP_ADD " passphrase=%s", passphrase);
+ g_snprintf(cmd, sizeof(cmd), WS_CMD_P2P_GROUP_ADD " passphrase=%s", param->passphrase);
}else{
g_snprintf(cmd, sizeof(cmd), WS_CMD_P2P_GROUP_ADD);
}
if (freq > 0) {
- g_snprintf(freq_str, sizeof(freq_str), WS_STR_FREQ "%d", freq);
+ g_snprintf(freq_str, sizeof(freq_str), WS_STR_FREQ "%d", param->freq);
strncat(cmd, freq_str, sizeof(freq_str));
} else {
strncat(cmd, WS_STR_FREQ_2G, 8);
int ws_set_pin(char *pin);
int ws_generate_pin(char **pin);
int ws_get_supported_wps_mode();
-int ws_create_group(int persistent, int freq, const char *passphrase);
+int ws_create_group(wfd_oem_group_param_s *param);
int ws_destroy_group(const char *ifname);
int ws_invite(unsigned char *peer_addr, wfd_oem_invite_param_s *param);
int ws_wps_start(unsigned char *peer_addr, int wps_mode, const char *pin);
return -1;
}
-int ws_create_group(int persistent, int freq, const char *passphrase)
+int ws_create_group(wfd_oem_group_param_s *param)
{
__WDP_LOG_FUNC_ENTER__;
break;
case WIFI_DIRECT_CMD_CREATE_GROUP: // group
{
- int persistent = 0;
wfd_group_s *group = manager->group;
+ wfd_oem_group_param_s param;
if (group || manager->state < WIFI_DIRECT_STATE_ACTIVATED) {
WDS_LOGE("Group already exist or not a proper state");
rsp.result = WIFI_DIRECT_ERROR_NOT_PERMITTED;
break;
}
-
+#ifdef TIZEN_WLAN_BOARD_SPRD
+ group = wfd_create_pending_group(manager, manager->local->dev_addr);
+#else
group = wfd_create_pending_group(manager, manager->local->intf_addr);
+#endif
if (!group) {
WDS_LOGE("Failed to create pending group");
rsp.result = WIFI_DIRECT_ERROR_OPERATION_FAILED;
manager->group = group;
WDS_LOGD("Succeeded to create pending group");
- persistent = (manager->local->group_flags & WFD_GROUP_FLAG_PERSISTENT);
+ memset(¶m, 0x0, sizeof(param));
- res = wfd_oem_create_group(manager->oem_ops, persistent, 0, manager->local->passphrase);
+ param.persistent = (manager->local->group_flags &
+ WFD_GROUP_FLAG_PERSISTENT);
+ memcpy(&(param.passphrase), manager->local->passphrase,
+ sizeof(param.passphrase));
+#ifndef TIZEN_WLAN_BOARD_SPRD
+ param.freq = WFD_FREQ_2G;
+#endif
+ res = wfd_oem_create_group(manager->oem_ops, ¶m);
if (res < 0) {
WDS_LOGE("Failed to create group");
wfd_destroy_group(manager, GROUP_IFNAME);