wifi: Add the various iface object implementation am: 3e2d671a4c am: 6179a92b9a

am: 53046195bf

Change-Id: I14d64f7dd2e74a4519500285612aa444d3139665
This commit is contained in:
Roshan Pius 2016-10-11 21:02:29 +00:00 committed by android-build-merger
commit 284a74db6d
10 changed files with 467 additions and 3 deletions

View file

@ -19,9 +19,13 @@ LOCAL_MODULE_RELATIVE_PATH := hw
LOCAL_CPPFLAGS := -std=c++11 -Wall -Wno-unused-parameter -Werror -Wextra
LOCAL_SRC_FILES := \
failure_reason_util.cpp \
wifi_chip.cpp \
wifi.cpp \
wifi_legacy_hal.cpp
wifi_ap_iface.cpp \
wifi_chip.cpp \
wifi_legacy_hal.cpp \
wifi_nan_iface.cpp \
wifi_p2p_iface.cpp \
wifi_sta_iface.cpp
LOCAL_SHARED_LIBRARIES := \
android.hardware.wifi@1.0 \
libbase \

View file

@ -0,0 +1,53 @@
/*
* Copyright (C) 2016 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.
*/
#include "wifi_ap_iface.h"
#include <android-base/logging.h>
#include "failure_reason_util.h"
namespace android {
namespace hardware {
namespace wifi {
namespace V1_0 {
namespace implementation {
WifiApIface::WifiApIface(const std::string& ifname,
const std::weak_ptr<WifiLegacyHal> legacy_hal)
: ifname_(ifname), legacy_hal_(legacy_hal), is_valid_(true) {}
void WifiApIface::invalidate() {
legacy_hal_.reset();
is_valid_ = false;
}
Return<void> WifiApIface::getName(getName_cb cb) {
hidl_string hidl_ifname;
hidl_ifname.setToExternal(ifname_.c_str(), ifname_.size());
cb(hidl_ifname);
return Void();
}
Return<IfaceType> WifiApIface::getType() {
return IfaceType::AP;
}
} // namespace implementation
} // namespace V1_0
} // namespace wifi
} // namespace hardware
} // namespace android

View file

@ -0,0 +1,59 @@
/*
* Copyright (C) 2016 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.
*/
#ifndef WIFI_AP_IFACE_H_
#define WIFI_AP_IFACE_H_
#include <android-base/macros.h>
#include <android/hardware/wifi/1.0/IWifiApIface.h>
#include "wifi_legacy_hal.h"
namespace android {
namespace hardware {
namespace wifi {
namespace V1_0 {
namespace implementation {
/**
* HIDL interface object used to control a AP Iface instance.
*/
class WifiApIface : public IWifiApIface {
public:
WifiApIface(const std::string& ifname,
const std::weak_ptr<WifiLegacyHal> legacy_hal);
// Refer to |WifiChip::invalidate()|.
void invalidate();
// HIDL methods exposed.
Return<void> getName(getName_cb cb) override;
Return<IfaceType> getType() override;
private:
std::string ifname_;
std::weak_ptr<WifiLegacyHal> legacy_hal_;
bool is_valid_;
DISALLOW_COPY_AND_ASSIGN(WifiApIface);
};
} // namespace implementation
} // namespace V1_0
} // namespace wifi
} // namespace hardware
} // namespace android
#endif // WIFI_AP_IFACE_H_

View file

@ -38,7 +38,19 @@ namespace implementation {
class WifiChip : public IWifiChip {
public:
WifiChip(ChipId chip_id, const std::weak_ptr<WifiLegacyHal> legacy_hal);
// Invalidate this instance once the HAL is stopped.
// HIDL does not provide a built-in mechanism to let the server invalidate
// a HIDL interface object after creation. If any client process holds onto
// a reference to the object in their context, any method calls on that
// reference will continue to be directed to the server.
//
// However Wifi HAL needs to control the lifetime of these objects. So, add
// a public |invalidate| method to |WifiChip| and it's child objects. This
// will be used to mark an object invalid when either:
// a) Wifi HAL is stopped, or
// b) Wifi Chip is reconfigured.
//
// All HIDL method implementations should check if the object is still marked
// valid before processing them.
void invalidate();
// HIDL methods exposed.

View file

@ -0,0 +1,53 @@
/*
* Copyright (C) 2016 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.
*/
#include "wifi_nan_iface.h"
#include <android-base/logging.h>
#include "failure_reason_util.h"
namespace android {
namespace hardware {
namespace wifi {
namespace V1_0 {
namespace implementation {
WifiNanIface::WifiNanIface(const std::string& ifname,
const std::weak_ptr<WifiLegacyHal> legacy_hal)
: ifname_(ifname), legacy_hal_(legacy_hal), is_valid_(true) {}
void WifiNanIface::invalidate() {
legacy_hal_.reset();
is_valid_ = false;
}
Return<void> WifiNanIface::getName(getName_cb cb) {
hidl_string hidl_ifname;
hidl_ifname.setToExternal(ifname_.c_str(), ifname_.size());
cb(hidl_ifname);
return Void();
}
Return<IfaceType> WifiNanIface::getType() {
return IfaceType::NAN;
}
} // namespace implementation
} // namespace V1_0
} // namespace wifi
} // namespace hardware
} // namespace android

View file

@ -0,0 +1,59 @@
/*
* Copyright (C) 2016 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.
*/
#ifndef WIFI_NAN_IFACE_H_
#define WIFI_NAN_IFACE_H_
#include <android-base/macros.h>
#include <android/hardware/wifi/1.0/IWifiNanIface.h>
#include "wifi_legacy_hal.h"
namespace android {
namespace hardware {
namespace wifi {
namespace V1_0 {
namespace implementation {
/**
* HIDL interface object used to control a NAN Iface instance.
*/
class WifiNanIface : public IWifiNanIface {
public:
WifiNanIface(const std::string& ifname,
const std::weak_ptr<WifiLegacyHal> legacy_hal);
// Refer to |WifiChip::invalidate()|.
void invalidate();
// HIDL methods exposed.
Return<void> getName(getName_cb cb) override;
Return<IfaceType> getType() override;
private:
std::string ifname_;
std::weak_ptr<WifiLegacyHal> legacy_hal_;
bool is_valid_;
DISALLOW_COPY_AND_ASSIGN(WifiNanIface);
};
} // namespace implementation
} // namespace V1_0
} // namespace wifi
} // namespace hardware
} // namespace android
#endif // WIFI_NAN_IFACE_H_

View file

@ -0,0 +1,53 @@
/*
* Copyright (C) 2016 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.
*/
#include "wifi_p2p_iface.h"
#include <android-base/logging.h>
#include "failure_reason_util.h"
namespace android {
namespace hardware {
namespace wifi {
namespace V1_0 {
namespace implementation {
WifiP2pIface::WifiP2pIface(const std::string& ifname,
const std::weak_ptr<WifiLegacyHal> legacy_hal)
: ifname_(ifname), legacy_hal_(legacy_hal), is_valid_(true) {}
void WifiP2pIface::invalidate() {
legacy_hal_.reset();
is_valid_ = false;
}
Return<void> WifiP2pIface::getName(getName_cb cb) {
hidl_string hidl_ifname;
hidl_ifname.setToExternal(ifname_.c_str(), ifname_.size());
cb(hidl_ifname);
return Void();
}
Return<IfaceType> WifiP2pIface::getType() {
return IfaceType::P2P;
}
} // namespace implementation
} // namespace V1_0
} // namespace wifi
} // namespace hardware
} // namespace android

View file

@ -0,0 +1,59 @@
/*
* Copyright (C) 2016 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.
*/
#ifndef WIFI_P2P_IFACE_H_
#define WIFI_P2P_IFACE_H_
#include <android-base/macros.h>
#include <android/hardware/wifi/1.0/IWifiP2pIface.h>
#include "wifi_legacy_hal.h"
namespace android {
namespace hardware {
namespace wifi {
namespace V1_0 {
namespace implementation {
/**
* HIDL interface object used to control a P2P Iface instance.
*/
class WifiP2pIface : public IWifiP2pIface {
public:
WifiP2pIface(const std::string& ifname,
const std::weak_ptr<WifiLegacyHal> legacy_hal);
// Refer to |WifiChip::invalidate()|.
void invalidate();
// HIDL methods exposed.
Return<void> getName(getName_cb cb) override;
Return<IfaceType> getType() override;
private:
std::string ifname_;
std::weak_ptr<WifiLegacyHal> legacy_hal_;
bool is_valid_;
DISALLOW_COPY_AND_ASSIGN(WifiP2pIface);
};
} // namespace implementation
} // namespace V1_0
} // namespace wifi
} // namespace hardware
} // namespace android
#endif // WIFI_P2P_IFACE_H_

View file

@ -0,0 +1,53 @@
/*
* Copyright (C) 2016 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.
*/
#include "wifi_sta_iface.h"
#include <android-base/logging.h>
#include "failure_reason_util.h"
namespace android {
namespace hardware {
namespace wifi {
namespace V1_0 {
namespace implementation {
WifiStaIface::WifiStaIface(const std::string& ifname,
const std::weak_ptr<WifiLegacyHal> legacy_hal)
: ifname_(ifname), legacy_hal_(legacy_hal), is_valid_(true) {}
void WifiStaIface::invalidate() {
legacy_hal_.reset();
is_valid_ = false;
}
Return<void> WifiStaIface::getName(getName_cb cb) {
hidl_string hidl_ifname;
hidl_ifname.setToExternal(ifname_.c_str(), ifname_.size());
cb(hidl_ifname);
return Void();
}
Return<IfaceType> WifiStaIface::getType() {
return IfaceType::STA;
}
} // namespace implementation
} // namespace V1_0
} // namespace wifi
} // namespace hardware
} // namespace android

View file

@ -0,0 +1,59 @@
/*
* Copyright (C) 2016 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.
*/
#ifndef WIFI_STA_IFACE_H_
#define WIFI_STA_IFACE_H_
#include <android-base/macros.h>
#include <android/hardware/wifi/1.0/IWifiStaIface.h>
#include "wifi_legacy_hal.h"
namespace android {
namespace hardware {
namespace wifi {
namespace V1_0 {
namespace implementation {
/**
* HIDL interface object used to control a STA Iface instance.
*/
class WifiStaIface : public IWifiStaIface {
public:
WifiStaIface(const std::string& ifname,
const std::weak_ptr<WifiLegacyHal> legacy_hal);
// Refer to |WifiChip::invalidate()|.
void invalidate();
// HIDL methods exposed.
Return<void> getName(getName_cb cb) override;
Return<IfaceType> getType() override;
private:
std::string ifname_;
std::weak_ptr<WifiLegacyHal> legacy_hal_;
bool is_valid_;
DISALLOW_COPY_AND_ASSIGN(WifiStaIface);
};
} // namespace implementation
} // namespace V1_0
} // namespace wifi
} // namespace hardware
} // namespace android
#endif // WIFI_STA_IFACE_H_