blob: 8dfaf816542f80e63a820472414ee6f7341cc20c [file] [log] [blame]
Patrick Williams5302a462016-10-18 11:11:51 -05001<%
2 def parameters(defaultValue=False):
3 return ",\n ".\
4 join([ parameter(p, defaultValue) for p in signal.properties ])
5
6 def parameter(p, defaultValue=False):
7 r = "%s %s" % (p.typeName, p.camelCase)
8 if defaultValue:
9 r += default_value(p)
10 return r
11
12 def parameters_as_list():
13 return ", ".join([ p.camelCase for p in signal.properties ])
14
15 def parameters_types_as_list():
16 return ", ".join([ p.typeName for p in signal.properties ])
17
18 def default_value(p):
19 if p.defaultValue != None:
20 return " = " + str(p.defaultValue)
21 else:
22 return ""
23
24 def interface_name():
25 return interface.name.split('.').pop()
26%>
27###
28### Emit 'header'
29###
30 % if ptype == 'header':
31 /** @brief Send signal '${signal.name}'
32 *
33 * ${ signal.description.strip() }
34 % if len(signal.properties) != 0:
35 *
36 % for p in signal.properties:
37 * @param[in] ${p.camelCase} - ${p.description.strip()}
38 % endfor
39 % endif
40 */
41 void ${ signal.camelCase }(
42 ${ parameters(True) });
43###
44### Emit 'vtable'
45###
46 % elif ptype == 'vtable':
47 vtable::signal("${signal.name}",
48 details::${interface_name()}::_signal_${signal.CamelCase }
49 .data()),
50###
51### Emit 'callback-cpp'
52###
53 % elif ptype == 'callback-cpp':
54void ${interface_name()}::${ signal.camelCase }(
55 ${ parameters() })
56{
57 auto& i = _${"_".join(interface.name.split('.'))}_interface;
58 auto m = i.new_signal("${ signal.name }");
59
60 m.append(${ parameters_as_list() });
61 m.signal_send();
62}
63
64namespace details
65{
66namespace ${interface_name()}
67{
68static const auto _signal_${ signal.CamelCase } =
69 % if len(signal.properties) == 0:
70 utility::tuple_to_array(std::make_tuple('\0'));
71 % else:
72 utility::tuple_to_array(message::types::type_id<
73 ${ parameters_types_as_list() }>());
74 % endif
75}
76}
77 % endif