@@ -1642,6 +1642,14 @@ Interface implemented by objects representing P2P peer devices.
</li>
<li>
+ <h3>ListenFreq - i - (read)</h3>
+ </li>
+
+ <li>
+ <h3>OperFreq - i - (read)</h3>
+ </li>
+
+ <li>
<h3>PrimaryDeviceType - ay - (read)</h3>
</li>
@@ -4884,6 +4884,29 @@ p2p_get_peer_found(struct p2p_data *p2p, const u8 *addr, int next)
}
+int
+p2p_get_peer_found_freq(struct p2p_data *p2p, const u8 *addr, enum p2p_freq_type type)
+{
+ struct p2p_device *dev;
+
+ if (!addr)
+ return -1;
+ else{
+ dev = p2p_get_device(p2p, addr);
+ if (!dev)
+ return -1;
+
+ if (dev->flags & P2P_DEV_PROBE_REQ_ONLY)
+ return -1;
+ if(type == LISTEN_FREQ_TYPE)
+ return dev->listen_freq;
+ else if(type == OPERATING_FREQ_TYPE)
+ return dev->oper_freq;
+ }
+ return -1;
+}
+
+
int p2p_in_progress(struct p2p_data *p2p)
{
if (p2p == NULL)
@@ -67,6 +67,11 @@ enum p2p_wps_method {
WPS_P2PS
};
+enum p2p_freq_type {
+ LISTEN_FREQ_TYPE=1,
+ OPERATING_FREQ_TYPE=2
+};
+
/**
* struct p2p_go_neg_results - P2P Group Owner Negotiation results
*/
@@ -2077,6 +2082,16 @@ const struct p2p_peer_info *
p2p_get_peer_found(struct p2p_data *p2p, const u8 *addr, int next);
/**
+ * p2p_get_peer_found_freq - Get P2P peer frequencies of a found peer
+ * @p2p: P2P module context from p2p_init()
+ * @addr: P2P Device Address of the peer
+ * @type: 1 for listen_freq 2 for operating freq
+ * Returns: The P2P peer frequency based on type
+ */
+int
+p2p_get_peer_found_freq(struct p2p_data *p2p, const u8 *addr, enum p2p_freq_type type);
+
+/**
* p2p_remove_wps_vendor_extensions - Remove WPS vendor extensions
* @p2p: P2P module context from p2p_init()
*/
@@ -3351,6 +3351,14 @@ static const struct wpa_dbus_property_desc wpas_dbus_p2p_peer_properties[] = {
wpas_dbus_getter_p2p_peer_groups,
NULL
},
+ { "ListenFreq", WPAS_DBUS_NEW_IFACE_P2P_PEER, "i",
+ wpas_dbus_getter_p2p_device_listen_freq,
+ NULL
+ },
+ { "OperFreq", WPAS_DBUS_NEW_IFACE_P2P_PEER, "i",
+ wpas_dbus_getter_p2p_device_oper_freq,
+ NULL
+ },
{ NULL, NULL, NULL, NULL, NULL }
};
@@ -1364,6 +1364,56 @@ dbus_bool_t wpas_dbus_getter_p2p_peer_level(DBusMessageIter *iter,
}
+dbus_bool_t wpas_dbus_getter_p2p_device_listen_freq(DBusMessageIter *iter,
+ DBusError *error,
+ void *user_data)
+{
+ struct peer_handler_args *peer_args = user_data;
+ //const struct p2p_peer_info *info;
+ int listen=0;
+
+ listen = p2p_get_peer_found_freq(peer_args->wpa_s->global->p2p,
+ peer_args->p2p_device_addr,LISTEN_FREQ_TYPE);
+ if (listen == -1) {
+ dbus_set_error(error, DBUS_ERROR_FAILED,
+ "failed to find peer listen frequency");
+ return FALSE;
+ }
+
+ if (!wpas_dbus_simple_property_getter(iter, DBUS_TYPE_INT32,
+ &listen, error)) {
+ dbus_set_error_const(error, DBUS_ERROR_NO_MEMORY, "no memory");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+dbus_bool_t wpas_dbus_getter_p2p_device_oper_freq(DBusMessageIter *iter,
+ DBusError *error,
+ void *user_data)
+{
+ struct peer_handler_args *peer_args = user_data;
+ int operating=0;
+
+ operating = p2p_get_peer_found_freq(peer_args->wpa_s->global->p2p,
+ peer_args->p2p_device_addr,2);
+ if (operating == -1) {
+ dbus_set_error(error, DBUS_ERROR_FAILED,
+ "failed to find peer operating frequency");
+ return FALSE;
+ }
+
+ if (!wpas_dbus_simple_property_getter(iter, DBUS_TYPE_INT32,
+ &operating, error)) {
+ dbus_set_error_const(error, DBUS_ERROR_NO_MEMORY, "no memory");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
dbus_bool_t wpas_dbus_getter_p2p_peer_device_capability(DBusMessageIter *iter,
DBusError *error,
void *user_data)
@@ -130,6 +130,14 @@ dbus_bool_t wpas_dbus_getter_p2p_peer_level(DBusMessageIter *iter,
DBusError *error,
void *user_data);
+dbus_bool_t wpas_dbus_getter_p2p_device_listen_freq(DBusMessageIter *iter,
+ DBusError *error,
+ void *user_data);
+
+dbus_bool_t wpas_dbus_getter_p2p_device_oper_freq(DBusMessageIter *iter,
+ DBusError *error,
+ void *user_data);
+
dbus_bool_t wpas_dbus_getter_p2p_peer_device_capability(DBusMessageIter *iter,
DBusError *error,
void *user_data);