Skip to content

Commit 401a71e

Browse files
committed
Merge pull request #1 from ros2/request_reply
Added support for services and clients
2 parents e392cc9 + 058fa57 commit 401a71e

3 files changed

Lines changed: 57 additions & 1 deletion

File tree

ros_middleware_interface/include/ros_middleware_interface/functions.h

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,19 @@
22
#define __ros_middleware_interface__functions__h__
33

44
#include "rosidl_generator_cpp/MessageTypeSupport.h"
5+
#include "rosidl_generator_cpp/ServiceTypeSupport.h"
56

67
#include "handles.h"
78

89
namespace ros_middleware_interface
910
{
1011

12+
typedef enum
13+
{
14+
ROS2_RETCODE_OK = 0,
15+
ROS2_RETCODE_ERROR = 1,
16+
} ROS2_RETCODE_t;
17+
1118
void init();
1219

1320
NodeHandle create_node();
@@ -27,8 +34,21 @@ GuardConditionHandle create_guard_condition();
2734

2835
void trigger_guard_condition(const GuardConditionHandle& guard_condition_handle);
2936

30-
void wait(SubscriberHandles& subscriber_handles, GuardConditionHandles& guard_condition_handles, bool non_blocking);
37+
void wait(SubscriberHandles& subscriber_handles, GuardConditionHandles& guard_condition_handles, ServiceHandles& service_handles, ClientHandles& client_handles, bool non_blocking);
38+
39+
ClientHandle create_client(const NodeHandle& node_handle, const rosidl_generator_cpp::ServiceTypeSupportHandle & service_type_support_handle, const char * service_name);
40+
41+
int64_t send_request(const ClientHandle& client_handle, const void * ros_request);
42+
43+
ROS2_RETCODE_t receive_response(const ClientHandle& client_handle, void * ros_response);
44+
45+
bool take_response(const ClientHandle& client_handle, void * ros_response, void * ros_request_header);
46+
47+
ServiceHandle create_service(const NodeHandle& node_handle, const rosidl_generator_cpp::ServiceTypeSupportHandle & service_type_support_handle, const char * service_name);
48+
49+
bool take_request(const ServiceHandle& service_handle, void * ros_request, void * ros_request_header);
3150

51+
void send_response(const ServiceHandle& service_handle, void * ros_request_header, void * ros_response);
3252
}
3353

3454
#endif // __ros_middleware_interface__functions__h__

ros_middleware_interface/include/ros_middleware_interface/handles.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,26 @@ typedef struct GuardConditionHandles {
3434
void * * guard_conditions_;
3535
} GuardConditionHandles;
3636

37+
typedef struct ClientHandle {
38+
const char * implementation_identifier_;
39+
void * data_;
40+
} ClientHandle;
41+
42+
typedef struct ClientHandles {
43+
unsigned long client_count_;
44+
void * * clients_;
45+
} ClientHandles;
46+
47+
typedef struct ServiceHandle {
48+
const char * implementation_identifier_;
49+
void * data_;
50+
} ServiceHandle;
51+
52+
typedef struct ServiceHandles {
53+
unsigned long service_count_;
54+
void * * services_;
55+
} ServiceHandles;
56+
3757
}
3858

3959
#endif // __ros_middleware_interface__handles__h__
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#ifndef __ros_middleware_interface__rpc__h__
2+
#define __ros_middleware_interface__rpc__h__
3+
4+
#include <cstdint>
5+
6+
namespace ros_middleware_interface
7+
{
8+
9+
typedef struct RequestId {
10+
int8_t writer_guid[16];
11+
int64_t sequence_number;
12+
} RequestId;
13+
14+
}
15+
16+
#endif // __ros_middleware_interface__rpc__h__

0 commit comments

Comments
 (0)