mirror of
https://github.com/Evolution-X-Devices/device_google_wahoo
synced 2026-02-01 07:50:47 +00:00
128 lines
4.5 KiB
C++
128 lines
4.5 KiB
C++
#include "offload_server.h"
|
|
|
|
#include <android-base/logging.h>
|
|
#include <chre/apps/wifi_offload/flatbuffers_serialization.h>
|
|
#include <chre/apps/wifi_offload/host_message_types.h>
|
|
|
|
#include "offload_status_util.h"
|
|
#include "offload_utils.h"
|
|
|
|
using namespace android::hardware::wifi::offload::V1_0::implementation::chre_constants;
|
|
|
|
namespace android {
|
|
namespace hardware {
|
|
namespace wifi {
|
|
namespace offload {
|
|
namespace V1_0 {
|
|
namespace implementation {
|
|
|
|
class OffloadServer;
|
|
|
|
OffloadServer::OffloadServer(ChreInterfaceFactory* factory)
|
|
: mChreInterfaceCallbacks(new ChreInterfaceCallbacksImpl(this)),
|
|
mChreInterface(factory->getChreInterface(mChreInterfaceCallbacks.get())) {
|
|
LOG(VERBOSE) << "Wifi Offload HAL impl";
|
|
}
|
|
|
|
OffloadStatus OffloadServer::configureScans(const ScanParam& param, const ScanFilter& filter) {
|
|
LOG(INFO) << "configureScans";
|
|
if (!mChreInterface->isConnected()) {
|
|
return createOffloadStatus(OffloadStatusCode::ERROR,
|
|
"Not connected to hardware implementation");
|
|
}
|
|
wifi_offload::ScanConfig scanConfig;
|
|
if (!offload_utils::ToChreScanConfig(param, filter, &scanConfig)) {
|
|
return createOffloadStatus(OffloadStatusCode::ERROR,
|
|
"Unable to convert scan configuration");
|
|
}
|
|
uint8_t buffer[kMaxMessageLen];
|
|
size_t result_size = wifi_offload::fbs::Serialize(scanConfig, buffer, kMaxMessageLen);
|
|
if (result_size <= 0) {
|
|
return createOffloadStatus(OffloadStatusCode::ERROR, "Scan config serialization failed");
|
|
}
|
|
std::vector<uint8_t> message(buffer, buffer + result_size);
|
|
if (!mChreInterface->sendCommandToApp(wifi_offload::HostMessageType::HOST_CMD_CONFIG_SCANS,
|
|
message)) {
|
|
return createOffloadStatus(OffloadStatusCode::ERROR, "Unable to send config message");
|
|
}
|
|
return createOffloadStatus(OffloadStatusCode::OK);
|
|
}
|
|
|
|
std::pair<OffloadStatus, ScanStats> OffloadServer::getScanStats() {
|
|
LOG(INFO) << "getScanStats";
|
|
OffloadStatus status = createOffloadStatus(OffloadStatusCode::OK);
|
|
return std::make_pair(status, mScanStats);
|
|
}
|
|
|
|
OffloadStatus OffloadServer::subscribeScanResults(uint32_t delayMs) {
|
|
LOG(INFO) << "subscribeScanResults with delay:" << delayMs;
|
|
if (!mChreInterface->isConnected()) {
|
|
return createOffloadStatus(OffloadStatusCode::ERROR, "Not connected to hardware");
|
|
}
|
|
uint32_t* buffer = &delayMs;
|
|
std::vector<uint8_t> message(reinterpret_cast<uint8_t*>(buffer),
|
|
reinterpret_cast<uint8_t*>(buffer) + kSubscriptionDelayMsBufLen);
|
|
if (!mChreInterface->sendCommandToApp(
|
|
wifi_offload::HostMessageType::HOST_CMD_SUBSCRIBE_SCAN_RESULTS, message)) {
|
|
return createOffloadStatus(OffloadStatusCode::ERROR, "Unable to request scans");
|
|
}
|
|
return createOffloadStatus(OffloadStatusCode::OK);
|
|
}
|
|
|
|
bool OffloadServer::unsubscribeScanResults() {
|
|
bool result = false;
|
|
LOG(INFO) << "unsubscribeScanResults";
|
|
if (!mChreInterface->isConnected()) {
|
|
LOG(WARNING) << "Failed to send unsubscribe scan results message";
|
|
return false;
|
|
}
|
|
if (!mChreInterface->sendCommandToApp(
|
|
wifi_offload::HostMessageType::HOST_CMD_UNSUBSCRIBE_SCAN_RESULTS, {})) {
|
|
LOG(WARNING) << "Failed to send unsubscribe scan results message";
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool OffloadServer::setEventCallback(const sp<IOffloadCallback>& cb) {
|
|
LOG(INFO) << "Set Event callback";
|
|
bool result = false;
|
|
if (cb != nullptr) {
|
|
mEventCallback = cb;
|
|
result = true;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
void OffloadServer::clearEventCallback() {
|
|
if (mEventCallback != nullptr) {
|
|
mEventCallback.clear();
|
|
}
|
|
LOG(INFO) << "Event callback cleared";
|
|
}
|
|
|
|
ChreInterfaceCallbacksImpl::ChreInterfaceCallbacksImpl(OffloadServer* server) : mServer(server) {
|
|
}
|
|
|
|
ChreInterfaceCallbacksImpl::~ChreInterfaceCallbacksImpl() {
|
|
}
|
|
|
|
void ChreInterfaceCallbacksImpl::handleConnectionEvents(
|
|
ChreInterfaceCallbacks::ConnectionEvent event) {
|
|
LOG(VERBOSE) << "Connection event received " << (int)event;
|
|
}
|
|
|
|
void ChreInterfaceCallbacksImpl::handleMessage(uint32_t messageType,
|
|
const std::vector<uint8_t>& message) {
|
|
LOG(VERBOSE) << "Message from Nano app " << messageType;
|
|
}
|
|
|
|
// Methods from ::android::hidl::base::V1_0::IBase follow.
|
|
|
|
} // namespace implementation
|
|
} // namespace V1_0
|
|
} // namespace offload
|
|
} // namespace wifi
|
|
} // namespace hardware
|
|
} // namespace android
|