wifi: Add the various iface object implementation am: 3e2d671a4c
am: 6179a92b9a
am: 53046195bf
Change-Id: I14d64f7dd2e74a4519500285612aa444d3139665
This commit is contained in:
commit
284a74db6d
10 changed files with 467 additions and 3 deletions
|
@ -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 \
|
||||
|
|
53
wifi/1.0/default/wifi_ap_iface.cpp
Normal file
53
wifi/1.0/default/wifi_ap_iface.cpp
Normal 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
|
59
wifi/1.0/default/wifi_ap_iface.h
Normal file
59
wifi/1.0/default/wifi_ap_iface.h
Normal 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_
|
|
@ -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.
|
||||
|
|
53
wifi/1.0/default/wifi_nan_iface.cpp
Normal file
53
wifi/1.0/default/wifi_nan_iface.cpp
Normal 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
|
59
wifi/1.0/default/wifi_nan_iface.h
Normal file
59
wifi/1.0/default/wifi_nan_iface.h
Normal 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_
|
53
wifi/1.0/default/wifi_p2p_iface.cpp
Normal file
53
wifi/1.0/default/wifi_p2p_iface.cpp
Normal 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
|
59
wifi/1.0/default/wifi_p2p_iface.h
Normal file
59
wifi/1.0/default/wifi_p2p_iface.h
Normal 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_
|
53
wifi/1.0/default/wifi_sta_iface.cpp
Normal file
53
wifi/1.0/default/wifi_sta_iface.cpp
Normal 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
|
59
wifi/1.0/default/wifi_sta_iface.h
Normal file
59
wifi/1.0/default/wifi_sta_iface.h
Normal 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_
|
Loading…
Reference in a new issue