Patrick Williams | 5302a46 | 2016-10-18 11:11:51 -0500 | [diff] [blame] | 1 | <% |
| 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': |
| 54 | void ${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 | |
| 64 | namespace details |
| 65 | { |
| 66 | namespace ${interface_name()} |
| 67 | { |
| 68 | static 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 |