Skip to content

Commit 122b738

Browse files
authored
Service introspection (#178)
* add service event message support Signed-off-by: Brian Chen <[email protected]> Signed-off-by: Brian Chen <[email protected]>
1 parent 9017e66 commit 122b738

File tree

6 files changed

+82
-1
lines changed

6 files changed

+82
-1
lines changed

rosidl_generator_py/resource/_idl_support.c.em

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ TEMPLATE(
5050
package_name=package_name, interface_path=interface_path,
5151
message=service.response_message, include_directives=include_directives)
5252
}@
53+
54+
@{
55+
TEMPLATE(
56+
'_msg_support.c.em',
57+
package_name=package_name, interface_path=interface_path,
58+
message=service.event_message, include_directives=include_directives)
59+
}@
5360
@[end for]@
5461
@
5562
@#######################################################################
@@ -97,6 +104,14 @@ TEMPLATE(
97104
include_directives=include_directives)
98105
}@
99106

107+
@{
108+
TEMPLATE(
109+
'_msg_support.c.em',
110+
package_name=package_name, interface_path=interface_path,
111+
message=action.send_goal_service.event_message,
112+
include_directives=include_directives)
113+
}@
114+
100115
@{
101116
TEMPLATE(
102117
'_msg_support.c.em',
@@ -113,6 +128,14 @@ TEMPLATE(
113128
include_directives=include_directives)
114129
}@
115130

131+
@{
132+
TEMPLATE(
133+
'_msg_support.c.em',
134+
package_name=package_name, interface_path=interface_path,
135+
message=action.get_result_service.event_message,
136+
include_directives=include_directives)
137+
}@
138+
116139
@{
117140
TEMPLATE(
118141
'_msg_support.c.em',

rosidl_generator_py/resource/_msg.py.em

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ from rosidl_parser.definition import AbstractWString
1313
from rosidl_parser.definition import ACTION_FEEDBACK_SUFFIX
1414
from rosidl_parser.definition import ACTION_GOAL_SUFFIX
1515
from rosidl_parser.definition import ACTION_RESULT_SUFFIX
16+
from rosidl_parser.definition import SERVICE_EVENT_MESSAGE_SUFFIX
17+
from rosidl_parser.definition import SERVICE_REQUEST_MESSAGE_SUFFIX
18+
from rosidl_parser.definition import SERVICE_RESPONSE_MESSAGE_SUFFIX
1619
from rosidl_parser.definition import Array
1720
from rosidl_parser.definition import BasicType
1821
from rosidl_parser.definition import BOOLEAN_TYPE
@@ -129,6 +132,11 @@ for member in message.structure.members:
129132
if isinstance(type_, AbstractNestedType):
130133
type_ = type_.value_type
131134
if isinstance(type_, NamespacedType):
135+
if (
136+
type_.name.endswith(SERVICE_RESPONSE_MESSAGE_SUFFIX) or
137+
type_.name.endswith(SERVICE_REQUEST_MESSAGE_SUFFIX)
138+
):
139+
continue
132140
if (
133141
type_.name.endswith(ACTION_GOAL_SUFFIX) or
134142
type_.name.endswith(ACTION_RESULT_SUFFIX) or

rosidl_generator_py/resource/_msg_support.c.em

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ from rosidl_parser.definition import Array
1111
from rosidl_parser.definition import BasicType
1212
from rosidl_parser.definition import EMPTY_STRUCTURE_REQUIRED_MEMBER_NAME
1313
from rosidl_parser.definition import NamespacedType
14+
from rosidl_parser.definition import SERVICE_RESPONSE_MESSAGE_SUFFIX
15+
from rosidl_parser.definition import SERVICE_REQUEST_MESSAGE_SUFFIX
1416

1517

1618
def primitive_msg_type_to_c(type_):
@@ -119,7 +121,10 @@ if isinstance(member.type, AbstractNestedType) and isinstance(member.type.value_
119121
nested_header = '/'.join(type_[:-1] + ('detail', convert_camel_case_to_lower_case_underscore(type_[-1]),))
120122
nested_header += '__functions.h'
121123
}@
122-
@[ if nested_header in include_directives]@
124+
@[ if type_[-1].endswith(SERVICE_REQUEST_MESSAGE_SUFFIX) or type_[-1].endswith(SERVICE_RESPONSE_MESSAGE_SUFFIX)]
125+
@# Service request/response messages are included in the srv__struct
126+
@[continue]
127+
@[ elif nested_header in include_directives]@
123128
// already included above
124129
// @
125130
@[ else]@

rosidl_generator_py/resource/_srv.py.em

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ TEMPLATE(
1313
'_msg.py.em',
1414
package_name=package_name, interface_path=interface_path,
1515
message=service.response_message, import_statements=import_statements)
16+
TEMPLATE(
17+
'_msg.py.em',
18+
package_name=package_name, interface_path=interface_path,
19+
message=service.event_message, import_statements=import_statements)
1620
}@
1721

1822

@@ -42,11 +46,14 @@ class Metaclass_@(service.namespaced_type.name)(type):
4246
@(module_name).Metaclass_@(service.request_message.structure.namespaced_type.name).__import_type_support__()
4347
if @(module_name).Metaclass_@(service.response_message.structure.namespaced_type.name)._TYPE_SUPPORT is None:
4448
@(module_name).Metaclass_@(service.response_message.structure.namespaced_type.name).__import_type_support__()
49+
if @(module_name).Metaclass_@(service.event_message.structure.namespaced_type.name)._TYPE_SUPPORT is None:
50+
@(module_name).Metaclass_@(service.event_message.structure.namespaced_type.name).__import_type_support__()
4551

4652

4753
class @(service.namespaced_type.name)(metaclass=Metaclass_@(service.namespaced_type.name)):
4854
from @('.'.join(service.namespaced_type.namespaces)).@(module_name) import @(service.request_message.structure.namespaced_type.name) as Request
4955
from @('.'.join(service.namespaced_type.namespaces)).@(module_name) import @(service.response_message.structure.namespaced_type.name) as Response
56+
from @('.'.join(service.namespaced_type.namespaces)).@(module_name) import @(service.event_message.structure.namespaced_type.name) as Event
5057

5158
def __init__(self):
5259
raise NotImplementedError('Service classes can not be instantiated')

rosidl_generator_py/resource/_srv_pkg_typesupport_entry_point.c.em

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,15 @@ TEMPLATE(
1616
include_directives=include_directives,
1717
register_functions=register_functions)
1818
}@
19+
20+
@{
21+
TEMPLATE(
22+
'_msg_pkg_typesupport_entry_point.c.em',
23+
package_name=package_name, idl_type=idl_type,
24+
message=service.event_message, typesupport_impl=typesupport_impl,
25+
include_directives=include_directives,
26+
register_functions=register_functions)
27+
}@
1928
@
2029
@{
2130
from rosidl_pycommon import convert_camel_case_to_lower_case_underscore

rosidl_generator_py/rosidl_generator_py/generate_py_impl.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,35 @@ def print_warning_if_reserved_keyword(member_name, interface_type, interface_nam
131131
f.write(
132132
f'from {package_name}.{subfolder}.{module_name} import '
133133
f'{idl_stem} # noqa: F401\n')
134+
if subfolder == 'srv':
135+
f.write(
136+
f'from {package_name}.{subfolder}.{module_name} import '
137+
f'{idl_stem}_Event # noqa: F401\n')
138+
f.write(
139+
f'from {package_name}.{subfolder}.{module_name} import '
140+
f'{idl_stem}_Request # noqa: F401\n')
141+
f.write(
142+
f'from {package_name}.{subfolder}.{module_name} import '
143+
f'{idl_stem}_Response # noqa: F401\n')
144+
elif subfolder == 'action':
145+
f.write(
146+
f'from {package_name}.{subfolder}.{module_name} import '
147+
f'{idl_stem}_GetResult_Event # noqa: F401\n')
148+
f.write(
149+
f'from {package_name}.{subfolder}.{module_name} import '
150+
f'{idl_stem}_GetResult_Request # noqa: F401\n')
151+
f.write(
152+
f'from {package_name}.{subfolder}.{module_name} import '
153+
f'{idl_stem}_GetResult_Response # noqa: F401\n')
154+
f.write(
155+
f'from {package_name}.{subfolder}.{module_name} import '
156+
f'{idl_stem}_SendGoal_Event # noqa: F401\n')
157+
f.write(
158+
f'from {package_name}.{subfolder}.{module_name} import '
159+
f'{idl_stem}_SendGoal_Request # noqa: F401\n')
160+
f.write(
161+
f'from {package_name}.{subfolder}.{module_name} import '
162+
f'{idl_stem}_SendGoal_Response # noqa: F401\n')
134163

135164
# expand templates per available typesupport implementation
136165
template_dir = args['template_dir']

0 commit comments

Comments
 (0)