Merge "[AWARE] Add NDP channel info to HAL 1.2"
This commit is contained in:
commit
8f0747062d
8 changed files with 246 additions and 19 deletions
|
@ -11,6 +11,7 @@ hidl_interface {
|
||||||
"IWifi.hal",
|
"IWifi.hal",
|
||||||
"IWifiChip.hal",
|
"IWifiChip.hal",
|
||||||
"IWifiNanIface.hal",
|
"IWifiNanIface.hal",
|
||||||
|
"IWifiNanIfaceEventCallback.hal",
|
||||||
],
|
],
|
||||||
interfaces: [
|
interfaces: [
|
||||||
"android.hardware.wifi@1.0",
|
"android.hardware.wifi@1.0",
|
||||||
|
@ -19,6 +20,9 @@ hidl_interface {
|
||||||
],
|
],
|
||||||
types: [
|
types: [
|
||||||
"NanConfigRequestSupplemental",
|
"NanConfigRequestSupplemental",
|
||||||
|
"NanDataPathChannelInfo",
|
||||||
|
"NanDataPathConfirmInd",
|
||||||
|
"NanDataPathScheduleUpdateInd",
|
||||||
],
|
],
|
||||||
gen_java: true,
|
gen_java: true,
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ import @1.0::IWifiNanIface;
|
||||||
import @1.0::NanConfigRequest;
|
import @1.0::NanConfigRequest;
|
||||||
import @1.0::NanEnableRequest;
|
import @1.0::NanEnableRequest;
|
||||||
import @1.0::WifiStatus;
|
import @1.0::WifiStatus;
|
||||||
|
import IWifiNanIfaceEventCallback;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface used to represent a single NAN (Neighbour Aware Network) iface.
|
* Interface used to represent a single NAN (Neighbour Aware Network) iface.
|
||||||
|
@ -29,6 +30,24 @@ import @1.0::WifiStatus;
|
||||||
* Networking (NAN) Technical Specification".
|
* Networking (NAN) Technical Specification".
|
||||||
*/
|
*/
|
||||||
interface IWifiNanIface extends @1.0::IWifiNanIface {
|
interface IWifiNanIface extends @1.0::IWifiNanIface {
|
||||||
|
/**
|
||||||
|
* Requests notifications of significant events on this iface. Multiple calls
|
||||||
|
* to this must register multiple callbacks each of which must receive all
|
||||||
|
* events.
|
||||||
|
*
|
||||||
|
* Note: supersedes the @1.0::IWifiNanIface.registerEventCallback() method which is deprecated
|
||||||
|
* as of HAL version 1.2.
|
||||||
|
*
|
||||||
|
* @param callback An instance of the |IWifiNanIfaceEventCallback| HIDL interface
|
||||||
|
* object.
|
||||||
|
* @return status WifiStatus of the operation.
|
||||||
|
* Possible status codes:
|
||||||
|
* |WifiStatusCode.SUCCESS|,
|
||||||
|
* |WifiStatusCode.ERROR_WIFI_IFACE_INVALID|
|
||||||
|
*/
|
||||||
|
registerEventCallback_1_2(IWifiNanIfaceEventCallback callback)
|
||||||
|
generates (WifiStatus status);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enable NAN: configures and activates NAN clustering (does not start
|
* Enable NAN: configures and activates NAN clustering (does not start
|
||||||
* a discovery session or set up data-interfaces or data-paths). Use the
|
* a discovery session or set up data-interfaces or data-paths). Use the
|
||||||
|
|
46
wifi/1.2/IWifiNanIfaceEventCallback.hal
Normal file
46
wifi/1.2/IWifiNanIfaceEventCallback.hal
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2017 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package android.hardware.wifi@1.2;
|
||||||
|
|
||||||
|
import @1.0::IWifiNanIfaceEventCallback;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NAN Response and Asynchronous Event Callbacks.
|
||||||
|
*
|
||||||
|
* References to "NAN Spec" are to the Wi-Fi Alliance "Wi-Fi Neighbor Awareness
|
||||||
|
* Networking (NAN) Technical Specification".
|
||||||
|
*/
|
||||||
|
interface IWifiNanIfaceEventCallback extends @1.0::IWifiNanIfaceEventCallback {
|
||||||
|
/**
|
||||||
|
* Asynchronous callback indicating a data-path (NDP) setup has been completed: received by
|
||||||
|
* both Initiator and Responder.
|
||||||
|
*
|
||||||
|
* Note: supersedes the @1.0::IWifiNanIfaceEventCallback.eventDataPathConfirm() method which is
|
||||||
|
* deprecated as of HAL version 1.2.
|
||||||
|
*
|
||||||
|
* @param event: NanDataPathConfirmInd containing event details.
|
||||||
|
*/
|
||||||
|
oneway eventDataPathConfirm_1_2(NanDataPathConfirmInd event);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asynchronous callback indicating a data-path (NDP) schedule has been updated (e.g. channels
|
||||||
|
* have been changed).
|
||||||
|
*
|
||||||
|
* @param event: NanDataPathScheduleUpdateInd containing event details.
|
||||||
|
*/
|
||||||
|
oneway eventDataPathScheduleUpdate(NanDataPathScheduleUpdateInd event);
|
||||||
|
};
|
|
@ -1956,6 +1956,22 @@ bool convertLegacyNanDataPathRequestIndToHidl(
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool convertLegacyNdpChannelInfoToHidl(
|
||||||
|
const legacy_hal::NanChannelInfo& legacy_struct,
|
||||||
|
NanDataPathChannelInfo* hidl_struct) {
|
||||||
|
if (!hidl_struct) {
|
||||||
|
LOG(ERROR) << "convertLegacyNdpChannelInfoToHidl: hidl_struct is null";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
*hidl_struct = {};
|
||||||
|
|
||||||
|
hidl_struct->channelFreq = legacy_struct.channel;
|
||||||
|
hidl_struct->channelBandwidth = legacy_struct.bandwidth;
|
||||||
|
hidl_struct->numSpatialStreams = legacy_struct.nss;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool convertLegacyNanDataPathConfirmIndToHidl(
|
bool convertLegacyNanDataPathConfirmIndToHidl(
|
||||||
const legacy_hal::NanDataPathConfirmInd& legacy_ind,
|
const legacy_hal::NanDataPathConfirmInd& legacy_ind,
|
||||||
NanDataPathConfirmInd* hidl_ind) {
|
NanDataPathConfirmInd* hidl_ind) {
|
||||||
|
@ -1966,18 +1982,60 @@ bool convertLegacyNanDataPathConfirmIndToHidl(
|
||||||
}
|
}
|
||||||
*hidl_ind = {};
|
*hidl_ind = {};
|
||||||
|
|
||||||
hidl_ind->ndpInstanceId = legacy_ind.ndp_instance_id;
|
hidl_ind->V1_0.ndpInstanceId = legacy_ind.ndp_instance_id;
|
||||||
hidl_ind->dataPathSetupSuccess =
|
hidl_ind->V1_0.dataPathSetupSuccess =
|
||||||
legacy_ind.rsp_code == legacy_hal::NAN_DP_REQUEST_ACCEPT;
|
legacy_ind.rsp_code == legacy_hal::NAN_DP_REQUEST_ACCEPT;
|
||||||
hidl_ind->peerNdiMacAddr =
|
hidl_ind->V1_0.peerNdiMacAddr =
|
||||||
hidl_array<uint8_t, 6>(legacy_ind.peer_ndi_mac_addr);
|
hidl_array<uint8_t, 6>(legacy_ind.peer_ndi_mac_addr);
|
||||||
hidl_ind->appInfo =
|
hidl_ind->V1_0.appInfo =
|
||||||
std::vector<uint8_t>(legacy_ind.app_info.ndp_app_info,
|
std::vector<uint8_t>(legacy_ind.app_info.ndp_app_info,
|
||||||
legacy_ind.app_info.ndp_app_info +
|
legacy_ind.app_info.ndp_app_info +
|
||||||
legacy_ind.app_info.ndp_app_info_len);
|
legacy_ind.app_info.ndp_app_info_len);
|
||||||
hidl_ind->status.status =
|
hidl_ind->V1_0.status.status =
|
||||||
convertLegacyNanStatusTypeToHidl(legacy_ind.reason_code);
|
convertLegacyNanStatusTypeToHidl(legacy_ind.reason_code);
|
||||||
hidl_ind->status.description = ""; // TODO: b/34059183
|
hidl_ind->V1_0.status.description = ""; // TODO: b/34059183
|
||||||
|
|
||||||
|
std::vector<NanDataPathChannelInfo> channelInfo;
|
||||||
|
for (unsigned int i = 0; i < legacy_ind.num_channels; ++i) {
|
||||||
|
NanDataPathChannelInfo hidl_struct;
|
||||||
|
if (!convertLegacyNdpChannelInfoToHidl(legacy_ind.channel_info[i],
|
||||||
|
&hidl_struct)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
channelInfo.push_back(hidl_struct);
|
||||||
|
}
|
||||||
|
hidl_ind->channelInfo = channelInfo;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool convertLegacyNanDataPathScheduleUpdateIndToHidl(
|
||||||
|
const legacy_hal::NanDataPathScheduleUpdateInd& legacy_ind,
|
||||||
|
NanDataPathScheduleUpdateInd* hidl_ind) {
|
||||||
|
if (!hidl_ind) {
|
||||||
|
LOG(ERROR) << "convertLegacyNanDataPathScheduleUpdateIndToHidl: "
|
||||||
|
"hidl_ind is null";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
*hidl_ind = {};
|
||||||
|
|
||||||
|
hidl_ind->peerDiscoveryAddress =
|
||||||
|
hidl_array<uint8_t, 6>(legacy_ind.peer_mac_addr);
|
||||||
|
std::vector<NanDataPathChannelInfo> channelInfo;
|
||||||
|
for (unsigned int i = 0; i < legacy_ind.num_channels; ++i) {
|
||||||
|
NanDataPathChannelInfo hidl_struct;
|
||||||
|
if (!convertLegacyNdpChannelInfoToHidl(legacy_ind.channel_info[i],
|
||||||
|
&hidl_struct)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
channelInfo.push_back(hidl_struct);
|
||||||
|
}
|
||||||
|
hidl_ind->channelInfo = channelInfo;
|
||||||
|
std::vector<uint32_t> ndpInstanceIds;
|
||||||
|
for (unsigned int i = 0; i < legacy_ind.num_ndp_instances; ++i) {
|
||||||
|
ndpInstanceIds.push_back(legacy_ind.ndp_instance_id[i]);
|
||||||
|
}
|
||||||
|
hidl_ind->ndpInstanceIds = ndpInstanceIds;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -147,6 +147,9 @@ bool convertLegacyNanDataPathRequestIndToHidl(
|
||||||
bool convertLegacyNanDataPathConfirmIndToHidl(
|
bool convertLegacyNanDataPathConfirmIndToHidl(
|
||||||
const legacy_hal::NanDataPathConfirmInd& legacy_ind,
|
const legacy_hal::NanDataPathConfirmInd& legacy_ind,
|
||||||
NanDataPathConfirmInd* hidl_ind);
|
NanDataPathConfirmInd* hidl_ind);
|
||||||
|
bool convertLegacyNanDataPathScheduleUpdateIndToHidl(
|
||||||
|
const legacy_hal::NanDataPathScheduleUpdateInd& legacy_ind,
|
||||||
|
NanDataPathScheduleUpdateInd* hidl_ind);
|
||||||
|
|
||||||
// RTT controller conversion methods.
|
// RTT controller conversion methods.
|
||||||
bool convertHidlVectorOfRttConfigToLegacy(
|
bool convertHidlVectorOfRttConfigToLegacy(
|
||||||
|
|
|
@ -428,7 +428,7 @@ WifiNanIface::WifiNanIface(
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
|
for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
|
||||||
if (!callback->eventDataPathConfirm(hidl_struct).isOk()) {
|
if (!callback->eventDataPathConfirm_1_2(hidl_struct).isOk()) {
|
||||||
LOG(ERROR) << "Failed to invoke the callback";
|
LOG(ERROR) << "Failed to invoke the callback";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -467,10 +467,28 @@ WifiNanIface::WifiNanIface(
|
||||||
LOG(ERROR) << "on_event_range_report - should not be called";
|
LOG(ERROR) << "on_event_range_report - should not be called";
|
||||||
};
|
};
|
||||||
|
|
||||||
callback_handlers.on_event_schedule_update =
|
callback_handlers
|
||||||
[weak_ptr_this](const legacy_hal::NanDataPathScheduleUpdateInd& /* msg */) {
|
.on_event_schedule_update = [weak_ptr_this](
|
||||||
LOG(ERROR) << "on_event_schedule_update - should not be called";
|
const legacy_hal::
|
||||||
};
|
NanDataPathScheduleUpdateInd& msg) {
|
||||||
|
const auto shared_ptr_this = weak_ptr_this.promote();
|
||||||
|
if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
|
||||||
|
LOG(ERROR) << "Callback invoked on an invalid object";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
NanDataPathScheduleUpdateInd hidl_struct;
|
||||||
|
if (!hidl_struct_util::convertLegacyNanDataPathScheduleUpdateIndToHidl(
|
||||||
|
msg, &hidl_struct)) {
|
||||||
|
LOG(ERROR) << "Failed to convert nan capabilities response";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
|
||||||
|
if (!callback->eventDataPathScheduleUpdate(hidl_struct).isOk()) {
|
||||||
|
LOG(ERROR) << "Failed to invoke the callback";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
legacy_hal::wifi_error legacy_status =
|
legacy_hal::wifi_error legacy_status =
|
||||||
legacy_hal_.lock()->nanRegisterCallbackHandlers(ifname_,
|
legacy_hal_.lock()->nanRegisterCallbackHandlers(ifname_,
|
||||||
|
@ -511,7 +529,7 @@ Return<void> WifiNanIface::getType(getType_cb hidl_status_cb) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Return<void> WifiNanIface::registerEventCallback(
|
Return<void> WifiNanIface::registerEventCallback(
|
||||||
const sp<IWifiNanIfaceEventCallback>& callback,
|
const sp<V1_0::IWifiNanIfaceEventCallback>& callback,
|
||||||
registerEventCallback_cb hidl_status_cb) {
|
registerEventCallback_cb hidl_status_cb) {
|
||||||
return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
|
return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
|
||||||
&WifiNanIface::registerEventCallbackInternal,
|
&WifiNanIface::registerEventCallbackInternal,
|
||||||
|
@ -628,6 +646,14 @@ Return<void> WifiNanIface::terminateDataPathRequest(
|
||||||
hidl_status_cb, cmd_id, ndpInstanceId);
|
hidl_status_cb, cmd_id, ndpInstanceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Return<void> WifiNanIface::registerEventCallback_1_2(
|
||||||
|
const sp<IWifiNanIfaceEventCallback>& callback,
|
||||||
|
registerEventCallback_1_2_cb hidl_status_cb) {
|
||||||
|
return validateAndCall(this, WifiStatusCode::ERROR_WIFI_IFACE_INVALID,
|
||||||
|
&WifiNanIface::registerEventCallback_1_2Internal,
|
||||||
|
hidl_status_cb, callback);
|
||||||
|
}
|
||||||
|
|
||||||
Return<void> WifiNanIface::enableRequest_1_2(
|
Return<void> WifiNanIface::enableRequest_1_2(
|
||||||
uint16_t cmd_id, const NanEnableRequest& msg1,
|
uint16_t cmd_id, const NanEnableRequest& msg1,
|
||||||
const NanConfigRequestSupplemental& msg2,
|
const NanConfigRequestSupplemental& msg2,
|
||||||
|
@ -655,11 +681,8 @@ std::pair<WifiStatus, IfaceType> WifiNanIface::getTypeInternal() {
|
||||||
}
|
}
|
||||||
|
|
||||||
WifiStatus WifiNanIface::registerEventCallbackInternal(
|
WifiStatus WifiNanIface::registerEventCallbackInternal(
|
||||||
const sp<IWifiNanIfaceEventCallback>& callback) {
|
const sp<V1_0::IWifiNanIfaceEventCallback>& /*callback*/) {
|
||||||
if (!event_cb_handler_.addCallback(callback)) {
|
return createWifiStatus(WifiStatusCode::ERROR_NOT_SUPPORTED);
|
||||||
return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN);
|
|
||||||
}
|
|
||||||
return createWifiStatus(WifiStatusCode::SUCCESS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WifiStatus WifiNanIface::getCapabilitiesRequestInternal(uint16_t cmd_id) {
|
WifiStatus WifiNanIface::getCapabilitiesRequestInternal(uint16_t cmd_id) {
|
||||||
|
@ -784,6 +807,14 @@ WifiStatus WifiNanIface::terminateDataPathRequestInternal(
|
||||||
return createWifiStatusFromLegacyError(legacy_status);
|
return createWifiStatusFromLegacyError(legacy_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WifiStatus WifiNanIface::registerEventCallback_1_2Internal(
|
||||||
|
const sp<IWifiNanIfaceEventCallback>& callback) {
|
||||||
|
if (!event_cb_handler_.addCallback(callback)) {
|
||||||
|
return createWifiStatus(WifiStatusCode::ERROR_UNKNOWN);
|
||||||
|
}
|
||||||
|
return createWifiStatus(WifiStatusCode::SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
WifiStatus WifiNanIface::enableRequest_1_2Internal(
|
WifiStatus WifiNanIface::enableRequest_1_2Internal(
|
||||||
uint16_t cmd_id, const NanEnableRequest& msg1,
|
uint16_t cmd_id, const NanEnableRequest& msg1,
|
||||||
const NanConfigRequestSupplemental& msg2) {
|
const NanConfigRequestSupplemental& msg2) {
|
||||||
|
|
|
@ -47,7 +47,7 @@ class WifiNanIface : public V1_2::IWifiNanIface {
|
||||||
Return<void> getName(getName_cb hidl_status_cb) override;
|
Return<void> getName(getName_cb hidl_status_cb) override;
|
||||||
Return<void> getType(getType_cb hidl_status_cb) override;
|
Return<void> getType(getType_cb hidl_status_cb) override;
|
||||||
Return<void> registerEventCallback(
|
Return<void> registerEventCallback(
|
||||||
const sp<IWifiNanIfaceEventCallback>& callback,
|
const sp<V1_0::IWifiNanIfaceEventCallback>& callback,
|
||||||
registerEventCallback_cb hidl_status_cb) override;
|
registerEventCallback_cb hidl_status_cb) override;
|
||||||
Return<void> getCapabilitiesRequest(
|
Return<void> getCapabilitiesRequest(
|
||||||
uint16_t cmd_id, getCapabilitiesRequest_cb hidl_status_cb) override;
|
uint16_t cmd_id, getCapabilitiesRequest_cb hidl_status_cb) override;
|
||||||
|
@ -88,6 +88,9 @@ class WifiNanIface : public V1_2::IWifiNanIface {
|
||||||
uint16_t cmd_id, uint32_t ndpInstanceId,
|
uint16_t cmd_id, uint32_t ndpInstanceId,
|
||||||
terminateDataPathRequest_cb hidl_status_cb) override;
|
terminateDataPathRequest_cb hidl_status_cb) override;
|
||||||
|
|
||||||
|
Return<void> registerEventCallback_1_2(
|
||||||
|
const sp<IWifiNanIfaceEventCallback>& callback,
|
||||||
|
registerEventCallback_1_2_cb hidl_status_cb) override;
|
||||||
Return<void> enableRequest_1_2(
|
Return<void> enableRequest_1_2(
|
||||||
uint16_t cmd_id, const NanEnableRequest& msg1,
|
uint16_t cmd_id, const NanEnableRequest& msg1,
|
||||||
const NanConfigRequestSupplemental& msg2,
|
const NanConfigRequestSupplemental& msg2,
|
||||||
|
@ -102,7 +105,7 @@ class WifiNanIface : public V1_2::IWifiNanIface {
|
||||||
std::pair<WifiStatus, std::string> getNameInternal();
|
std::pair<WifiStatus, std::string> getNameInternal();
|
||||||
std::pair<WifiStatus, IfaceType> getTypeInternal();
|
std::pair<WifiStatus, IfaceType> getTypeInternal();
|
||||||
WifiStatus registerEventCallbackInternal(
|
WifiStatus registerEventCallbackInternal(
|
||||||
const sp<IWifiNanIfaceEventCallback>& callback);
|
const sp<V1_0::IWifiNanIfaceEventCallback>& callback);
|
||||||
WifiStatus getCapabilitiesRequestInternal(uint16_t cmd_id);
|
WifiStatus getCapabilitiesRequestInternal(uint16_t cmd_id);
|
||||||
WifiStatus enableRequestInternal(uint16_t cmd_id,
|
WifiStatus enableRequestInternal(uint16_t cmd_id,
|
||||||
const NanEnableRequest& msg);
|
const NanEnableRequest& msg);
|
||||||
|
@ -128,6 +131,8 @@ class WifiNanIface : public V1_2::IWifiNanIface {
|
||||||
WifiStatus terminateDataPathRequestInternal(uint16_t cmd_id,
|
WifiStatus terminateDataPathRequestInternal(uint16_t cmd_id,
|
||||||
uint32_t ndpInstanceId);
|
uint32_t ndpInstanceId);
|
||||||
|
|
||||||
|
WifiStatus registerEventCallback_1_2Internal(
|
||||||
|
const sp<IWifiNanIfaceEventCallback>& callback);
|
||||||
WifiStatus enableRequest_1_2Internal(
|
WifiStatus enableRequest_1_2Internal(
|
||||||
uint16_t cmd_id, const NanEnableRequest& msg1,
|
uint16_t cmd_id, const NanEnableRequest& msg1,
|
||||||
const NanConfigRequestSupplemental& msg2);
|
const NanConfigRequestSupplemental& msg2);
|
||||||
|
|
|
@ -16,6 +16,10 @@
|
||||||
|
|
||||||
package android.hardware.wifi@1.2;
|
package android.hardware.wifi@1.2;
|
||||||
|
|
||||||
|
import @1.0::MacAddress;
|
||||||
|
import @1.0::NanDataPathConfirmInd;
|
||||||
|
import @1.0::WifiChannelInMhz;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* NAN configuration request parameters added in the 1.2 HAL. These are supplemental to previous
|
* NAN configuration request parameters added in the 1.2 HAL. These are supplemental to previous
|
||||||
* versions.
|
* versions.
|
||||||
|
@ -47,3 +51,60 @@ struct NanConfigRequestSupplemental {
|
||||||
bool enableDiscoveryWindowEarlyTermination;
|
bool enableDiscoveryWindowEarlyTermination;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NAN data path channel information provided to the framework.
|
||||||
|
*/
|
||||||
|
struct NanDataPathChannelInfo {
|
||||||
|
/**
|
||||||
|
* Channel frequency in MHz.
|
||||||
|
*/
|
||||||
|
WifiChannelInMhz channelFreq;
|
||||||
|
/**
|
||||||
|
* Channel bandwidth in MHz.
|
||||||
|
*/
|
||||||
|
uint32_t channelBandwidth;
|
||||||
|
/**
|
||||||
|
* Number of spatial streams used in the channel.
|
||||||
|
*/
|
||||||
|
uint32_t numSpatialStreams;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NAN Data path confirmation Indication structure.
|
||||||
|
* Event indication is received on both initiator and responder side when negotiation for a
|
||||||
|
* data-path finish: on success or failure.
|
||||||
|
*/
|
||||||
|
struct NanDataPathConfirmInd {
|
||||||
|
/**
|
||||||
|
* Baseline information as defined in HAL 1.0.
|
||||||
|
*/
|
||||||
|
@1.0::NanDataPathConfirmInd V1_0;
|
||||||
|
/**
|
||||||
|
* The channel(s) on which the NDP is scheduled to operate.
|
||||||
|
* Updates to the operational channels are provided using the |eventDataPathScheduleUpdate|
|
||||||
|
* event.
|
||||||
|
*/
|
||||||
|
vec<NanDataPathChannelInfo> channelInfo;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* NAN data path channel information update indication structure.
|
||||||
|
* Event indication is received by all NDP owners whenever the channels on which the NDP operates
|
||||||
|
* are updated.
|
||||||
|
* Note: multiple NDPs may share the same schedule, the indication specifies all NDPs to which it
|
||||||
|
* applies.
|
||||||
|
*/
|
||||||
|
struct NanDataPathScheduleUpdateInd {
|
||||||
|
/**
|
||||||
|
* The discovery address (NMI) of the peer to which the NDP is connected.
|
||||||
|
*/
|
||||||
|
MacAddress peerDiscoveryAddress;
|
||||||
|
/**
|
||||||
|
* The updated channel(s) information.
|
||||||
|
*/
|
||||||
|
vec<NanDataPathChannelInfo> channelInfo;
|
||||||
|
/**
|
||||||
|
* The list of NDPs to which this update applies.
|
||||||
|
*/
|
||||||
|
vec<uint32_t> ndpInstanceIds;
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in a new issue