/* * 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 #include using json = nlohmann::json; #include 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(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(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(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("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