#!/usr/bin/python3
+#
+# 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.
+#
+
import sys
OUT = sys.stdout
def emit_func(api, f):
p('void %(impl_name)s(afb_req req) noexcept {' % f)
+ p(' std::lock_guard<std::mutex> guard(binding_m);')
+ p(' #ifdef ST')
+ p(' ST();')
+ p(' #endif')
p(' if (g_afb_instance == nullptr) {',
' afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?");',
' return;',
p(' {}', '};')
def emit_binding(api):
- p('namespace {', '')
+ p('namespace {')
+ p('std::mutex binding_m;', '')
for func in api['functions']:
emit_func(api, func)
p('} // namespace', '')
p('struct binding_api {')
p(' typedef wm::result<json_object *> result_type;')
p(' struct wm::App *app;')
+ p(' void send_event(char const *evname, char const *label);')
for f in api['functions']:
p(' result_type %(name)s(' % f + ', '.join(map(lambda x: '%(type)s %(name)s' % x, f.get('args', []))) + ');')
p('};', '')
- p('} // namespace wm')
+ p('} // namespace wm', '')
# names must always be valid in c and unique for each function (that is its arguments)
# arguments will be looked up from json request, range checking needs to be implemented
'api': 'g_afb_instance->app.api.', # where are our API functions
'functions': [
{
- 'name': 'register_surface',
+ 'name': 'requestsurface',
#'return_type': 'int', # Or do they return all just some json?
'args': [ # describes the functions arguments, and their names as found in the json request
- { 'name': 'appid', 'type': 'uint32_t', 'jtype': 'int' }, # XXX: lookup jtypes automatically? i.e. char*|const char* would be string?
- { 'name': 'surfaceid', 'type': 'uint32_t', 'jtype': 'int' },
+ { 'name': 'drawing_name', 'type': 'char const*', 'jtype': 'string' },
+ ],
+ },
+ {
+ 'name': 'activatesurface',
+ 'args': [
+ { 'name': 'drawing_name', 'type': 'char const*', 'jtype': 'string' },
],
},
+ {
+ 'name': 'deactivatesurface',
+ 'args': [
+ { 'name': 'drawing_name', 'type': 'char const*', 'jtype': 'string' },
+ ],
+ },
+ {
+ 'name': 'enddraw',
+ 'args': [
+ { 'name': 'drawing_name', 'type': 'char const*', 'jtype': 'string' },
+ ],
+ },
+ { 'name': 'list_drawing_names', },
+ { 'name': 'ping' },
+
{ 'name': 'debug_status', },
{ 'name': 'debug_layers', },
{ 'name': 'debug_surfaces', },
+ { 'name': 'debug_terminate' },
]
}