wifi: Begin NAN iface methods implementation

am: f5f51fd039

Change-Id: Ide9ece8aeffe58b09e5e40ba50276f66f610745b
This commit is contained in:
Roshan Pius
2016-12-09 02:05:36 +00:00
committed by android-build-merger
3 changed files with 651 additions and 19 deletions

View File

@@ -251,6 +251,487 @@ bool convertLegacyLinkLayerStatsToHidl(
hidl_stats->timeStampInMs = uptimeMillis();
return true;
}
legacy_hal::NanPublishType convertHidlNanPublishTypeToLegacy(
NanPublishType type) {
switch (type) {
case NanPublishType::UNSOLICITED:
return legacy_hal::NAN_PUBLISH_TYPE_UNSOLICITED;
case NanPublishType::SOLICITED:
return legacy_hal::NAN_PUBLISH_TYPE_SOLICITED;
case NanPublishType::UNSOLICITED_SOLICITED:
return legacy_hal::NAN_PUBLISH_TYPE_UNSOLICITED_SOLICITED;
};
}
legacy_hal::NanTxType convertHidlNanTxTypeToLegacy(NanTxType type) {
switch (type) {
case NanTxType::BROADCAST:
return legacy_hal::NAN_TX_TYPE_BROADCAST;
case NanTxType::UNICAST:
return legacy_hal::NAN_TX_TYPE_UNICAST;
};
}
legacy_hal::NanMatchAlg convertHidlNanMatchAlgToLegacy(NanMatchAlg type) {
switch (type) {
case NanMatchAlg::MATCH_ONCE:
return legacy_hal::NAN_MATCH_ALG_MATCH_ONCE;
case NanMatchAlg::MATCH_CONTINUOUS:
return legacy_hal::NAN_MATCH_ALG_MATCH_CONTINUOUS;
case NanMatchAlg::MATCH_NEVER:
return legacy_hal::NAN_MATCH_ALG_MATCH_NEVER;
};
}
legacy_hal::NanSubscribeType convertHidlNanSubscribeTypeToLegacy(
NanSubscribeType type) {
switch (type) {
case NanSubscribeType::ACTIVE:
return legacy_hal::NAN_SUBSCRIBE_TYPE_ACTIVE;
case NanSubscribeType::PASSIVE:
return legacy_hal::NAN_SUBSCRIBE_TYPE_PASSIVE;
};
}
legacy_hal::NanSRFType convertHidlNanSrfTypeToLegacy(NanSrfType type) {
switch (type) {
case NanSrfType::BLOOM_FILTER:
return legacy_hal::NAN_SRF_ATTR_BLOOM_FILTER;
case NanSrfType::PARTIAL_MAC_ADDR:
return legacy_hal::NAN_SRF_ATTR_PARTIAL_MAC_ADDR;
};
}
legacy_hal::NanSRFIncludeType convertHidlNanSrfIncludeTypeToLegacy(
NanSrfIncludeType type) {
switch (type) {
case NanSrfIncludeType::DO_NOT_RESPOND:
return legacy_hal::NAN_SRF_INCLUDE_DO_NOT_RESPOND;
case NanSrfIncludeType::RESPOND:
return legacy_hal::NAN_SRF_INCLUDE_RESPOND;
};
}
NanStatusType convertLegacyNanStatusTypeToHidl(
legacy_hal::NanStatusType /* type */) {
// TODO: The |NanStatusType| has changed in legacy HAL and no longer in sync
// with the HIDL interface.
return NanStatusType::SUCCESS;
}
NanResponseType convertLegacyNanResponseTypeToHidl(
legacy_hal::NanResponseType type) {
switch (type) {
case legacy_hal::NAN_RESPONSE_ENABLED:
return NanResponseType::ENABLED;
case legacy_hal::NAN_RESPONSE_DISABLED:
return NanResponseType::DISABLED;
case legacy_hal::NAN_RESPONSE_PUBLISH:
return NanResponseType::PUBLISH;
case legacy_hal::NAN_RESPONSE_PUBLISH_CANCEL:
return NanResponseType::PUBLISH_CANCEL;
case legacy_hal::NAN_RESPONSE_TRANSMIT_FOLLOWUP:
return NanResponseType::TRANSMIT_FOLLOWUP;
case legacy_hal::NAN_RESPONSE_SUBSCRIBE:
return NanResponseType::SUBSCRIBE;
case legacy_hal::NAN_RESPONSE_SUBSCRIBE_CANCEL:
return NanResponseType::SUBSCRIBE_CANCEL;
case legacy_hal::NAN_RESPONSE_STATS:
// Not present in HIDL. Is going to be deprecated in legacy HAL as well.
CHECK(0);
case legacy_hal::NAN_RESPONSE_CONFIG:
return NanResponseType::CONFIG;
case legacy_hal::NAN_RESPONSE_TCA:
// Not present in HIDL. Is going to be deprecated in legacy HAL as well.
CHECK(0);
case legacy_hal::NAN_RESPONSE_ERROR:
return NanResponseType::ERROR;
case legacy_hal::NAN_RESPONSE_BEACON_SDF_PAYLOAD:
return NanResponseType::BEACON_SDF_PAYLOAD;
case legacy_hal::NAN_GET_CAPABILITIES:
return NanResponseType::GET_CAPABILITIES;
case legacy_hal::NAN_DP_INTERFACE_CREATE:
return NanResponseType::DP_INTERFACE_CREATE;
case legacy_hal::NAN_DP_INTERFACE_DELETE:
return NanResponseType::DP_INTERFACE_DELETE;
case legacy_hal::NAN_DP_INITIATOR_RESPONSE:
return NanResponseType::DP_INITIATOR_RESPONSE;
case legacy_hal::NAN_DP_RESPONDER_RESPONSE:
return NanResponseType::DP_RESPONDER_RESPONSE;
case legacy_hal::NAN_DP_END:
return NanResponseType::DP_END;
};
}
bool convertHidlNanEnableRequestToLegacy(
const NanEnableRequest& hidl_request,
legacy_hal::NanEnableRequest* legacy_request) {
if (!legacy_request) {
return false;
}
legacy_request->master_pref = hidl_request.masterPref;
legacy_request->cluster_low = hidl_request.clusterLow;
legacy_request->cluster_high = hidl_request.clusterHigh;
legacy_request->config_support_5g = hidl_request.validSupport5gVal;
legacy_request->support_5g_val = hidl_request.support5gVal;
legacy_request->config_sid_beacon = hidl_request.validSidBeaconVal;
legacy_request->sid_beacon_val = hidl_request.sidBeaconVal;
legacy_request->config_2dot4g_rssi_close =
hidl_request.valid2dot4gRssiCloseVal;
legacy_request->rssi_close_2dot4g_val = hidl_request.rssiClose2dot4gVal;
legacy_request->config_2dot4g_rssi_middle =
hidl_request.valid2dot4gRssiMiddleVal;
legacy_request->rssi_middle_2dot4g_val = hidl_request.rssiMiddle2dot4gVal;
legacy_request->config_2dot4g_rssi_proximity =
hidl_request.valid2dot4gRssiProximityVal;
legacy_request->rssi_proximity_2dot4g_val =
hidl_request.rssiProximity2dot4gVal;
legacy_request->config_hop_count_limit = hidl_request.validHopCountLimitVal;
legacy_request->hop_count_limit_val = hidl_request.hopCountLimitVal;
legacy_request->config_2dot4g_support = hidl_request.valid2dot4gSupportVal;
legacy_request->support_2dot4g_val = hidl_request.support2dot4gVal;
legacy_request->config_2dot4g_beacons = hidl_request.valid2dot4gBeaconsVal;
legacy_request->beacon_2dot4g_val = hidl_request.beacon2dot4gVal;
legacy_request->config_2dot4g_sdf = hidl_request.valid2dot4gSdfVal;
legacy_request->sdf_2dot4g_val = hidl_request.sdf2dot4gVal;
legacy_request->config_5g_beacons = hidl_request.valid5gBeaconsVal;
legacy_request->beacon_5g_val = hidl_request.beacon5gVal;
legacy_request->config_5g_sdf = hidl_request.valid5gSdfVal;
legacy_request->sdf_5g_val = hidl_request.sdf5gVal;
legacy_request->config_5g_rssi_close = hidl_request.valid5gRssiCloseVal;
legacy_request->rssi_close_5g_val = hidl_request.rssiClose5gVal;
legacy_request->config_5g_rssi_middle = hidl_request.valid5gRssiMiddleVal;
legacy_request->rssi_middle_5g_val = hidl_request.rssiMiddle5gVal;
legacy_request->config_5g_rssi_close_proximity =
hidl_request.valid5gRssiCloseProximityVal;
legacy_request->rssi_close_proximity_5g_val =
hidl_request.rssiCloseProximity5gVal;
legacy_request->config_rssi_window_size = hidl_request.validRssiWindowSizeVal;
legacy_request->rssi_window_size_val = hidl_request.rssiWindowSizeVal;
legacy_request->config_oui = hidl_request.validOuiVal;
legacy_request->oui_val = hidl_request.ouiVal;
legacy_request->config_intf_addr = hidl_request.validIntfAddrVal;
CHECK(hidl_request.intfAddrVal.size() ==
sizeof(legacy_request->intf_addr_val));
memcpy(legacy_request->intf_addr_val,
hidl_request.intfAddrVal.data(),
hidl_request.intfAddrVal.size());
legacy_request->config_cluster_attribute_val =
hidl_request.configClusterAttributeVal;
legacy_request->config_scan_params = hidl_request.validScanParamsVal;
if (hidl_request.scanParamsVal.dwellTime.size() >
sizeof(legacy_request->scan_params_val.dwell_time)) {
return false;
}
memcpy(legacy_request->scan_params_val.dwell_time,
hidl_request.scanParamsVal.dwellTime.data(),
hidl_request.scanParamsVal.dwellTime.size());
if (hidl_request.scanParamsVal.scanPeriod.size() >
sizeof(legacy_request->scan_params_val.scan_period)) {
return false;
}
memcpy(legacy_request->scan_params_val.scan_period,
hidl_request.scanParamsVal.scanPeriod.data(),
hidl_request.scanParamsVal.scanPeriod.size());
legacy_request->config_random_factor_force =
hidl_request.validRandomFactorForceVal;
legacy_request->random_factor_force_val = hidl_request.randomFactorForceVal;
legacy_request->config_hop_count_force = hidl_request.validHopCountLimitVal;
legacy_request->hop_count_force_val = hidl_request.hopCountLimitVal;
legacy_request->config_24g_channel = hidl_request.valid24gChannelVal;
legacy_request->channel_24g_val = hidl_request.channel24gVal;
legacy_request->config_5g_channel = hidl_request.valid5gChannelVal;
legacy_request->channel_5g_val = hidl_request.channel5gVal;
return true;
}
bool convertHidlNanPublishRequestToLegacy(
const NanPublishRequest& hidl_request,
legacy_hal::NanPublishRequest* legacy_request) {
if (!legacy_request) {
return false;
}
legacy_request->publish_id = hidl_request.publishId;
legacy_request->ttl = hidl_request.ttl;
legacy_request->period = hidl_request.period;
legacy_request->publish_type =
convertHidlNanPublishTypeToLegacy(hidl_request.publishType);
legacy_request->tx_type = convertHidlNanTxTypeToLegacy(hidl_request.txType);
legacy_request->publish_count = hidl_request.publishCount;
if (hidl_request.serviceName.size() > sizeof(legacy_request->service_name)) {
return false;
}
legacy_request->service_name_len = hidl_request.serviceName.size();
memcpy(legacy_request->service_name,
hidl_request.serviceName.c_str(),
hidl_request.serviceName.size());
legacy_request->publish_match_indicator =
convertHidlNanMatchAlgToLegacy(hidl_request.publishMatchIndicator);
if (hidl_request.serviceSpecificInfo.size() >
sizeof(legacy_request->service_specific_info)) {
return false;
}
legacy_request->service_specific_info_len =
hidl_request.serviceSpecificInfo.size();
memcpy(legacy_request->service_specific_info,
hidl_request.serviceSpecificInfo.data(),
hidl_request.serviceSpecificInfo.size());
if (hidl_request.rxMatchFilter.size() >
sizeof(legacy_request->rx_match_filter)) {
return false;
}
legacy_request->rx_match_filter_len = hidl_request.rxMatchFilter.size();
memcpy(legacy_request->rx_match_filter,
hidl_request.rxMatchFilter.data(),
hidl_request.rxMatchFilter.size());
if (hidl_request.txMatchFilter.size() >
sizeof(legacy_request->tx_match_filter)) {
return false;
}
legacy_request->tx_match_filter_len = hidl_request.txMatchFilter.size();
memcpy(legacy_request->tx_match_filter,
hidl_request.txMatchFilter.data(),
hidl_request.txMatchFilter.size());
legacy_request->rssi_threshold_flag = hidl_request.useRssiThreshold;
legacy_request->connmap = hidl_request.connmap;
legacy_request->recv_indication_cfg = hidl_request.recvIndicationCfg;
return true;
}
bool convertHidlNanPublishCancelRequestToLegacy(
const NanPublishCancelRequest& hidl_request,
legacy_hal::NanPublishCancelRequest* legacy_request) {
legacy_request->publish_id = hidl_request.publishId;
return true;
}
bool convertHidlNanSubscribeRequestToLegacy(
const NanSubscribeRequest& hidl_request,
legacy_hal::NanSubscribeRequest* legacy_request) {
if (!legacy_request) {
return false;
}
legacy_request->subscribe_id = hidl_request.subscribeId;
legacy_request->ttl = hidl_request.ttl;
legacy_request->period = hidl_request.period;
legacy_request->subscribe_type =
convertHidlNanSubscribeTypeToLegacy(hidl_request.subscribeType);
legacy_request->serviceResponseFilter =
convertHidlNanSrfTypeToLegacy(hidl_request.serviceResponseFilter);
legacy_request->serviceResponseInclude =
convertHidlNanSrfIncludeTypeToLegacy(hidl_request.serviceResponseInclude);
legacy_request->useServiceResponseFilter =
hidl_request.shouldUseServiceResponseFilter
? legacy_hal::NAN_USE_SRF
: legacy_hal::NAN_DO_NOT_USE_SRF;
legacy_request->ssiRequiredForMatchIndication =
hidl_request.isSsiRequiredForMatchIndication
? legacy_hal::NAN_SSI_REQUIRED_IN_MATCH_IND
: legacy_hal::NAN_SSI_NOT_REQUIRED_IN_MATCH_IND;
legacy_request->subscribe_match_indicator =
convertHidlNanMatchAlgToLegacy(hidl_request.subscribeMatchIndicator);
legacy_request->subscribe_count = hidl_request.subscribeCount;
if (hidl_request.serviceName.size() > sizeof(legacy_request->service_name)) {
return false;
}
legacy_request->service_name_len = hidl_request.serviceName.size();
memcpy(legacy_request->service_name,
hidl_request.serviceName.c_str(),
hidl_request.serviceName.size());
if (hidl_request.serviceSpecificInfo.size() >
sizeof(legacy_request->service_specific_info)) {
return false;
}
legacy_request->service_specific_info_len =
hidl_request.serviceSpecificInfo.size();
memcpy(legacy_request->service_specific_info,
hidl_request.serviceSpecificInfo.data(),
hidl_request.serviceSpecificInfo.size());
if (hidl_request.rxMatchFilter.size() >
sizeof(legacy_request->rx_match_filter)) {
return false;
}
legacy_request->rx_match_filter_len = hidl_request.rxMatchFilter.size();
memcpy(legacy_request->rx_match_filter,
hidl_request.rxMatchFilter.data(),
hidl_request.rxMatchFilter.size());
if (hidl_request.txMatchFilter.size() >
sizeof(legacy_request->tx_match_filter)) {
return false;
}
legacy_request->tx_match_filter_len = hidl_request.txMatchFilter.size();
memcpy(legacy_request->tx_match_filter,
hidl_request.txMatchFilter.data(),
hidl_request.txMatchFilter.size());
legacy_request->rssi_threshold_flag = hidl_request.useRssiThreshold;
legacy_request->connmap = hidl_request.connmap;
if (hidl_request.intfAddr.size() > NAN_MAX_SUBSCRIBE_MAX_ADDRESS) {
return false;
}
legacy_request->num_intf_addr_present = hidl_request.intfAddr.size();
for (uint32_t i = 0; i < hidl_request.intfAddr.size(); i++) {
CHECK(hidl_request.intfAddr[i].size() ==
sizeof(legacy_request->intf_addr[i]));
memcpy(legacy_request->intf_addr[i],
hidl_request.intfAddr[i].data(),
hidl_request.intfAddr[i].size());
}
legacy_request->recv_indication_cfg = hidl_request.recvIndicationCfg;
return true;
}
bool convertHidlNanSubscribeCancelRequestToLegacy(
const NanSubscribeCancelRequest& /* hidl_request */,
legacy_hal::NanSubscribeCancelRequest* /* legacy_request */) {
return false;
}
bool convertHidlNanTransmitFollowupRequestToLegacy(
const NanTransmitFollowupRequest& /* hidl_request */,
legacy_hal::NanTransmitFollowupRequest* /* legacy_request */) {
return false;
}
bool convertHidlNanConfigRequestToLegacy(
const NanConfigRequest& /* hidl_request */,
legacy_hal::NanConfigRequest* /* legacy_request */) {
return false;
}
bool convertHidlNanBeaconSdfPayloadRequestToLegacy(
const NanBeaconSdfPayloadRequest& /* hidl_request */,
legacy_hal::NanBeaconSdfPayloadRequest* /* legacy_request */) {
return false;
}
bool convertHidlNanDataPathInitiatorRequestToLegacy(
const NanDataPathInitiatorRequest& /* hidl_request */,
legacy_hal::NanDataPathInitiatorRequest* /* legacy_request */) {
return false;
}
bool convertHidlNanDataPathIndicationResponseToLegacy(
const NanDataPathIndicationResponse& /* hidl_response */,
legacy_hal::NanDataPathIndicationResponse* /* legacy_response */) {
return false;
}
bool convertHidlNanDataPathEndRequestToLegacy(
const NanDataPathEndRequest& /* hidl_request */,
legacy_hal::NanDataPathEndRequest* /* legacy_request */) {
return false;
}
bool convertLegacyNanResponseHeaderToHidl(
const legacy_hal::NanResponseMsg& legacy_response,
NanResponseMsgHeader* hidl_response) {
if (!hidl_response) {
return false;
}
hidl_response->status =
convertLegacyNanStatusTypeToHidl(legacy_response.status);
hidl_response->value = legacy_response.value;
hidl_response->responseType =
convertLegacyNanResponseTypeToHidl(legacy_response.response_type);
return true;
}
bool convertLegacyNanPublishResponseToHidl(
const legacy_hal::NanPublishResponse& /* legacy_response */,
NanPublishResponse* /* hidl_response */) {
return false;
}
bool convertLegacyNanSubscribeResponseToHidl(
const legacy_hal::NanSubscribeResponse& /* legacy_response */,
NanSubscribeResponse* /* hidl_response */) {
return false;
}
bool convertLegacyNanDataPathResponseToHidl(
const legacy_hal::NanDataPathRequestResponse& /* legacy_response */,
NanDataPathResponse* /* hidl_response */) {
return false;
}
bool convertLegacyNanCapabilitiesResponseToHidl(
const legacy_hal::NanCapabilities& /* legacy_response */,
NanCapabilitiesResponse* /* hidl_response */) {
return false;
}
bool convertLegacyNanPublishTerminatedIndToHidl(
const legacy_hal::NanPublishTerminatedInd& /* legacy_ind */,
NanPublishTerminatedInd* /* hidl_ind */) {
return false;
}
bool convertLegacyNanMatchIndToHidl(
const legacy_hal::NanMatchInd& /* legacy_ind */,
NanMatchInd* /* hidl_ind */) {
return false;
}
bool convertLegacyNanMatchExpiredIndToHidl(
const legacy_hal::NanMatchExpiredInd& /* legacy_ind */,
NanMatchExpiredInd* /* hidl_ind */) {
return false;
}
bool convertLegacyNanSubscribeTerminatedIndToHidl(
const legacy_hal::NanSubscribeTerminatedInd& /* legacy_ind */,
NanSubscribeTerminatedInd* /* hidl_ind */) {
return false;
}
bool convertLegacyNanFollowupIndToHidl(
const legacy_hal::NanFollowupInd& /* legacy_ind */,
NanFollowupInd* /* hidl_ind */) {
return false;
}
bool convertLegacyNanDiscEngEventIndToHidl(
const legacy_hal::NanDiscEngEventInd& /* legacy_ind */,
NanDiscEngEventInd* /* hidl_ind */) {
return false;
}
bool convertLegacyNanDisabledIndToHidl(
const legacy_hal::NanDisabledInd& /* legacy_ind */,
NanDisabledInd* /* hidl_ind */) {
return false;
}
bool convertLegacyNanBeaconSdfPayloadIndToHidl(
const legacy_hal::NanBeaconSdfPayloadInd& /* legacy_ind */,
NanBeaconSdfPayloadInd* /* hidl_ind */) {
return false;
}
bool convertLegacyNanDataPathRequestIndToHidl(
const legacy_hal::NanDataPathRequestInd& /* legacy_ind */,
NanDataPathRequestInd* /* hidl_ind */) {
return false;
}
bool convertLegacyNanDataPathConfirmIndToHidl(
const legacy_hal::NanDataPathConfirmInd& /* legacy_ind */,
NanDataPathConfirmInd* /* hidl_ind */) {
return false;
}
bool convertLegacyNanDataPathEndIndToHidl(
const legacy_hal::NanDataPathEndInd& /* legacy_ind */,
NanDataPathEndInd* /* hidl_ind */) {
return false;
}
bool convertLegacyNanTransmitFollowupIndToHidl(
const legacy_hal::NanTransmitFollowupInd& /* legacy_ind */,
NanTransmitFollowupInd* /* hidl_ind */) {
return false;
}
} // namespace hidl_struct_util
} // namespace implementation
} // namespace V1_0

View File

@@ -36,7 +36,7 @@ namespace V1_0 {
namespace implementation {
namespace hidl_struct_util {
// Convert hidl gscan params to legacy gscan params.
// STA iface conversion methods.
bool convertHidlScanParamsToLegacy(
const StaBackgroundScanParameters& hidl_scan_params,
legacy_hal::wifi_scan_cmd_params* legacy_scan_params);
@@ -59,6 +59,89 @@ bool convertLegacyVectorOfCachedScanResultsToHidl(
bool convertLegacyLinkLayerStatsToHidl(
const legacy_hal::LinkLayerStats& legacy_stats,
StaLinkLayerStats* hidl_stats);
// NAN iface conversion methods.
bool convertHidlNanEnableRequestToLegacy(
const NanEnableRequest& hidl_request,
legacy_hal::NanEnableRequest* legacy_request);
bool convertHidlNanPublishRequestToLegacy(
const NanPublishRequest& hidl_request,
legacy_hal::NanPublishRequest* legacy_request);
bool convertHidlNanPublishCancelRequestToLegacy(
const NanPublishCancelRequest& hidl_request,
legacy_hal::NanPublishCancelRequest* legacy_request);
bool convertHidlNanSubscribeRequestToLegacy(
const NanSubscribeRequest& hidl_request,
legacy_hal::NanSubscribeRequest* legacy_request);
bool convertHidlNanSubscribeCancelRequestToLegacy(
const NanSubscribeCancelRequest& hidl_request,
legacy_hal::NanSubscribeCancelRequest* legacy_request);
bool convertHidlNanTransmitFollowupRequestToLegacy(
const NanTransmitFollowupRequest& hidl_request,
legacy_hal::NanTransmitFollowupRequest* legacy_request);
bool convertHidlNanConfigRequestToLegacy(
const NanConfigRequest& hidl_request,
legacy_hal::NanConfigRequest* legacy_request);
bool convertHidlNanBeaconSdfPayloadRequestToLegacy(
const NanBeaconSdfPayloadRequest& hidl_request,
legacy_hal::NanBeaconSdfPayloadRequest* legacy_request);
bool convertHidlNanDataPathInitiatorRequestToLegacy(
const NanDataPathInitiatorRequest& hidl_request,
legacy_hal::NanDataPathInitiatorRequest* legacy_request);
bool convertHidlNanDataPathIndicationResponseToLegacy(
const NanDataPathIndicationResponse& hidl_response,
legacy_hal::NanDataPathIndicationResponse* legacy_response);
bool convertHidlNanDataPathEndRequestToLegacy(
const NanDataPathEndRequest& hidl_request,
legacy_hal::NanDataPathEndRequest* legacy_request);
bool convertLegacyNanResponseHeaderToHidl(
const legacy_hal::NanResponseMsg& legacy_response,
NanResponseMsgHeader* hidl_response);
bool convertLegacyNanPublishResponseToHidl(
const legacy_hal::NanPublishResponse& legacy_response,
NanPublishResponse* hidl_response);
bool convertLegacyNanSubscribeResponseToHidl(
const legacy_hal::NanSubscribeResponse& legacy_response,
NanSubscribeResponse* hidl_response);
bool convertLegacyNanDataPathResponseToHidl(
const legacy_hal::NanDataPathRequestResponse& legacy_response,
NanDataPathResponse* hidl_response);
bool convertLegacyNanCapabilitiesResponseToHidl(
const legacy_hal::NanCapabilities& legacy_response,
NanCapabilitiesResponse* hidl_response);
bool convertLegacyNanPublishTerminatedIndToHidl(
const legacy_hal::NanPublishTerminatedInd& legacy_ind,
NanPublishTerminatedInd* hidl_ind);
bool convertLegacyNanMatchIndToHidl(const legacy_hal::NanMatchInd& legacy_ind,
NanMatchInd* hidl_ind);
bool convertLegacyNanMatchExpiredIndToHidl(
const legacy_hal::NanMatchExpiredInd& legacy_ind,
NanMatchExpiredInd* hidl_ind);
bool convertLegacyNanSubscribeTerminatedIndToHidl(
const legacy_hal::NanSubscribeTerminatedInd& legacy_ind,
NanSubscribeTerminatedInd* hidl_ind);
bool convertLegacyNanFollowupIndToHidl(
const legacy_hal::NanFollowupInd& legacy_ind, NanFollowupInd* hidl_ind);
bool convertLegacyNanDiscEngEventIndToHidl(
const legacy_hal::NanDiscEngEventInd& legacy_ind,
NanDiscEngEventInd* hidl_ind);
bool convertLegacyNanDisabledIndToHidl(
const legacy_hal::NanDisabledInd& legacy_ind, NanDisabledInd* hidl_ind);
bool convertLegacyNanBeaconSdfPayloadIndToHidl(
const legacy_hal::NanBeaconSdfPayloadInd& legacy_ind,
NanBeaconSdfPayloadInd* hidl_ind);
bool convertLegacyNanDataPathRequestIndToHidl(
const legacy_hal::NanDataPathRequestInd& legacy_ind,
NanDataPathRequestInd* hidl_ind);
bool convertLegacyNanDataPathConfirmIndToHidl(
const legacy_hal::NanDataPathConfirmInd& legacy_ind,
NanDataPathConfirmInd* hidl_ind);
bool convertLegacyNanDataPathEndIndToHidl(
const legacy_hal::NanDataPathEndInd& legacy_ind,
NanDataPathEndInd* hidl_ind);
bool convertLegacyNanTransmitFollowupIndToHidl(
const legacy_hal::NanTransmitFollowupInd& legacy_ind,
NanTransmitFollowupInd* hidl_ind);
} // namespace hidl_struct_util
} // namespace implementation
} // namespace V1_0

View File

@@ -17,6 +17,7 @@
#include <android-base/logging.h>
#include "hidl_return_util.h"
#include "hidl_struct_util.h"
#include "wifi_nan_iface.h"
#include "wifi_status_util.h"
@@ -30,7 +31,47 @@ using hidl_return_util::validateAndCall;
WifiNanIface::WifiNanIface(
const std::string& ifname,
const std::weak_ptr<legacy_hal::WifiLegacyHal> legacy_hal)
: ifname_(ifname), legacy_hal_(legacy_hal), is_valid_(true) {}
: ifname_(ifname), legacy_hal_(legacy_hal), is_valid_(true) {
// Register all the callbacks here. these should be valid for the lifetime
// of the object. Whenever the mode changes legacy HAL will remove
// all of these callbacks.
legacy_hal::NanCallbackHandlers callback_handlers;
// Callback for response.
callback_handlers.on_notify_response = [&](
legacy_hal::transaction_id id, const legacy_hal::NanResponseMsg& msg) {
NanResponseMsgHeader hidl_header;
if (!hidl_struct_util::convertLegacyNanResponseHeaderToHidl(msg,
&hidl_header)) {
LOG(ERROR) << "Failed to convert nan response header";
return;
}
// TODO: This is a union in the legacy HAL. Need to convert to appropriate
// callback based on type.
// Assuming |NanPublishResponseMsg| type here.
NanPublishResponse hidl_body;
if (!hidl_struct_util::convertLegacyNanPublishResponseToHidl(
msg.body.publish_response, &hidl_body)) {
LOG(ERROR) << "Failed to convert nan publish response";
return;
}
NanPublishResponseMsg hidl_msg;
hidl_msg.header = hidl_header;
hidl_msg.body = hidl_body;
for (const auto& callback : event_callbacks_) {
if (!callback->notifyPublishResponse(id, hidl_msg).getStatus().isOk()) {
LOG(ERROR) << "Failed to invoke the callback";
}
}
};
// TODO: Register the remaining callbacks.
legacy_hal::wifi_error legacy_status =
legacy_hal_.lock()->nanRegisterCallbackHandlers(callback_handlers);
if (legacy_status != legacy_hal::WIFI_SUCCESS) {
LOG(ERROR) << "Failed to register nan callbacks. Invalidating object";
invalidate();
}
}
void WifiNanIface::invalidate() {
legacy_hal_.reset();
@@ -258,33 +299,60 @@ WifiStatus WifiNanIface::registerEventCallbackInternal(
return createWifiStatus(WifiStatusCode::SUCCESS);
}
WifiStatus WifiNanIface::enableRequestInternal(
uint32_t /* cmd_id */, const NanEnableRequest& /* msg */) {
// TODO implement
return createWifiStatus(WifiStatusCode::SUCCESS);
WifiStatus WifiNanIface::enableRequestInternal(uint32_t cmd_id,
const NanEnableRequest& msg) {
legacy_hal::NanEnableRequest legacy_msg;
if (!hidl_struct_util::convertHidlNanEnableRequestToLegacy(msg,
&legacy_msg)) {
return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
}
legacy_hal::wifi_error legacy_status =
legacy_hal_.lock()->nanEnableRequest(cmd_id, legacy_msg);
return createWifiStatusFromLegacyError(legacy_status);
}
WifiStatus WifiNanIface::disableRequestInternal(uint32_t /* cmd_id */) {
// TODO implement
return createWifiStatus(WifiStatusCode::SUCCESS);
WifiStatus WifiNanIface::disableRequestInternal(uint32_t cmd_id) {
legacy_hal::wifi_error legacy_status =
legacy_hal_.lock()->nanDisableRequest(cmd_id);
return createWifiStatusFromLegacyError(legacy_status);
}
WifiStatus WifiNanIface::publishRequestInternal(
uint32_t /* cmd_id */, const NanPublishRequest& /* msg */) {
// TODO implement
return createWifiStatus(WifiStatusCode::SUCCESS);
WifiStatus WifiNanIface::publishRequestInternal(uint32_t cmd_id,
const NanPublishRequest& msg) {
legacy_hal::NanPublishRequest legacy_msg;
if (!hidl_struct_util::convertHidlNanPublishRequestToLegacy(msg,
&legacy_msg)) {
return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
}
legacy_hal::wifi_error legacy_status =
legacy_hal_.lock()->nanPublishRequest(cmd_id, legacy_msg);
return createWifiStatusFromLegacyError(legacy_status);
}
WifiStatus WifiNanIface::publishCancelRequestInternal(
uint32_t /* cmd_id */, const NanPublishCancelRequest& /* msg */) {
// TODO implement
return createWifiStatus(WifiStatusCode::SUCCESS);
uint32_t cmd_id, const NanPublishCancelRequest& msg) {
legacy_hal::NanPublishCancelRequest legacy_msg;
if (!hidl_struct_util::convertHidlNanPublishCancelRequestToLegacy(
msg, &legacy_msg)) {
return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
}
legacy_hal::wifi_error legacy_status =
legacy_hal_.lock()->nanPublishCancelRequest(cmd_id, legacy_msg);
return createWifiStatusFromLegacyError(legacy_status);
}
WifiStatus WifiNanIface::subscribeRequestInternal(
uint32_t /* cmd_id */, const NanSubscribeRequest& /* msg */) {
// TODO implement
return createWifiStatus(WifiStatusCode::SUCCESS);
uint32_t cmd_id, const NanSubscribeRequest& msg) {
legacy_hal::NanSubscribeRequest legacy_msg;
if (!hidl_struct_util::convertHidlNanSubscribeRequestToLegacy(msg,
&legacy_msg)) {
return createWifiStatus(WifiStatusCode::ERROR_INVALID_ARGS);
}
legacy_hal::wifi_error legacy_status =
legacy_hal_.lock()->nanSubscribeRequest(cmd_id, legacy_msg);
return createWifiStatusFromLegacyError(legacy_status);
}
WifiStatus WifiNanIface::subscribeCancelRequestInternal(
uint32_t /* cmd_id */, const NanSubscribeCancelRequest& /* msg */) {
// TODO implement