diff options
-rw-r--r-- | src/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/afb_binding_api.cpp | 102 | ||||
-rw-r--r-- | src/app.cpp | 73 |
3 files changed, 103 insertions, 73 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 606192c..0ef0eb5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -24,6 +24,7 @@ add_library(winman MODULE json_helper.cpp json_helper.hpp app.hpp app.cpp + afb_binding_api.cpp result.hpp afb_binding_api.hpp afb_binding_glue.inl layers.cpp layers.hpp controller_hooks.hpp config.cpp config.hpp) diff --git a/src/afb_binding_api.cpp b/src/afb_binding_api.cpp new file mode 100644 index 0000000..d0df3b6 --- /dev/null +++ b/src/afb_binding_api.cpp @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2017 Mentor Graphics Development (Deutschland) GmbH + * + * 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 "app.hpp" +#include "json_helper.hpp" + +#include <csignal> + +#include <json.hpp> + +using json = nlohmann::json; + +#include <json-c/json.h> + +namespace wm { +// _ _ _ _ _ _ _ +// | |__ (_)_ __ __| (_)_ __ __ _ __ _ _ __ (_) (_)_ __ ___ _ __ | | +// | '_ \| | '_ \ / _` | | '_ \ / _` | / _` | '_ \| | | | '_ ` _ \| '_ \| | +// | |_) | | | | | (_| | | | | | (_| | | (_| | |_) | | | | | | | | | |_) | | +// |_.__/|_|_| |_|\__,_|_|_| |_|\__, |___\__,_| .__/|_| |_|_| |_| |_| .__/|_| +// |___/_____| |_| |_| +binding_api::result_type binding_api::request_surface( + char const *drawing_name) { + auto r = this->app->request_surface(drawing_name); + if (r.is_err()) { + return Err<json_object *>(r.unwrap_err()); + } + return Ok(json_object_new_int(r.unwrap())); +} + +binding_api::result_type binding_api::activate_surface( + char const *drawing_name) { + logdebug("%s drawing_name %s", __func__, drawing_name); + auto r = this->app->activate_surface(drawing_name); + if (r != nullptr) { + logdebug("%s failed with error: %s", __func__, r); + return Err<json_object *>(r); + } + return Ok(json_object_new_object()); +} + +binding_api::result_type binding_api::deactivate_surface(char const* drawing_name) { + logdebug("%s drawing_name %s", __func__, drawing_name); + auto r = this->app->deactivate_surface(drawing_name); + if (r != nullptr) { + logdebug("%s failed with error: %s", __func__, r); + return Err<json_object *>(r); + } + return Ok(json_object_new_object()); +} + +binding_api::result_type binding_api::enddraw(char const* drawing_name) { + logdebug("%s drawing_name %s", __func__, drawing_name); + return Err<json_object*>("not implemented"); +} + +binding_api::result_type binding_api::list_drawing_names() { + logdebug("%s", __func__); + json j = this->app->id_alloc.name2id; + return Ok(json_tokener_parse(j.dump().c_str())); +} + +binding_api::result_type binding_api::debug_layers() { + logdebug("%s", __func__); + return Ok(json_tokener_parse(this->app->layers.to_json().dump().c_str())); +} + +binding_api::result_type binding_api::debug_surfaces() { + logdebug("%s", __func__); + return Ok(to_json(this->app->controller->sprops)); +} + +binding_api::result_type binding_api::debug_status() { + logdebug("%s", __func__); + json_object *jr = json_object_new_object(); + json_object_object_add(jr, "surfaces", + to_json(this->app->controller->sprops)); + json_object_object_add(jr, "layers", to_json(this->app->controller->lprops)); + return Ok(jr); +} + +binding_api::result_type binding_api::debug_terminate() { + logdebug("%s", __func__); + raise(SIGKILL); // XXX afb-daemon kills it's pgroup using TERM, which + // doesn't play well with perf + return Ok(json_object_new_object()); +} + +} // namespace wm diff --git a/src/app.cpp b/src/app.cpp index 2bb74b4..1c7382d 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -517,79 +517,6 @@ void App::deactivate(unsigned id) { } } -// _ _ _ _ _ _ _ -// | |__ (_)_ __ __| (_)_ __ __ _ __ _ _ __ (_) (_)_ __ ___ _ __ | | -// | '_ \| | '_ \ / _` | | '_ \ / _` | / _` | '_ \| | | | '_ ` _ \| '_ \| | -// | |_) | | | | | (_| | | | | | (_| | | (_| | |_) | | | | | | | | | |_) | | -// |_.__/|_|_| |_|\__,_|_|_| |_|\__, |___\__,_| .__/|_| |_|_| |_| |_| .__/|_| -// |___/_____| |_| |_| -binding_api::result_type binding_api::request_surface( - char const *drawing_name) { - auto r = this->app->request_surface(drawing_name); - if (r.is_err()) { - return Err<json_object *>(r.unwrap_err()); - } - return Ok(json_object_new_int(r.unwrap())); -} - -binding_api::result_type binding_api::activate_surface( - char const *drawing_name) { - logdebug("%s drawing_name %s", __func__, drawing_name); - auto r = this->app->activate_surface(drawing_name); - if (r != nullptr) { - logdebug("%s failed with error: %s", __func__, r); - return Err<json_object *>(r); - } - return Ok(json_object_new_object()); -} - -binding_api::result_type binding_api::deactivate_surface(char const* drawing_name) { - logdebug("%s drawing_name %s", __func__, drawing_name); - auto r = this->app->deactivate_surface(drawing_name); - if (r != nullptr) { - logdebug("%s failed with error: %s", __func__, r); - return Err<json_object *>(r); - } - return Ok(json_object_new_object()); -} - -binding_api::result_type binding_api::enddraw(char const* drawing_name) { - logdebug("%s drawing_name %s", __func__, drawing_name); - return Err<json_object*>("not implemented"); -} - -binding_api::result_type binding_api::list_drawing_names() { - logdebug("%s", __func__); - json j = this->app->id_alloc.name2id; - return Ok(json_tokener_parse(j.dump().c_str())); -} - -binding_api::result_type binding_api::debug_layers() { - logdebug("%s", __func__); - return Ok(json_tokener_parse(this->app->layers.to_json().dump().c_str())); -} - -binding_api::result_type binding_api::debug_surfaces() { - logdebug("%s", __func__); - return Ok(to_json(this->app->controller->sprops)); -} - -binding_api::result_type binding_api::debug_status() { - logdebug("%s", __func__); - json_object *jr = json_object_new_object(); - json_object_object_add(jr, "surfaces", - to_json(this->app->controller->sprops)); - json_object_object_add(jr, "layers", to_json(this->app->controller->lprops)); - return Ok(jr); -} - -binding_api::result_type binding_api::debug_terminate() { - logdebug("%s", __func__); - raise(SIGKILL); // XXX afb-daemon kills it's pgroup using TERM, which - // doesn't play well with perf - return Ok(json_object_new_object()); -} - // _ _ _ _ _ // ___ ___ _ __ | |_ _ __ ___ | | | ___ _ __ | |__ ___ ___ | | _____ // / __/ _ \| '_ \| __| '__/ _ \| | |/ _ \ '__|| '_ \ / _ \ / _ \| |/ / __| |