[Fawkes Git] branch/timn/skiller-auto-interfaces: created (0.5.0-3112-gccb4024)

Tim Niemueller niemueller at kbsg.rwth-aachen.de
Thu Jan 14 23:29:21 CET 2016


Changes have been pushed for the project "Fawkes Robotics Software Framework".

Gitweb: http://git.fawkesrobotics.org/fawkes.git
Trac:   http://trac.fawkesrobotics.org

The branch, timn/skiller-auto-interfaces has been created
        at  ccb40242cb9fd0c3bf0b4d394bd2dfaecb86f167 (commit)

http://git.fawkesrobotics.org/fawkes.git/timn/skiller-auto-interfaces

- *Log* ---------------------------------------------------------------
commit db9a5fd51570896f9fd88f1ae2f0beecb748fe5f
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 11:55:46 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 11:55:46 2016 +0100

    blackboard: support nested BlackBoardWithOwnership instances
    
    If one wanted to nest BlackBoardWithOwnership instances, e.g. to be more
    specific about the owner, the innermost instance would define the name,
    rather than the shell instance.
    
    Fix this by explicitly checking for nested instances and directly using
    the blackboard member. This will propagate such that each
    BlackBoardWithOwnership instance will always directly write to the first
    non-ownership instance. This has the additional benefit of improved
    performance by avoiding forwarding calls (if nested).

http://git.fawkesrobotics.org/fawkes.git/commit/db9a5fd
http://trac.fawkesrobotics.org/changeset/db9a5fd

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit d2d8bf5fa324c6ed7b887e78b46569f7668d7635
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 11:57:46 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 11:57:46 2016 +0100

    blackboard: add BlackBoard Lua wrapper
    
    Add a wrapper to enable access to the blackboard from within Lua
    allowing to open interfaces directly from Lua. Some extra code allows
    for properly typed interfaces to be returned rather than only the
    generic Interface instance.
    
    This is more akin to the template version of the methods making use of
    Lua's dynamic typing.

http://git.fawkesrobotics.org/fawkes.git/commit/d2d8bf5
http://trac.fawkesrobotics.org/changeset/d2d8bf5

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 7d2a1951eb0eff20de57b38abcdccf8759999a40
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 11:59:55 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 11:59:55 2016 +0100

    libinterface: improve Lua wrapper typing
    
    The methods to access messages returned the generic instance of a
    message. This can be improved by supporting returning the specific type
    of the message to avoid having to always cast. This is akin to the
    recent blackboard wrapper.
    
    Along the way, add some missing methods to the message wrapper.

http://git.fawkesrobotics.org/fawkes.git/commit/7d2a195
http://trac.fawkesrobotics.org/changeset/7d2a195

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 1145eb2b0027e711e321cc6bd4891c921de7ad00
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 12:01:17 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:20:51 2016 +0100

    ffifacegen: add generic Message methods to generated messages
    
    tolua++ has only a marginal concept of inheritance which requires that
    superclass methods be added also to sub-classes. This was previously
    only done for the interfaces. This patch adds this for messages as well.
    Also make use of the extra Lua code to return typed messages.

http://git.fawkesrobotics.org/fawkes.git/commit/1145eb2
http://trac.fawkesrobotics.org/changeset/1145eb2

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 410db207d876623ad320015c321c1935bbbc20af
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 12:08:18 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:20:51 2016 +0100

    interfaces: re-generate with new ffifacegen

http://git.fawkesrobotics.org/fawkes.git/commit/410db20
http://trac.fawkesrobotics.org/changeset/410db20

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 2e93025c436627116c2e4a2b0e000cbad739baed
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 12:23:29 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:13 2016 +0100

    liblua: add support for finalization calls
    
    Some Lua context may need specific finalization. Additionally, when
    restarting a context (e.g., because of file changes) it might be
    necessary to free resources in the old context, so that the new one can
    be initialized. But if initializing the new context fails, they must be
    re-aquired. For this also introduce finalization preparation and
    cancellation calls.

http://git.fawkesrobotics.org/fawkes.git/commit/2e93025
http://trac.fawkesrobotics.org/changeset/2e93025

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 258df8714f0ea2f95d705887e2d46647a142971c
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 12:25:48 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    skiller: support dynamic interface allocation
    
    This removes the need to configure used interfaces in the configuration,
    but rather opens interfaces during initialization. This is a long
    standing issue where we now catch up to the ROS port which did this for
    quite some time. The capability to use the config has been completely
    removed.
    
    This will need further changes to properly embed this, e.g., the
    LuaInterfaceImporter is no longer necessary and read and write calls
    must be issued at appropriate times.

http://git.fawkesrobotics.org/fawkes.git/commit/258df87
http://trac.fawkesrobotics.org/changeset/258df87

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 8294e05093da52dce553b664e2a3f1c42541d57e
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 12:29:30 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    skiller: add support for pre-loop callbacks

http://git.fawkesrobotics.org/fawkes.git/commit/8294e05
http://trac.fawkesrobotics.org/changeset/8294e05

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 50684a488d6e6aeb89be21d3785167bd86146e84
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 12:29:46 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    skiller: make skillenv more self-contained and adapt to interfaces
    
    The skillenv has gained several features that make it more
    self-contained and make less assumptions about calls from the outside.
    This patch also adapts assumptions based on the way interfaces used to
    be initialized (but are not any longer).

http://git.fawkesrobotics.org/fawkes.git/commit/50684a4
http://trac.fawkesrobotics.org/changeset/50684a4

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 7ba6d1c1054638d9a585e423e5d28f56f9ba429f
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 12:31:52 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    skiller: implement run-time fully in Lua
    
    This is the first step to remove C++ code that performs initialization,
    communication, and run-time coordination for the behavior engine. This
    patch implements all of this functionality in Lua only and requires
    only little support from the surrounding C++ code. An update to the
    skiller plugin is pending to make use of this new Lua code base.
    
    The code has been aligned with the ROS port of the behavior engine. It
    would benefit from another refactoring cycle but it overall makes it
    much easier to follow the code path in the skiller already.

http://git.fawkesrobotics.org/fawkes.git/commit/7ba6d1c
http://trac.fawkesrobotics.org/changeset/7ba6d1c

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 149ecaa0c38aec33ce985bb6be2d3c85d1fa0177
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 12:34:23 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    skiller: re-generate SkillerDebugInterface with new ffifacegen

http://git.fawkesrobotics.org/fawkes.git/commit/149ecaa
http://trac.fawkesrobotics.org/changeset/149ecaa

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 90bb6e55bbd89221a1bfbc9d802665f8beff608b
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 12:35:06 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    skiller: use Lua-based run-time
    
    This change removes most of the handling code of the skiller which is
    now embedded as pure Lua. This makes it much easier to update and
    maintain the skiller and the code clearer to understand.
    
    The remaining code is mainly setting up the basic environment and
    pre-loading some packages. This can probably be reduced further in a
    later step.

http://git.fawkesrobotics.org/fawkes.git/commit/90bb6e5
http://trac.fawkesrobotics.org/changeset/90bb6e5

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 173a2d8497e4d5a5bbad4b4b5c701036d41ebbeb
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 12:36:25 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    skillgui: set graph color button state based on interface

http://git.fawkesrobotics.org/fawkes.git/commit/173a2d8
http://trac.fawkesrobotics.org/changeset/173a2d8

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 13391ca51aad4cfa29c51a3559b32870f833c492
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 12:36:47 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    skills/say: specify interface ID
    
    The ID of the interface must now be specified as part of the interface
    dependencies. To be more flexible, this could be read from the
    configuration file if necessary.

http://git.fawkesrobotics.org/fawkes.git/commit/13391ca
http://trac.fawkesrobotics.org/changeset/13391ca

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 279841b904f8d494e2bee2c78f6dbf2c870d21f3
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 12:38:44 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    config: remove interfaces from skiller config and disable ROS
    
    Interfaces do not have to be and cannot any longer be configured
    through the config file.
    
    Additionally disable ROS support by default. It is likely that it will
    be necessary only in specific scenarios and additionally requires a
    working roslua installation.

http://git.fawkesrobotics.org/fawkes.git/commit/279841b
http://trac.fawkesrobotics.org/changeset/279841b

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit ae82ab53b9f68e704d64ad08110cf74e304e5f11
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 12:39:56 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    config: fix frame name in gazsim config

http://git.fawkesrobotics.org/fawkes.git/commit/ae82ab5
http://trac.fawkesrobotics.org/changeset/ae82ab5

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit b5390a24257b8f4bdfd8f03d244b12b0efec2e81
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 23:01:05 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    libinterface: add semantics for changed() for writing instance
    
    So far, Interface::changed() was only meaningful for reading interface
    instances. This has changed and it now has semantics for writing
    interfaces as well.

http://git.fawkesrobotics.org/fawkes.git/commit/b5390a2
http://trac.fawkesrobotics.org/changeset/b5390a2

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 0f9cd36734d1b1a257c785ce97bfa50ab90ab7ee
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 23:12:26 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    skiller: preserve exclusive controller in context restarts

http://git.fawkesrobotics.org/fawkes.git/commit/0f9cd36
http://trac.fawkesrobotics.org/changeset/0f9cd36

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 30ffb42eeaec8f69f797e13ead6b60a327b8f375
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 23:14:35 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    bumblebee2: re-generate interfaces with new ffifacegen

http://git.fawkesrobotics.org/fawkes.git/commit/30ffb42
http://trac.fawkesrobotics.org/changeset/30ffb42

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 9a64c0c33038a332b4a823029d0437e15a71adeb
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 23:14:35 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    dynamixel: re-generate interfaces with new ffifacegen

http://git.fawkesrobotics.org/fawkes.git/commit/9a64c0c
http://trac.fawkesrobotics.org/changeset/9a64c0c

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 0a25aa39cef8a247885998631d0487be8571a289
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 23:14:35 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    jaco: re-generate interfaces with new ffifacegen

http://git.fawkesrobotics.org/fawkes.git/commit/0a25aa3
http://trac.fawkesrobotics.org/changeset/0a25aa3

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 6d2a84ebf7f9015e74219935482a2a6bf6ef6dec
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 23:14:35 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    katana: re-generate interfaces with new ffifacegen

http://git.fawkesrobotics.org/fawkes.git/commit/6d2a84e
http://trac.fawkesrobotics.org/changeset/6d2a84e

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 4500b0c52cbcfc944dd9e895575c71bf16273cb7
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 23:14:35 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    laser-cluster: re-generate interfaces with new ffifacegen

http://git.fawkesrobotics.org/fawkes.git/commit/4500b0c
http://trac.fawkesrobotics.org/changeset/4500b0c

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit d03c5209e800368a522c54d656c0676605c94b82
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 23:14:35 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:14 2016 +0100

    nao: re-generate interfaces with new ffifacegen

http://git.fawkesrobotics.org/fawkes.git/commit/d03c520
http://trac.fawkesrobotics.org/changeset/d03c520

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit b3e524acbbaeeabde9f9b6464606624e0b9e1118
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 23:14:35 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:15 2016 +0100

    openni: re-generate interfaces with new ffifacegen

http://git.fawkesrobotics.org/fawkes.git/commit/b3e524a
http://trac.fawkesrobotics.org/changeset/b3e524a

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit cc80a5cc0cc4c29ffb8fe57f22e90eb39bd7cda7
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 23:14:35 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:15 2016 +0100

    openrave: re-generate interfaces with new ffifacegen

http://git.fawkesrobotics.org/fawkes.git/commit/cc80a5c
http://trac.fawkesrobotics.org/changeset/cc80a5c

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 4194927fcd4f79155b886a594805710e38fa3f81
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 23:14:35 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:15 2016 +0100

    pantilt: re-generate interfaces with new ffifacegen

http://git.fawkesrobotics.org/fawkes.git/commit/4194927
http://trac.fawkesrobotics.org/changeset/4194927

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit f6f856aafeaffe23f9c3366e3186b912d76458b9
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 23:14:35 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:15 2016 +0100

    robotino: re-generate interfaces with new ffifacegen

http://git.fawkesrobotics.org/fawkes.git/commit/f6f856a
http://trac.fawkesrobotics.org/changeset/f6f856a

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 5a8c9308c72c851e627651b82cbf7b892a2caca6
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 23:14:35 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:15 2016 +0100

    roomba: re-generate interfaces with new ffifacegen

http://git.fawkesrobotics.org/fawkes.git/commit/5a8c930
http://trac.fawkesrobotics.org/changeset/5a8c930

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit fc33d12c104b390312f773d349aa8026aa6acf93
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 23:15:28 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:15 2016 +0100

    laser-lines: re-generate interfaces with new ffifacegen

http://git.fawkesrobotics.org/fawkes.git/commit/fc33d12
http://trac.fawkesrobotics.org/changeset/fc33d12

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 7cd4bb8300e44e38ebf4acdf6e49ae462eec871f
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 23:15:42 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:15 2016 +0100

    navgraph-generator: rename id to name in interface field names
    
    The id() function is reserved for the message ID. While this does work
    on the C++ side due to overloading, it does not for the tolua++
    interface generator. Just rename to "name", the meaning matches. Adapt
    the thread to use the new field names.

http://git.fawkesrobotics.org/fawkes.git/commit/7cd4bb8
http://trac.fawkesrobotics.org/changeset/7cd4bb8

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit ccb40242cb9fd0c3bf0b4d394bd2dfaecb86f167
Author:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
AuthorDate: Thu Jan 14 23:16:53 2016 +0100
Commit:     Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
CommitDate: Thu Jan 14 23:24:15 2016 +0100

    pcl-db: re-generate interfaces with new ffifacegen

http://git.fawkesrobotics.org/fawkes.git/commit/ccb4024
http://trac.fawkesrobotics.org/changeset/ccb4024

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


- *Summary* -----------------------------------------------------------
 cfg/conf.d/gazsim.yaml                             |    2 +-
 cfg/conf.d/skiller.yaml                            |   37 +--
 src/libs/blackboard/Makefile                       |   22 +-
 src/libs/blackboard/blackboard.tolua               |   65 +++
 src/libs/interface/interface.cpp                   |   17 +-
 src/libs/interface/interface.tolua                 |   20 +-
 src/libs/interface/message.tolua                   |    4 +-
 src/libs/interfaces/BatteryInterface.tolua         |   46 ++-
 src/libs/interfaces/CameraControlInterface.tolua   |   63 +++-
 src/libs/interfaces/EclipseDebuggerInterface.tolua |   29 ++-
 src/libs/interfaces/FacerInterface.tolua           |  131 +++++-
 .../interfaces/FacialExpressionInterface.tolua     |   80 ++++-
 src/libs/interfaces/GameStateInterface.tolua       |   63 +++-
 src/libs/interfaces/GripperInterface.tolua         |   46 ++-
 src/libs/interfaces/HumanSkeletonInterface.tolua   |   12 +-
 src/libs/interfaces/HumanoidMotionInterface.tolua  |  199 ++++++++-
 src/libs/interfaces/IMUInterface.tolua             |   12 +-
 src/libs/interfaces/JointInterface.tolua           |   12 +-
 src/libs/interfaces/JoystickInterface.tolua        |   63 +++-
 src/libs/interfaces/KeyValueInterface.tolua        |   12 +-
 src/libs/interfaces/KickerInterface.tolua          |   63 +++-
 src/libs/interfaces/Laser1080Interface.tolua       |   12 +-
 src/libs/interfaces/Laser360Interface.tolua        |   12 +-
 src/libs/interfaces/Laser720Interface.tolua        |   12 +-
 src/libs/interfaces/LedInterface.tolua             |   63 +++-
 src/libs/interfaces/LocalizationInterface.tolua    |   29 ++-
 src/libs/interfaces/MotorInterface.tolua           |  199 ++++++++-
 src/libs/interfaces/NavPathInterface.tolua         |   12 +-
 src/libs/interfaces/NavigatorInterface.tolua       |  284 +++++++++++-
 src/libs/interfaces/ObjectPositionInterface.tolua  |   12 +-
 src/libs/interfaces/Position2DTrackInterface.tolua |   12 +-
 src/libs/interfaces/Position3DInterface.tolua      |   12 +-
 src/libs/interfaces/SkillerInterface.tolua         |   97 ++++-
 src/libs/interfaces/SoccerPenaltyInterface.tolua   |   29 ++-
 .../interfaces/SpeechRecognitionInterface.tolua    |   46 ++-
 src/libs/interfaces/SpeechSynthInterface.tolua     |   29 ++-
 src/libs/interfaces/SwitchInterface.tolua          |   80 ++++-
 src/libs/interfaces/TestInterface.tolua            |   63 +++-
 src/libs/interfaces/TransformInterface.tolua       |   12 +-
 src/libs/interfaces/VisualDisplay2DInterface.tolua |  114 +++++-
 src/libs/interfaces/generator/tolua_generator.cpp  |   54 ++-
 src/libs/interfaces/generator/tolua_generator.h    |    2 +
 src/libs/lua/context.cpp                           |   35 ++-
 src/libs/lua/context.h                             |    8 +
 src/lua/fawkes/interface_initializer.lua           |   73 ++-
 src/lua/skiller/fawkes/init.lua                    |  268 +++++++++++
 src/lua/skiller/fawkes/start.lua                   |   14 +-
 src/lua/skiller/skillenv.lua                       |  149 ++++---
 src/lua/skills/generic/say.lua                     |    2 +-
 .../interfaces/OpenCVStereoParamsInterface.tolua   |  199 ++++++++-
 .../interfaces/DynamixelServoInterface.tolua       |  335 +++++++++++++-
 .../jaco/interfaces/JacoBimanualInterface.tolua    |   80 ++++-
 src/plugins/jaco/interfaces/JacoInterface.tolua    |  165 +++++++-
 .../katana/interfaces/KatanaInterface.tolua        |  284 +++++++++++-
 .../interfaces/LaserClusterInterface.tolua         |   46 ++-
 .../interfaces/LaserLineInterface.tolua            |   12 +-
 .../nao/interfaces/NaoJointPositionInterface.tolua |   80 ++++-
 .../interfaces/NaoJointStiffnessInterface.tolua    |   63 +++-
 .../nao/interfaces/NaoSensorInterface.tolua        |   63 +++-
 .../interfaces/NavGraphGeneratorInterface.cpp      |  194 ++++----
 .../interfaces/NavGraphGeneratorInterface.h_ext    |   60 ++--
 .../interfaces/NavGraphGeneratorInterface.tolua    |  315 ++++++++++++-
 .../interfaces/NavGraphGeneratorInterface.xml      |   12 +-
 .../navgraph_generator_thread.cpp                  |   14 +-
 .../HumanSkeletonProjectionInterface.tolua         |   12 +-
 .../openrave/interfaces/OpenRaveInterface.tolua    |  199 ++++++++-
 .../pantilt/interfaces/PanTiltInterface.tolua      |  165 +++++++-
 .../interfaces/PclDatabaseMergeInterface.tolua     |   29 ++-
 .../interfaces/PclDatabaseRetrieveInterface.tolua  |   29 ++-
 .../interfaces/PclDatabaseStoreInterface.tolua     |   29 ++-
 .../interfaces/RobotinoSensorInterface.tolua       |   29 ++-
 src/plugins/roomba/Roomba500Interface.tolua        |  114 +++++-
 src/plugins/skiller/SkillerDebugInterface.tolua    |   63 +++-
 src/plugins/skiller/exec_thread.cpp                |  488 ++------------------
 src/plugins/skiller/exec_thread.h                  |   40 +--
 src/tools/skillgui/skillgui.cpp                    |    4 +
 76 files changed, 4955 insertions(+), 900 deletions(-)
 create mode 100644 src/libs/blackboard/blackboard.tolua
 create mode 100644 src/lua/skiller/fawkes/init.lua


- *Diffs* -------------------------------------------------------------

- *commit* db9a5fd51570896f9fd88f1ae2f0beecb748fe5f - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 11:55:46 2016 +0100
Subject: blackboard: support nested BlackBoardWithOwnership instances

 src/libs/blackboard/ownership.cpp |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

_Diff for modified files_:
diff --git a/src/libs/blackboard/ownership.cpp b/src/libs/blackboard/ownership.cpp
index 9eeedf3..7b9b525 100644
--- a/src/libs/blackboard/ownership.cpp
+++ b/src/libs/blackboard/ownership.cpp
@@ -47,6 +47,12 @@ namespace fawkes {
 BlackBoardWithOwnership::BlackBoardWithOwnership(fawkes::BlackBoard *parent, const char *owner)
   : BlackBoard(/* create notifier */ false), blackboard_(parent), owner_(owner)
 {
+	BlackBoardWithOwnership *bbo = dynamic_cast<BlackBoardWithOwnership *>(blackboard_);
+	if (bbo) {
+		// we are wrapping another ownership, remove indirection and make sure
+		// we do use the outer wrapper's ownership info
+		blackboard_ = bbo->blackboard_;
+	}
 }
 
 

- *commit* d2d8bf5fa324c6ed7b887e78b46569f7668d7635 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 11:57:46 2016 +0100
Subject: blackboard: add BlackBoard Lua wrapper

 src/libs/blackboard/Makefile         |   22 ++++++++++--
 src/libs/blackboard/blackboard.tolua |   65 ++++++++++++++++++++++++++++++++++
 2 files changed, 84 insertions(+), 3 deletions(-)

_Diff for modified files_:
diff --git a/src/libs/blackboard/Makefile b/src/libs/blackboard/Makefile
index 482002f..b8dbab0 100644
--- a/src/libs/blackboard/Makefile
+++ b/src/libs/blackboard/Makefile
@@ -15,13 +15,29 @@
 
 BASEDIR = ../../..
 include $(BASEDIR)/etc/buildsys/config.mk
+include $(BUILDSYSDIR)/lua.mk
 
 LIBS_libfawkesblackboard = fawkescore fawkesutils fawkesinterface fawkesnetcomm fawkeslogging
-OBJS_libfawkesblackboard = $(patsubst %.cpp,%.o,$(patsubst qa/%,,$(subst $(SRCDIR)/,,$(realpath $(wildcard $(SRCDIR)/*.cpp $(SRCDIR)/*/*.cpp)))))
+OBJS_libfawkesblackboard = $(filter-out %_tolua.o,$(patsubst %.cpp,%.o,$(patsubst qa/%,,$(subst $(SRCDIR)/,,$(realpath $(wildcard $(SRCDIR)/*.cpp $(SRCDIR)/*/*.cpp))))))
 HDRS_libfawkesblackboard = $(subst $(SRCDIR)/,,$(wildcard $(SRCDIR)/*.h $(SRCDIR)/*/*.h))
 
-OBJS_all =	$(OBJS_libfawkesblackboard)
-LIBS_all =	$(LIBDIR)/libfawkesblackboard.so
+CFLAGS_fawkesblackboard_tolua = -Wno-unused-function $(CFLAGS_LUA) $(CFLAGS_CPP11)
+TOLUA_fawkesblackboard = blackboard.tolua
+LDFLAGS_lua_fawkesblackboard = $(LDFLAGS_LUA)
+LIBS_lua_fawkesblackboard = fawkescore fawkesutils fawkesblackboard $(TOLUA_LIBS)
+OBJS_lua_fawkesblackboard = fawkesblackboard_tolua.o
+
+OBJS_all =	$(OBJS_libfawkesblackboard) $(OBJS_lua_fawkesblackboard)
+LIBS_all =	$(LIBDIR)/libfawkesblackboard.$(SOEXT)
+
+ifeq ($(HAVE_TOLUA),1)
+  LIBS_all += $(LUALIBDIR)/fawkesblackboard.$(SOEXT)
+  TARGETS_all += $(SRCDIR)/fawkesblackboard_tolua.cpp
+else
+  WARN_TARGETS += warning_tolua_wrapper
+endif
+
+$(LUALIBDIR)/fawkesblackboard.$(SOEXT): | $(LIBDIR)/libfawkesblackboard.$(SOEXT)
 
 include $(BUILDSYSDIR)/base.mk
 

- *commit* 7d2a1951eb0eff20de57b38abcdccf8759999a40 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 11:59:55 2016 +0100
Subject: libinterface: improve Lua wrapper typing

 src/libs/interface/interface.cpp   |    1 -
 src/libs/interface/interface.tolua |   20 ++++++++++++++++++--
 src/libs/interface/message.tolua   |    4 +++-
 3 files changed, 21 insertions(+), 4 deletions(-)

_Diff for modified files_:
diff --git a/src/libs/interface/interface.cpp b/src/libs/interface/interface.cpp
index 49d2890..73e25e2 100644
--- a/src/libs/interface/interface.cpp
+++ b/src/libs/interface/interface.cpp
@@ -1171,7 +1171,6 @@ Interface::msgq_first()
     throw InterfaceWriteDeniedException(__type, __id, "Cannot work on message queue on "
 					"reading instance of an interface (first).");
   }
-
   return __message_queue->first();
 }
 
diff --git a/src/libs/interface/interface.tolua b/src/libs/interface/interface.tolua
index e973063..19e6c69 100644
--- a/src/libs/interface/interface.tolua
+++ b/src/libs/interface/interface.tolua
@@ -46,7 +46,7 @@ class Interface
 
   void                    set_from_chunk(void *chunk);
 
-  virtual Message *       create_message(const char *type) const = 0;
+  virtual fawkes::Message * create_message @ create_message_generic(const char *type) const = 0;
 
   void          read();
   void          write();
@@ -69,8 +69,24 @@ class Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic ();
   bool          msgq_empty();
 };
 
+$[
+
+function fawkes.Interface:msgq_first()
+  local message = self:msgq_first_generic()
+  local m = tolua.cast(message, "fawkes::" .. self:type() .. "::" .. message:type())
+	return m
+end
+
+function fawkes.Interface:create_message(type)
+  local message = self:create_message_generic(type)
+  return tolua.cast(message, "fawkes::" .. self:type() .. "::" .. message:type())
+end
+
+$]
+
+
 }
diff --git a/src/libs/interface/message.tolua b/src/libs/interface/message.tolua
index a3faa22..70fc6e3 100644
--- a/src/libs/interface/message.tolua
+++ b/src/libs/interface/message.tolua
@@ -33,7 +33,9 @@ class Message : public RefCount
   Message(Message *mesg);
   Message(Message &mesg);
 
-  unsigned int      sender_id() const;
+  unsigned int      id() const;
+
+	unsigned int      sender_id() const;
   const char *      sender_thread_name() const;
   Interface *       interface() const;
   const char *      type() const;

- *commit* 1145eb2b0027e711e321cc6bd4891c921de7ad00 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 12:01:17 2016 +0100
Subject: ffifacegen: add generic Message methods to generated messages

 src/libs/interfaces/generator/tolua_generator.cpp |   54 +++++++++++++++++++-
 src/libs/interfaces/generator/tolua_generator.h   |    2 +
 2 files changed, 53 insertions(+), 3 deletions(-)

_Diff for modified files_:
diff --git a/src/libs/interfaces/generator/tolua_generator.cpp b/src/libs/interfaces/generator/tolua_generator.cpp
index 51a40d2..c6522e8 100644
--- a/src/libs/interfaces/generator/tolua_generator.cpp
+++ b/src/libs/interfaces/generator/tolua_generator.cpp
@@ -246,6 +246,7 @@ ToLuaInterfaceGenerator::write_messages_h(FILE *f)
     fprintf(f, "  class %s : public Message\n"
 	    "  {\n", (*i).getName().c_str());
     write_message_ctor_dtor_h(f, "    ", (*i).getName(), (*i).getFields());
+    write_message_superclass_h(f);
     write_methods_h(f, "    ", (*i).getFields());
 
     fprintf(f, "  };\n\n");
@@ -328,7 +329,7 @@ ToLuaInterfaceGenerator::write_superclass_h(FILE *f)
 
           "  void                    set_from_chunk(void *chunk);\n"
 
-          "  virtual Message *   create_message(const char *type) const = 0;\n"
+          "  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;\n"
 
           "  void          read();\n"
           "  void          write();\n"
@@ -351,9 +352,54 @@ ToLuaInterfaceGenerator::write_superclass_h(FILE *f)
           "  bool          msgq_try_lock();\n"
           "  void          msgq_unlock();\n"
           "  void          msgq_pop();\n"
-          "  Message *     msgq_first();\n"
+          "  fawkes::Message * msgq_first @ msgq_first_generic();\n"
           "  bool          msgq_empty();\n"
           "\n");
+       
+}
+
+
+/** Write superclass methods.
+ * @param f file to write to
+ */
+void
+ToLuaInterfaceGenerator::write_message_superclass_h(FILE *f)
+{
+  fprintf(f,
+          "    unsigned int      id() const;\n"
+          "\n"
+          "    unsigned int      sender_id() const;\n"
+          "    const char *      sender_thread_name() const;\n"
+          "    Interface *       interface() const;\n"
+          "    const char *      type() const;\n"
+          "\n"
+          "    const void *      datachunk() const;\n"
+          "    unsigned int      datasize() const;\n"
+          "\n"
+          "    void              set_from_chunk(const void *chunk);\n"
+          "\n"
+          "    /* from RefCount */\n"
+          "    void              ref();\n"
+          "    void              unref();\n"
+          "    unsigned int      refcount();\n"
+          "\n");
+}
+
+
+/** Write additional Lua code to file.
+ * The code is required for correctly type message access.
+ * @param f file to write to
+ * @param classname name of the interface class
+ */
+void
+ToLuaInterfaceGenerator::write_lua_code(FILE *f, std::string classname)
+{
+	fprintf(f,
+	        "\n$[\n\n"
+	        "fawkes.%s.msgq_first     = fawkes.Interface.msgq_first\n"
+	        "fawkes.%s.create_message = fawkes.Interface.create_message\n"
+	        "\n$]\n\n",
+          classname.c_str(), classname.c_str());
 }
 
 /** Write methods to h file.
@@ -446,7 +492,9 @@ ToLuaInterfaceGenerator::write_toluaf(FILE *f)
   //write_ctor_dtor_h(f, "  ", class_name);
   write_methods_h(f, "  ", data_fields, pseudo_maps);
   write_superclass_h(f);
-  fprintf(f, "\n};\n\n}\n");
+  fprintf(f, "\n};\n\n");
+  write_lua_code(f, class_name);
+  fprintf(f, "}\n");
 }
 
 
diff --git a/src/libs/interfaces/generator/tolua_generator.h b/src/libs/interfaces/generator/tolua_generator.h
index 562b943..e147ff7 100644
--- a/src/libs/interfaces/generator/tolua_generator.h
+++ b/src/libs/interfaces/generator/tolua_generator.h
@@ -54,7 +54,9 @@ class ToLuaInterfaceGenerator
   void write_header(FILE *f, std::string filename);
   void write_constants_h(FILE *f);
   void write_messages_h(FILE *f);
+  void write_message_superclass_h(FILE *f);
   void write_superclass_h(FILE *f);
+  void write_lua_code(FILE *f, std::string classname);
   void write_methods_h(FILE *f,
 		       std::string /* indent space */ is,
 		       std::vector<InterfaceField> fields);

- *commit* 410db207d876623ad320015c321c1935bbbc20af - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 12:08:18 2016 +0100
Subject: interfaces: re-generate with new ffifacegen

 src/libs/interfaces/BatteryInterface.tolua         |   46 +++-
 src/libs/interfaces/CameraControlInterface.tolua   |   63 +++++-
 src/libs/interfaces/EclipseDebuggerInterface.tolua |   29 ++-
 src/libs/interfaces/FacerInterface.tolua           |  131 +++++++++-
 .../interfaces/FacialExpressionInterface.tolua     |   80 ++++++-
 src/libs/interfaces/GameStateInterface.tolua       |   63 +++++-
 src/libs/interfaces/GripperInterface.tolua         |   46 +++-
 src/libs/interfaces/HumanSkeletonInterface.tolua   |   12 +-
 src/libs/interfaces/HumanoidMotionInterface.tolua  |  199 ++++++++++++++-
 src/libs/interfaces/IMUInterface.tolua             |   12 +-
 src/libs/interfaces/JointInterface.tolua           |   12 +-
 src/libs/interfaces/JoystickInterface.tolua        |   63 +++++-
 src/libs/interfaces/KeyValueInterface.tolua        |   12 +-
 src/libs/interfaces/KickerInterface.tolua          |   63 +++++-
 src/libs/interfaces/Laser1080Interface.tolua       |   12 +-
 src/libs/interfaces/Laser360Interface.tolua        |   12 +-
 src/libs/interfaces/Laser720Interface.tolua        |   12 +-
 src/libs/interfaces/LedInterface.tolua             |   63 +++++-
 src/libs/interfaces/LocalizationInterface.tolua    |   29 ++-
 src/libs/interfaces/MotorInterface.tolua           |  199 ++++++++++++++-
 src/libs/interfaces/NavPathInterface.tolua         |   12 +-
 src/libs/interfaces/NavigatorInterface.tolua       |  284 +++++++++++++++++++-
 src/libs/interfaces/ObjectPositionInterface.tolua  |   12 +-
 src/libs/interfaces/Position2DTrackInterface.tolua |   12 +-
 src/libs/interfaces/Position3DInterface.tolua      |   12 +-
 src/libs/interfaces/SkillerInterface.tolua         |   97 +++++++-
 src/libs/interfaces/SoccerPenaltyInterface.tolua   |   29 ++-
 .../interfaces/SpeechRecognitionInterface.tolua    |   46 +++-
 src/libs/interfaces/SpeechSynthInterface.tolua     |   29 ++-
 src/libs/interfaces/SwitchInterface.tolua          |   80 ++++++-
 src/libs/interfaces/TestInterface.tolua            |   63 +++++-
 src/libs/interfaces/TransformInterface.tolua       |   12 +-
 src/libs/interfaces/VisualDisplay2DInterface.tolua |  114 ++++++++-
 33 files changed, 1894 insertions(+), 66 deletions(-)

_Diff for modified files_:
diff --git a/src/libs/interfaces/BatteryInterface.tolua b/src/libs/interfaces/BatteryInterface.tolua
index c0df313..b5e3a17 100644
--- a/src/libs/interfaces/BatteryInterface.tolua
+++ b/src/libs/interfaces/BatteryInterface.tolua
@@ -11,6 +11,23 @@ class BatteryInterface : public Interface
     PushButtonMessage();
     ~PushButtonMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class SleepMessage : public Message
@@ -18,6 +35,23 @@ class BatteryInterface : public Interface
     SleepMessage();
     ~SleepMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   unsigned int current();
@@ -49,7 +83,7 @@ class BatteryInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -68,10 +102,18 @@ class BatteryInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.BatteryInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.BatteryInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/CameraControlInterface.tolua b/src/libs/interfaces/CameraControlInterface.tolua
index 4a54510..b966e74 100644
--- a/src/libs/interfaces/CameraControlInterface.tolua
+++ b/src/libs/interfaces/CameraControlInterface.tolua
@@ -20,6 +20,23 @@ class CameraControlInterface : public Interface
     SetEffectMessage();
     ~SetEffectMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     Effect effect();
     void set_effect(const Effect new_effect);
     int maxlenof_effect() const;
@@ -31,6 +48,23 @@ class CameraControlInterface : public Interface
     SetZoomMessage();
     ~SetZoomMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int zoom();
     void set_zoom(const unsigned int new_zoom);
     int maxlenof_zoom() const;
@@ -42,6 +76,23 @@ class CameraControlInterface : public Interface
     SetMirrorMessage();
     ~SetMirrorMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_mirror();
     void set_mirror(const bool new_mirror);
     int maxlenof_mirror() const;
@@ -85,7 +136,7 @@ class CameraControlInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -104,10 +155,18 @@ class CameraControlInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.CameraControlInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.CameraControlInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/EclipseDebuggerInterface.tolua b/src/libs/interfaces/EclipseDebuggerInterface.tolua
index 713eee1..d60d1e3 100644
--- a/src/libs/interfaces/EclipseDebuggerInterface.tolua
+++ b/src/libs/interfaces/EclipseDebuggerInterface.tolua
@@ -11,6 +11,23 @@ class EclipseDebuggerInterface : public Interface
     ConnectionMessage();
     ~ConnectionMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   unsigned short port();
@@ -33,7 +50,7 @@ class EclipseDebuggerInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -52,10 +69,18 @@ class EclipseDebuggerInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.EclipseDebuggerInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.EclipseDebuggerInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/FacerInterface.tolua b/src/libs/interfaces/FacerInterface.tolua
index f2d04d7..e3ecd89 100644
--- a/src/libs/interfaces/FacerInterface.tolua
+++ b/src/libs/interfaces/FacerInterface.tolua
@@ -20,6 +20,23 @@ class FacerInterface : public Interface
     LearnFaceMessage();
     ~LearnFaceMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * name();
     void set_name(const char * new_name);
     int maxlenof_name() const;
@@ -31,6 +48,23 @@ class FacerInterface : public Interface
     SetOpmodeMessage();
     ~SetOpmodeMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     if_facer_opmode_t opmode();
     void set_opmode(const if_facer_opmode_t new_opmode);
     int maxlenof_opmode() const;
@@ -42,6 +76,23 @@ class FacerInterface : public Interface
     EnableIdentityMessage();
     ~EnableIdentityMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int index();
     void set_index(const unsigned int new_index);
     int maxlenof_index() const;
@@ -56,6 +107,23 @@ class FacerInterface : public Interface
     SetNameMessage();
     ~SetNameMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int index();
     void set_index(const unsigned int new_index);
     int maxlenof_index() const;
@@ -70,6 +138,23 @@ class FacerInterface : public Interface
     GetNameMessage();
     ~GetNameMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int index();
     void set_index(const unsigned int new_index);
     int maxlenof_index() const;
@@ -81,6 +166,23 @@ class FacerInterface : public Interface
     StartSearchPersonMessage();
     ~StartSearchPersonMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int index();
     void set_index(const unsigned int new_index);
     int maxlenof_index() const;
@@ -91,6 +193,23 @@ class FacerInterface : public Interface
     StopSearchPersonMessage();
     ~StopSearchPersonMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   if_facer_opmode_t opmode();
@@ -164,7 +283,7 @@ class FacerInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -183,10 +302,18 @@ class FacerInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.FacerInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.FacerInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/FacialExpressionInterface.tolua b/src/libs/interfaces/FacialExpressionInterface.tolua
index 817fb31..722afda 100644
--- a/src/libs/interfaces/FacialExpressionInterface.tolua
+++ b/src/libs/interfaces/FacialExpressionInterface.tolua
@@ -44,6 +44,23 @@ class FacialExpressionInterface : public Interface
     MoveBrowsMessage();
     ~MoveBrowsMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     brows_t brows_action();
     void set_brows_action(const brows_t new_brows_action);
     int maxlenof_brows_action() const;
@@ -55,6 +72,23 @@ class FacialExpressionInterface : public Interface
     MoveEyesMessage();
     ~MoveEyesMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     eyes_t eyes_action();
     void set_eyes_action(const eyes_t new_eyes_action);
     int maxlenof_eyes_action() const;
@@ -66,6 +100,23 @@ class FacialExpressionInterface : public Interface
     MoveJowlMessage();
     ~MoveJowlMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     jowl_t jowl_action();
     void set_jowl_action(const jowl_t new_jowl_action);
     int maxlenof_jowl_action() const;
@@ -77,6 +128,23 @@ class FacialExpressionInterface : public Interface
     MoveMouthMessage();
     ~MoveMouthMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     mouth_t mouth_action();
     void set_mouth_action(const mouth_t new_mouth_action);
     int maxlenof_mouth_action() const;
@@ -108,7 +176,7 @@ class FacialExpressionInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -127,10 +195,18 @@ class FacialExpressionInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.FacialExpressionInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.FacialExpressionInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/GameStateInterface.tolua b/src/libs/interfaces/GameStateInterface.tolua
index 42066b2..883c3ba 100644
--- a/src/libs/interfaces/GameStateInterface.tolua
+++ b/src/libs/interfaces/GameStateInterface.tolua
@@ -52,6 +52,23 @@ class GameStateInterface : public Interface
     SetTeamColorMessage();
     ~SetTeamColorMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     if_gamestate_team_t our_team();
     void set_our_team(const if_gamestate_team_t new_our_team);
     int maxlenof_our_team() const;
@@ -63,6 +80,23 @@ class GameStateInterface : public Interface
     SetKickoffMessage();
     ~SetKickoffMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_kickoff();
     void set_kickoff(const bool new_kickoff);
     int maxlenof_kickoff() const;
@@ -74,6 +108,23 @@ class GameStateInterface : public Interface
     SetStateTeamMessage();
     ~SetStateTeamMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     if_gamestate_team_t state_team();
     void set_state_team(const if_gamestate_team_t new_state_team);
     int maxlenof_state_team() const;
@@ -120,7 +171,7 @@ class GameStateInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -139,10 +190,18 @@ class GameStateInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.GameStateInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.GameStateInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/GripperInterface.tolua b/src/libs/interfaces/GripperInterface.tolua
index fd02ee6..d134265 100644
--- a/src/libs/interfaces/GripperInterface.tolua
+++ b/src/libs/interfaces/GripperInterface.tolua
@@ -16,6 +16,23 @@ class GripperInterface : public Interface
     OpenGripperMessage();
     ~OpenGripperMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class CloseGripperMessage : public Message
@@ -23,6 +40,23 @@ class GripperInterface : public Interface
     CloseGripperMessage();
     ~CloseGripperMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   GripperState gripper_state();
@@ -42,7 +76,7 @@ class GripperInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -61,10 +95,18 @@ class GripperInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.GripperInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.GripperInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/HumanSkeletonInterface.tolua b/src/libs/interfaces/HumanSkeletonInterface.tolua
index 4683791..0acf06f 100644
--- a/src/libs/interfaces/HumanSkeletonInterface.tolua
+++ b/src/libs/interfaces/HumanSkeletonInterface.tolua
@@ -330,7 +330,7 @@ class HumanSkeletonInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -349,10 +349,18 @@ class HumanSkeletonInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.HumanSkeletonInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.HumanSkeletonInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/HumanoidMotionInterface.tolua b/src/libs/interfaces/HumanoidMotionInterface.tolua
index ce50094..67a590c 100644
--- a/src/libs/interfaces/HumanoidMotionInterface.tolua
+++ b/src/libs/interfaces/HumanoidMotionInterface.tolua
@@ -22,6 +22,23 @@ class HumanoidMotionInterface : public Interface
     StopMessage();
     ~StopMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class WalkStraightMessage : public Message
@@ -30,6 +47,23 @@ class HumanoidMotionInterface : public Interface
     WalkStraightMessage();
     ~WalkStraightMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float distance();
     void set_distance(const float new_distance);
     int maxlenof_distance() const;
@@ -41,6 +75,23 @@ class HumanoidMotionInterface : public Interface
     WalkSidewaysMessage();
     ~WalkSidewaysMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float distance();
     void set_distance(const float new_distance);
     int maxlenof_distance() const;
@@ -52,6 +103,23 @@ class HumanoidMotionInterface : public Interface
     WalkArcMessage();
     ~WalkArcMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float angle();
     void set_angle(const float new_angle);
     int maxlenof_angle() const;
@@ -66,6 +134,23 @@ class HumanoidMotionInterface : public Interface
     WalkVelocityMessage();
     ~WalkVelocityMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float x();
     void set_x(const float new_x);
     int maxlenof_x() const;
@@ -86,6 +171,23 @@ class HumanoidMotionInterface : public Interface
     TurnMessage();
     ~TurnMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float angle();
     void set_angle(const float new_angle);
     int maxlenof_angle() const;
@@ -97,6 +199,23 @@ class HumanoidMotionInterface : public Interface
     KickMessage();
     ~KickMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     LegEnum leg();
     void set_leg(const LegEnum new_leg);
     int maxlenof_leg() const;
@@ -110,6 +229,23 @@ class HumanoidMotionInterface : public Interface
     ParkMessage();
     ~ParkMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class GetUpMessage : public Message
@@ -117,6 +253,23 @@ class HumanoidMotionInterface : public Interface
     GetUpMessage();
     ~GetUpMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class StandupMessage : public Message
@@ -125,6 +278,23 @@ class HumanoidMotionInterface : public Interface
     StandupMessage();
     ~StandupMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     StandupEnum from_pos();
     void set_from_pos(const StandupEnum new_from_pos);
     int maxlenof_from_pos() const;
@@ -136,6 +306,23 @@ class HumanoidMotionInterface : public Interface
     MoveHeadMessage();
     ~MoveHeadMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float yaw();
     void set_yaw(const float new_yaw);
     int maxlenof_yaw() const;
@@ -170,7 +357,7 @@ class HumanoidMotionInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -189,10 +376,18 @@ class HumanoidMotionInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.HumanoidMotionInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.HumanoidMotionInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/IMUInterface.tolua b/src/libs/interfaces/IMUInterface.tolua
index 8acfc06..a440b8a 100644
--- a/src/libs/interfaces/IMUInterface.tolua
+++ b/src/libs/interfaces/IMUInterface.tolua
@@ -41,7 +41,7 @@ class IMUInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -60,10 +60,18 @@ class IMUInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.IMUInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.IMUInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/JointInterface.tolua b/src/libs/interfaces/JointInterface.tolua
index 632c002..d9716a8 100644
--- a/src/libs/interfaces/JointInterface.tolua
+++ b/src/libs/interfaces/JointInterface.tolua
@@ -26,7 +26,7 @@ class JointInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -45,10 +45,18 @@ class JointInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.JointInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.JointInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/JoystickInterface.tolua b/src/libs/interfaces/JoystickInterface.tolua
index 4f16d44..d41a926 100644
--- a/src/libs/interfaces/JoystickInterface.tolua
+++ b/src/libs/interfaces/JoystickInterface.tolua
@@ -59,6 +59,23 @@ class JoystickInterface : public Interface
     StartRumbleMessage();
     ~StartRumbleMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned short length();
     void set_length(const unsigned short new_length);
     int maxlenof_length() const;
@@ -81,6 +98,23 @@ class JoystickInterface : public Interface
     StopRumbleMessage();
     ~StopRumbleMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class StopAllMessage : public Message
@@ -88,6 +122,23 @@ class JoystickInterface : public Interface
     StopAllMessage();
     ~StopAllMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   unsigned char num_axes();
@@ -122,7 +173,7 @@ class JoystickInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -141,10 +192,18 @@ class JoystickInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.JoystickInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.JoystickInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/KeyValueInterface.tolua b/src/libs/interfaces/KeyValueInterface.tolua
index 2b6cd12..c7136e6 100644
--- a/src/libs/interfaces/KeyValueInterface.tolua
+++ b/src/libs/interfaces/KeyValueInterface.tolua
@@ -53,7 +53,7 @@ class KeyValueInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -72,10 +72,18 @@ class KeyValueInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.KeyValueInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.KeyValueInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/KickerInterface.tolua b/src/libs/interfaces/KickerInterface.tolua
index 9a2ee94..da5f78f 100644
--- a/src/libs/interfaces/KickerInterface.tolua
+++ b/src/libs/interfaces/KickerInterface.tolua
@@ -17,6 +17,23 @@ class KickerInterface : public Interface
     KickMessage();
     ~KickMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_left();
     void set_left(const bool new_left);
     int maxlenof_left() const;
@@ -36,6 +53,23 @@ class KickerInterface : public Interface
     ResetCounterMessage();
     ~ResetCounterMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class GuideBallMessage : public Message
@@ -44,6 +78,23 @@ class KickerInterface : public Interface
     GuideBallMessage();
     ~GuideBallMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     GuideBallSideEnum guide_ball_side();
     void set_guide_ball_side(const GuideBallSideEnum new_guide_ball_side);
     int maxlenof_guide_ball_side() const;
@@ -78,7 +129,7 @@ class KickerInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -97,10 +148,18 @@ class KickerInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.KickerInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.KickerInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/Laser1080Interface.tolua b/src/libs/interfaces/Laser1080Interface.tolua
index fdf9928..278189b 100644
--- a/src/libs/interfaces/Laser1080Interface.tolua
+++ b/src/libs/interfaces/Laser1080Interface.tolua
@@ -29,7 +29,7 @@ class Laser1080Interface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -48,10 +48,18 @@ class Laser1080Interface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.Laser1080Interface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.Laser1080Interface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/Laser360Interface.tolua b/src/libs/interfaces/Laser360Interface.tolua
index 18bb445..0b7bf76 100644
--- a/src/libs/interfaces/Laser360Interface.tolua
+++ b/src/libs/interfaces/Laser360Interface.tolua
@@ -29,7 +29,7 @@ class Laser360Interface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -48,10 +48,18 @@ class Laser360Interface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.Laser360Interface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.Laser360Interface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/Laser720Interface.tolua b/src/libs/interfaces/Laser720Interface.tolua
index 9758cc9..efa27ae 100644
--- a/src/libs/interfaces/Laser720Interface.tolua
+++ b/src/libs/interfaces/Laser720Interface.tolua
@@ -29,7 +29,7 @@ class Laser720Interface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -48,10 +48,18 @@ class Laser720Interface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.Laser720Interface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.Laser720Interface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/LedInterface.tolua b/src/libs/interfaces/LedInterface.tolua
index c9291e2..cf4e6a8 100644
--- a/src/libs/interfaces/LedInterface.tolua
+++ b/src/libs/interfaces/LedInterface.tolua
@@ -14,6 +14,23 @@ class LedInterface : public Interface
     SetIntensityMessage();
     ~SetIntensityMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float time_sec();
     void set_time_sec(const float new_time_sec);
     int maxlenof_time_sec() const;
@@ -27,6 +44,23 @@ class LedInterface : public Interface
     TurnOnMessage();
     ~TurnOnMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class TurnOffMessage : public Message
@@ -34,6 +68,23 @@ class LedInterface : public Interface
     TurnOffMessage();
     ~TurnOffMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   float intensity();
@@ -53,7 +104,7 @@ class LedInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -72,10 +123,18 @@ class LedInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.LedInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.LedInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/LocalizationInterface.tolua b/src/libs/interfaces/LocalizationInterface.tolua
index e0ccb16..22c8b96 100644
--- a/src/libs/interfaces/LocalizationInterface.tolua
+++ b/src/libs/interfaces/LocalizationInterface.tolua
@@ -12,6 +12,23 @@ class LocalizationInterface : public Interface
     SetInitialPoseMessage();
     ~SetInitialPoseMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * frame();
     void set_frame(const char * new_frame);
     int maxlenof_frame() const;
@@ -43,7 +60,7 @@ class LocalizationInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -62,10 +79,18 @@ class LocalizationInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.LocalizationInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.LocalizationInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/MotorInterface.tolua b/src/libs/interfaces/MotorInterface.tolua
index 41f91b6..5cfdc45 100644
--- a/src/libs/interfaces/MotorInterface.tolua
+++ b/src/libs/interfaces/MotorInterface.tolua
@@ -20,6 +20,23 @@ class MotorInterface : public Interface
     SetMotorStateMessage();
     ~SetMotorStateMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int motor_state();
     void set_motor_state(const unsigned int new_motor_state);
     int maxlenof_motor_state() const;
@@ -31,6 +48,23 @@ class MotorInterface : public Interface
     AcquireControlMessage();
     ~AcquireControlMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int controller();
     void set_controller(const unsigned int new_controller);
     int maxlenof_controller() const;
@@ -44,6 +78,23 @@ class MotorInterface : public Interface
     ResetOdometryMessage();
     ~ResetOdometryMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class SetOdometryMessage : public Message
@@ -52,6 +103,23 @@ class MotorInterface : public Interface
     SetOdometryMessage();
     ~SetOdometryMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float x();
     void set_x(const float new_x);
     int maxlenof_x() const;
@@ -69,6 +137,23 @@ class MotorInterface : public Interface
     DriveRPMMessage();
     ~DriveRPMMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float front_right();
     void set_front_right(const float new_front_right);
     int maxlenof_front_right() const;
@@ -86,6 +171,23 @@ class MotorInterface : public Interface
     GotoMessage();
     ~GotoMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float x();
     void set_x(const float new_x);
     int maxlenof_x() const;
@@ -106,6 +208,23 @@ class MotorInterface : public Interface
     TransMessage();
     ~TransMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float vx();
     void set_vx(const float new_vx);
     int maxlenof_vx() const;
@@ -120,6 +239,23 @@ class MotorInterface : public Interface
     RotMessage();
     ~RotMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float omega();
     void set_omega(const float new_omega);
     int maxlenof_omega() const;
@@ -131,6 +267,23 @@ class MotorInterface : public Interface
     TransRotMessage();
     ~TransRotMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float vx();
     void set_vx(const float new_vx);
     int maxlenof_vx() const;
@@ -148,6 +301,23 @@ class MotorInterface : public Interface
     OrbitMessage();
     ~OrbitMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float px();
     void set_px(const float new_px);
     int maxlenof_px() const;
@@ -165,6 +335,23 @@ class MotorInterface : public Interface
     LinTransRotMessage();
     ~LinTransRotMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float vx();
     void set_vx(const float new_vx);
     int maxlenof_vx() const;
@@ -241,7 +428,7 @@ class MotorInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -260,10 +447,18 @@ class MotorInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.MotorInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.MotorInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/NavPathInterface.tolua b/src/libs/interfaces/NavPathInterface.tolua
index bf8eeb2..4fe50e6 100644
--- a/src/libs/interfaces/NavPathInterface.tolua
+++ b/src/libs/interfaces/NavPathInterface.tolua
@@ -143,7 +143,7 @@ class NavPathInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -162,10 +162,18 @@ class NavPathInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.NavPathInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.NavPathInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/NavigatorInterface.tolua b/src/libs/interfaces/NavigatorInterface.tolua
index 34c7ee6..8a1aee4 100644
--- a/src/libs/interfaces/NavigatorInterface.tolua
+++ b/src/libs/interfaces/NavigatorInterface.tolua
@@ -36,6 +36,23 @@ class NavigatorInterface : public Interface
     StopMessage();
     ~StopMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class TurnMessage : public Message
@@ -44,6 +61,23 @@ class NavigatorInterface : public Interface
     TurnMessage();
     ~TurnMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float angle();
     void set_angle(const float new_angle);
     int maxlenof_angle() const;
@@ -58,6 +92,23 @@ class NavigatorInterface : public Interface
     CartesianGotoMessage();
     ~CartesianGotoMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float x();
     void set_x(const float new_x);
     int maxlenof_x() const;
@@ -75,6 +126,23 @@ class NavigatorInterface : public Interface
     PolarGotoMessage();
     ~PolarGotoMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float phi();
     void set_phi(const float new_phi);
     int maxlenof_phi() const;
@@ -92,6 +160,23 @@ class NavigatorInterface : public Interface
     PlaceGotoMessage();
     ~PlaceGotoMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * place();
     void set_place(const char * new_place);
     int maxlenof_place() const;
@@ -103,6 +188,23 @@ class NavigatorInterface : public Interface
     PlaceWithOriGotoMessage();
     ~PlaceWithOriGotoMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * place();
     void set_place(const char * new_place);
     int maxlenof_place() const;
@@ -117,6 +219,23 @@ class NavigatorInterface : public Interface
     ObstacleMessage();
     ~ObstacleMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float x();
     void set_x(const float new_x);
     int maxlenof_x() const;
@@ -133,6 +252,23 @@ class NavigatorInterface : public Interface
     ResetOdometryMessage();
     ~ResetOdometryMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class SetMaxVelocityMessage : public Message
@@ -141,6 +277,23 @@ class NavigatorInterface : public Interface
     SetMaxVelocityMessage();
     ~SetMaxVelocityMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float max_velocity();
     void set_max_velocity(const float new_max_velocity);
     int maxlenof_max_velocity() const;
@@ -152,6 +305,23 @@ class NavigatorInterface : public Interface
     SetMaxRotationMessage();
     ~SetMaxRotationMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float max_rotation();
     void set_max_rotation(const float new_max_rotation);
     int maxlenof_max_rotation() const;
@@ -163,6 +333,23 @@ class NavigatorInterface : public Interface
     SetEscapingMessage();
     ~SetEscapingMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_escaping_enabled();
     void set_escaping_enabled(const bool new_escaping_enabled);
     int maxlenof_escaping_enabled() const;
@@ -174,6 +361,23 @@ class NavigatorInterface : public Interface
     SetSecurityDistanceMessage();
     ~SetSecurityDistanceMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float security_distance();
     void set_security_distance(const float new_security_distance);
     int maxlenof_security_distance() const;
@@ -185,6 +389,23 @@ class NavigatorInterface : public Interface
     SetDriveModeMessage();
     ~SetDriveModeMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     DriveMode drive_mode();
     void set_drive_mode(const DriveMode new_drive_mode);
     int maxlenof_drive_mode() const;
@@ -196,6 +417,23 @@ class NavigatorInterface : public Interface
     SetStopAtTargetMessage();
     ~SetStopAtTargetMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_stop_at_target();
     void set_stop_at_target(const bool new_stop_at_target);
     int maxlenof_stop_at_target() const;
@@ -207,6 +445,23 @@ class NavigatorInterface : public Interface
     SetOrientationModeMessage();
     ~SetOrientationModeMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     OrientationMode orientation_mode();
     void set_orientation_mode(const OrientationMode new_orientation_mode);
     int maxlenof_orientation_mode() const;
@@ -217,6 +472,23 @@ class NavigatorInterface : public Interface
     ResetParametersMessage();
     ~ResetParametersMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   unsigned int flags();
@@ -287,7 +559,7 @@ class NavigatorInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -306,10 +578,18 @@ class NavigatorInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.NavigatorInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.NavigatorInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/ObjectPositionInterface.tolua b/src/libs/interfaces/ObjectPositionInterface.tolua
index 493d054..5ecead8 100644
--- a/src/libs/interfaces/ObjectPositionInterface.tolua
+++ b/src/libs/interfaces/ObjectPositionInterface.tolua
@@ -133,7 +133,7 @@ class ObjectPositionInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -152,10 +152,18 @@ class ObjectPositionInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.ObjectPositionInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.ObjectPositionInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/Position2DTrackInterface.tolua b/src/libs/interfaces/Position2DTrackInterface.tolua
index 3025a8f..9f086ed 100644
--- a/src/libs/interfaces/Position2DTrackInterface.tolua
+++ b/src/libs/interfaces/Position2DTrackInterface.tolua
@@ -38,7 +38,7 @@ class Position2DTrackInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -57,10 +57,18 @@ class Position2DTrackInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.Position2DTrackInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.Position2DTrackInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/Position3DInterface.tolua b/src/libs/interfaces/Position3DInterface.tolua
index 96e115b..7b29360 100644
--- a/src/libs/interfaces/Position3DInterface.tolua
+++ b/src/libs/interfaces/Position3DInterface.tolua
@@ -35,7 +35,7 @@ class Position3DInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -54,10 +54,18 @@ class Position3DInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.Position3DInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.Position3DInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/SkillerInterface.tolua b/src/libs/interfaces/SkillerInterface.tolua
index f24754f..f90e195 100644
--- a/src/libs/interfaces/SkillerInterface.tolua
+++ b/src/libs/interfaces/SkillerInterface.tolua
@@ -19,6 +19,23 @@ class SkillerInterface : public Interface
     ExecSkillMessage();
     ~ExecSkillMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * skill_string();
     void set_skill_string(const char * new_skill_string);
     int maxlenof_skill_string() const;
@@ -29,6 +46,23 @@ class SkillerInterface : public Interface
     RestartInterpreterMessage();
     ~RestartInterpreterMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class StopExecMessage : public Message
@@ -36,6 +70,23 @@ class SkillerInterface : public Interface
     StopExecMessage();
     ~StopExecMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class AcquireControlMessage : public Message
@@ -44,6 +95,23 @@ class SkillerInterface : public Interface
     AcquireControlMessage();
     ~AcquireControlMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_steal_control();
     void set_steal_control(const bool new_steal_control);
     int maxlenof_steal_control() const;
@@ -54,6 +122,23 @@ class SkillerInterface : public Interface
     ReleaseControlMessage();
     ~ReleaseControlMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   char * skill_string();
@@ -85,7 +170,7 @@ class SkillerInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -104,10 +189,18 @@ class SkillerInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.SkillerInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.SkillerInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/SoccerPenaltyInterface.tolua b/src/libs/interfaces/SoccerPenaltyInterface.tolua
index 9fe2c85..92b80e3 100644
--- a/src/libs/interfaces/SoccerPenaltyInterface.tolua
+++ b/src/libs/interfaces/SoccerPenaltyInterface.tolua
@@ -22,6 +22,23 @@ class SoccerPenaltyInterface : public Interface
     SetPenaltyMessage();
     ~SetPenaltyMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned short penalty();
     void set_penalty(const unsigned short new_penalty);
     int maxlenof_penalty() const;
@@ -47,7 +64,7 @@ class SoccerPenaltyInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -66,10 +83,18 @@ class SoccerPenaltyInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.SoccerPenaltyInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.SoccerPenaltyInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/SpeechRecognitionInterface.tolua b/src/libs/interfaces/SpeechRecognitionInterface.tolua
index 33e66ba..cd92815 100644
--- a/src/libs/interfaces/SpeechRecognitionInterface.tolua
+++ b/src/libs/interfaces/SpeechRecognitionInterface.tolua
@@ -11,6 +11,23 @@ class SpeechRecognitionInterface : public Interface
     ResetMessage();
     ~ResetMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class SetEnabledMessage : public Message
@@ -19,6 +36,23 @@ class SpeechRecognitionInterface : public Interface
     SetEnabledMessage();
     ~SetEnabledMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_enabled();
     void set_enabled(const bool new_enabled);
     int maxlenof_enabled() const;
@@ -50,7 +84,7 @@ class SpeechRecognitionInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -69,10 +103,18 @@ class SpeechRecognitionInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.SpeechRecognitionInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.SpeechRecognitionInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/SpeechSynthInterface.tolua b/src/libs/interfaces/SpeechSynthInterface.tolua
index 8812aad..4dae286 100644
--- a/src/libs/interfaces/SpeechSynthInterface.tolua
+++ b/src/libs/interfaces/SpeechSynthInterface.tolua
@@ -12,6 +12,23 @@ class SpeechSynthInterface : public Interface
     SayMessage();
     ~SayMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * text();
     void set_text(const char * new_text);
     int maxlenof_text() const;
@@ -43,7 +60,7 @@ class SpeechSynthInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -62,10 +79,18 @@ class SpeechSynthInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.SpeechSynthInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.SpeechSynthInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/SwitchInterface.tolua b/src/libs/interfaces/SwitchInterface.tolua
index fee33d6..fc98db0 100644
--- a/src/libs/interfaces/SwitchInterface.tolua
+++ b/src/libs/interfaces/SwitchInterface.tolua
@@ -12,6 +12,23 @@ class SwitchInterface : public Interface
     SetMessage();
     ~SetMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_enabled();
     void set_enabled(const bool new_enabled);
     int maxlenof_enabled() const;
@@ -25,6 +42,23 @@ class SwitchInterface : public Interface
     EnableSwitchMessage();
     ~EnableSwitchMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class DisableSwitchMessage : public Message
@@ -32,6 +66,23 @@ class SwitchInterface : public Interface
     DisableSwitchMessage();
     ~DisableSwitchMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class EnableDurationMessage : public Message
@@ -40,6 +91,23 @@ class SwitchInterface : public Interface
     EnableDurationMessage();
     ~EnableDurationMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float duration();
     void set_duration(const float new_duration);
     int maxlenof_duration() const;
@@ -80,7 +148,7 @@ class SwitchInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -99,10 +167,18 @@ class SwitchInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.SwitchInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.SwitchInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/TestInterface.tolua b/src/libs/interfaces/TestInterface.tolua
index 4f2fd84..aea5b82 100644
--- a/src/libs/interfaces/TestInterface.tolua
+++ b/src/libs/interfaces/TestInterface.tolua
@@ -19,6 +19,23 @@ class TestInterface : public Interface
     SetTestIntMessage();
     ~SetTestIntMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     int test_int();
     void set_test_int(const int new_test_int);
     int maxlenof_test_int() const;
@@ -30,6 +47,23 @@ class TestInterface : public Interface
     SetTestStringMessage();
     ~SetTestStringMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * test_string();
     void set_test_string(const char * new_test_string);
     int maxlenof_test_string() const;
@@ -41,6 +75,23 @@ class TestInterface : public Interface
     CalculateMessage();
     ~CalculateMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     int summand();
     void set_summand(const int new_summand);
     int maxlenof_summand() const;
@@ -81,7 +132,7 @@ class TestInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -100,10 +151,18 @@ class TestInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.TestInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.TestInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/TransformInterface.tolua b/src/libs/interfaces/TransformInterface.tolua
index 67c9d09..895d2d3 100644
--- a/src/libs/interfaces/TransformInterface.tolua
+++ b/src/libs/interfaces/TransformInterface.tolua
@@ -35,7 +35,7 @@ class TransformInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -54,10 +54,18 @@ class TransformInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.TransformInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.TransformInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/libs/interfaces/VisualDisplay2DInterface.tolua b/src/libs/interfaces/VisualDisplay2DInterface.tolua
index 2524375..8b2ba2e 100644
--- a/src/libs/interfaces/VisualDisplay2DInterface.tolua
+++ b/src/libs/interfaces/VisualDisplay2DInterface.tolua
@@ -31,6 +31,23 @@ class VisualDisplay2DInterface : public Interface
     AddCartLineMessage();
     ~AddCartLineMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float x(int index);
     void set_x(unsigned int index, const float new_x);
     int maxlenof_x() const;
@@ -51,6 +68,23 @@ class VisualDisplay2DInterface : public Interface
     AddCartCircleMessage();
     ~AddCartCircleMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float x();
     void set_x(const float new_x);
     int maxlenof_x() const;
@@ -74,6 +108,23 @@ class VisualDisplay2DInterface : public Interface
     AddCartRectMessage();
     ~AddCartRectMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float x();
     void set_x(const float new_x);
     int maxlenof_x() const;
@@ -100,6 +151,23 @@ class VisualDisplay2DInterface : public Interface
     AddCartTextMessage();
     ~AddCartTextMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float x();
     void set_x(const float new_x);
     int maxlenof_x() const;
@@ -126,6 +194,23 @@ class VisualDisplay2DInterface : public Interface
     DeleteObjectMessage();
     ~DeleteObjectMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int object_id();
     void set_object_id(const unsigned int new_object_id);
     int maxlenof_object_id() const;
@@ -136,6 +221,23 @@ class VisualDisplay2DInterface : public Interface
     DeleteAllMessage();
     ~DeleteAllMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   unsigned int counter();
@@ -155,7 +257,7 @@ class VisualDisplay2DInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -174,10 +276,18 @@ class VisualDisplay2DInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.VisualDisplay2DInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.VisualDisplay2DInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }

- *commit* 2e93025c436627116c2e4a2b0e000cbad739baed - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 12:23:29 2016 +0100
Subject: liblua: add support for finalization calls

 src/libs/lua/context.cpp |   35 ++++++++++++++++++++++++++++++++++-
 src/libs/lua/context.h   |    8 ++++++++
 2 files changed, 42 insertions(+), 1 deletions(-)

_Diff for modified files_:
diff --git a/src/libs/lua/context.cpp b/src/libs/lua/context.cpp
index e662ff1..31dc94f 100644
--- a/src/libs/lua/context.cpp
+++ b/src/libs/lua/context.cpp
@@ -98,6 +98,10 @@ LuaContext::LuaContext(lua_State *L)
 LuaContext::~LuaContext()
 {
   __lua_mutex->lock();
+
+  if (! __finalize_call.empty())
+	  do_string(__L, "%s", __finalize_call.c_str());
+
   if (__fam_thread) {
     __fam_thread->cancel();
     __fam_thread->join();
@@ -272,13 +276,22 @@ LuaContext::restart()
 {
   MutexLocker lock(__lua_mutex);
   try {
+	  if (! __finalize_prepare_call.empty())
+		  do_string(__L, "%s", __finalize_prepare_call.c_str());
+	  
     lua_State *L = init_state();
     lua_State *tL = __L;
+
+    if (! __finalize_call.empty())
+	    do_string(__L, "%s", __finalize_call.c_str());
+
     __L = L;
     if (__owns_L)  lua_close(tL);
     __owns_L = true;
 
   } catch (Exception &e) {
+    if (! __finalize_cancel_call.empty())
+	    do_string(__L, "%s", __finalize_cancel_call.c_str());
     LibLogger::log_error("LuaContext", "Could not restart Lua instance, an error "
 			 "occured while initializing new state. Keeping old state.");
     LibLogger::log_error("LuaContext", e);
@@ -1256,7 +1269,6 @@ LuaContext::setfenv(int idx)
 #endif
 }
 
-
 /** Add a context watcher.
  * @param watcher watcher to add
  */
@@ -1277,6 +1289,27 @@ LuaContext::remove_watcher(fawkes::LuaContextWatcher *watcher)
 }
 
 
+/** Set code to execute during finalization.
+ * @param finalize code string to execute (via do_string()) when eventually
+ * finalizing a context
+ * @param finalize_prepare code string to execute (via do_string()) before
+ * finalization is performed, for example during a context restart before the
+ * new context is initialized
+ * @param finalize_cancel code string to execute (via do_string()) if,
+ * during a restart, the initialization of the new context failed and therefore
+ * the previously prepared finalization must be cancelled
+ */
+void
+LuaContext::set_finalization_calls(std::string finalize, std::string finalize_prepare,
+                                   std::string finalize_cancel)
+{
+	__finalize_call = finalize;
+	__finalize_prepare_call = finalize_prepare;
+	__finalize_cancel_call = finalize_cancel;
+}
+
+
+
 
 /** Process FAM events. */
 void
diff --git a/src/libs/lua/context.h b/src/libs/lua/context.h
index 677b5a3..f5cb317 100644
--- a/src/libs/lua/context.h
+++ b/src/libs/lua/context.h
@@ -55,6 +55,9 @@ class LuaContext : public FamListener
   RefPtr<FileAlterationMonitor>  get_fam() const;
 
   void set_start_script(const char *start_script);
+  void set_finalization_calls(std::string finalize,
+                              std::string finalize_prepare,
+                              std::string finalize_cancel);
 
   void restart();
 
@@ -148,6 +151,7 @@ class LuaContext : public FamListener
   void         do_file(lua_State *L, const char *s);
   void         assert_unique_name(const char *name, std::string type);
 
+ 
  private:
   lua_State *__L;
   bool       __owns_L;
@@ -174,6 +178,10 @@ class LuaContext : public FamListener
   std::map<std::string, lua_CFunction>           __cfuncs;
   std::map<std::string, lua_CFunction>::iterator __cfuncs_it;
 
+  std::string __finalize_call;
+  std::string __finalize_prepare_call;
+  std::string __finalize_cancel_call;
+  
   RefPtr<FileAlterationMonitor>  __fam;
   FamThread                     *__fam_thread;
 

- *commit* 258df8714f0ea2f95d705887e2d46647a142971c - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 12:25:48 2016 +0100
Subject: skiller: support dynamic interface allocation

 src/lua/fawkes/interface_initializer.lua |   73 ++++++++++++++++++++---------
 1 files changed, 50 insertions(+), 23 deletions(-)

_Diff for modified files_:
diff --git a/src/lua/fawkes/interface_initializer.lua b/src/lua/fawkes/interface_initializer.lua
index a264293..c822776 100644
--- a/src/lua/fawkes/interface_initializer.lua
+++ b/src/lua/fawkes/interface_initializer.lua
@@ -26,6 +26,33 @@ require("fawkes.modinit")
 -- @author Tim Niemueller
 module(..., fawkes.modinit.module_init)
 
+local interfaces_reading = {}
+local interfaces_writing = {}
+
+local blackboard = _G.blackboard
+
+function finalize()
+	 for _,v in pairs(interfaces_reading) do
+			blackboard:close(v)
+	 end
+	 for _,v in pairs(interfaces_writing) do
+			blackboard:close(v)
+	 end
+end
+
+function read()
+	 for _,v in pairs(interfaces_reading) do
+			v:read()
+	 end
+end
+
+function write()
+	 for _,v in pairs(interfaces_writing) do
+			if v:changed() then
+				 v:write()
+			end
+	 end	 
+end
 
 function init_interfaces(module, table)
    local name = module.name
@@ -33,30 +60,30 @@ function init_interfaces(module, table)
    if not dependencies then return end
 
    assert(type(dependencies) == "table", "Type of dependencies not table")
-   assert(interfaces and type(interfaces) == "table", "Interfaces not initialized")
    for _,t in ipairs(dependencies) do
       assert(type(t) == "table", "Non-table element in interface dependencies")
-      assert(t.v, "Interface dependency does not have a variable name (v) field")
-      assert(t.type, "Interface dependency does not have a type field")
-      if t.id then
-	 local uid = t.type .. "::" .. t.id
-	 if interfaces.reading_by_uid[uid] then
-	    table[t.v] = interfaces.reading_by_uid[uid]
-	 elseif interfaces.writing_by_uid[uid] then
-	    table[t.v] = interfaces.writing_by_uid[uid]
-	 else
-	    error("No interface available with the UID " .. uid ..
-		  ", required by ".. name)
-	 end
-      else
-	 if interfaces.reading[t.v] then
-	    table[t.v] = interfaces.reading[t.v]
-	 elseif interfaces.writing[t.v] then
-	    table[t.v] = interfaces.writing[t.v]
-	 else
-	    error("No interface available with the variable name " .. t.v ..
-		  ", required by ".. name)
+      assert(t.v, "Interface dependency of " .. name .. " does not have a variable name (v) field")
+      assert(t.type, "Interface dependency '" .. t.v .. "' of " .. name .. " does not have a type field")
+      assert(t.id, "Interface dependency '" .. t.v .. "' of " .. name .. " does not have an id field")
+
+			local uid = t.type .. "::" .. t.id
+			
+			if t.writing then
+				 if not interfaces_writing[uid] then
+						print_debug("Opening interface %s for writing", uid)
+						interfaces_writing[uid] = blackboard:open_for_writing(t.type, t.id)
+				 end
+				 assert(interfaces_writing[uid], "Failed to open interface " .. uid .. " for writing")
+
+				 table[t.v] = interfaces_writing[uid]
+			else
+				 if not interfaces_reading[uid] then
+						print_debug("Opening interface %s for reading", uid)
+						interfaces_reading[uid] = blackboard:open_for_reading(t.type, t.id)
+				 end
+				 assert(interfaces_reading[uid], "Failed to open interface " .. uid .. " for reading")
+
+				 table[t.v] = interfaces_reading[uid]
+			end
 	 end
-      end
-   end
 end

- *commit* 8294e05093da52dce553b664e2a3f1c42541d57e - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 12:29:30 2016 +0100
Subject: skiller: add support for pre-loop callbacks

 src/lua/skiller/skillenv.lua |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)

_Diff for modified files_:
diff --git a/src/lua/skiller/skillenv.lua b/src/lua/skiller/skillenv.lua
index 362fc39..89fedbb 100644
--- a/src/lua/skiller/skillenv.lua
+++ b/src/lua/skiller/skillenv.lua
@@ -47,6 +47,7 @@ local module_exports = {
 
 
 local loop_callbacks = {}
+local preloop_callbacks = {}
 local finalize_callbacks = {}
 
 --- Add an export for module initialization.
@@ -290,6 +291,24 @@ function add_loop_callback(name, cb)
    loop_callbacks[name] = cb
 end
 
+--- Remove pre-loop callback.
+-- @param name name of callback to remove
+function remove_preloop_callback(name)
+   preloop_callbacks[name] = nil
+end
+
+--- Add a pre-loop callback.
+-- A loop callback is called in each loop regardless if a skill is running
+-- or not, at the beginning of each loop.
+-- @param name name of the callback, used for later identification on removal
+-- @param cb callback function to call
+function add_preloop_callback(name, cb)
+   if (type(name) ~= "string") then error("Pre-Loop callback name must be a string") end
+   if (type(cb) ~= "function") then error("Pre-Loop callback must be a function") end
+
+   preloop_callbacks[name] = cb
+end
+
 --- Remove loop callback.
 -- @param name name of callback to remove
 function remove_loop_callback(name)

- *commit* 50684a488d6e6aeb89be21d3785167bd86146e84 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 12:29:46 2016 +0100
Subject: skiller: make skillenv more self-contained and adapt to interfaces

 src/lua/skiller/skillenv.lua |  130 +++++++++++++++++++++++------------------
 1 files changed, 73 insertions(+), 57 deletions(-)

_Diff for modified files_:
diff --git a/src/lua/skiller/skillenv.lua b/src/lua/skiller/skillenv.lua
index 89fedbb..009f470 100644
--- a/src/lua/skiller/skillenv.lua
+++ b/src/lua/skiller/skillenv.lua
@@ -38,6 +38,9 @@ local active_skills = {}
 local skill_space      = ""
 local graphing_enabled = true
 
+local interfaces = {}
+local loop_function = nil
+
 local module_exports = {
    SkillHSM          = shsmmod.SkillHSM,
    JumpState         = shsmmod.JumpState,
@@ -117,7 +120,8 @@ local skill_env_template = {
    config   = config,
    clock    = clock,
    tf       = tf,
-
+	 blackboard = blackboard,
+	 
    -- Packages
    math     = math,
    os       = { date = os.date, getenv = os.getenv, time = os.time, difftime = os.difftime },
@@ -154,23 +158,12 @@ local skill_env_template = {
 -- This tries to load and initialize the given skill space and all its
 -- skills.
 -- @param skillspace skill space to initialize
-function init(skillspace)
+-- @param loop_func the central processing loop function
+function init(skillspace, loop_func)
    skill_space = skillspace
+	 loop_function = loop_func
 
-   skill_env_template.interfaces = interfaces
-
-   if interfaces and interfaces.writing then
-      if interfaces.writing.skiller then
-	 interfaces.writing.skiller:set_error("")
-	 interfaces.writing.skiller:write()
-      end
-
-      if interfaces.writing.skdbg then
-	 interfaces.writing.skdbg:set_graph_fsm("")
-	 interfaces.writing.skdbg:set_graph("")
-	 interfaces.writing.skdbg:write()
-      end
-   end
+	 add_preloop_callback("predlib-reset", predlib.reset)
 
    require("skills." .. SKILLSPACE)
 end
@@ -182,6 +175,34 @@ function finalize()
    end
 end
 
+function loop()
+   for _, cb in pairs(preloop_callbacks) do cb() end
+	 if loop_function then loop_function() end
+   for _, cb in pairs(loop_callbacks) do cb() end
+end
+
+
+--- Set interfaces used for informational output.
+-- @param interfaces an optional argument denoting relevant interfaces.
+-- Accepted entries are:
+-- - "skiller", SkillerInterface for status setting (writing)
+-- - "skdbg", SkillerDebugInterface for writing graphs etc. (writing)
+-- - "skdbg_layouted", SkillerDebugInterface that will contain a graph enriched
+--                     by layout information if a reader exists (writing)
+function set_interfaces(interfaces)
+	 _G.interfaces = interfaces
+	 if interfaces.skiller then
+			interfaces.skiller:set_error("")
+			interfaces.skiller:write()
+	 end
+
+	 if interfaces.skdbg then
+			interfaces.skdbg:set_graph_fsm("")
+			interfaces.skdbg:set_graph("")
+			interfaces.skdbg:write()
+	 end
+end
+
 --- Generate a sandbox for skill execution.
 -- The sandbox is used in the execution thread to create a new safe environment each
 -- time a skill string is executed.
@@ -201,20 +222,6 @@ function gensandbox()
       assert(not rv[s.name], "Sandbox: Name " .. s.name .. " has already been registered")
       rv[s.name] = create_skill_functable(s)
    end
-   if interfaces then
-      if interfaces.reading then
-	 for n, i in pairs(interfaces.reading) do
-	    assert(not rv[n], "Sandbox: Name " .. n .. " has already been registered")
-	    rv[n] = i
-	 end
-      end
-      if interfaces.writing then
-	 for n, i in pairs(interfaces.writing) do
-	    assert(not rv[n], "Sandbox: Name " .. n .. " has already been registered")
-	    rv[n] = i
-	 end
-      end
-   end
 
    return rv
 end
@@ -269,15 +276,6 @@ function reset_all()
    reset_status()
 end
 
---- Reset loop internals.
--- This function is called after every loop, no matter if skills are executed
--- continuous or one-show and independent of the status.
-function reset_loop()
-   predlib.reset()
-   for _, cb in pairs(loop_callbacks) do
-      cb()
-   end
-end
 
 --- Add a loop callback.
 -- A loop callback is called in each loop regardless if a skill is running
@@ -340,6 +338,20 @@ function get_status()
    return #skill_status.running, #skill_status.final, #skill_status.failed
 end
 
+--- Get current skill status.
+-- @return overall status depending on number of skills running, final, or failed.
+function get_overall_status()
+	 if #skill_status.failed > 0 then
+			return fawkes.SkillerInterface.S_FAILED
+	 elseif #skill_status.final > 0 and #skill_status.running == 0 then
+			return fawkes.SkillerInterface.S_FINAL
+	 elseif #skill_status.running > 0 then
+			return fawkes.SkillerInterface.S_RUNNING
+	 else
+			return fawkes.SkillerInterface.S_INACTIVE;
+	 end
+end
+
 
 local function skill_failed(skillname)
    for _, s in ipairs(skill_status.failed) do
@@ -436,6 +448,7 @@ end
 -- @param fsm FSM to get the error string from
 -- @param interface skiller interface to write to
 function write_fsm_error(fsm, interface)
+	 local interface = interface or interfaces.skiller
    assert(interface, "skillenv.write_fsm_error: no interface!")
    if fsm and fsm.error and #fsm.error > 0 then
       --print_warn("Writing error to interface")
@@ -525,13 +538,13 @@ function update_grapher_config(skdbg, graphdir, colored)
 	 params_changed = true
       end
    end
-
+	 
    return params_changed
 end
 
 function write_skiller_debug(skdbg, skdbg_layouted, what, graphdir, colored)
-   local skdbg = skdbg or interfaces.writing.skdbg
-   assert(skdbg, "write_skiler_debug: No SkillerDebugInterface given")
+   local skdbg = skdbg or interfaces.skdbg
+   assert(skdbg, "write_skiller_debug: No SkillerDebugInterface given")
 
    local cur_what = skdbg:graph_fsm()
 
@@ -542,27 +555,30 @@ function write_skiller_debug(skdbg, skdbg_layouted, what, graphdir, colored)
    elseif graphing_enabled then
       local sname = what
       if what == "ACTIVE" then
-	 sname = get_active_skills()
+				 sname = get_active_skills()
       end
 
       local fsm = get_skill_fsm(sname)
+			local params_changed = update_grapher_config(skdbg, graphdir, colored)
       if fsm then
-	 local params_changed = update_grapher_config(skdbg, graphdir, colored)
+				 if what ~= cur_what or params_changed then
+						fsm:mark_changed()
+						skdbg:set_graph_fsm(what)
+				 end
 
-	 if what ~= cur_what or params_changed then
-	    fsm:mark_changed()
-	    skdbg:set_graph_fsm(what)
-	 end
-
-	 write_fsm_graph(fsm, skdbg, false)
-	 write_fsm_graph(fsm, skdbg_layouted, true)
+				 write_fsm_graph(fsm, skdbg, false)
+				 write_fsm_graph(fsm, skdbg_layouted, true)
       else
-	 if what ~= cur_what then
-	    print_warn("Could not write FSM graph, FSM for %s not found", what)
-	    skdbg:set_graph_fsm(what)
-	    skdbg:set_graph("")
-	    skdbg:write()
-	 end
+				 if what ~= cur_what then
+						if what ~= "" and what ~= "ACTIVE" then
+							 print_warn("Could not write FSM graph, FSM for %s not found", what)
+						end
+						skdbg:set_graph_fsm(what)
+						skdbg:set_graph("")
+						skdbg:write()
+				 elseif params_changed then
+						skdbg:write()
+				 end
       end
    end
 end

- *commit* 7ba6d1c1054638d9a585e423e5d28f56f9ba429f - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 12:31:52 2016 +0100
Subject: skiller: implement run-time fully in Lua

 src/lua/skiller/fawkes/init.lua  |  265 ++++++++++++++++++++++++++++++++++++++
 src/lua/skiller/fawkes/start.lua |   14 ++-
 2 files changed, 274 insertions(+), 5 deletions(-)

_Diff for modified files_:
diff --git a/src/lua/skiller/fawkes/start.lua b/src/lua/skiller/fawkes/start.lua
index 4f8cda6..4f8ce6b 100644
--- a/src/lua/skiller/fawkes/start.lua
+++ b/src/lua/skiller/fawkes/start.lua
@@ -49,14 +49,17 @@ end
 
 require("fawkes.logprint")
 fawkes.logprint.init(logger)
-require("fawkes.depinit")
 
+require("fawkes.depinit")
 require("fawkes.mathext")
 local ifinitmod = require("fawkes.interface_initializer")
 
 skillenv = require("skiller.skillenv")
 
 fawkes.depinit.add_module_initializer(ifinitmod.init_interfaces)
+skillenv.add_finalize_callback("interface_initializer", ifinitmod.finalize)
+skillenv.add_preloop_callback("fawkes_interfaces_read", ifinitmod.read)
+skillenv.add_loop_callback("fawkes_interfaces_write", ifinitmod.write)
 
 if config:exists("/skiller/features/ros/enable")
    and config:get_bool("/skiller/features/ros/enable")
@@ -67,9 +70,9 @@ then
       logger:log_debug("Starting internal ROS node (roslua)")
       local uri = os.getenv("ROS_MASTER_URI")
       if uri then
-	 ROS_MASTER_URI = uri
+				 ROS_MASTER_URI = uri
       else
-	 error("ROS_MASTER_URI environment variable not defined")
+				 error("ROS_MASTER_URI environment variable not defined")
       end
 
       dofile(LUADIR .. "/skiller/ros/start.lua")
@@ -83,8 +86,9 @@ then
    end
 end
 
-skillenv.init(SKILLSPACE)
+require("skiller.fawkes")
+skiller.fawkes.init()
 
---skiller.skillhsm.SkillHSM:set_debug(true)
+skillenv.init(SKILLSPACE, skiller.fawkes.loop)
 
 logger:log_debug("Lua startup completed")

- *commit* 149ecaa0c38aec33ce985bb6be2d3c85d1fa0177 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 12:34:23 2016 +0100
Subject: skiller: re-generate SkillerDebugInterface with new ffifacegen

 src/plugins/skiller/SkillerDebugInterface.tolua |   63 ++++++++++++++++++++++-
 1 files changed, 61 insertions(+), 2 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/skiller/SkillerDebugInterface.tolua b/src/plugins/skiller/SkillerDebugInterface.tolua
index 9d8b61e..cb33f07 100644
--- a/src/plugins/skiller/SkillerDebugInterface.tolua
+++ b/src/plugins/skiller/SkillerDebugInterface.tolua
@@ -19,6 +19,23 @@ class SkillerDebugInterface : public Interface
     SetGraphMessage();
     ~SetGraphMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * graph_fsm();
     void set_graph_fsm(const char * new_graph_fsm);
     int maxlenof_graph_fsm() const;
@@ -30,6 +47,23 @@ class SkillerDebugInterface : public Interface
     SetGraphDirectionMessage();
     ~SetGraphDirectionMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     GraphDirectionEnum graph_dir();
     void set_graph_dir(const GraphDirectionEnum new_graph_dir);
     int maxlenof_graph_dir() const;
@@ -41,6 +75,23 @@ class SkillerDebugInterface : public Interface
     SetGraphColoredMessage();
     ~SetGraphColoredMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_graph_colored();
     void set_graph_colored(const bool new_graph_colored);
     int maxlenof_graph_colored() const;
@@ -72,7 +123,7 @@ class SkillerDebugInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -91,10 +142,18 @@ class SkillerDebugInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.SkillerDebugInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.SkillerDebugInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }

- *commit* 90bb6e55bbd89221a1bfbc9d802665f8beff608b - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 12:35:06 2016 +0100
Subject: skiller: use Lua-based run-time

 src/plugins/skiller/exec_thread.cpp |  488 ++---------------------------------
 src/plugins/skiller/exec_thread.h   |   40 +---
 2 files changed, 34 insertions(+), 494 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/skiller/exec_thread.cpp b/src/plugins/skiller/exec_thread.cpp
index 93df070..097bfcc 100644
--- a/src/plugins/skiller/exec_thread.cpp
+++ b/src/plugins/skiller/exec_thread.cpp
@@ -32,7 +32,6 @@
 #endif
 
 #include <lua/context.h>
-#include <lua/interface_importer.h>
 
 #include <interfaces/SkillerInterface.h>
 #include <interfaces/SkillerDebugInterface.h>
@@ -60,10 +59,6 @@ SkillerExecutionThread::SkillerExecutionThread()
     BlockedTimingAspect(BlockedTimingAspect::WAKEUP_HOOK_SKILL),
     BlackBoardInterfaceListener("SkillerExecutionThread")
 {
-  __continuous_reset = false;
-  __error_written    = false;
-
-  __lua = NULL;
 }
 
 
@@ -72,43 +67,10 @@ SkillerExecutionThread::~SkillerExecutionThread()
 {
 }
 
-/** Clean up when init failed.
- * You may only call this from init(). Never ever call it from anywhere
- * else!
- */
-void
-SkillerExecutionThread::init_failure_cleanup()
-{
-  try {
-    if ( __skiller_if ) 	blackboard->close(__skiller_if);
-    if ( __skdbg_if )   	blackboard->close(__skdbg_if);
-    if ( __skdbg_if_layouted) 	blackboard->close(__skdbg_if_layouted);
-
-    delete __lua_ifi;
-    delete __clog;
-
-  } catch (...) {
-    // we really screwed up, can't do anything about it, ignore error, logger is
-    // initialized since this method is only called from init() which is only called if
-    // all aspects had been initialized successfully
-    logger->log_error(name(), "Really screwed up while finalizing, aborting cleanup. "
-		              "Fawkes is no longer in a clean state. Restart!");
-  }
-}
-
 
 void
 SkillerExecutionThread::init()
 {
-  __last_exclusive_controller = 0;
-  __reader_just_left = false;
-  __continuous_reset = false;
-  __skdbg_what = "ACTIVE";
-  __skdbg_graphdir = "TB";
-  __skdbg_graphcolored = true;
-  __clog = NULL;
-  __sksf_pushed = false;
-
   try {
     __cfg_skillspace  = config->get_string("/skiller/skillspace");
     __cfg_watch_files = config->get_bool("/skiller/watch_files");
@@ -118,35 +80,20 @@ SkillerExecutionThread::init()
   }
 
   logger->log_debug("SkillerExecutionThread", "Skill space: %s", __cfg_skillspace.c_str());
-
   __clog = new ComponentLogger(logger, "SkillerLua");
 
   __lua = NULL;
-  __lua_ifi = NULL;
+  __bbo = NULL;
   __skiller_if = NULL;
-  __skdbg_if = NULL;
-  __skdbg_if_layouted = NULL;
-
-  std::string reading_prefix = "/skiller/interfaces/" + __cfg_skillspace + "/reading/";
-  std::string writing_prefix = "/skiller/interfaces/" + __cfg_skillspace + "/writing/";
 
   try {
-    __skiller_if = 	  blackboard->open_for_writing<SkillerInterface>("Skiller");
-    __skdbg_if   = 	  blackboard->open_for_writing<SkillerDebugInterface>("Skiller");
-    __skdbg_if_layouted = blackboard->open_for_writing<SkillerDebugInterface>("SkillerLayouted");
-    
+	  __skiller_if = 	  blackboard->open_for_reading<SkillerInterface>("Skiller");
+
     __lua  = new LuaContext();
     if (__cfg_watch_files) {
       __lua->setup_fam(/* auto restart */ true, /* conc thread */ false);
     }
 
-    __lua_ifi = new LuaInterfaceImporter(__lua, blackboard, config, logger);
-    __lua_ifi->open_reading_interfaces(reading_prefix);
-    __lua_ifi->open_writing_interfaces(writing_prefix);
-    __lua_ifi->add_interface("skdbg", __skdbg_if);
-    __lua_ifi->add_interface("skdbg_layouted", __skdbg_if_layouted);
-    __lua_ifi->add_interface("skiller", __skiller_if);
-
     __lua->add_package_dir(LUADIR, /* prefix */ true);
     __lua->add_cpackage_dir(LUALIBDIR, /* prefix */ true);
 
@@ -154,15 +101,19 @@ SkillerExecutionThread::init()
     __lua->add_package("fawkesconfig");
     __lua->add_package("fawkeslogging");
     __lua->add_package("fawkesinterface");
+    __lua->add_package("fawkesblackboard");
 #ifdef HAVE_TF
     __lua->add_package("fawkestf");
 #endif
 
+    __bbo = new BlackBoardWithOwnership(blackboard, "SkillerLua");
+    
     __lua->set_string("SKILLSPACE", __cfg_skillspace.c_str());
     __lua->set_string("LUADIR", LUADIR);
     __lua->set_usertype("config", config, "Configuration", "fawkes");
     __lua->set_usertype("logger", __clog, "ComponentLogger", "fawkes");
     __lua->set_usertype("clock", clock, "Clock", "fawkes");
+    __lua->set_usertype("blackboard", __bbo, "BlackBoard", "fawkes");
 #ifdef HAVE_TF
     __lua->set_usertype("tf", tf_listener, "Transformer", "fawkes::tf");
 #endif
@@ -170,47 +121,31 @@ SkillerExecutionThread::init()
     __lua->create_table();
     __lua->set_global("features_env_template");
 
-    __lua_ifi->push_interfaces();
-
     std::list<SkillerFeature *>::iterator f;
     for (f = __features.begin(); f != __features.end(); ++f) {
       (*f)->init_lua_context(__lua);
     }
 
+    __lua->set_finalization_calls("skiller.fawkes.finalize()",
+                                  "skiller.fawkes.finalize_prepare()",
+                                  "skiller.fawkes.finalize_cancel()");
+    
     __lua->set_start_script(LUADIR"/skiller/fawkes/start.lua");
 
     __lua->add_watcher(this);
   
-    __skiller_if->set_skill_string("");
-    __skiller_if->set_msgid(0);
-    __skiller_if->set_status(SkillerInterface::S_INACTIVE);
-    __skiller_if->write();
-
-    __skdbg_if->set_graph("");
-    __skdbg_if->set_graph_fsm("ACTIVE");
-
-    __skdbg_if_layouted->set_graph("");
-    __skdbg_if_layouted->set_graph_fsm("ACTIVE");
-
   } catch (Exception &e) {
-    init_failure_cleanup();
-    throw;
+	  blackboard->close(__skiller_if);
+	  delete __lua;
+	  delete __bbo;
+	  delete __clog;
+	  throw;
   }
 
   // We want to know if our reader leaves and closes the interface
   bbil_add_reader_interface(__skiller_if);
   blackboard->register_listener(this);
 
-#ifdef SKILLER_TIMETRACKING
-  __tt           = new TimeTracker();
-  __ttc_total    = __tt->add_class("Total");
-  __ttc_msgproc  = __tt->add_class("Message Processing");
-  __ttc_luaprep  = __tt->add_class("Lua Preparation");
-  __ttc_luaexec  = __tt->add_class("Lua Execution");
-  __ttc_looprst  = __tt->add_class("Loop Reset");
-  __ttc_publish  = __tt->add_class("Publishing");
-  __tt_loopcount = 0;
-#endif
 }
 
 
@@ -219,25 +154,17 @@ SkillerExecutionThread::finalize()
 {
   __lua->remove_watcher(this);
 
-  __lua->do_string("skillenv.finalize()");
+  blackboard->unregister_listener(this);
+  blackboard->close(__skiller_if);
 
   std::list<SkillerFeature *>::iterator f;
   for (f = __features.begin(); f != __features.end(); ++f) {
     (*f)->finalize_lua_context(__lua);
   }
 
-#ifdef SKILLER_TIMETRACKING
-  delete __tt;
-#endif
-  delete __lua_ifi;
-
-  blackboard->unregister_listener(this);
-  blackboard->close(__skiller_if);
-  blackboard->close(__skdbg_if);
-  blackboard->close(__skdbg_if_layouted);
-
   delete __lua;
   delete __clog;
+  delete __bbo;
 }
 
 
@@ -268,386 +195,25 @@ SkillerExecutionThread::lua_restarted(LuaContext *context)
 
 void
 SkillerExecutionThread::bb_interface_reader_removed(Interface *interface,
-						  unsigned int instance_serial) throw()
-{
-  if ( instance_serial == __skiller_if->exclusive_controller() ) {
-    logger->log_debug("SkillerExecutionThread", "Controlling interface instance was closed, "
-		      "revoking exclusive control");
-
-    __last_exclusive_controller = instance_serial;
-    __reader_just_left = true;
-
-    __skiller_if->set_exclusive_controller(0);
-    __skiller_if->write();
-  }
-}
-
-
-
-/** Determines the skill status and writes it to the BB.
- * This method assumes that it is called from within loop() and lua_mutex is locked.
- * @param curss current skill string
- * @param cur_msgid ID of message for which we currently execute @p curss
- */
-void
-SkillerExecutionThread::publish_skill_status(std::string &curss, unsigned int cur_msgid)
+                                                    unsigned int instance_serial) throw()
 {
-  //const char *sst = "Unknown";
-  LUA_INTEGER running = 0, final = 0, failed = 0;
-
-  SkillerInterface::SkillStatusEnum old_status = __skiller_if->status();
-  SkillerInterface::SkillStatusEnum new_status = __skiller_if->status();
-
-  try {
-
-    if ( curss == "" ) {
-      // nothing running, we're inactive
-      //sst = "S_INACTIVE/empty";
-      __skiller_if->set_skill_string("");
-      __skiller_if->set_status(SkillerInterface::S_INACTIVE);
-
-    } else {                                  // Stack:
-      __lua->get_global("skillenv");          // skillenv
-
-      __lua->get_field(-1, "get_status");     // skillenv skillenv.get_status
-      if ( __lua->is_function(-1) ) {
-	__lua->pcall(0, 3);                   // skillenv running final failed
-	running = __lua->to_integer(-3);
-	final   = __lua->to_integer(-2);
-	failed  = __lua->to_integer(-1);
-
-	__lua->pop(4);                        // ---
-      } else {
-	__lua->pop(2);                        // ---
-	throw LuaRuntimeException("C++:publish_skill_status", "skillenv.get_status is not a function");
-      }
-
-      if ( failed > 0 ) {
-	//sst = "S_FAILED";
-	new_status = SkillerInterface::S_FAILED;
-      } else if ( (final > 0) && (running == 0) ) {
-	//sst = "S_FINAL";
-	new_status = SkillerInterface::S_FINAL;
-      } else if ( running > 0 ) {
-	//sst = "S_RUNNING";
-	new_status = SkillerInterface::S_RUNNING;
-      } else {
-	// all zero
-	//sst = "S_INACTIVE";
-	new_status = SkillerInterface::S_INACTIVE;
-      }
-    }
-
-    if ( (old_status != new_status) ||
-	 (curss != __skiller_if->skill_string()) ) {
-
-      /*
-      logger->log_debug("SkillerExecutionThread", "Status is %s (%i vs. %i)"
-			"(running %i, final: %i, failed: %i)",
-			sst, old_status, new_status, running, final, failed);
-      */
-
-      __skiller_if->set_skill_string(curss.c_str());
-      __skiller_if->set_msgid(cur_msgid);
-
-      __skiller_if->set_status(new_status);
-
-      if ( ! __error_written && (new_status == SkillerInterface::S_FAILED) ) {
-	publish_error();
-	__error_written = true;
-      } else if (new_status == SkillerInterface::S_RUNNING ||
-		 new_status == SkillerInterface::S_FINAL) {
-	__skiller_if->set_error("");
-	__error_written = false;
-      }
-
-      __skiller_if->write();
-    }
-
-  } catch (Exception &e) {
-    logger->log_error("SkillerExecutionThread", "Failed to retrieve skill status");
-    logger->log_error("SkillerExecutionThread", e);
-    try {
-      __skiller_if->set_status(SkillerInterface::S_FAILED);
-    } catch (Exception &e2) {
-      logger->log_error("SkillerExecutionThread", "Failed to set FAILED as skill "
-			"status value during error handling");
-      logger->log_error("SkillerExecutionThread", e2);
-    }
-  }
-
-}
-
-
-void
-SkillerExecutionThread::publish_skdbg()
-{
-  try {
-    __lua->do_string("skillenv.write_skiller_debug(interfaces.writing.skdbg, interfaces.writing.skdbg_layouted, \"%s\", \"%s\", %s)",
-		     __skdbg_what.c_str(), __skdbg_graphdir.c_str(),
-		     __skdbg_graphcolored ? "true" : "false");
-  } catch (Exception &e) {
-    logger->log_warn("SkillerExecutionThread", "Error writing graph");
-    logger->log_warn("SkillerExecutionThread", e);
-  }
-}
-
-void
-SkillerExecutionThread::lua_loop_reset()
-{
-  try {
-    __lua->do_string("skillenv.reset_loop()");
-  } catch (Exception &e) {
-    logger->log_warn("SkillerExecutionThread", "Lua Loop Reset failed");
-    logger->log_warn("SkillerExecutionThread", e);
-  }
-}
-
-
-void
-SkillerExecutionThread::publish_error()
-{
-  try {
-    __lua->do_string("skillenv.write_fsm_error(skillenv.get_skill_fsm(skillenv.get_active_skills()), interfaces.writing.skiller)");
-  } catch (Exception &e) {
-    logger->log_warn("SkillerExecutionThread", "Error writing error");
-    logger->log_warn("SkillerExecutionThread", e);
-    __skiller_if->set_error("Failed to set Lua error");
-    __skiller_if->write();
-  }
-}
-
-
-void
-SkillerExecutionThread::process_skdbg_messages()
-{
-  while ( ! __skdbg_if->msgq_empty() ) {
-    if ( __skdbg_if->msgq_first_is<SkillerDebugInterface::SetGraphMessage>() ) {
-      SkillerDebugInterface::SetGraphMessage *m = __skdbg_if->msgq_first<SkillerDebugInterface::SetGraphMessage>();
-      logger->log_warn(name(), "Setting skiller debug what to: %s", m->graph_fsm());
-      __skdbg_what = m->graph_fsm();
-    } else if (__skdbg_if->msgq_first_is<SkillerDebugInterface::SetGraphDirectionMessage>() ) {
-      SkillerDebugInterface::SetGraphDirectionMessage *m = __skdbg_if->msgq_first<SkillerDebugInterface::SetGraphDirectionMessage>();
-      switch (m->graph_dir()) {
-      case SkillerDebugInterface::GD_BOTTOM_TOP:  __skdbg_graphdir = "BT"; break;
-      case SkillerDebugInterface::GD_LEFT_RIGHT:  __skdbg_graphdir = "LR"; break;
-      case SkillerDebugInterface::GD_RIGHT_LEFT:  __skdbg_graphdir = "RL"; break;
-      default:                                    __skdbg_graphdir = "TB"; break;
-      }
-
-    } else if (__skdbg_if->msgq_first_is<SkillerDebugInterface::SetGraphColoredMessage>() ) {
-      SkillerDebugInterface::SetGraphColoredMessage *m = __skdbg_if->msgq_first<SkillerDebugInterface::SetGraphColoredMessage>();
-      __skdbg_graphcolored = m->is_graph_colored();
-    }
-
-    __skdbg_if->msgq_pop();
-  }
+	__skiller_if_removed_readers.push_locked(instance_serial);
 }
 
 
 void
 SkillerExecutionThread::loop()
 {
-#ifdef SKILLER_TIMETRACKING
-  __tt->ping_start(__ttc_total);
-#endif
 #ifdef HAVE_INOTIFY
   __lua->process_fam_events();
 #endif
-  __lua_ifi->read();
-
-  // Current skill string
-  std::string curss = __skiller_if->skill_string();
-  unsigned int cur_msgid = __skiller_if->msgid();;
-
-  unsigned int excl_ctrl   = __skiller_if->exclusive_controller();
-  bool write_skiller_if    = false;
-  bool skill_enqueued      = false;
-
-#ifdef SKILLER_TIMETRACKING
-  __tt->ping_start(__ttc_msgproc);
-#endif
-  process_skdbg_messages();
-
-  while ( ! __skiller_if->msgq_empty() ) {
-    if ( __skiller_if->msgq_first_is<SkillerInterface::AcquireControlMessage>() ) {
-      SkillerInterface::AcquireControlMessage *m =
-	__skiller_if->msgq_first<SkillerInterface::AcquireControlMessage>();
-      if ( excl_ctrl == 0 ) {
-	logger->log_debug("SkillerExecutionThread", "%s is new exclusive controller",
-			  m->sender_thread_name());
-	__skiller_if->set_exclusive_controller(m->sender_id());
-	write_skiller_if = true;
-	excl_ctrl = m->sender_id();
-      } else if ( m->is_steal_control() ) {
-	logger->log_warn("SkillerExecutionThread", "%s steals exclusive control",
-			 m->sender_thread_name());
-	__skiller_if->set_exclusive_controller(m->sender_id());
-	write_skiller_if = true;
-	excl_ctrl = m->sender_id();
-      } else if (excl_ctrl == m->sender_id()) {
-        // ignored
-      } else {
-	logger->log_warn("SkillerExecutionThread", "%s tried to acquire "
-                         "exclusive control, but another controller exists "
-                         "already", m->sender_thread_name());
-      }
-
-    } else if ( __skiller_if->msgq_first_is<SkillerInterface::ReleaseControlMessage>() ) {
-      Message *m = __skiller_if->msgq_first();
-      if ( excl_ctrl == m->sender_id() ) {
-	logger->log_debug("SkillerExecutionThread", "%s releases exclusive control",
-			  m->sender_thread_name());
-	
-	__continuous_reset = true;
-	__last_exclusive_controller = __skiller_if->exclusive_controller();
-	__skiller_if->set_exclusive_controller(0);
-	write_skiller_if = true;
-	excl_ctrl = 0;
-    } else {
-	if ( !__reader_just_left || (m->sender_id() != __last_exclusive_controller)) {
-	  logger->log_warn("SkillerExecutionThread", "%s tried to release exclusive control, "
-			   "it's not the controller", m->sender_thread_name());
-	}
-      }
-
-    } else if ( __skiller_if->msgq_first_is<SkillerInterface::ExecSkillMessage>() ) {
-      SkillerInterface::ExecSkillMessage *m = __skiller_if->msgq_first<SkillerInterface::ExecSkillMessage>();
-
-      if ( m->sender_id() == excl_ctrl ) {
-	if (skill_enqueued) {
-	  logger->log_warn("SkillerExecutionThread", "More than one skill string enqueued, "
-			   "ignoring successive string (%s).", m->skill_string());
-	} else {	  
-	  logger->log_debug("SkillerExecutionThread", "%s wants me to execute '%s'",
-			    m->sender_thread_name(), m->skill_string());
-
-	  skill_enqueued = true;
-	  curss = m->skill_string();
-	  cur_msgid = m->id();
-	  __continuous_reset = true;
-	}
-      } else {
-	logger->log_debug("SkillerExecutionThread", "%s tries to exec while not controller",
-			  m->sender_thread_name());
-      }
-
-    } else if ( __skiller_if->msgq_first_is<SkillerInterface::StopExecMessage>() ) {
-      SkillerInterface::StopExecMessage *m = __skiller_if->msgq_first<SkillerInterface::StopExecMessage>();
-
-      if ( (m->sender_id() == excl_ctrl) ||
-	   (__reader_just_left && (m->sender_id() == __last_exclusive_controller)) ) {
-	logger->log_debug("SkillerExecutionThread", "Stopping continuous execution");
-	__continuous_reset = true;
-	curss = "";
-      } else {
-	logger->log_debug("SkillerExecutionThread", "%s tries to stop exec while not controller",
-			  m->sender_thread_name());
-      }
-    } else {
-      logger->log_warn("SkillerExecutionThread", "Unhandled message of type %s in "
-		       "skiller interface", __skiller_if->msgq_first()->type());
-    }
 
-    __skiller_if->msgq_pop();
+  __skiller_if_removed_readers.lock();
+  while (! __skiller_if_removed_readers.empty()) {
+	  __lua->do_string("skiller.fawkes.notify_reader_removed(%u)", __skiller_if_removed_readers.front());
+	  __skiller_if_removed_readers.pop();
   }
+  __skiller_if_removed_readers.unlock();
 
-#ifdef SKILLER_TIMETRACKING
-  __tt->ping_end(__ttc_msgproc);
-#endif
-
-  if ( __continuous_reset ) {
-    logger->log_debug("SkillerExecutionThread", "Continuous reset forced");    try {
-      if (__sksf_pushed) {
-	__sksf_pushed = false;
-	__lua->pop(1);			  // ---
-      }
-      __lua->do_string("skillenv.reset_all()");
-    } catch (Exception &e) {
-      logger->log_warn("SkillerExecutionThread", "Caught exception while resetting skills, ignored, output follows");
-      logger->log_warn("SkillerExecutionThread", e);
-    }
-
-    __skiller_if->set_status(SkillerInterface::S_INACTIVE);
-    __skiller_if->set_skill_string("");
-
-    //We're not resetting, because this is information someone might need...
-    //__skiller_if->set_error("");
-    __error_written    = false;
-    __continuous_reset = false;
-    write_skiller_if   = true;
-  }
-
-  if ( write_skiller_if )  __skiller_if->write();
-
-  if (curss != "" &&
-      (! __sksf_pushed || __skiller_if->status() == SkillerInterface::S_RUNNING))
-  {
-    // We've got something to execute
-
-#ifdef SKILLER_TIMETRACKING
-      __tt->ping_start(__ttc_luaprep);
-#endif
-
-    // was continuous execution, status has to be cleaned up anyway
-    //logger->log_debug("SkillerExecutionThread", "Resetting skill status in continuous mode");
-    try {
-      __lua->do_string("skillenv.reset_status()");
-    } catch (Exception &e) {
-      logger->log_warn("SkillerExecutionThread", "Caught exception while resetting status, ignored, output follows");
-      logger->log_warn("SkillerExecutionThread", e);
-    }
-
-    try {
-      if (! __sksf_pushed) {
-                                            // Stack:
-	__lua->load_string(curss.c_str());  // sksf (skill string function)
-	__lua->do_string("return skillenv.gensandbox()"); // sksf, sandbox
-	__lua->setfenv();                   // sksf
-	__sksf_pushed = true;
-      }
-#ifdef SKILLER_TIMETRACKING
-      __tt->ping_end(__ttc_luaprep);
-      __tt->ping_start(__ttc_luaexec);
-#endif
-      __lua->push_value(-1);		  // sksf sksf
-      __lua->pcall();                     // sksf
-
-    } catch (Exception &e) {
-      logger->log_error("SkillerExecutionThread", e);
-      __skiller_if->set_error("Skill string execution failed with Lua error, see log");
-      __skiller_if->write();
-      __continuous_reset = true;
-    }
-#ifdef SKILLER_TIMETRACKING
-    __tt->ping_end(__ttc_luaexec);
-#endif
-
-  } // end if (curss != "")
-
-#ifdef SKILLER_TIMETRACKING
-    __tt->ping_start(__ttc_publish);
-#endif
-  __lua_ifi->write();
-
-  publish_skill_status(curss, cur_msgid);
-  publish_skdbg();
-#ifdef SKILLER_TIMETRACKING
-  __tt->ping_end(__ttc_publish);
-  __tt->ping_start(__ttc_looprst);
-#endif
-
-  lua_loop_reset();
-
-  __reader_just_left = false;
-
-#ifdef SKILLER_TIMETRACKING
-  __tt->ping_end(__ttc_looprst);
-  __tt->ping_end(__ttc_total);
-  if (++__tt_loopcount >= SKILLER_TT_MOD) {
-    //logger->log_debug("Lua", "Stack size: %i", __lua->stack_size());
-    __tt_loopcount = 0;
-    __tt->print_to_stdout();
-  }
-#endif
+  __lua->do_string("skillenv.loop()");
 }
diff --git a/src/plugins/skiller/exec_thread.h b/src/plugins/skiller/exec_thread.h
index 6b793c6..c3a4a49 100644
--- a/src/plugins/skiller/exec_thread.h
+++ b/src/plugins/skiller/exec_thread.h
@@ -35,6 +35,8 @@
 #include <utils/system/fam.h>
 #include <blackboard/interface_listener.h>
 #include <lua/context_watcher.h>
+#include <blackboard/ownership.h>
+#include <core/utils/lock_queue.h>
 
 #include <list>
 #include <string>
@@ -44,7 +46,6 @@ namespace fawkes {
   class ComponentLogger;
   class Mutex;
   class LuaContext;
-  class LuaInterfaceImporter;
   class Interface;
   class SkillerInterface;
   class SkillerDebugInterface;
@@ -79,7 +80,7 @@ class SkillerExecutionThread
 
   /* BlackBoardInterfaceListener */
   void bb_interface_reader_removed(fawkes::Interface *interface,
-				   unsigned int instance_serial) throw();
+                                   unsigned int instance_serial) throw();
 
   // LuaContextWatcher
   void lua_restarted(fawkes::LuaContext *context);
@@ -87,51 +88,24 @@ class SkillerExecutionThread
  /** Stub to see name in backtrace for easier debugging. @see Thread::run() */
  protected: virtual void run() { Thread::run(); }
 
- private: /* methods */
-  void init_failure_cleanup();
-  void publish_skill_status(std::string &curss, unsigned int cur_msgid);
-  void publish_skdbg();
-  void publish_error();
-  void process_skdbg_messages();
-  void lua_loop_reset();
-
  private: /* members */
   fawkes::ComponentLogger *__clog;
-
+  fawkes::BlackBoardWithOwnership *__bbo;
+  
   unsigned int __last_exclusive_controller;
   bool         __reader_just_left;
 
-  bool        __continuous_reset;
-  bool        __error_written;
-  bool        __sksf_pushed;
-
-  std::string __skdbg_what;
-  std::string __skdbg_graphdir;
-  bool        __skdbg_graphcolored;
-
   // config values
   std::string __cfg_skillspace;
   bool        __cfg_watch_files;
 
+  fawkes::LockQueue<unsigned int> __skiller_if_removed_readers;
+  
   fawkes::SkillerInterface      *__skiller_if;
-  fawkes::SkillerDebugInterface *__skdbg_if;
-  fawkes::SkillerDebugInterface *__skdbg_if_layouted;
 
   fawkes::LuaContext  *__lua;
-  fawkes::LuaInterfaceImporter  *__lua_ifi;
 
   std::list<SkillerFeature *> __features;
-
-#ifdef SKILLER_TIMETRACKING
-  fawkes::TimeTracker *__tt;
-  unsigned int         __ttc_total;
-  unsigned int         __ttc_msgproc;
-  unsigned int         __ttc_luaprep;
-  unsigned int         __ttc_luaexec;
-  unsigned int         __ttc_looprst;
-  unsigned int         __ttc_publish;
-  unsigned int         __tt_loopcount;
-#endif
 };
 
 #endif

- *commit* 173a2d8497e4d5a5bbad4b4b5c701036d41ebbeb - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 12:36:25 2016 +0100
Subject: skillgui: set graph color button state based on interface

 src/tools/skillgui/skillgui.cpp |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

_Diff for modified files_:
diff --git a/src/tools/skillgui/skillgui.cpp b/src/tools/skillgui/skillgui.cpp
index a6caab3..a3b8320 100644
--- a/src/tools/skillgui/skillgui.cpp
+++ b/src/tools/skillgui/skillgui.cpp
@@ -614,6 +614,10 @@ SkillGuiGtkWindow::on_skdbg_data_changed()
       case SkillerDebugInterface::GD_RIGHT_LEFT:
 	tb_graphdir->set_stock_id(Gtk::Stock::GO_BACK); break;
       }
+
+      if (__skdbg_if->is_graph_colored() != tb_graphcolored->get_active()) {
+	      tb_graphcolored->set_active(__skdbg_if->is_graph_colored());
+      }
     } catch (Exception &e) {
       // ignored
     }

- *commit* 13391ca51aad4cfa29c51a3559b32870f833c492 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 12:36:47 2016 +0100
Subject: skills/say: specify interface ID

 src/lua/skills/generic/say.lua |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

_Diff for modified files_:
diff --git a/src/lua/skills/generic/say.lua b/src/lua/skills/generic/say.lua
index e11e764..3df2d76 100644
--- a/src/lua/skills/generic/say.lua
+++ b/src/lua/skills/generic/say.lua
@@ -27,7 +27,7 @@ name               = "say"
 fsm                = SkillHSM:new{name=name, start="SAY"}
 depends_skills     = nil
 depends_interfaces = {
-   {v = "speechsynth", type = "SpeechSynthInterface"}
+   {v = "speechsynth", type = "SpeechSynthInterface", id = "Flite"}
 }
 
 documentation      = [==[Speech synthesis skill.

- *commit* 279841b904f8d494e2bee2c78f6dbf2c870d21f3 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 12:38:44 2016 +0100
Subject: config: remove interfaces from skiller config and disable ROS

 cfg/conf.d/skiller.yaml |   37 +------------------------------------
 1 files changed, 1 insertions(+), 36 deletions(-)

_Diff for modified files_:
diff --git a/cfg/conf.d/skiller.yaml b/cfg/conf.d/skiller.yaml
index f83ef5d..4d015d7 100644
--- a/cfg/conf.d/skiller.yaml
+++ b/cfg/conf.d/skiller.yaml
@@ -20,39 +20,4 @@ skiller:
       enable: false
 
     ros:
-      enable: true
-
-  interfaces:
-    test:
-      reading:
-        navigator: NavigatorInterface::Navigator
-        pose: ObjectPositionInterface::WM Pose
-        speechsynth: SpeechSynthInterface::Flite
-        katanaarm: KatanaInterface::Katana
-        ptu_RX28: PanTiltInterface::PanTilt RX28
-        ptu_EviD100P: PanTiltInterface::PanTilt EviD100P
-    nao:
-      navigator: NavigatorInterface::Navigator
-      pose: ObjectPositionInterface::WM Pose
-      wm_ball: ObjectPositionInterface::WM Ball
-      gamestate: GameStateInterface::WM GameState
-      speechsynth: SpeechSynthInterface::Nao SpeechSynth
-      naomotion: HumanoidMotionInterface::NaoQi Motion
-      naosensors: NaoSensorInterface::Nao Sensors
-      naostiffness: NaoJointStiffnessInterface::Nao Joint Stiffness
-      naojoints: NaoJointPositionInterface::Nao Joint Positions
-      chestbutton: SwitchInterface::Nao Button Chest
-      lfootbumper: SwitchInterface::Nao Button Foot Left
-      rfootbumper: SwitchInterface::Nao Button Foot Right
-      chestled_blue: LedInterface::Nao LED ChestBoard/Blue
-      chestled_red: LedInterface::Nao LED ChestBoard/Red
-      chestled_green: LedInterface::Nao LED ChestBoard/Green
-      lfootled_blue: LedInterface::Nao LED LFoot/Blue
-      lfootled_red: LedInterface::Nao LED LFoot/Red
-      lfootled_green: LedInterface::Nao LED LFoot/Green
-      rfootled_blue: LedInterface::Nao LED RFoot/Blue
-      rfootled_red: LedInterface::Nao LED RFoot/Red
-      rfootled_green: LedInterface::Nao LED RFoot/Green
-      ear_leds: LedInterface::Nao LED Ears/*/*
-      face_leds: LedInterface::Nao LED Face/*/*/*
-      penalty: SoccerPenaltyInterface::SPL Penalty
+      enable: false

- *commit* ae82ab53b9f68e704d64ad08110cf74e304e5f11 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 12:39:56 2016 +0100
Subject: config: fix frame name in gazsim config

 cfg/conf.d/gazsim.yaml |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

_Diff for modified files_:
diff --git a/cfg/conf.d/gazsim.yaml b/cfg/conf.d/gazsim.yaml
index 350c5f6..7bab4da 100644
--- a/cfg/conf.d/gazsim.yaml
+++ b/cfg/conf.d/gazsim.yaml
@@ -23,7 +23,7 @@ gazsim:
   laser:
     max_range: 5.5 
     interface-id: "Laser urg"
-    frame-id: !frame base_laser"
+    frame-id: !frame base_laser
 
   webcam:
     # list of ids for all cameras to simulate

- *commit* b5390a24257b8f4bdfd8f03d244b12b0efec2e81 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 23:01:05 2016 +0100
Subject: libinterface: add semantics for changed() for writing instance

 src/libs/interface/interface.cpp |   16 ++++++++++++++--
 1 files changed, 14 insertions(+), 2 deletions(-)

_Diff for modified files_:
diff --git a/src/libs/interface/interface.cpp b/src/libs/interface/interface.cpp
index 73e25e2..758eabb 100644
--- a/src/libs/interface/interface.cpp
+++ b/src/libs/interface/interface.cpp
@@ -777,17 +777,29 @@ Interface::mark_data_changed()
 
 
 /** Check if data has been changed.
+ * This method has slightly different semantics depending on whether
+ * this interface is a writing or a reading instance.
+ * For a reading instance:
  * Note that if the data has been modified this method will return
  * true at least until the next call to read. From then on it will
  * return false if the data has not been modified between the two
  * read() calls and still true otherwise.
+ * For a writing instance:
+ * The data is considered to have changed if any of the interface field
+ * set methods has been called since the last write() call.
  * @return true if data has been changed between the last call to
- * read() and the one before.
+ * read() and the one before (reading instance) or if any data field
+ * setter has been called since the last write() call (writing instance),
+ * false otherwise
  */
 bool
 Interface::changed() const
 {
-  return (*__timestamp != __local_read_timestamp);
+	if (__write_access) {
+		return data_changed;
+	} else {
+		return (*__timestamp != __local_read_timestamp);
+	}
 }
 
 

- *commit* 0f9cd36734d1b1a257c785ce97bfa50ab90ab7ee - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 23:12:26 2016 +0100
Subject: skiller: preserve exclusive controller in context restarts

 src/lua/skiller/fawkes/init.lua |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

_Diff for modified files_:
diff --git a/src/lua/skiller/fawkes/init.lua b/src/lua/skiller/fawkes/init.lua
index 29cbbd8..2739b66 100644
--- a/src/lua/skiller/fawkes/init.lua
+++ b/src/lua/skiller/fawkes/init.lua
@@ -205,7 +205,7 @@ function loop()
 			local ok, errmsg = xpcall(sksf, debug.traceback)
 
 			if not ok then
-				 local errstr = string.format("%s|%s", skill_string, errmsg)
+				 local errstr = string.format("%s|%s", tostring(skiller_if:skill_string()), tostring(errmsg))
 				 print_error("Failed to execute skill: " .. errstr)
 
 				 skiller_if:set_error(errstr)
@@ -257,9 +257,12 @@ function init()
 	 skdbg_if          = blackboard:open_for_writing("SkillerDebugInterface", "Skiller")
 	 skdbg_layouted_if = blackboard:open_for_writing("SkillerDebugInterface", "SkillerLayouted")
 
+	 -- read interface once to enable keeping the
+	 -- exclusive controller on a Lua context restart
+	 skiller_if:read()
+
 	 skdbg_if:set_graph_colored(skdbg_graphcolored)
 	 skdbg_if:write()
 	 skdbg_layouted_if:set_graph_colored(skdbg_graphcolored)
 	 skdbg_layouted_if:write()
 end
-

- *commit* 30ffb42eeaec8f69f797e13ead6b60a327b8f375 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 23:14:35 2016 +0100
Subject: bumblebee2: re-generate interfaces with new ffifacegen

 .../interfaces/OpenCVStereoParamsInterface.tolua   |  199 +++++++++++++++++++-
 1 files changed, 197 insertions(+), 2 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/bumblebee2/interfaces/OpenCVStereoParamsInterface.tolua b/src/plugins/bumblebee2/interfaces/OpenCVStereoParamsInterface.tolua
index ddecd96..5f482d9 100644
--- a/src/plugins/bumblebee2/interfaces/OpenCVStereoParamsInterface.tolua
+++ b/src/plugins/bumblebee2/interfaces/OpenCVStereoParamsInterface.tolua
@@ -17,6 +17,23 @@ class OpenCVStereoParamsInterface : public Interface
     SetPreFilterTypeMessage();
     ~SetPreFilterTypeMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     PreFilterType pre_filter_type();
     void set_pre_filter_type(const PreFilterType new_pre_filter_type);
     int maxlenof_pre_filter_type() const;
@@ -28,6 +45,23 @@ class OpenCVStereoParamsInterface : public Interface
     SetPreFilterSizeMessage();
     ~SetPreFilterSizeMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int pre_filter_size();
     void set_pre_filter_size(const unsigned int new_pre_filter_size);
     int maxlenof_pre_filter_size() const;
@@ -39,6 +73,23 @@ class OpenCVStereoParamsInterface : public Interface
     SetPreFilterCapMessage();
     ~SetPreFilterCapMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int pre_filter_cap();
     void set_pre_filter_cap(const unsigned int new_pre_filter_cap);
     int maxlenof_pre_filter_cap() const;
@@ -50,6 +101,23 @@ class OpenCVStereoParamsInterface : public Interface
     SetSADWindowSizeMessage();
     ~SetSADWindowSizeMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int sad_window_size();
     void set_sad_window_size(const unsigned int new_sad_window_size);
     int maxlenof_sad_window_size() const;
@@ -61,6 +129,23 @@ class OpenCVStereoParamsInterface : public Interface
     SetMinDisparityMessage();
     ~SetMinDisparityMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     int min_disparity();
     void set_min_disparity(const int new_min_disparity);
     int maxlenof_min_disparity() const;
@@ -72,6 +157,23 @@ class OpenCVStereoParamsInterface : public Interface
     SetNumDisparitiesMessage();
     ~SetNumDisparitiesMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int num_disparities();
     void set_num_disparities(const unsigned int new_num_disparities);
     int maxlenof_num_disparities() const;
@@ -83,6 +185,23 @@ class OpenCVStereoParamsInterface : public Interface
     SetTextureThresholdMessage();
     ~SetTextureThresholdMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int texture_threshold();
     void set_texture_threshold(const unsigned int new_texture_threshold);
     int maxlenof_texture_threshold() const;
@@ -94,6 +213,23 @@ class OpenCVStereoParamsInterface : public Interface
     SetUniquenessRatioMessage();
     ~SetUniquenessRatioMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int uniqueness_ratio();
     void set_uniqueness_ratio(const unsigned int new_uniqueness_ratio);
     int maxlenof_uniqueness_ratio() const;
@@ -105,6 +241,23 @@ class OpenCVStereoParamsInterface : public Interface
     SetSpeckleWindowSizeMessage();
     ~SetSpeckleWindowSizeMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int speckle_window_size();
     void set_speckle_window_size(const unsigned int new_speckle_window_size);
     int maxlenof_speckle_window_size() const;
@@ -116,6 +269,23 @@ class OpenCVStereoParamsInterface : public Interface
     SetSpeckleRangeMessage();
     ~SetSpeckleRangeMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int speckle_range();
     void set_speckle_range(const unsigned int new_speckle_range);
     int maxlenof_speckle_range() const;
@@ -127,6 +297,23 @@ class OpenCVStereoParamsInterface : public Interface
     SetTrySmallerWindowsMessage();
     ~SetTrySmallerWindowsMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_try_smaller_windows();
     void set_try_smaller_windows(const bool new_try_smaller_windows);
     int maxlenof_try_smaller_windows() const;
@@ -179,7 +366,7 @@ class OpenCVStereoParamsInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -198,10 +385,18 @@ class OpenCVStereoParamsInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.OpenCVStereoParamsInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.OpenCVStereoParamsInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }

- *commit* 9a64c0c33038a332b4a823029d0437e15a71adeb - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 23:14:35 2016 +0100
Subject: dynamixel: re-generate interfaces with new ffifacegen

 .../interfaces/DynamixelServoInterface.tolua       |  335 +++++++++++++++++++-
 1 files changed, 333 insertions(+), 2 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/dynamixel/interfaces/DynamixelServoInterface.tolua b/src/plugins/dynamixel/interfaces/DynamixelServoInterface.tolua
index 4359111..c160d13 100644
--- a/src/plugins/dynamixel/interfaces/DynamixelServoInterface.tolua
+++ b/src/plugins/dynamixel/interfaces/DynamixelServoInterface.tolua
@@ -23,6 +23,23 @@ class DynamixelServoInterface : public Interface
     StopMessage();
     ~StopMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class FlushMessage : public Message
@@ -30,6 +47,23 @@ class DynamixelServoInterface : public Interface
     FlushMessage();
     ~FlushMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class GotoMessage : public Message
@@ -38,6 +72,23 @@ class DynamixelServoInterface : public Interface
     GotoMessage();
     ~GotoMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float angle();
     void set_angle(const float new_angle);
     int maxlenof_angle() const;
@@ -49,6 +100,23 @@ class DynamixelServoInterface : public Interface
     TimedGotoMessage();
     ~TimedGotoMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float time_sec();
     void set_time_sec(const float new_time_sec);
     int maxlenof_time_sec() const;
@@ -63,6 +131,23 @@ class DynamixelServoInterface : public Interface
     SetModeMessage();
     ~SetModeMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned char mode();
     void set_mode(const unsigned char new_mode);
     int maxlenof_mode() const;
@@ -74,6 +159,23 @@ class DynamixelServoInterface : public Interface
     SetSpeedMessage();
     ~SetSpeedMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned short speed();
     void set_speed(const unsigned short new_speed);
     int maxlenof_speed() const;
@@ -85,6 +187,23 @@ class DynamixelServoInterface : public Interface
     SetEnabledMessage();
     ~SetEnabledMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_enabled();
     void set_enabled(const bool new_enabled);
     int maxlenof_enabled() const;
@@ -96,6 +215,23 @@ class DynamixelServoInterface : public Interface
     SetVelocityMessage();
     ~SetVelocityMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float velocity();
     void set_velocity(const float new_velocity);
     int maxlenof_velocity() const;
@@ -107,6 +243,23 @@ class DynamixelServoInterface : public Interface
     SetMarginMessage();
     ~SetMarginMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float angle_margin();
     void set_angle_margin(const float new_angle_margin);
     int maxlenof_angle_margin() const;
@@ -118,6 +271,23 @@ class DynamixelServoInterface : public Interface
     SetComplianceValuesMessage();
     ~SetComplianceValuesMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned char cw_margin();
     void set_cw_margin(const unsigned char new_cw_margin);
     int maxlenof_cw_margin() const;
@@ -138,6 +308,23 @@ class DynamixelServoInterface : public Interface
     SetGoalSpeedMessage();
     ~SetGoalSpeedMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int goal_speed();
     void set_goal_speed(const unsigned int new_goal_speed);
     int maxlenof_goal_speed() const;
@@ -149,6 +336,23 @@ class DynamixelServoInterface : public Interface
     SetTorqueLimitMessage();
     ~SetTorqueLimitMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int torque_limit();
     void set_torque_limit(const unsigned int new_torque_limit);
     int maxlenof_torque_limit() const;
@@ -160,6 +364,23 @@ class DynamixelServoInterface : public Interface
     SetPunchMessage();
     ~SetPunchMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int punch();
     void set_punch(const unsigned int new_punch);
     int maxlenof_punch() const;
@@ -171,6 +392,23 @@ class DynamixelServoInterface : public Interface
     GotoPositionMessage();
     ~GotoPositionMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int position();
     void set_position(const unsigned int new_position);
     int maxlenof_position() const;
@@ -182,6 +420,23 @@ class DynamixelServoInterface : public Interface
     SetAngleLimitsMessage();
     ~SetAngleLimitsMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int angle_limit_cw();
     void set_angle_limit_cw(const unsigned int new_angle_limit_cw);
     int maxlenof_angle_limit_cw() const;
@@ -195,6 +450,23 @@ class DynamixelServoInterface : public Interface
     ResetRawErrorMessage();
     ~ResetRawErrorMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class SetPreventAlarmShutdownMessage : public Message
@@ -203,6 +475,23 @@ class DynamixelServoInterface : public Interface
     SetPreventAlarmShutdownMessage();
     ~SetPreventAlarmShutdownMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_enable_prevent_alarm_shutdown();
     void set_enable_prevent_alarm_shutdown(const bool new_enable_prevent_alarm_shutdown);
     int maxlenof_enable_prevent_alarm_shutdown() const;
@@ -214,6 +503,23 @@ class DynamixelServoInterface : public Interface
     SetAutorecoverEnabledMessage();
     ~SetAutorecoverEnabledMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_autorecover_enabled();
     void set_autorecover_enabled(const bool new_autorecover_enabled);
     int maxlenof_autorecover_enabled() const;
@@ -224,6 +530,23 @@ class DynamixelServoInterface : public Interface
     RecoverMessage();
     ~RecoverMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   char * model();
@@ -342,7 +665,7 @@ class DynamixelServoInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -361,10 +684,18 @@ class DynamixelServoInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.DynamixelServoInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.DynamixelServoInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }

- *commit* 0a25aa39cef8a247885998631d0487be8571a289 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 23:14:35 2016 +0100
Subject: jaco: re-generate interfaces with new ffifacegen

 .../jaco/interfaces/JacoBimanualInterface.tolua    |   80 +++++++++-
 src/plugins/jaco/interfaces/JacoInterface.tolua    |  165 +++++++++++++++++++-
 2 files changed, 241 insertions(+), 4 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/jaco/interfaces/JacoBimanualInterface.tolua b/src/plugins/jaco/interfaces/JacoBimanualInterface.tolua
index 4794def..0e744bb 100644
--- a/src/plugins/jaco/interfaces/JacoBimanualInterface.tolua
+++ b/src/plugins/jaco/interfaces/JacoBimanualInterface.tolua
@@ -16,6 +16,23 @@ class JacoBimanualInterface : public Interface
     CartesianGotoMessage();
     ~CartesianGotoMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float l_x();
     void set_l_x(const float new_l_x);
     int maxlenof_l_x() const;
@@ -60,6 +77,23 @@ class JacoBimanualInterface : public Interface
     MoveGripperMessage();
     ~MoveGripperMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float l_finger1();
     void set_l_finger1(const float new_l_finger1);
     int maxlenof_l_finger1() const;
@@ -86,6 +120,23 @@ class JacoBimanualInterface : public Interface
     SetPlannerParamsMessage();
     ~SetPlannerParamsMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * params();
     void set_params(const char * new_params);
     int maxlenof_params() const;
@@ -97,6 +148,23 @@ class JacoBimanualInterface : public Interface
     SetConstrainedMessage();
     ~SetConstrainedMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_constrained();
     void set_constrained(const bool new_constrained);
     int maxlenof_constrained() const;
@@ -128,7 +196,7 @@ class JacoBimanualInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -147,10 +215,18 @@ class JacoBimanualInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.JacoBimanualInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.JacoBimanualInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/plugins/jaco/interfaces/JacoInterface.tolua b/src/plugins/jaco/interfaces/JacoInterface.tolua
index 462504a..8218476 100644
--- a/src/plugins/jaco/interfaces/JacoInterface.tolua
+++ b/src/plugins/jaco/interfaces/JacoInterface.tolua
@@ -15,6 +15,23 @@ class JacoInterface : public Interface
     CalibrateMessage();
     ~CalibrateMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class RetractMessage : public Message
@@ -22,6 +39,23 @@ class JacoInterface : public Interface
     RetractMessage();
     ~RetractMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class StopMessage : public Message
@@ -29,6 +63,23 @@ class JacoInterface : public Interface
     StopMessage();
     ~StopMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class CartesianGotoMessage : public Message
@@ -37,6 +88,23 @@ class JacoInterface : public Interface
     CartesianGotoMessage();
     ~CartesianGotoMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float x();
     void set_x(const float new_x);
     int maxlenof_x() const;
@@ -63,6 +131,23 @@ class JacoInterface : public Interface
     AngularGotoMessage();
     ~AngularGotoMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float j1();
     void set_j1(const float new_j1);
     int maxlenof_j1() const;
@@ -89,6 +174,23 @@ class JacoInterface : public Interface
     MoveGripperMessage();
     ~MoveGripperMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float finger1();
     void set_finger1(const float new_finger1);
     int maxlenof_finger1() const;
@@ -106,6 +208,23 @@ class JacoInterface : public Interface
     SetPlannerParamsMessage();
     ~SetPlannerParamsMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * params();
     void set_params(const char * new_params);
     int maxlenof_params() const;
@@ -117,6 +236,23 @@ class JacoInterface : public Interface
     JoystickPushMessage();
     ~JoystickPushMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int button();
     void set_button(const unsigned int new_button);
     int maxlenof_button() const;
@@ -127,6 +263,23 @@ class JacoInterface : public Interface
     JoystickReleaseMessage();
     ~JoystickReleaseMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   bool is_connected();
@@ -188,7 +341,7 @@ class JacoInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -207,10 +360,18 @@ class JacoInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.JacoInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.JacoInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }

- *commit* 6d2a84ebf7f9015e74219935482a2a6bf6ef6dec - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 23:14:35 2016 +0100
Subject: katana: re-generate interfaces with new ffifacegen

 .../katana/interfaces/KatanaInterface.tolua        |  284 +++++++++++++++++++-
 1 files changed, 282 insertions(+), 2 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/katana/interfaces/KatanaInterface.tolua b/src/plugins/katana/interfaces/KatanaInterface.tolua
index 36ff9e7..6304012 100644
--- a/src/plugins/katana/interfaces/KatanaInterface.tolua
+++ b/src/plugins/katana/interfaces/KatanaInterface.tolua
@@ -33,6 +33,23 @@ class KatanaInterface : public Interface
     StopMessage();
     ~StopMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class FlushMessage : public Message
@@ -40,6 +57,23 @@ class KatanaInterface : public Interface
     FlushMessage();
     ~FlushMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class ParkMessage : public Message
@@ -47,6 +81,23 @@ class KatanaInterface : public Interface
     ParkMessage();
     ~ParkMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class LinearGotoMessage : public Message
@@ -55,6 +106,23 @@ class KatanaInterface : public Interface
     LinearGotoMessage();
     ~LinearGotoMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float theta_error();
     void set_theta_error(const float new_theta_error);
     int maxlenof_theta_error() const;
@@ -96,6 +164,23 @@ class KatanaInterface : public Interface
     LinearGotoKniMessage();
     ~LinearGotoKniMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float x();
     void set_x(const float new_x);
     int maxlenof_x() const;
@@ -122,6 +207,23 @@ class KatanaInterface : public Interface
     ObjectGotoMessage();
     ~ObjectGotoMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * object();
     void set_object(const char * new_object);
     int maxlenof_object() const;
@@ -135,6 +237,23 @@ class KatanaInterface : public Interface
     CalibrateMessage();
     ~CalibrateMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class OpenGripperMessage : public Message
@@ -142,6 +261,23 @@ class KatanaInterface : public Interface
     OpenGripperMessage();
     ~OpenGripperMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class CloseGripperMessage : public Message
@@ -149,6 +285,23 @@ class KatanaInterface : public Interface
     CloseGripperMessage();
     ~CloseGripperMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class SetEnabledMessage : public Message
@@ -157,6 +310,23 @@ class KatanaInterface : public Interface
     SetEnabledMessage();
     ~SetEnabledMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_enabled();
     void set_enabled(const bool new_enabled);
     int maxlenof_enabled() const;
@@ -168,6 +338,23 @@ class KatanaInterface : public Interface
     SetMaxVelocityMessage();
     ~SetMaxVelocityMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned char max_velocity();
     void set_max_velocity(const unsigned char new_max_velocity);
     int maxlenof_max_velocity() const;
@@ -179,6 +366,23 @@ class KatanaInterface : public Interface
     SetPlannerParamsMessage();
     ~SetPlannerParamsMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * plannerparams();
     void set_plannerparams(const char * new_plannerparams);
     int maxlenof_plannerparams() const;
@@ -193,6 +397,23 @@ class KatanaInterface : public Interface
     SetMotorEncoderMessage();
     ~SetMotorEncoderMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int nr();
     void set_nr(const unsigned int new_nr);
     int maxlenof_nr() const;
@@ -207,6 +428,23 @@ class KatanaInterface : public Interface
     MoveMotorEncoderMessage();
     ~MoveMotorEncoderMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int nr();
     void set_nr(const unsigned int new_nr);
     int maxlenof_nr() const;
@@ -221,6 +459,23 @@ class KatanaInterface : public Interface
     SetMotorAngleMessage();
     ~SetMotorAngleMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int nr();
     void set_nr(const unsigned int new_nr);
     int maxlenof_nr() const;
@@ -235,6 +490,23 @@ class KatanaInterface : public Interface
     MoveMotorAngleMessage();
     ~MoveMotorAngleMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int nr();
     void set_nr(const unsigned int new_nr);
     int maxlenof_nr() const;
@@ -305,7 +577,7 @@ class KatanaInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -324,10 +596,18 @@ class KatanaInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.KatanaInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.KatanaInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }

- *commit* 4500b0c52cbcfc944dd9e895575c71bf16273cb7 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 23:14:35 2016 +0100
Subject: laser-cluster: re-generate interfaces with new ffifacegen

 .../interfaces/LaserClusterInterface.tolua         |   46 +++++++++++++++++++-
 1 files changed, 44 insertions(+), 2 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/laser-cluster/interfaces/LaserClusterInterface.tolua b/src/plugins/laser-cluster/interfaces/LaserClusterInterface.tolua
index 2f324bd..d5ef400 100644
--- a/src/plugins/laser-cluster/interfaces/LaserClusterInterface.tolua
+++ b/src/plugins/laser-cluster/interfaces/LaserClusterInterface.tolua
@@ -17,6 +17,23 @@ class LaserClusterInterface : public Interface
     SetMaxXMessage();
     ~SetMaxXMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float max_x();
     void set_max_x(const float new_max_x);
     int maxlenof_max_x() const;
@@ -28,6 +45,23 @@ class LaserClusterInterface : public Interface
     SetSelectionModeMessage();
     ~SetSelectionModeMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     SelectionMode selection_mode();
     void set_selection_mode(const SelectionMode new_selection_mode);
     int maxlenof_selection_mode() const;
@@ -53,7 +87,7 @@ class LaserClusterInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -72,10 +106,18 @@ class LaserClusterInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.LaserClusterInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.LaserClusterInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }

- *commit* d03c5209e800368a522c54d656c0676605c94b82 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 23:14:35 2016 +0100
Subject: nao: re-generate interfaces with new ffifacegen

 .../nao/interfaces/NaoJointPositionInterface.tolua |   80 +++++++++++++++++++-
 .../interfaces/NaoJointStiffnessInterface.tolua    |   63 +++++++++++++++-
 .../nao/interfaces/NaoSensorInterface.tolua        |   63 +++++++++++++++-
 3 files changed, 200 insertions(+), 6 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/nao/interfaces/NaoJointPositionInterface.tolua b/src/plugins/nao/interfaces/NaoJointPositionInterface.tolua
index d5ec43f..1bb42f6 100644
--- a/src/plugins/nao/interfaces/NaoJointPositionInterface.tolua
+++ b/src/plugins/nao/interfaces/NaoJointPositionInterface.tolua
@@ -45,6 +45,23 @@ class NaoJointPositionInterface : public Interface
     SetServoMessage();
     ~SetServoMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int servo();
     void set_servo(const unsigned int new_servo);
     int maxlenof_servo() const;
@@ -62,6 +79,23 @@ class NaoJointPositionInterface : public Interface
     SetServosMessage();
     ~SetServosMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float head_yaw();
     void set_head_yaw(const float new_head_yaw);
     int maxlenof_head_yaw() const;
@@ -151,6 +185,23 @@ class NaoJointPositionInterface : public Interface
     MoveServoMessage();
     ~MoveServoMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int servo();
     void set_servo(const unsigned int new_servo);
     int maxlenof_servo() const;
@@ -168,6 +219,23 @@ class NaoJointPositionInterface : public Interface
     MoveServosMessage();
     ~MoveServosMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float speed();
     void set_speed(const float new_speed);
     int maxlenof_speed() const;
@@ -352,7 +420,7 @@ class NaoJointPositionInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -371,10 +439,18 @@ class NaoJointPositionInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.NaoJointPositionInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.NaoJointPositionInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/plugins/nao/interfaces/NaoJointStiffnessInterface.tolua b/src/plugins/nao/interfaces/NaoJointStiffnessInterface.tolua
index f197fce..e84d6f6 100644
--- a/src/plugins/nao/interfaces/NaoJointStiffnessInterface.tolua
+++ b/src/plugins/nao/interfaces/NaoJointStiffnessInterface.tolua
@@ -12,6 +12,23 @@ class NaoJointStiffnessInterface : public Interface
     SetStiffnessMessage();
     ~SetStiffnessMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     unsigned int servo();
     void set_servo(const unsigned int new_servo);
     int maxlenof_servo() const;
@@ -29,6 +46,23 @@ class NaoJointStiffnessInterface : public Interface
     SetBodyStiffnessMessage();
     ~SetBodyStiffnessMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float value();
     void set_value(const float new_value);
     int maxlenof_value() const;
@@ -43,6 +77,23 @@ class NaoJointStiffnessInterface : public Interface
     SetStiffnessesMessage();
     ~SetStiffnessesMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float time_sec();
     void set_time_sec(const float new_time_sec);
     int maxlenof_time_sec() const;
@@ -221,7 +272,7 @@ class NaoJointStiffnessInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -240,10 +291,18 @@ class NaoJointStiffnessInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.NaoJointStiffnessInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.NaoJointStiffnessInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/plugins/nao/interfaces/NaoSensorInterface.tolua b/src/plugins/nao/interfaces/NaoSensorInterface.tolua
index 564a9c8..95eccee 100644
--- a/src/plugins/nao/interfaces/NaoSensorInterface.tolua
+++ b/src/plugins/nao/interfaces/NaoSensorInterface.tolua
@@ -21,6 +21,23 @@ class NaoSensorInterface : public Interface
     EmitUltrasonicWaveMessage();
     ~EmitUltrasonicWaveMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     UltrasonicDirection ultrasonic_direction();
     void set_ultrasonic_direction(const UltrasonicDirection new_ultrasonic_direction);
     int maxlenof_ultrasonic_direction() const;
@@ -32,6 +49,23 @@ class NaoSensorInterface : public Interface
     StartUltrasonicMessage();
     ~StartUltrasonicMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     UltrasonicDirection ultrasonic_direction();
     void set_ultrasonic_direction(const UltrasonicDirection new_ultrasonic_direction);
     int maxlenof_ultrasonic_direction() const;
@@ -42,6 +76,23 @@ class NaoSensorInterface : public Interface
     StopUltrasonicMessage();
     ~StopUltrasonicMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   float accel_x();
@@ -160,7 +211,7 @@ class NaoSensorInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -179,10 +230,18 @@ class NaoSensorInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.NaoSensorInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.NaoSensorInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }

- *commit* b3e524acbbaeeabde9f9b6464606624e0b9e1118 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 23:14:35 2016 +0100
Subject: openni: re-generate interfaces with new ffifacegen

 .../HumanSkeletonProjectionInterface.tolua         |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/openni/interfaces/HumanSkeletonProjectionInterface.tolua b/src/plugins/openni/interfaces/HumanSkeletonProjectionInterface.tolua
index 7aa2ec1..253e7c5 100644
--- a/src/plugins/openni/interfaces/HumanSkeletonProjectionInterface.tolua
+++ b/src/plugins/openni/interfaces/HumanSkeletonProjectionInterface.tolua
@@ -110,7 +110,7 @@ class HumanSkeletonProjectionInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -129,10 +129,18 @@ class HumanSkeletonProjectionInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.HumanSkeletonProjectionInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.HumanSkeletonProjectionInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }

- *commit* cc80a5cc0cc4c29ffb8fe57f22e90eb39bd7cda7 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 23:14:35 2016 +0100
Subject: openrave: re-generate interfaces with new ffifacegen

 .../openrave/interfaces/OpenRaveInterface.tolua    |  199 +++++++++++++++++++-
 1 files changed, 197 insertions(+), 2 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/openrave/interfaces/OpenRaveInterface.tolua b/src/plugins/openrave/interfaces/OpenRaveInterface.tolua
index e0104cc..9133e5b 100644
--- a/src/plugins/openrave/interfaces/OpenRaveInterface.tolua
+++ b/src/plugins/openrave/interfaces/OpenRaveInterface.tolua
@@ -11,6 +11,23 @@ class OpenRaveInterface : public Interface
     StartViewerMessage();
     ~StartViewerMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class AddObjectMessage : public Message
@@ -19,6 +36,23 @@ class OpenRaveInterface : public Interface
     AddObjectMessage();
     ~AddObjectMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * name();
     void set_name(const char * new_name);
     int maxlenof_name() const;
@@ -33,6 +67,23 @@ class OpenRaveInterface : public Interface
     DeleteObjectMessage();
     ~DeleteObjectMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * name();
     void set_name(const char * new_name);
     int maxlenof_name() const;
@@ -43,6 +94,23 @@ class OpenRaveInterface : public Interface
     DeleteAllObjectsMessage();
     ~DeleteAllObjectsMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class AttachObjectMessage : public Message
@@ -51,6 +119,23 @@ class OpenRaveInterface : public Interface
     AttachObjectMessage();
     ~AttachObjectMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * name();
     void set_name(const char * new_name);
     int maxlenof_name() const;
@@ -65,6 +150,23 @@ class OpenRaveInterface : public Interface
     ReleaseObjectMessage();
     ~ReleaseObjectMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * name();
     void set_name(const char * new_name);
     int maxlenof_name() const;
@@ -75,6 +177,23 @@ class OpenRaveInterface : public Interface
     ReleaseAllObjectsMessage();
     ~ReleaseAllObjectsMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class MoveObjectMessage : public Message
@@ -83,6 +202,23 @@ class OpenRaveInterface : public Interface
     MoveObjectMessage();
     ~MoveObjectMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * name();
     void set_name(const char * new_name);
     int maxlenof_name() const;
@@ -103,6 +239,23 @@ class OpenRaveInterface : public Interface
     RotateObjectQuatMessage();
     ~RotateObjectQuatMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * name();
     void set_name(const char * new_name);
     int maxlenof_name() const;
@@ -126,6 +279,23 @@ class OpenRaveInterface : public Interface
     RotateObjectMessage();
     ~RotateObjectMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * name();
     void set_name(const char * new_name);
     int maxlenof_name() const;
@@ -146,6 +316,23 @@ class OpenRaveInterface : public Interface
     RenameObjectMessage();
     ~RenameObjectMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * name();
     void set_name(const char * new_name);
     int maxlenof_name() const;
@@ -180,7 +367,7 @@ class OpenRaveInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -199,10 +386,18 @@ class OpenRaveInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.OpenRaveInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.OpenRaveInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }

- *commit* 4194927fcd4f79155b886a594805710e38fa3f81 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 23:14:35 2016 +0100
Subject: pantilt: re-generate interfaces with new ffifacegen

 .../pantilt/interfaces/PanTiltInterface.tolua      |  165 +++++++++++++++++++-
 1 files changed, 163 insertions(+), 2 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/pantilt/interfaces/PanTiltInterface.tolua b/src/plugins/pantilt/interfaces/PanTiltInterface.tolua
index 7093c5a..6b173e9 100644
--- a/src/plugins/pantilt/interfaces/PanTiltInterface.tolua
+++ b/src/plugins/pantilt/interfaces/PanTiltInterface.tolua
@@ -18,6 +18,23 @@ class PanTiltInterface : public Interface
     StopMessage();
     ~StopMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class FlushMessage : public Message
@@ -25,6 +42,23 @@ class PanTiltInterface : public Interface
     FlushMessage();
     ~FlushMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class CalibrateMessage : public Message
@@ -32,6 +66,23 @@ class PanTiltInterface : public Interface
     CalibrateMessage();
     ~CalibrateMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class ParkMessage : public Message
@@ -39,6 +90,23 @@ class PanTiltInterface : public Interface
     ParkMessage();
     ~ParkMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class GotoMessage : public Message
@@ -47,6 +115,23 @@ class PanTiltInterface : public Interface
     GotoMessage();
     ~GotoMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float pan();
     void set_pan(const float new_pan);
     int maxlenof_pan() const;
@@ -61,6 +146,23 @@ class PanTiltInterface : public Interface
     TimedGotoMessage();
     ~TimedGotoMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float time_sec();
     void set_time_sec(const float new_time_sec);
     int maxlenof_time_sec() const;
@@ -78,6 +180,23 @@ class PanTiltInterface : public Interface
     SetEnabledMessage();
     ~SetEnabledMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_enabled();
     void set_enabled(const bool new_enabled);
     int maxlenof_enabled() const;
@@ -89,6 +208,23 @@ class PanTiltInterface : public Interface
     SetVelocityMessage();
     ~SetVelocityMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float pan_velocity();
     void set_pan_velocity(const float new_pan_velocity);
     int maxlenof_pan_velocity() const;
@@ -103,6 +239,23 @@ class PanTiltInterface : public Interface
     SetMarginMessage();
     ~SetMarginMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float pan_margin();
     void set_pan_margin(const float new_pan_margin);
     int maxlenof_pan_margin() const;
@@ -179,7 +332,7 @@ class PanTiltInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -198,10 +351,18 @@ class PanTiltInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.PanTiltInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.PanTiltInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }

- *commit* f6f856aafeaffe23f9c3366e3186b912d76458b9 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 23:14:35 2016 +0100
Subject: robotino: re-generate interfaces with new ffifacegen

 .../interfaces/RobotinoSensorInterface.tolua       |   29 ++++++++++++++++++-
 1 files changed, 27 insertions(+), 2 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/robotino/interfaces/RobotinoSensorInterface.tolua b/src/plugins/robotino/interfaces/RobotinoSensorInterface.tolua
index 639527d..c17f6f5 100644
--- a/src/plugins/robotino/interfaces/RobotinoSensorInterface.tolua
+++ b/src/plugins/robotino/interfaces/RobotinoSensorInterface.tolua
@@ -12,6 +12,23 @@ class RobotinoSensorInterface : public Interface
     SetBumperEStopEnabledMessage();
     ~SetBumperEStopEnabledMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_enabled();
     void set_enabled(const bool new_enabled);
     int maxlenof_enabled() const;
@@ -55,7 +72,7 @@ class RobotinoSensorInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -74,10 +91,18 @@ class RobotinoSensorInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.RobotinoSensorInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.RobotinoSensorInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }

- *commit* 5a8c9308c72c851e627651b82cbf7b892a2caca6 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 23:14:35 2016 +0100
Subject: roomba: re-generate interfaces with new ffifacegen

 src/plugins/roomba/Roomba500Interface.tolua |  114 ++++++++++++++++++++++++++-
 1 files changed, 112 insertions(+), 2 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/roomba/Roomba500Interface.tolua b/src/plugins/roomba/Roomba500Interface.tolua
index fe2b4de..cee0e69 100644
--- a/src/plugins/roomba/Roomba500Interface.tolua
+++ b/src/plugins/roomba/Roomba500Interface.tolua
@@ -69,6 +69,23 @@ class Roomba500Interface : public Interface
     StopMessage();
     ~StopMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class DockMessage : public Message
@@ -76,6 +93,23 @@ class Roomba500Interface : public Interface
     DockMessage();
     ~DockMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class SetModeMessage : public Message
@@ -84,6 +118,23 @@ class Roomba500Interface : public Interface
     SetModeMessage();
     ~SetModeMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     Mode mode();
     void set_mode(const Mode new_mode);
     int maxlenof_mode() const;
@@ -95,6 +146,23 @@ class Roomba500Interface : public Interface
     DriveStraightMessage();
     ~DriveStraightMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     short velocity();
     void set_velocity(const short new_velocity);
     int maxlenof_velocity() const;
@@ -106,6 +174,23 @@ class Roomba500Interface : public Interface
     DriveMessage();
     ~DriveMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     short velocity();
     void set_velocity(const short new_velocity);
     int maxlenof_velocity() const;
@@ -120,6 +205,23 @@ class Roomba500Interface : public Interface
     SetMotorsMessage();
     ~SetMotorsMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_vacuuming();
     void set_vacuuming(const bool new_vacuuming);
     int maxlenof_vacuuming() const;
@@ -346,7 +448,7 @@ class Roomba500Interface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -365,10 +467,18 @@ class Roomba500Interface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.Roomba500Interface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.Roomba500Interface.create_message = fawkes.Interface.create_message
+
+$]
+
 }

- *commit* fc33d12c104b390312f773d349aa8026aa6acf93 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 23:15:28 2016 +0100
Subject: laser-lines: re-generate interfaces with new ffifacegen

 .../interfaces/LaserLineInterface.tolua            |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/laser-lines/interfaces/LaserLineInterface.tolua b/src/plugins/laser-lines/interfaces/LaserLineInterface.tolua
index 3d5b6fe..1570ea1 100644
--- a/src/plugins/laser-lines/interfaces/LaserLineInterface.tolua
+++ b/src/plugins/laser-lines/interfaces/LaserLineInterface.tolua
@@ -44,7 +44,7 @@ class LaserLineInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -63,10 +63,18 @@ class LaserLineInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.LaserLineInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.LaserLineInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }

- *commit* 7cd4bb8300e44e38ebf4acdf6e49ae462eec871f - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 23:15:42 2016 +0100
Subject: navgraph-generator: rename id to name in interface field names

 .../interfaces/NavGraphGeneratorInterface.cpp      |  194 ++++++------
 .../interfaces/NavGraphGeneratorInterface.h_ext    |   60 ++--
 .../interfaces/NavGraphGeneratorInterface.tolua    |  315 ++++++++++++++++++--
 .../interfaces/NavGraphGeneratorInterface.xml      |   12 +-
 .../navgraph_generator_thread.cpp                  |   14 +-
 5 files changed, 429 insertions(+), 166 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/navgraph-generator/interfaces/NavGraphGeneratorInterface.cpp b/src/plugins/navgraph-generator/interfaces/NavGraphGeneratorInterface.cpp
index ba46b93..de581e8 100644
--- a/src/plugins/navgraph-generator/interfaces/NavGraphGeneratorInterface.cpp
+++ b/src/plugins/navgraph-generator/interfaces/NavGraphGeneratorInterface.cpp
@@ -91,7 +91,7 @@ NavGraphGeneratorInterface::NavGraphGeneratorInterface() : Interface()
   add_messageinfo("SetCopyGraphDefaultPropertiesMessage");
   add_messageinfo("RemovePointOfInterestMessage");
   add_messageinfo("ComputeMessage");
-  unsigned char tmp_hash[] = {0x5c, 0x8a, 0xdf, 0x1a, 0x27, 0xe3, 0x7, 0x2f, 0x3a, 0x74, 0xe3, 0xb4, 0xe5, 0x33, 0xd, 0x73};
+  unsigned char tmp_hash[] = {0x5e, 0xdf, 0x82, 0xa5, 0x9f, 0x36, 0xc2, 0xb5, 0x43, 0xba, 0xb6, 0x5, 0x12, 0xf4, 0x9c, 0xd};
   set_hash(tmp_hash);
 }
 
@@ -1025,18 +1025,18 @@ NavGraphGeneratorInterface::AddMapObstaclesMessage::clone() const
 
 
 /** Constructor with initial values.
- * @param ini_id initial value for id
+ * @param ini_name initial value for name
  * @param ini_x initial value for x
  * @param ini_y initial value for y
  */
-NavGraphGeneratorInterface::AddObstacleMessage::AddObstacleMessage(const char * ini_id, const float ini_x, const float ini_y) : Message("AddObstacleMessage")
+NavGraphGeneratorInterface::AddObstacleMessage::AddObstacleMessage(const char * ini_name, const float ini_x, const float ini_y) : Message("AddObstacleMessage")
 {
   data_size = sizeof(AddObstacleMessage_data_t);
   data_ptr  = malloc(data_size);
   memset(data_ptr, 0, data_size);
   data      = (AddObstacleMessage_data_t *)data_ptr;
   data_ts   = (message_data_ts_t *)data_ptr;
-  strncpy(data->id, ini_id, 64);
+  strncpy(data->name, ini_name, 64);
   data->x = ini_x;
   data->y = ini_y;
   enum_map_ConnectionMode[(int)NOT_CONNECTED] = "NOT_CONNECTED";
@@ -1050,7 +1050,7 @@ NavGraphGeneratorInterface::AddObstacleMessage::AddObstacleMessage(const char *
   enum_map_EdgeMode[(int)NO_INTERSECTION] = "NO_INTERSECTION";
   enum_map_EdgeMode[(int)SPLIT_INTERSECTION] = "SPLIT_INTERSECTION";
   enum_map_EdgeMode[(int)FORCE] = "FORCE";
-  add_fieldinfo(IFT_STRING, "id", 64, data->id);
+  add_fieldinfo(IFT_STRING, "name", 64, data->name);
   add_fieldinfo(IFT_FLOAT, "x", 1, &data->x);
   add_fieldinfo(IFT_FLOAT, "y", 1, &data->y);
 }
@@ -1073,7 +1073,7 @@ NavGraphGeneratorInterface::AddObstacleMessage::AddObstacleMessage() : Message("
   enum_map_EdgeMode[(int)NO_INTERSECTION] = "NO_INTERSECTION";
   enum_map_EdgeMode[(int)SPLIT_INTERSECTION] = "SPLIT_INTERSECTION";
   enum_map_EdgeMode[(int)FORCE] = "FORCE";
-  add_fieldinfo(IFT_STRING, "id", 64, data->id);
+  add_fieldinfo(IFT_STRING, "name", 64, data->name);
   add_fieldinfo(IFT_FLOAT, "x", 1, &data->x);
   add_fieldinfo(IFT_FLOAT, "y", 1, &data->y);
 }
@@ -1097,38 +1097,38 @@ NavGraphGeneratorInterface::AddObstacleMessage::AddObstacleMessage(const AddObst
 }
 
 /* Methods */
-/** Get id value.
+/** Get name value.
  * 
       ID of the obstacle. Can later be used to remove it again.
     
- * @return id value
+ * @return name value
  */
 char *
-NavGraphGeneratorInterface::AddObstacleMessage::id() const
+NavGraphGeneratorInterface::AddObstacleMessage::name() const
 {
-  return data->id;
+  return data->name;
 }
 
-/** Get maximum length of id value.
- * @return length of id value, can be length of the array or number of 
+/** Get maximum length of name value.
+ * @return length of name value, can be length of the array or number of 
  * maximum number of characters for a string
  */
 size_t
-NavGraphGeneratorInterface::AddObstacleMessage::maxlenof_id() const
+NavGraphGeneratorInterface::AddObstacleMessage::maxlenof_name() const
 {
   return 64;
 }
 
-/** Set id value.
+/** Set name value.
  * 
       ID of the obstacle. Can later be used to remove it again.
     
- * @param new_id new id value
+ * @param new_name new name value
  */
 void
-NavGraphGeneratorInterface::AddObstacleMessage::set_id(const char * new_id)
+NavGraphGeneratorInterface::AddObstacleMessage::set_name(const char * new_name)
 {
-  strncpy(data->id, new_id, sizeof(data->id));
+  strncpy(data->name, new_name, sizeof(data->name));
 }
 
 /** Get x value.
@@ -1209,16 +1209,16 @@ NavGraphGeneratorInterface::AddObstacleMessage::clone() const
 
 
 /** Constructor with initial values.
- * @param ini_id initial value for id
+ * @param ini_name initial value for name
  */
-NavGraphGeneratorInterface::RemoveObstacleMessage::RemoveObstacleMessage(const char * ini_id) : Message("RemoveObstacleMessage")
+NavGraphGeneratorInterface::RemoveObstacleMessage::RemoveObstacleMessage(const char * ini_name) : Message("RemoveObstacleMessage")
 {
   data_size = sizeof(RemoveObstacleMessage_data_t);
   data_ptr  = malloc(data_size);
   memset(data_ptr, 0, data_size);
   data      = (RemoveObstacleMessage_data_t *)data_ptr;
   data_ts   = (message_data_ts_t *)data_ptr;
-  strncpy(data->id, ini_id, 64);
+  strncpy(data->name, ini_name, 64);
   enum_map_ConnectionMode[(int)NOT_CONNECTED] = "NOT_CONNECTED";
   enum_map_ConnectionMode[(int)UNCONNECTED] = "UNCONNECTED";
   enum_map_ConnectionMode[(int)CLOSEST_NODE] = "CLOSEST_NODE";
@@ -1230,7 +1230,7 @@ NavGraphGeneratorInterface::RemoveObstacleMessage::RemoveObstacleMessage(const c
   enum_map_EdgeMode[(int)NO_INTERSECTION] = "NO_INTERSECTION";
   enum_map_EdgeMode[(int)SPLIT_INTERSECTION] = "SPLIT_INTERSECTION";
   enum_map_EdgeMode[(int)FORCE] = "FORCE";
-  add_fieldinfo(IFT_STRING, "id", 64, data->id);
+  add_fieldinfo(IFT_STRING, "name", 64, data->name);
 }
 /** Constructor */
 NavGraphGeneratorInterface::RemoveObstacleMessage::RemoveObstacleMessage() : Message("RemoveObstacleMessage")
@@ -1251,7 +1251,7 @@ NavGraphGeneratorInterface::RemoveObstacleMessage::RemoveObstacleMessage() : Mes
   enum_map_EdgeMode[(int)NO_INTERSECTION] = "NO_INTERSECTION";
   enum_map_EdgeMode[(int)SPLIT_INTERSECTION] = "SPLIT_INTERSECTION";
   enum_map_EdgeMode[(int)FORCE] = "FORCE";
-  add_fieldinfo(IFT_STRING, "id", 64, data->id);
+  add_fieldinfo(IFT_STRING, "name", 64, data->name);
 }
 
 /** Destructor */
@@ -1273,38 +1273,38 @@ NavGraphGeneratorInterface::RemoveObstacleMessage::RemoveObstacleMessage(const R
 }
 
 /* Methods */
-/** Get id value.
+/** Get name value.
  * 
       ID of the obstacle to remove.
     
- * @return id value
+ * @return name value
  */
 char *
-NavGraphGeneratorInterface::RemoveObstacleMessage::id() const
+NavGraphGeneratorInterface::RemoveObstacleMessage::name() const
 {
-  return data->id;
+  return data->name;
 }
 
-/** Get maximum length of id value.
- * @return length of id value, can be length of the array or number of 
+/** Get maximum length of name value.
+ * @return length of name value, can be length of the array or number of 
  * maximum number of characters for a string
  */
 size_t
-NavGraphGeneratorInterface::RemoveObstacleMessage::maxlenof_id() const
+NavGraphGeneratorInterface::RemoveObstacleMessage::maxlenof_name() const
 {
   return 64;
 }
 
-/** Set id value.
+/** Set name value.
  * 
       ID of the obstacle to remove.
     
- * @param new_id new id value
+ * @param new_name new name value
  */
 void
-NavGraphGeneratorInterface::RemoveObstacleMessage::set_id(const char * new_id)
+NavGraphGeneratorInterface::RemoveObstacleMessage::set_name(const char * new_name)
 {
-  strncpy(data->id, new_id, sizeof(data->id));
+  strncpy(data->name, new_name, sizeof(data->name));
 }
 
 /** Clone this message.
@@ -1325,19 +1325,19 @@ NavGraphGeneratorInterface::RemoveObstacleMessage::clone() const
 
 
 /** Constructor with initial values.
- * @param ini_id initial value for id
+ * @param ini_name initial value for name
  * @param ini_x initial value for x
  * @param ini_y initial value for y
  * @param ini_mode initial value for mode
  */
-NavGraphGeneratorInterface::AddPointOfInterestMessage::AddPointOfInterestMessage(const char * ini_id, const float ini_x, const float ini_y, const ConnectionMode ini_mode) : Message("AddPointOfInterestMessage")
+NavGraphGeneratorInterface::AddPointOfInterestMessage::AddPointOfInterestMessage(const char * ini_name, const float ini_x, const float ini_y, const ConnectionMode ini_mode) : Message("AddPointOfInterestMessage")
 {
   data_size = sizeof(AddPointOfInterestMessage_data_t);
   data_ptr  = malloc(data_size);
   memset(data_ptr, 0, data_size);
   data      = (AddPointOfInterestMessage_data_t *)data_ptr;
   data_ts   = (message_data_ts_t *)data_ptr;
-  strncpy(data->id, ini_id, 64);
+  strncpy(data->name, ini_name, 64);
   data->x = ini_x;
   data->y = ini_y;
   data->mode = ini_mode;
@@ -1352,7 +1352,7 @@ NavGraphGeneratorInterface::AddPointOfInterestMessage::AddPointOfInterestMessage
   enum_map_EdgeMode[(int)NO_INTERSECTION] = "NO_INTERSECTION";
   enum_map_EdgeMode[(int)SPLIT_INTERSECTION] = "SPLIT_INTERSECTION";
   enum_map_EdgeMode[(int)FORCE] = "FORCE";
-  add_fieldinfo(IFT_STRING, "id", 64, data->id);
+  add_fieldinfo(IFT_STRING, "name", 64, data->name);
   add_fieldinfo(IFT_FLOAT, "x", 1, &data->x);
   add_fieldinfo(IFT_FLOAT, "y", 1, &data->y);
   add_fieldinfo(IFT_ENUM, "mode", 1, &data->mode, "ConnectionMode", &enum_map_ConnectionMode);
@@ -1376,7 +1376,7 @@ NavGraphGeneratorInterface::AddPointOfInterestMessage::AddPointOfInterestMessage
   enum_map_EdgeMode[(int)NO_INTERSECTION] = "NO_INTERSECTION";
   enum_map_EdgeMode[(int)SPLIT_INTERSECTION] = "SPLIT_INTERSECTION";
   enum_map_EdgeMode[(int)FORCE] = "FORCE";
-  add_fieldinfo(IFT_STRING, "id", 64, data->id);
+  add_fieldinfo(IFT_STRING, "name", 64, data->name);
   add_fieldinfo(IFT_FLOAT, "x", 1, &data->x);
   add_fieldinfo(IFT_FLOAT, "y", 1, &data->y);
   add_fieldinfo(IFT_ENUM, "mode", 1, &data->mode, "ConnectionMode", &enum_map_ConnectionMode);
@@ -1401,38 +1401,38 @@ NavGraphGeneratorInterface::AddPointOfInterestMessage::AddPointOfInterestMessage
 }
 
 /* Methods */
-/** Get id value.
+/** Get name value.
  * 
       ID of the obstacle. Can later be used to remove it again.
     
- * @return id value
+ * @return name value
  */
 char *
-NavGraphGeneratorInterface::AddPointOfInterestMessage::id() const
+NavGraphGeneratorInterface::AddPointOfInterestMessage::name() const
 {
-  return data->id;
+  return data->name;
 }
 
-/** Get maximum length of id value.
- * @return length of id value, can be length of the array or number of 
+/** Get maximum length of name value.
+ * @return length of name value, can be length of the array or number of 
  * maximum number of characters for a string
  */
 size_t
-NavGraphGeneratorInterface::AddPointOfInterestMessage::maxlenof_id() const
+NavGraphGeneratorInterface::AddPointOfInterestMessage::maxlenof_name() const
 {
   return 64;
 }
 
-/** Set id value.
+/** Set name value.
  * 
       ID of the obstacle. Can later be used to remove it again.
     
- * @param new_id new id value
+ * @param new_name new name value
  */
 void
-NavGraphGeneratorInterface::AddPointOfInterestMessage::set_id(const char * new_id)
+NavGraphGeneratorInterface::AddPointOfInterestMessage::set_name(const char * new_name)
 {
-  strncpy(data->id, new_id, sizeof(data->id));
+  strncpy(data->name, new_name, sizeof(data->name));
 }
 
 /** Get x value.
@@ -1547,20 +1547,20 @@ NavGraphGeneratorInterface::AddPointOfInterestMessage::clone() const
 
 
 /** Constructor with initial values.
- * @param ini_id initial value for id
+ * @param ini_name initial value for name
  * @param ini_x initial value for x
  * @param ini_y initial value for y
  * @param ini_ori initial value for ori
  * @param ini_mode initial value for mode
  */
-NavGraphGeneratorInterface::AddPointOfInterestWithOriMessage::AddPointOfInterestWithOriMessage(const char * ini_id, const float ini_x, const float ini_y, const float ini_ori, const ConnectionMode ini_mode) : Message("AddPointOfInterestWithOriMessage")
+NavGraphGeneratorInterface::AddPointOfInterestWithOriMessage::AddPointOfInterestWithOriMessage(const char * ini_name, const float ini_x, const float ini_y, const float ini_ori, const ConnectionMode ini_mode) : Message("AddPointOfInterestWithOriMessage")
 {
   data_size = sizeof(AddPointOfInterestWithOriMessage_data_t);
   data_ptr  = malloc(data_size);
   memset(data_ptr, 0, data_size);
   data      = (AddPointOfInterestWithOriMessage_data_t *)data_ptr;
   data_ts   = (message_data_ts_t *)data_ptr;
-  strncpy(data->id, ini_id, 64);
+  strncpy(data->name, ini_name, 64);
   data->x = ini_x;
   data->y = ini_y;
   data->ori = ini_ori;
@@ -1576,7 +1576,7 @@ NavGraphGeneratorInterface::AddPointOfInterestWithOriMessage::AddPointOfInterest
   enum_map_EdgeMode[(int)NO_INTERSECTION] = "NO_INTERSECTION";
   enum_map_EdgeMode[(int)SPLIT_INTERSECTION] = "SPLIT_INTERSECTION";
   enum_map_EdgeMode[(int)FORCE] = "FORCE";
-  add_fieldinfo(IFT_STRING, "id", 64, data->id);
+  add_fieldinfo(IFT_STRING, "name", 64, data->name);
   add_fieldinfo(IFT_FLOAT, "x", 1, &data->x);
   add_fieldinfo(IFT_FLOAT, "y", 1, &data->y);
   add_fieldinfo(IFT_FLOAT, "ori", 1, &data->ori);
@@ -1601,7 +1601,7 @@ NavGraphGeneratorInterface::AddPointOfInterestWithOriMessage::AddPointOfInterest
   enum_map_EdgeMode[(int)NO_INTERSECTION] = "NO_INTERSECTION";
   enum_map_EdgeMode[(int)SPLIT_INTERSECTION] = "SPLIT_INTERSECTION";
   enum_map_EdgeMode[(int)FORCE] = "FORCE";
-  add_fieldinfo(IFT_STRING, "id", 64, data->id);
+  add_fieldinfo(IFT_STRING, "name", 64, data->name);
   add_fieldinfo(IFT_FLOAT, "x", 1, &data->x);
   add_fieldinfo(IFT_FLOAT, "y", 1, &data->y);
   add_fieldinfo(IFT_FLOAT, "ori", 1, &data->ori);
@@ -1627,38 +1627,38 @@ NavGraphGeneratorInterface::AddPointOfInterestWithOriMessage::AddPointOfInterest
 }
 
 /* Methods */
-/** Get id value.
+/** Get name value.
  * 
       ID of the obstacle. Can later be used to remove it again.
     
- * @return id value
+ * @return name value
  */
 char *
-NavGraphGeneratorInterface::AddPointOfInterestWithOriMessage::id() const
+NavGraphGeneratorInterface::AddPointOfInterestWithOriMessage::name() const
 {
-  return data->id;
+  return data->name;
 }
 
-/** Get maximum length of id value.
- * @return length of id value, can be length of the array or number of 
+/** Get maximum length of name value.
+ * @return length of name value, can be length of the array or number of 
  * maximum number of characters for a string
  */
 size_t
-NavGraphGeneratorInterface::AddPointOfInterestWithOriMessage::maxlenof_id() const
+NavGraphGeneratorInterface::AddPointOfInterestWithOriMessage::maxlenof_name() const
 {
   return 64;
 }
 
-/** Set id value.
+/** Set name value.
  * 
       ID of the obstacle. Can later be used to remove it again.
     
- * @param new_id new id value
+ * @param new_name new name value
  */
 void
-NavGraphGeneratorInterface::AddPointOfInterestWithOriMessage::set_id(const char * new_id)
+NavGraphGeneratorInterface::AddPointOfInterestWithOriMessage::set_name(const char * new_name)
 {
-  strncpy(data->id, new_id, sizeof(data->id));
+  strncpy(data->name, new_name, sizeof(data->name));
 }
 
 /** Get x value.
@@ -1803,18 +1803,18 @@ NavGraphGeneratorInterface::AddPointOfInterestWithOriMessage::clone() const
 
 
 /** Constructor with initial values.
- * @param ini_id initial value for id
+ * @param ini_name initial value for name
  * @param ini_property_name initial value for property_name
  * @param ini_property_value initial value for property_value
  */
-NavGraphGeneratorInterface::SetPointOfInterestPropertyMessage::SetPointOfInterestPropertyMessage(const char * ini_id, const char * ini_property_name, const char * ini_property_value) : Message("SetPointOfInterestPropertyMessage")
+NavGraphGeneratorInterface::SetPointOfInterestPropertyMessage::SetPointOfInterestPropertyMessage(const char * ini_name, const char * ini_property_name, const char * ini_property_value) : Message("SetPointOfInterestPropertyMessage")
 {
   data_size = sizeof(SetPointOfInterestPropertyMessage_data_t);
   data_ptr  = malloc(data_size);
   memset(data_ptr, 0, data_size);
   data      = (SetPointOfInterestPropertyMessage_data_t *)data_ptr;
   data_ts   = (message_data_ts_t *)data_ptr;
-  strncpy(data->id, ini_id, 64);
+  strncpy(data->name, ini_name, 64);
   strncpy(data->property_name, ini_property_name, 64);
   strncpy(data->property_value, ini_property_value, 1024);
   enum_map_ConnectionMode[(int)NOT_CONNECTED] = "NOT_CONNECTED";
@@ -1828,7 +1828,7 @@ NavGraphGeneratorInterface::SetPointOfInterestPropertyMessage::SetPointOfInteres
   enum_map_EdgeMode[(int)NO_INTERSECTION] = "NO_INTERSECTION";
   enum_map_EdgeMode[(int)SPLIT_INTERSECTION] = "SPLIT_INTERSECTION";
   enum_map_EdgeMode[(int)FORCE] = "FORCE";
-  add_fieldinfo(IFT_STRING, "id", 64, data->id);
+  add_fieldinfo(IFT_STRING, "name", 64, data->name);
   add_fieldinfo(IFT_STRING, "property_name", 64, data->property_name);
   add_fieldinfo(IFT_STRING, "property_value", 1024, data->property_value);
 }
@@ -1851,7 +1851,7 @@ NavGraphGeneratorInterface::SetPointOfInterestPropertyMessage::SetPointOfInteres
   enum_map_EdgeMode[(int)NO_INTERSECTION] = "NO_INTERSECTION";
   enum_map_EdgeMode[(int)SPLIT_INTERSECTION] = "SPLIT_INTERSECTION";
   enum_map_EdgeMode[(int)FORCE] = "FORCE";
-  add_fieldinfo(IFT_STRING, "id", 64, data->id);
+  add_fieldinfo(IFT_STRING, "name", 64, data->name);
   add_fieldinfo(IFT_STRING, "property_name", 64, data->property_name);
   add_fieldinfo(IFT_STRING, "property_value", 1024, data->property_value);
 }
@@ -1875,38 +1875,38 @@ NavGraphGeneratorInterface::SetPointOfInterestPropertyMessage::SetPointOfInteres
 }
 
 /* Methods */
-/** Get id value.
+/** Get name value.
  * 
       ID of the point of interest.
     
- * @return id value
+ * @return name value
  */
 char *
-NavGraphGeneratorInterface::SetPointOfInterestPropertyMessage::id() const
+NavGraphGeneratorInterface::SetPointOfInterestPropertyMessage::name() const
 {
-  return data->id;
+  return data->name;
 }
 
-/** Get maximum length of id value.
- * @return length of id value, can be length of the array or number of 
+/** Get maximum length of name value.
+ * @return length of name value, can be length of the array or number of 
  * maximum number of characters for a string
  */
 size_t
-NavGraphGeneratorInterface::SetPointOfInterestPropertyMessage::maxlenof_id() const
+NavGraphGeneratorInterface::SetPointOfInterestPropertyMessage::maxlenof_name() const
 {
   return 64;
 }
 
-/** Set id value.
+/** Set name value.
  * 
       ID of the point of interest.
     
- * @param new_id new id value
+ * @param new_name new name value
  */
 void
-NavGraphGeneratorInterface::SetPointOfInterestPropertyMessage::set_id(const char * new_id)
+NavGraphGeneratorInterface::SetPointOfInterestPropertyMessage::set_name(const char * new_name)
 {
-  strncpy(data->id, new_id, sizeof(data->id));
+  strncpy(data->name, new_name, sizeof(data->name));
 }
 
 /** Get property_name value.
@@ -2471,16 +2471,16 @@ NavGraphGeneratorInterface::SetCopyGraphDefaultPropertiesMessage::clone() const
 
 
 /** Constructor with initial values.
- * @param ini_id initial value for id
+ * @param ini_name initial value for name
  */
-NavGraphGeneratorInterface::RemovePointOfInterestMessage::RemovePointOfInterestMessage(const char * ini_id) : Message("RemovePointOfInterestMessage")
+NavGraphGeneratorInterface::RemovePointOfInterestMessage::RemovePointOfInterestMessage(const char * ini_name) : Message("RemovePointOfInterestMessage")
 {
   data_size = sizeof(RemovePointOfInterestMessage_data_t);
   data_ptr  = malloc(data_size);
   memset(data_ptr, 0, data_size);
   data      = (RemovePointOfInterestMessage_data_t *)data_ptr;
   data_ts   = (message_data_ts_t *)data_ptr;
-  strncpy(data->id, ini_id, 64);
+  strncpy(data->name, ini_name, 64);
   enum_map_ConnectionMode[(int)NOT_CONNECTED] = "NOT_CONNECTED";
   enum_map_ConnectionMode[(int)UNCONNECTED] = "UNCONNECTED";
   enum_map_ConnectionMode[(int)CLOSEST_NODE] = "CLOSEST_NODE";
@@ -2492,7 +2492,7 @@ NavGraphGeneratorInterface::RemovePointOfInterestMessage::RemovePointOfInterestM
   enum_map_EdgeMode[(int)NO_INTERSECTION] = "NO_INTERSECTION";
   enum_map_EdgeMode[(int)SPLIT_INTERSECTION] = "SPLIT_INTERSECTION";
   enum_map_EdgeMode[(int)FORCE] = "FORCE";
-  add_fieldinfo(IFT_STRING, "id", 64, data->id);
+  add_fieldinfo(IFT_STRING, "name", 64, data->name);
 }
 /** Constructor */
 NavGraphGeneratorInterface::RemovePointOfInterestMessage::RemovePointOfInterestMessage() : Message("RemovePointOfInterestMessage")
@@ -2513,7 +2513,7 @@ NavGraphGeneratorInterface::RemovePointOfInterestMessage::RemovePointOfInterestM
   enum_map_EdgeMode[(int)NO_INTERSECTION] = "NO_INTERSECTION";
   enum_map_EdgeMode[(int)SPLIT_INTERSECTION] = "SPLIT_INTERSECTION";
   enum_map_EdgeMode[(int)FORCE] = "FORCE";
-  add_fieldinfo(IFT_STRING, "id", 64, data->id);
+  add_fieldinfo(IFT_STRING, "name", 64, data->name);
 }
 
 /** Destructor */
@@ -2535,38 +2535,38 @@ NavGraphGeneratorInterface::RemovePointOfInterestMessage::RemovePointOfInterestM
 }
 
 /* Methods */
-/** Get id value.
+/** Get name value.
  * 
       ID of the obstacle to remove.
     
- * @return id value
+ * @return name value
  */
 char *
-NavGraphGeneratorInterface::RemovePointOfInterestMessage::id() const
+NavGraphGeneratorInterface::RemovePointOfInterestMessage::name() const
 {
-  return data->id;
+  return data->name;
 }
 
-/** Get maximum length of id value.
- * @return length of id value, can be length of the array or number of 
+/** Get maximum length of name value.
+ * @return length of name value, can be length of the array or number of 
  * maximum number of characters for a string
  */
 size_t
-NavGraphGeneratorInterface::RemovePointOfInterestMessage::maxlenof_id() const
+NavGraphGeneratorInterface::RemovePointOfInterestMessage::maxlenof_name() const
 {
   return 64;
 }
 
-/** Set id value.
+/** Set name value.
  * 
       ID of the obstacle to remove.
     
- * @param new_id new id value
+ * @param new_name new name value
  */
 void
-NavGraphGeneratorInterface::RemovePointOfInterestMessage::set_id(const char * new_id)
+NavGraphGeneratorInterface::RemovePointOfInterestMessage::set_name(const char * new_name)
 {
-  strncpy(data->id, new_id, sizeof(data->id));
+  strncpy(data->name, new_name, sizeof(data->name));
 }
 
 /** Clone this message.
diff --git a/src/plugins/navgraph-generator/interfaces/NavGraphGeneratorInterface.h_ext b/src/plugins/navgraph-generator/interfaces/NavGraphGeneratorInterface.h_ext
index 3f2c668..3d8e428 100644
--- a/src/plugins/navgraph-generator/interfaces/NavGraphGeneratorInterface.h_ext
+++ b/src/plugins/navgraph-generator/interfaces/NavGraphGeneratorInterface.h_ext
@@ -332,7 +332,7 @@ class NavGraphGeneratorInterface : public Interface
     typedef struct {
       int64_t timestamp_sec;  /**< Interface Unix timestamp, seconds */
       int64_t timestamp_usec; /**< Interface Unix timestamp, micro-seconds */
-      char id[64]; /**< 
+      char name[64]; /**< 
       ID of the obstacle. Can later be used to remove it again.
      */
       float x; /**< X coordinate of obstacle in global frame. */
@@ -346,15 +346,15 @@ class NavGraphGeneratorInterface : public Interface
   interface_enum_map_t enum_map_FilterType;
   interface_enum_map_t enum_map_EdgeMode;
    public:
-    AddObstacleMessage(const char * ini_id, const float ini_x, const float ini_y);
+    AddObstacleMessage(const char * ini_name, const float ini_x, const float ini_y);
     AddObstacleMessage();
     ~AddObstacleMessage();
 
     AddObstacleMessage(const AddObstacleMessage *m);
     /* Methods */
-    char * id() const;
-    void set_id(const char * new_id);
-    size_t maxlenof_id() const;
+    char * name() const;
+    void set_name(const char * new_name);
+    size_t maxlenof_name() const;
     float x() const;
     void set_x(const float new_x);
     size_t maxlenof_x() const;
@@ -372,7 +372,7 @@ class NavGraphGeneratorInterface : public Interface
     typedef struct {
       int64_t timestamp_sec;  /**< Interface Unix timestamp, seconds */
       int64_t timestamp_usec; /**< Interface Unix timestamp, micro-seconds */
-      char id[64]; /**< 
+      char name[64]; /**< 
       ID of the obstacle to remove.
      */
     } RemoveObstacleMessage_data_t;
@@ -384,15 +384,15 @@ class NavGraphGeneratorInterface : public Interface
   interface_enum_map_t enum_map_FilterType;
   interface_enum_map_t enum_map_EdgeMode;
    public:
-    RemoveObstacleMessage(const char * ini_id);
+    RemoveObstacleMessage(const char * ini_name);
     RemoveObstacleMessage();
     ~RemoveObstacleMessage();
 
     RemoveObstacleMessage(const RemoveObstacleMessage *m);
     /* Methods */
-    char * id() const;
-    void set_id(const char * new_id);
-    size_t maxlenof_id() const;
+    char * name() const;
+    void set_name(const char * new_name);
+    size_t maxlenof_name() const;
     virtual Message * clone() const;
   };
 
@@ -404,7 +404,7 @@ class NavGraphGeneratorInterface : public Interface
     typedef struct {
       int64_t timestamp_sec;  /**< Interface Unix timestamp, seconds */
       int64_t timestamp_usec; /**< Interface Unix timestamp, micro-seconds */
-      char id[64]; /**< 
+      char name[64]; /**< 
       ID of the obstacle. Can later be used to remove it again.
      */
       float x; /**< X coordinate of obstacle in global frame. */
@@ -421,15 +421,15 @@ class NavGraphGeneratorInterface : public Interface
   interface_enum_map_t enum_map_FilterType;
   interface_enum_map_t enum_map_EdgeMode;
    public:
-    AddPointOfInterestMessage(const char * ini_id, const float ini_x, const float ini_y, const ConnectionMode ini_mode);
+    AddPointOfInterestMessage(const char * ini_name, const float ini_x, const float ini_y, const ConnectionMode ini_mode);
     AddPointOfInterestMessage();
     ~AddPointOfInterestMessage();
 
     AddPointOfInterestMessage(const AddPointOfInterestMessage *m);
     /* Methods */
-    char * id() const;
-    void set_id(const char * new_id);
-    size_t maxlenof_id() const;
+    char * name() const;
+    void set_name(const char * new_name);
+    size_t maxlenof_name() const;
     float x() const;
     void set_x(const float new_x);
     size_t maxlenof_x() const;
@@ -450,7 +450,7 @@ class NavGraphGeneratorInterface : public Interface
     typedef struct {
       int64_t timestamp_sec;  /**< Interface Unix timestamp, seconds */
       int64_t timestamp_usec; /**< Interface Unix timestamp, micro-seconds */
-      char id[64]; /**< 
+      char name[64]; /**< 
       ID of the obstacle. Can later be used to remove it again.
      */
       float x; /**< X coordinate of obstacle in global frame. */
@@ -468,15 +468,15 @@ class NavGraphGeneratorInterface : public Interface
   interface_enum_map_t enum_map_FilterType;
   interface_enum_map_t enum_map_EdgeMode;
    public:
-    AddPointOfInterestWithOriMessage(const char * ini_id, const float ini_x, const float ini_y, const float ini_ori, const ConnectionMode ini_mode);
+    AddPointOfInterestWithOriMessage(const char * ini_name, const float ini_x, const float ini_y, const float ini_ori, const ConnectionMode ini_mode);
     AddPointOfInterestWithOriMessage();
     ~AddPointOfInterestWithOriMessage();
 
     AddPointOfInterestWithOriMessage(const AddPointOfInterestWithOriMessage *m);
     /* Methods */
-    char * id() const;
-    void set_id(const char * new_id);
-    size_t maxlenof_id() const;
+    char * name() const;
+    void set_name(const char * new_name);
+    size_t maxlenof_name() const;
     float x() const;
     void set_x(const float new_x);
     size_t maxlenof_x() const;
@@ -500,7 +500,7 @@ class NavGraphGeneratorInterface : public Interface
     typedef struct {
       int64_t timestamp_sec;  /**< Interface Unix timestamp, seconds */
       int64_t timestamp_usec; /**< Interface Unix timestamp, micro-seconds */
-      char id[64]; /**< 
+      char name[64]; /**< 
       ID of the point of interest.
      */
       char property_name[64]; /**< Name of the property to set. */
@@ -515,15 +515,15 @@ class NavGraphGeneratorInterface : public Interface
   interface_enum_map_t enum_map_FilterType;
   interface_enum_map_t enum_map_EdgeMode;
    public:
-    SetPointOfInterestPropertyMessage(const char * ini_id, const char * ini_property_name, const char * ini_property_value);
+    SetPointOfInterestPropertyMessage(const char * ini_name, const char * ini_property_name, const char * ini_property_value);
     SetPointOfInterestPropertyMessage();
     ~SetPointOfInterestPropertyMessage();
 
     SetPointOfInterestPropertyMessage(const SetPointOfInterestPropertyMessage *m);
     /* Methods */
-    char * id() const;
-    void set_id(const char * new_id);
-    size_t maxlenof_id() const;
+    char * name() const;
+    void set_name(const char * new_name);
+    size_t maxlenof_name() const;
     char * property_name() const;
     void set_property_name(const char * new_property_name);
     size_t maxlenof_property_name() const;
@@ -652,7 +652,7 @@ class NavGraphGeneratorInterface : public Interface
     typedef struct {
       int64_t timestamp_sec;  /**< Interface Unix timestamp, seconds */
       int64_t timestamp_usec; /**< Interface Unix timestamp, micro-seconds */
-      char id[64]; /**< 
+      char name[64]; /**< 
       ID of the obstacle to remove.
      */
     } RemovePointOfInterestMessage_data_t;
@@ -664,15 +664,15 @@ class NavGraphGeneratorInterface : public Interface
   interface_enum_map_t enum_map_FilterType;
   interface_enum_map_t enum_map_EdgeMode;
    public:
-    RemovePointOfInterestMessage(const char * ini_id);
+    RemovePointOfInterestMessage(const char * ini_name);
     RemovePointOfInterestMessage();
     ~RemovePointOfInterestMessage();
 
     RemovePointOfInterestMessage(const RemovePointOfInterestMessage *m);
     /* Methods */
-    char * id() const;
-    void set_id(const char * new_id);
-    size_t maxlenof_id() const;
+    char * name() const;
+    void set_name(const char * new_name);
+    size_t maxlenof_name() const;
     virtual Message * clone() const;
   };
 
diff --git a/src/plugins/navgraph-generator/interfaces/NavGraphGeneratorInterface.tolua b/src/plugins/navgraph-generator/interfaces/NavGraphGeneratorInterface.tolua
index b6ed1c7..7682e04 100644
--- a/src/plugins/navgraph-generator/interfaces/NavGraphGeneratorInterface.tolua
+++ b/src/plugins/navgraph-generator/interfaces/NavGraphGeneratorInterface.tolua
@@ -31,6 +31,23 @@ class NavGraphGeneratorInterface : public Interface
     ClearMessage();
     ~ClearMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   class SetBoundingBoxMessage : public Message
@@ -39,6 +56,23 @@ class NavGraphGeneratorInterface : public Interface
     SetBoundingBoxMessage();
     ~SetBoundingBoxMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float p1_x();
     void set_p1_x(const float new_p1_x);
     int maxlenof_p1_x() const;
@@ -59,6 +93,23 @@ class NavGraphGeneratorInterface : public Interface
     SetFilterMessage();
     ~SetFilterMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     FilterType filter();
     void set_filter(const FilterType new_filter);
     int maxlenof_filter() const;
@@ -73,6 +124,23 @@ class NavGraphGeneratorInterface : public Interface
     SetFilterParamFloatMessage();
     ~SetFilterParamFloatMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     FilterType filter();
     void set_filter(const FilterType new_filter);
     int maxlenof_filter() const;
@@ -90,6 +158,23 @@ class NavGraphGeneratorInterface : public Interface
     AddMapObstaclesMessage();
     ~AddMapObstaclesMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     float max_line_point_distance();
     void set_max_line_point_distance(const float new_max_line_point_distance);
     int maxlenof_max_line_point_distance() const;
@@ -97,13 +182,30 @@ class NavGraphGeneratorInterface : public Interface
 
   class AddObstacleMessage : public Message
   {
-    AddObstacleMessage(char * ini_id, float ini_x, float ini_y);
+    AddObstacleMessage(char * ini_name, float ini_x, float ini_y);
     AddObstacleMessage();
     ~AddObstacleMessage();
 
-    char * id();
-    void set_id(const char * new_id);
-    int maxlenof_id() const;
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
+    char * name();
+    void set_name(const char * new_name);
+    int maxlenof_name() const;
     float x();
     void set_x(const float new_x);
     int maxlenof_x() const;
@@ -114,24 +216,58 @@ class NavGraphGeneratorInterface : public Interface
 
   class RemoveObstacleMessage : public Message
   {
-    RemoveObstacleMessage(char * ini_id);
+    RemoveObstacleMessage(char * ini_name);
     RemoveObstacleMessage();
     ~RemoveObstacleMessage();
 
-    char * id();
-    void set_id(const char * new_id);
-    int maxlenof_id() const;
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
+    char * name();
+    void set_name(const char * new_name);
+    int maxlenof_name() const;
   };
 
   class AddPointOfInterestMessage : public Message
   {
-    AddPointOfInterestMessage(char * ini_id, float ini_x, float ini_y, ConnectionMode ini_mode);
+    AddPointOfInterestMessage(char * ini_name, float ini_x, float ini_y, ConnectionMode ini_mode);
     AddPointOfInterestMessage();
     ~AddPointOfInterestMessage();
 
-    char * id();
-    void set_id(const char * new_id);
-    int maxlenof_id() const;
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
+    char * name();
+    void set_name(const char * new_name);
+    int maxlenof_name() const;
     float x();
     void set_x(const float new_x);
     int maxlenof_x() const;
@@ -145,13 +281,30 @@ class NavGraphGeneratorInterface : public Interface
 
   class AddPointOfInterestWithOriMessage : public Message
   {
-    AddPointOfInterestWithOriMessage(char * ini_id, float ini_x, float ini_y, float ini_ori, ConnectionMode ini_mode);
+    AddPointOfInterestWithOriMessage(char * ini_name, float ini_x, float ini_y, float ini_ori, ConnectionMode ini_mode);
     AddPointOfInterestWithOriMessage();
     ~AddPointOfInterestWithOriMessage();
 
-    char * id();
-    void set_id(const char * new_id);
-    int maxlenof_id() const;
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
+    char * name();
+    void set_name(const char * new_name);
+    int maxlenof_name() const;
     float x();
     void set_x(const float new_x);
     int maxlenof_x() const;
@@ -168,13 +321,30 @@ class NavGraphGeneratorInterface : public Interface
 
   class SetPointOfInterestPropertyMessage : public Message
   {
-    SetPointOfInterestPropertyMessage(char * ini_id, char * ini_property_name, char * ini_property_value);
+    SetPointOfInterestPropertyMessage(char * ini_name, char * ini_property_name, char * ini_property_value);
     SetPointOfInterestPropertyMessage();
     ~SetPointOfInterestPropertyMessage();
 
-    char * id();
-    void set_id(const char * new_id);
-    int maxlenof_id() const;
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
+    char * name();
+    void set_name(const char * new_name);
+    int maxlenof_name() const;
     char * property_name();
     void set_property_name(const char * new_property_name);
     int maxlenof_property_name() const;
@@ -189,6 +359,23 @@ class NavGraphGeneratorInterface : public Interface
     AddEdgeMessage();
     ~AddEdgeMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * p1();
     void set_p1(const char * new_p1);
     int maxlenof_p1() const;
@@ -209,6 +396,23 @@ class NavGraphGeneratorInterface : public Interface
     SetGraphDefaultPropertyMessage();
     ~SetGraphDefaultPropertyMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * property_name();
     void set_property_name(const char * new_property_name);
     int maxlenof_property_name() const;
@@ -223,6 +427,23 @@ class NavGraphGeneratorInterface : public Interface
     SetCopyGraphDefaultPropertiesMessage();
     ~SetCopyGraphDefaultPropertiesMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     bool is_enable_copy();
     void set_enable_copy(const bool new_enable_copy);
     int maxlenof_enable_copy() const;
@@ -230,13 +451,30 @@ class NavGraphGeneratorInterface : public Interface
 
   class RemovePointOfInterestMessage : public Message
   {
-    RemovePointOfInterestMessage(char * ini_id);
+    RemovePointOfInterestMessage(char * ini_name);
     RemovePointOfInterestMessage();
     ~RemovePointOfInterestMessage();
 
-    char * id();
-    void set_id(const char * new_id);
-    int maxlenof_id() const;
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
+    char * name();
+    void set_name(const char * new_name);
+    int maxlenof_name() const;
   };
 
   class ComputeMessage : public Message
@@ -244,6 +482,23 @@ class NavGraphGeneratorInterface : public Interface
     ComputeMessage();
     ~ComputeMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
   };
 
   unsigned int msgid();
@@ -266,7 +521,7 @@ class NavGraphGeneratorInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -285,10 +540,18 @@ class NavGraphGeneratorInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.NavGraphGeneratorInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.NavGraphGeneratorInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/plugins/navgraph-generator/interfaces/NavGraphGeneratorInterface.xml b/src/plugins/navgraph-generator/interfaces/NavGraphGeneratorInterface.xml
index 84310e9..4181995 100644
--- a/src/plugins/navgraph-generator/interfaces/NavGraphGeneratorInterface.xml
+++ b/src/plugins/navgraph-generator/interfaces/NavGraphGeneratorInterface.xml
@@ -158,7 +158,7 @@
       given as a centroid in X-Y ground-support plane of global frame,
       typical /map frame.
     </comment>
-    <field type="string" name="id" length="64">
+    <field type="string" name="name" length="64">
       ID of the obstacle. Can later be used to remove it again.
     </field>
     <field type="float" name="x">X coordinate of obstacle in global frame.</field>
@@ -166,7 +166,7 @@
   </message>
   <message name="RemoveObstacle">
     <comment></comment>
-    <field type="string" name="id" length="64">
+    <field type="string" name="name" length="64">
       ID of the obstacle to remove.
     </field>    
   </message>
@@ -176,7 +176,7 @@
       given as a centroid in X-Y ground-support plane of global frame,
       typical /map frame.
     </comment>
-    <field type="string" name="id" length="64">
+    <field type="string" name="name" length="64">
       ID of the obstacle. Can later be used to remove it again.
     </field>
     <field type="float" name="x">X coordinate of obstacle in global frame.</field>
@@ -192,7 +192,7 @@
       typical /map frame. This form also accepts a desired target
       orientation for the point.
     </comment>
-    <field type="string" name="id" length="64">
+    <field type="string" name="name" length="64">
       ID of the obstacle. Can later be used to remove it again.
     </field>
     <field type="float" name="x">X coordinate of obstacle in global frame.</field>
@@ -206,7 +206,7 @@
     <comment>
       Set a property for an already added point of interest.
     </comment>
-    <field type="string" name="id" length="64">
+    <field type="string" name="name" length="64">
       ID of the point of interest.
     </field>
     <field type="string" name="property_name" length="64">Name of the property to set.</field>
@@ -246,7 +246,7 @@
   </message>
   <message name="RemovePointOfInterest">
     <comment>Remove a specific point of interest.</comment>
-    <field type="string" name="id" length="64">
+    <field type="string" name="name" length="64">
       ID of the obstacle to remove.
     </field>    
   </message>
diff --git a/src/plugins/navgraph-generator/navgraph_generator_thread.cpp b/src/plugins/navgraph-generator/navgraph_generator_thread.cpp
index 00c0e12..08f2261 100644
--- a/src/plugins/navgraph-generator/navgraph_generator_thread.cpp
+++ b/src/plugins/navgraph-generator/navgraph_generator_thread.cpp
@@ -348,7 +348,7 @@ NavGraphGeneratorThread::bb_interface_message_received(Interface *interface,
     NavGraphGeneratorInterface::AddObstacleMessage *msg =
       message->as_type<NavGraphGeneratorInterface::AddObstacleMessage>();
     if (std::isfinite(msg->x()) && std::isfinite(msg->x())) {
-      obstacles_[msg->id()] = cart_coord_2d_t(msg->x(), msg->y());
+      obstacles_[msg->name()] = cart_coord_2d_t(msg->x(), msg->y());
     } else {
       logger->log_error(name(), "Received non-finite obstacle (%.2f,%.2f), ignoring",
 			msg->x(), msg->y());
@@ -357,7 +357,7 @@ NavGraphGeneratorThread::bb_interface_message_received(Interface *interface,
     NavGraphGeneratorInterface::RemoveObstacleMessage *msg =
       message->as_type<NavGraphGeneratorInterface::RemoveObstacleMessage>();
     ObstacleMap::iterator f;
-    if ((f = obstacles_.find(msg->id())) != obstacles_.end()) {
+    if ((f = obstacles_.find(msg->name())) != obstacles_.end()) {
       obstacles_.erase(f);
     }
 
@@ -368,7 +368,7 @@ NavGraphGeneratorThread::bb_interface_message_received(Interface *interface,
       PointOfInterest poi;
       poi.position  = cart_coord_2d_t(msg->x(), msg->y());
       poi.conn_mode = msg->mode();
-      pois_[msg->id()] = poi;
+      pois_[msg->name()] = poi;
     } else {
       logger->log_error(name(), "Received non-finite POI (%.2f,%.2f), ignoring",
 			msg->x(), msg->y());
@@ -398,7 +398,7 @@ NavGraphGeneratorThread::bb_interface_message_received(Interface *interface,
 	logger->log_warn(name(), "Received POI with non-finite ori %f, ignoring ori",
 			 msg->ori());
       }
-      pois_[msg->id()] = poi;
+      pois_[msg->name()] = poi;
     } else {
       logger->log_error(name(), "Received non-finite POI (%.2f,%.2f), ignoring ori",
 			msg->x(), msg->y());
@@ -408,7 +408,7 @@ NavGraphGeneratorThread::bb_interface_message_received(Interface *interface,
     NavGraphGeneratorInterface::RemovePointOfInterestMessage *msg =
       message->as_type<NavGraphGeneratorInterface::RemovePointOfInterestMessage>();
     PoiMap::iterator f;
-    if ((f = pois_.find(msg->id())) != pois_.end()) {
+    if ((f = pois_.find(msg->name())) != pois_.end()) {
       pois_.erase(f);
     }
 
@@ -416,11 +416,11 @@ NavGraphGeneratorThread::bb_interface_message_received(Interface *interface,
     NavGraphGeneratorInterface::SetPointOfInterestPropertyMessage *msg =
       message->as_type<NavGraphGeneratorInterface::SetPointOfInterestPropertyMessage>();
     PoiMap::iterator f;
-    if ((f = pois_.find(msg->id())) != pois_.end()) {
+    if ((f = pois_.find(msg->name())) != pois_.end()) {
       f->second.properties[msg->property_name()] = msg->property_value();
     } else {
       logger->log_warn(name(), "POI %s unknown, cannot set property %s=%s",
-		       msg->id(), msg->property_name(), msg->property_value());
+		       msg->name(), msg->property_name(), msg->property_value());
     }
 
   } else if (message->is_of_type<NavGraphGeneratorInterface::SetGraphDefaultPropertyMessage>()) {

- *commit* ccb40242cb9fd0c3bf0b4d394bd2dfaecb86f167 - - - - - - - - - -
Author:  Tim Niemueller <niemueller at kbsg.rwth-aachen.de>
Date:    Thu Jan 14 23:16:53 2016 +0100
Subject: pcl-db: re-generate interfaces with new ffifacegen

 .../interfaces/PclDatabaseMergeInterface.tolua     |   29 ++++++++++++++++++-
 .../interfaces/PclDatabaseRetrieveInterface.tolua  |   29 ++++++++++++++++++-
 .../interfaces/PclDatabaseStoreInterface.tolua     |   29 ++++++++++++++++++-
 3 files changed, 81 insertions(+), 6 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/perception/pcl-db/interfaces/PclDatabaseMergeInterface.tolua b/src/plugins/perception/pcl-db/interfaces/PclDatabaseMergeInterface.tolua
index 0bd6be6..a919539 100644
--- a/src/plugins/perception/pcl-db/interfaces/PclDatabaseMergeInterface.tolua
+++ b/src/plugins/perception/pcl-db/interfaces/PclDatabaseMergeInterface.tolua
@@ -12,6 +12,23 @@ class PclDatabaseMergeInterface : public Interface
     MergeMessage();
     ~MergeMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     long timestamps(int index);
     void set_timestamps(unsigned int index, const long new_timestamps);
     int maxlenof_timestamps() const;
@@ -46,7 +63,7 @@ class PclDatabaseMergeInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -65,10 +82,18 @@ class PclDatabaseMergeInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.PclDatabaseMergeInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.PclDatabaseMergeInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/plugins/perception/pcl-db/interfaces/PclDatabaseRetrieveInterface.tolua b/src/plugins/perception/pcl-db/interfaces/PclDatabaseRetrieveInterface.tolua
index f9ebf2d..a92145d 100644
--- a/src/plugins/perception/pcl-db/interfaces/PclDatabaseRetrieveInterface.tolua
+++ b/src/plugins/perception/pcl-db/interfaces/PclDatabaseRetrieveInterface.tolua
@@ -12,6 +12,23 @@ class PclDatabaseRetrieveInterface : public Interface
     RetrieveMessage();
     ~RetrieveMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     long timestamp();
     void set_timestamp(const long new_timestamp);
     int maxlenof_timestamp() const;
@@ -52,7 +69,7 @@ class PclDatabaseRetrieveInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -71,10 +88,18 @@ class PclDatabaseRetrieveInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.PclDatabaseRetrieveInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.PclDatabaseRetrieveInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }
diff --git a/src/plugins/perception/pcl-db/interfaces/PclDatabaseStoreInterface.tolua b/src/plugins/perception/pcl-db/interfaces/PclDatabaseStoreInterface.tolua
index 9f55d2a..52f1b71 100644
--- a/src/plugins/perception/pcl-db/interfaces/PclDatabaseStoreInterface.tolua
+++ b/src/plugins/perception/pcl-db/interfaces/PclDatabaseStoreInterface.tolua
@@ -12,6 +12,23 @@ class PclDatabaseStoreInterface : public Interface
     StoreMessage();
     ~StoreMessage();
 
+    unsigned int      id() const;
+
+    unsigned int      sender_id() const;
+    const char *      sender_thread_name() const;
+    Interface *       interface() const;
+    const char *      type() const;
+
+    const void *      datachunk() const;
+    unsigned int      datasize() const;
+
+    void              set_from_chunk(const void *chunk);
+
+    /* from RefCount */
+    void              ref();
+    void              unref();
+    unsigned int      refcount();
+
     char * pcl_id();
     void set_pcl_id(const char * new_pcl_id);
     int maxlenof_pcl_id() const;
@@ -46,7 +63,7 @@ class PclDatabaseStoreInterface : public Interface
   const char *            hash_printable() const;
   bool                    is_writer() const;
   void                    set_from_chunk(void *chunk);
-  virtual Message *   create_message(const char *type) const = 0;
+  virtual fawkes::Message *  create_message @ create_message_generic(const char *type) const;
   void          read();
   void          write();
   bool          has_writer() const;
@@ -65,10 +82,18 @@ class PclDatabaseStoreInterface : public Interface
   bool          msgq_try_lock();
   void          msgq_unlock();
   void          msgq_pop();
-  Message *     msgq_first();
+  fawkes::Message * msgq_first @ msgq_first_generic();
   bool          msgq_empty();
 
 
 };
 
+
+$[
+
+fawkes.PclDatabaseStoreInterface.msgq_first     = fawkes.Interface.msgq_first
+fawkes.PclDatabaseStoreInterface.create_message = fawkes.Interface.create_message
+
+$]
+
 }




-- 
Fawkes Robotics Framework                 http://www.fawkesrobotics.org


More information about the fawkes-commits mailing list