/* * Copyright 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. */ #define LOG_TAG "VtsHalDriverCallbackBase" #include "driver_base/DriverCallbackBase.h" #include #include #include "component_loader/DllLoader.h" #include "test/vts/proto/AndroidSystemControlMessage.pb.h" #include "test/vts/proto/ComponentSpecificationMessage.pb.h" #include "utils/InterfaceSpecUtil.h" using namespace std; namespace android { namespace vts { static std::map id_map_; DriverCallbackBase::DriverCallbackBase() {} DriverCallbackBase::~DriverCallbackBase() {} bool DriverCallbackBase::Register(const VariableSpecificationMessage& message) { LOG(DEBUG) << "type = " << message.type(); if (!message.is_callback()) { LOG(ERROR) << "ERROR: argument is not a callback."; return false; } if (!message.has_type() || message.type() != TYPE_FUNCTION_POINTER) { LOG(ERROR) << "ERROR: inconsistent message."; return false; } for (const auto& func_pt : message.function_pointer()) { LOG(DEBUG) << "map[" << func_pt.function_name() << "] = " << func_pt.id(); id_map_[func_pt.function_name()] = func_pt.id(); } return true; } const char* DriverCallbackBase::GetCallbackID(const string& name) { // TODO: handle when not found. LOG(DEBUG) << "GetCallbackID for " << name << "returns '" << id_map_[name].c_str() << "'"; return id_map_[name].c_str(); } void DriverCallbackBase::RpcCallToAgent( const AndroidSystemCallbackRequestMessage& message, const string& callback_socket_name) { LOG(DEBUG) << " id = '" << message.id() << "'"; if (message.id().empty() || callback_socket_name.empty()) { LOG(DEBUG) << "Abort callback forwarding."; return; } VtsDriverCommUtil util; if (!util.Connect(callback_socket_name)) exit(-1); util.VtsSocketSendMessage(message); util.Close(); } } // namespace vts } // namespace android