aboutsummaryrefslogtreecommitdiff
path: root/libnos/NuggetClientDebuggable.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libnos/NuggetClientDebuggable.cpp')
-rw-r--r--libnos/NuggetClientDebuggable.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/libnos/NuggetClientDebuggable.cpp b/libnos/NuggetClientDebuggable.cpp
new file mode 100644
index 0000000..e4a087d
--- /dev/null
+++ b/libnos/NuggetClientDebuggable.cpp
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2020 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/NuggetClientDebuggable.h>
+#include <limits>
+#include <nos/transport.h>
+#include <application.h>
+
+namespace nos {
+
+NuggetClientDebuggable::NuggetClientDebuggable(
+ const char* name, uint32_t config,
+ request_cb_t req_fn, response_cb_t resp_fn)
+ : NuggetClient(name, config),
+ request_cb_(req_fn), response_cb_(resp_fn) {}
+
+uint32_t NuggetClientDebuggable::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();
+ }
+
+ if (request_cb_) {
+ (request_cb_)(request);
+ }
+
+ uint32_t status_code = nos_call_application(&device_, appId, arg,
+ request.data(), requestSize,
+ replyData, &replySize);
+
+ if (response != nullptr) {
+ response->resize(replySize);
+ if (response_cb_) {
+ (response_cb_)(status_code, *response);
+ }
+ }
+
+ return status_code;
+}
+
+} // namespace nos