/* * Copyright (C) 2017 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 <nos/NuggetClient.h> #include <limits> #include <nos/transport.h> #include <application.h> namespace nos { NuggetClient::NuggetClient() : NuggetClient("") { } NuggetClient::NuggetClient(const std::string& device_name) : device_name_(device_name), open_(false) { } NuggetClient::~NuggetClient() { Close(); } void NuggetClient::Open() { if (!open_) { open_ = nos_device_open( device_name_.empty() ? nullptr : device_name_.c_str(), &device_) == 0; } } void NuggetClient::Close() { if (open_) { device_.ops.close(device_.ctx); open_ = false; } } bool NuggetClient::IsOpen() const { return open_; } uint32_t NuggetClient::CallApp(uint32_t appId, uint16_t arg, const std::vector<uint8_t>& request, std::vector<uint8_t>* response) { if (!open_) { return APP_ERROR_IO; } if (request.size() > std::numeric_limits<uint32_t>::max()) { return APP_ERROR_TOO_MUCH; } const uint32_t requestSize = request.size(); uint32_t replySize = 0; uint8_t* replyData = nullptr; if (response != nullptr) { response->resize(response->capacity()); replySize = response->size(); replyData = response->data(); } uint32_t status_code = nos_call_application(&device_, appId, arg, request.data(), requestSize, replyData, &replySize); if (response != nullptr) { response->resize(replySize); } return status_code; } nos_device* NuggetClient::Device() { return open_ ? &device_ : nullptr; } const nos_device* NuggetClient::Device() const { return open_ ? &device_ : nullptr; } const std::string& NuggetClient::DeviceName() const { return device_name_; } } // namespace nos