nano-client API Reference
nano_client.h
Go to the documentation of this file.
1 /******************************************************************************
2  *
3  * (c) 2020 Copyright, Real-Time Innovations, Inc. (RTI)
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  ******************************************************************************/
17 
27 #ifndef nano_client_h
28 #define nano_client_h
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
35 
36 /******************************************************************************
37  * Client (forward)
38  ******************************************************************************/
39 
40 /*e
41  * @ingroup nano_api_client
42  * @brief An object used to establish a session on a remote XRCE Agent and access
43  * its services.
44  *
45  * A NANO_XRCE_Client encapsulate all the state required by an application to
46  * communicate with an XRCE Agent, and operate on the XRCE Objects it contains.
47  *
48  */
49 typedef struct NANODllExport NANO_XRCE_ClientI NANO_XRCE_Client;
50 
51 /*i
52  * @brief A token object representing an XRCE request sent to the Agent.
53  *
54  */
55 typedef struct NANODllExport NANO_XRCE_ClientRequestI NANO_XRCE_ClientRequest;
56 
57 #if NANO_FEAT_SUBSCRIBE ||\
58  NANO_FEAT_PUBLISH ||\
59  NANO_FEAT_AGENT_DISCOVERY ||\
60  NANO_FEAT_OBJECT_INFO ||\
61  NANO_FEAT_RELIABILITY
62 #define NANO_HAVE_CLIENT_LISTENER
63 #else
64 #undef NANO_HAVE_CLIENT_LISTENER
65 #endif
66 
67 #ifdef NANO_HAVE_CLIENT_LISTENER
68 /******************************************************************************
69  * ClientListener
70  ******************************************************************************/
75 /*e
76  * @brief A listener object which will be notified of events occuring on a
77  * NANO_XRCE_Client.
78  *
79  *
80  */
81 typedef struct NANODllExport NANO_XRCE_ClientListenerI NANO_XRCE_ClientListener;
82 
83 #if NANO_FEAT_SUBSCRIBE
84 /*e
85  * @brief TODO
86  *
87  * @param self
88  * @param client
89  * @param stream_id
90  * @param read_request
91  * @param reader
92  * @param format
93  * @param little_endian
94  * @param data
95  * @param data_len
96  */
98  NANO_XRCE_ClientListener *const self,
99  NANO_XRCE_Client *const client,
100  const NANO_XRCE_StreamId stream_id,
101  const NANO_XRCE_RequestId *const read_request,
102  const NANO_XRCE_ObjectId *const reader,
103  const NANO_XRCE_DataFormat format,
104  const NANO_CDR_Endianness endianness,
105  const NANO_u8 *const data,
106  const NANO_usize data_len);
107 #endif /* NANO_FEAT_SUBSCRIBE */
108 
109 #if NANO_FEAT_RELIABILITY
110 #if NANO_FEAT_PUBLISH
111 /*e
112  * @brief TODO
113  *
114  * @param self
115  * @param client
116  * @param write_req
117  */
119  NANO_XRCE_ClientListener *const self,
120  NANO_XRCE_Client *const client,
121  const NANO_XRCE_ClientRequest *const write_req);
122 #endif /* NANO_FEAT_PUBLISH */
123 
124 /*e
125  * @brief TODO
126  *
127  * @param self
128  * @param client
129  * @param stream_id
130  * @param lost
131  * @param reason
132  */
133 typedef void
135  NANO_XRCE_ClientListener *const self,
136  NANO_XRCE_Client *const client,
137  const NANO_XRCE_StreamId stream_id,
138  const NANO_XRCE_SeqNum lost,
140 
141 #endif /* NANO_FEAT_RELIABILITY */
142 
143 #if NANO_FEAT_OBJECT_INFO
144 /*e
145  * @brief TODO
146  *
147  * @param self
148  * @param client
149  * @param info
150  */
151 typedef void
153  NANO_XRCE_ClientListener *const self,
154  NANO_XRCE_Client *const client,
155  const NANO_XRCE_ObjectInfo *const info);
156 #endif /* NANO_FEAT_OBJECT_INFO */
157 
158 #if NANO_FEAT_AGENT_DISCOVERY
159 /*e
160  * @brief TODO
161  *
162  * @param self
163  * @param client
164  * @param agent_locator
165  * @param select
166  */
167 typedef void
169  NANO_XRCE_ClientListener *const self,
170  NANO_XRCE_Client *const client,
171  const NANO_XRCE_TransportLocator *const agent_locator,
172  NANO_bool *const select);
173 #endif /* NANO_FEAT_AGENT_DISCOVERY */
174 
175 /*e
176  * @brief TODO
177  *
178  */
180 {
181 #if NANO_FEAT_SUBSCRIBE
182  /*e
183  * @brief TODO
184  *
185  */
187 #endif /* NANO_FEAT_SUBSCRIBE */
188 #if NANO_FEAT_RELIABILITY
189 #if NANO_FEAT_PUBLISH
190  /*e
191  * @brief TODO
192  *
193  */
195 #endif /* NANO_FEAT_PUBLISH */
196  /*e
197  * @brief TODO
198  *
199  */
201 #endif /* NANO_FEAT_RELIABILITY */
202 #if NANO_FEAT_OBJECT_INFO
203  /*e
204  * @brief TODO
205  *
206  */
208 #endif /* NANO_FEAT_OBJECT_INFO */
209 #if NANO_FEAT_AGENT_DISCOVERY
210  /*e
211  * @brief TODO
212  *
213  */
215 #endif /* NANO_FEAT_AGENT_DISCOVERY */
216  /*e
217  * @brief TODO
218  *
219  */
220  void *user_data;
221 
222 #if NANO_CPP
223 
225  :
226 #if NANO_FEAT_SUBSCRIBE
227  on_data(NULL),
228 #endif /* NANO_FEAT_SUBSCRIBE */
229 #if NANO_FEAT_RELIABILITY
230 #if NANO_FEAT_PUBLISH
231  on_write_complete(NULL),
232 #endif /* NANO_FEAT_PUBLISH */
233  on_message_lost(NULL),
234 #endif /* NANO_FEAT_RELIABILITY */
235 #if NANO_FEAT_OBJECT_INFO
236  on_info(NULL),
237 #endif /* NANO_FEAT_OBJECT_INFO */
238 #if NANO_FEAT_AGENT_DISCOVERY
239  on_agent_discovered(NULL),
240 #endif /* NANO_FEAT_AGENT_DISCOVERY */
241  user_data(NULL)
242  { }
243 
244 #endif /* NANO_CPP */
245 };
246 
247 #if NANO_FEAT_SUBSCRIBE
248 #define NANO_XRCE_CLIENTLISTENER_SUBSCRIBE_INITIALIZER \
249  NULL,
250 #else
251 #define NANO_XRCE_CLIENTLISTENER_SUBSCRIBE_INITIALIZER
252 #endif /* NANO_FEAT_SUBSCRIBE */
253 
254 #if NANO_FEAT_RELIABILITY
255 #if NANO_FEAT_PUBLISH
256 #define NANO_XRCE_CLIENTLISTENER_RELIABILITY_INITIALIZER \
257  NULL,\
258  NULL,
259 #else
260 #define NANO_XRCE_CLIENTLISTENER_RELIABILITY_INITIALIZER \
261  NULL,
262 #endif /* NANO_FEAT_PUBLISH */
263 #else
264 #define NANO_XRCE_CLIENTLISTENER_RELIABILITY_INITIALIZER
265 #endif /* NANO_FEAT_RELIABILITY */
266 
267 #if NANO_FEAT_OBJECT_INFO
268 #define NANO_XRCE_CLIENTLISTENER_INFO_INITIALIZER \
269  NULL,
270 #else
271 #define NANO_XRCE_CLIENTLISTENER_INFO_INITIALIZER
272 #endif /* NANO_FEAT_OBJECT_INFO */
273 
274 #if NANO_FEAT_AGENT_DISCOVERY
275 #define NANO_XRCE_CLIENTLISTENER_DISCOVERY_INITIALIZER \
276  NULL,
277 #else
278 #define NANO_XRCE_CLIENTLISTENER_DISCOVERY_INITIALIZER
279 #endif /* NANO_FEAT_AGENT_DISCOVERY */
280 
281 /*e
282  * @brief TODO
283  *
284  */
285 #define NANO_XRCE_CLIENTLISTENER_INITIALIZER \
286 {\
287  NANO_XRCE_CLIENTLISTENER_SUBSCRIBE_INITIALIZER /* subscribe */\
288  NANO_XRCE_CLIENTLISTENER_RELIABILITY_INITIALIZER /* reliability */\
289  NANO_XRCE_CLIENTLISTENER_INFO_INITIALIZER /* info */\
290  NANO_XRCE_CLIENTLISTENER_DISCOVERY_INITIALIZER /* discovery */\
291  NULL /* user_data */\
292 }
293 
294 #if NANO_FEAT_SUBSCRIBE
295 void
296 NANO_XRCE_ClientListener_on_data(
297  NANO_XRCE_ClientListener *const self,
298  NANO_XRCE_Client *const client,
299  const NANO_XRCE_StreamId stream_id,
300  const NANO_XRCE_RequestId *const read_request,
301  const NANO_XRCE_ObjectId *const reader,
302  const NANO_XRCE_DataFormat format,
303  const NANO_bool little_endian,
304  const NANO_u8 *const data,
305  const NANO_usize data_len);
306 
307 #define NANO_XRCE_ClientListener_on_data(s_,c_,st_,rr_,r_,f_,le_,d_,dl_)\
308 {\
309  if ((s_)->on_data != NULL)\
310  {\
311  (s_)->on_data((s_),(c_),(st_),(rr_),(r_),(f_),(le_),(d_),(dl_));\
312  }\
313 }
314 #endif /* NANO_FEAT_SUBSCRIBE */
315 
316 #if NANO_FEAT_RELIABILITY
317 #if NANO_FEAT_PUBLISH
318 void
319 NANO_XRCE_ClientListener_on_write_complete(
320  NANO_XRCE_ClientListener *const self,
321  NANO_XRCE_Client *const client,
322  const NANO_XRCE_ClientRequest *const write_req);
323 
324 #define NANO_XRCE_ClientListener_on_write_complete(s_,c_,r_)\
325 {\
326  if ((s_)->on_write_complete != NULL)\
327  {\
328  (s_)->on_write_complete((s_),(c_),(r_));\
329  }\
330 }
331 #endif /* NANO_FEAT_PUBLISH */
332 
333 void
334 NANO_XRCE_ClientListener_on_message_lost(
335  NANO_XRCE_ClientListener *const self,
336  NANO_XRCE_Client *const client,
337  const NANO_XRCE_StreamId stream_id,
338  const NANO_XRCE_SeqNum lost,
340 
341 #define NANO_XRCE_ClientListener_on_message_lost(s_,c_,st_,l_,r_)\
342 {\
343  if ((s_)->on_message_lost != NULL)\
344  {\
345  (s_)->on_message_lost((s_),(c_),(st_),(l_),(r_));\
346  }\
347 }
348 
349 #endif /* NANO_FEAT_RELIABILITY */
350 
351 #if NANO_FEAT_OBJECT_INFO
352 void
353 NANO_XRCE_ClientListener_on_info(
354  NANO_XRCE_ClientListener *const self,
355  NANO_XRCE_Client *const client,
356  const NANO_XRCE_ObjectInfo *const info);
357 
358 #define NANO_XRCE_ClientListener_on_info(s_,c_,i_)\
359 {\
360  if ((s_)->on_info != NULL)\
361  {\
362  (s_)->on_info((s_),(c_),(i_));\
363  }\
364 }
365 #endif /* NANO_FEAT_OBJECT_INFO */
366 
367 #if NANO_FEAT_AGENT_DISCOVERY
368 void
369 NANO_XRCE_ClientListener_on_agent_discovered(
370  NANO_XRCE_ClientListener *const self,
371  NANO_XRCE_Client *const client,
372  const NANO_XRCE_TransportLocator *const agent_locator,
373  NANO_bool *const select);
374 
375 #define NANO_XRCE_ClientListener_on_agent_discovered(s_,c_,a_,sl_)\
376 {\
377  if ((s_)->on_agent_discovered != NULL)\
378  {\
379  (s_)->on_agent_discovered((s_),(c_),(a_),(sl_));\
380  }\
381 }
382 
383 
384 #endif /* NANO_FEAT_AGENT_DISCOVERY */
385 /* nano_api_clientlistener */
387 
388 #endif /* NANO_HAVE_CLIENT_LISTENER */
389 
390 
391 /******************************************************************************
392  * Client
393  ******************************************************************************/
399 /*e
400  * @brief TODO
401  *
402  */
404 
405 /*e
406  * @brief TODO
407  *
408  */
409 #define NANO_XRCE_REQUESTFLAGS_LITTLE_ENDIAN (0x01 << 0)
410 /*e
411  * @brief TODO
412  *
413  */
414 #define NANO_XRCE_REQUESTFLAGS_CREATE_REUSE (0x01 << 1)
415 /*e
416  * @brief TODO
417  *
418  */
419 #define NANO_XRCE_REQUESTFLAGS_CREATE_REPLACE (0x01 << 2)
420 /*e
421  * @brief TODO
422  *
423  */
424 #define NANO_XRCE_REQUESTFLAGS_CONFIRM (0x01 << 3)
425 /*e
426  * @brief TODO
427  *
428  */
429 #define NANO_XRCE_REQUESTFLAGS_SYNC (0x01 << 4)
430 /*i
431  * @brief TODO
432  *
433  */
434 #define NANO_XRCE_REQUESTFLAGS_ACKED (0x01 << 5)
435 /*i
436  * @brief TODO
437  *
438  */
439 #define NANO_XRCE_REQUESTFLAGS_DATA (0x01 << 6)
440 /*i
441  * @brief TODO
442  *
443  */
444 #define NANO_XRCE_REQUESTFLAGS_COMPLETE (0x01 << 7)
445 /*i
446  * @brief TODO
447  *
448  */
449 #define NANO_XRCE_REQUESTFLAGS_IN_USE (0x01 << 8)
450 /*e
451  * @brief TODO
452  *
453  */
454 #define NANO_XRCE_REQUESTFLAGS_CUSTOM_ENDIANNESS (0x01 << 9)
455 /*e
456  * @brief TODO
457  *
458  */
459 #define NANO_XRCE_REQUESTFLAGS_DEFAULT 0
460 
461 
462 struct NANODllExport NANO_XRCE_ClientRequestI
463 {
464  /*i
465  * @brief TODO
466  *
467  */
468  NANO_XRCE_ClientRequest *next;
469  /*i
470  * @brief TODO
471  *
472  */
473  NANO_u16 req_id;
474  /*i
475  * @brief TODO
476  *
477  */
478  NANO_XRCE_RequestFlags flags;
479  /*i
480  * @brief TODO
481  *
482  */
483  NANO_XRCE_ResultStatus result;
484  /*i
485  * @brief TODO
486  *
487  */
488  NANO_XRCE_ObjectId obj_id;
489  /*i
490  * @brief TODO
491  *
492  */
493  NANO_XRCE_SeqNum sn;
494  /*i
495  * @brief TODO
496  *
497  */
498  NANO_XRCE_SubmessageFlags submsg_flags;
499  /*i
500  * @brief TODO
501  *
502  */
503  NANO_XRCE_SubmessageId submsg_id;
504  /*i
505  * @brief TODO
506  *
507  */
508  NANO_XRCE_StreamId stream_id;
509 
510 #if NANO_CPP
511  /*i
512  * @brief TODO
513  *
514  */
515  NANO_XRCE_ClientRequestI()
516  : next(NULL),
517  req_id(0),
519  result(),
520  obj_id(),
521  sn(),
522  submsg_flags(NANO_XRCE_SUBMESSAGEFLAGS_DEFAULT),
523  submsg_id(NANO_XRCE_SUBMESSAGEID_UNKNOWN),
524  stream_id(NANO_XRCE_STREAMID_NONE)
525  {}
526 #endif /* NANO_CPP */
527 };
528 
529 /*i
530  * @brief TODO
531  *
532  */
533 #define NANO_XRCE_CLIENTREQUEST_INITIALIZER \
534 {\
535  NULL, /* next */\
536  0, /* req_id */ \
537  NANO_XRCE_REQUESTFLAGS_DEFAULT, /* flags */\
538  NANO_XRCE_RESULTSTATUS_INITIALIZER, /* result */\
539  NANO_XRCE_OBJECTID_INVALID, /* obj_id */\
540  NANO_XRCE_SEQNUM_INITIALIZER, /* sn */\
541  NANO_XRCE_SUBMESSAGEFLAGS_DEFAULT, /* submsg_flags */\
542  NANO_XRCE_SUBMESSAGEID_UNKNOWN, /* submsg_id */\
543  NANO_XRCE_STREAMID_NONE /* stream_id */ \
544 }
545 
546 /*i
547  * @brief TODO
548  *
549  */
550 #define NANO_XRCE_ClientRequest_is_reliable(s_) \
551  (NANO_XRCE_StreamId_is_reliable((s_)->stream_id))
552 /*i
553  * @brief TODO
554  *
555  */
556 #define NANO_XRCE_ClientRequest_is_acked(s_) \
557  ((s_)->flags & NANO_XRCE_REQUESTFLAGS_ACKED)
558 /*i
559  * @brief TODO
560  *
561  */
562 #define NANO_XRCE_ClientRequest_is_complete(s_) \
563  (((s_)->flags & NANO_XRCE_REQUESTFLAGS_COMPLETE) &&\
564  (!NANO_XRCE_ClientRequest_is_reliable(s_) ||\
565  NANO_XRCE_ClientRequest_is_acked(s_)))
566 
567 /*e
568  * @brief TODO
569  *
570  */
571 typedef struct NANO_XRCE_ClientRequestTokenI
572 {
573  /*e
574  * @brief TODO
575  *
576  */
578  /*e
579  * @brief TODO
580  *
581  */
583  /*e
584  * @brief TODO
585  *
586  */
588  /*e
589  * @brief TODO
590  *
591  */
594 
595 /*e
596  * @brief TODO
597  *
598  */
599 #define NANO_XRCE_CLIENTREQUESTTOKEN_INITIALIZER \
600 {\
601  NANO_XRCE_REQUESTID_INVALID, /* request_id */ \
602  NANO_XRCE_OBJECTID_INVALID, /* object_id */ \
603  NANO_XRCE_SEQNUM_INITIALIZER, /* sn */ \
604  NANO_XRCE_STREAMID_NONE /* stream_id */ \
605 }
606 /* nano_api_clientrequests */
608 
609 /******************************************************************************
610  * ClientRequestsStorage
611  ******************************************************************************/
612 
618 /*e
619  * @brief TODO
620  *
621  */
622 typedef struct NANODllExport NANO_XRCE_ClientRequestsStorageI
623 {
624  /*e
625  * @brief TODO
626  *
627  */
628  NANO_XRCE_ClientRequest *client_requests;
629  /*e
630  * @brief TODO
631  *
632  */
634  /*e
635  * @brief TODO
636  *
637  */
640 
641 /*e
642  * @brief TODO
643  *
644  */
645 #define NANO_XRCE_CLIENTREQUESTSSTORAGE_INITIALIZER \
646 {\
647  NULL, /* client_requests */\
648  0, /* client_requests_len */\
649  0 /* client_requests_max */ \
650 }
651 
652 /*e
653  * @brief TODO
654  *
655  */
656 #define NANO_XRCE_ClientRequestsStorage_initialize(s_, client_reqs_, client_reqs_max_) \
657 {\
658  (s_)->client_requests = (client_reqs_);\
659  (s_)->client_requests_max = (client_reqs_max_);\
660  (s_)->client_requests_len = 0;\
661 }
662 
663 /*e
664  * @brief TODO
665  *
666  */
667 #define NANO_XRCE_CUSTOMCLIENTREQUESTSSTORAGE_TYPE_MEMBERS(max_requests_) \
668  NANO_XRCE_ClientRequestsStorage base;\
669  NANO_XRCE_ClientRequest client_requests[max_requests_]
670 
671 /*e
672  * @brief TODO
673  *
674  */
675 #define NANO_XRCE_CUSTOMCLIENTREQUESTSSTORAGE_INITIALIZER \
676 {\
677  NANO_XRCE_CLIENTREQUESTSSTORAGE_INITIALIZER, /* base */\
678  { NANO_XRCE_CLIENTREQUEST_INITIALIZER } /* client_requests */\
679 }
680 
681 /*e
682  * @brief TODO
683  *
684  */
685 #define NANO_XRCE_CUSTOMCLIENTREQUESTSSTORAGE_INITIALIZE(s_) \
686 {\
687  NANO_XRCE_ClientRequestsStorage_initialize(&(s_)->base,\
688  (s_)->client_requests,\
689  sizeof((s_)->client_requests) / sizeof(NANO_XRCE_ClientRequest));\
690 }
691 /* nano_api_storage_clientreqs */
693 
694 /******************************************************************************
695  * ClientStorage
696  ******************************************************************************/
702 /*e
703  * @brief TODO
704  *
705  */
706 typedef struct NANODllExport NANO_XRCE_ClientStorageI
707 {
709  NANO_XRCE_SessionStorage *session;
711 
712 /*e
713  * @brief TODO
714  *
715  */
716 #define NANO_XRCE_CLIENTSTORAGE_INITIALIZER \
717 {\
718  NULL, /* requests */\
719  NULL /* session */\
720 }
721 
722 /*e
723  * @brief TODO
724  *
725  */
726 #define NANO_XRCE_ClientStorage_initialize(s_, reqs_, session_) \
727 {\
728  (s_)->requests = (reqs_);\
729  (s_)->session = (session_);\
730 }
731 
732 /******************************************************************************
733  * CustomClientStorage
734  ******************************************************************************/
735 
736 /*e
737  * @brief TODO
738  *
739  */
740 #define NANO_XRCE_CUSTOMCLIENTSTORAGE_TYPE_MEMBERS(base_type_name_,session_storage_) \
741  NANO_XRCE_ClientStorage base;\
742  xrce_str_concat(base_type_name_,ClientRequestsStorage) requests;\
743  session_storage_ session
744 
745 /*e
746  * @brief TODO
747  *
748  */
749 #define NANO_XRCE_CUSTOMCLIENTSTORAGE_DEFINE_TYPES_W_SESSION(base_type_name_,max_requests_,session_storage_)\
750 \
751 typedef struct xrce_str_concat(base_type_name_,ClientRequestsStorageI)\
752 {\
753  NANO_XRCE_CUSTOMCLIENTREQUESTSSTORAGE_TYPE_MEMBERS(max_requests_);\
754  NANO_XRCE_CUSTOMSTORAGE_CPP_CONSTRUCTOR(\
755  xrce_str_concat(base_type_name_,ClientRequestsStorageI),\
756  NANO_XRCE_CUSTOMCLIENTREQUESTSSTORAGE_INITIALIZE(this);)\
757 } xrce_str_concat(base_type_name_,ClientRequestsStorage);\
758 \
759 typedef struct xrce_str_concat(base_type_name_,ClientStorageI)\
760 {\
761  NANO_XRCE_CUSTOMCLIENTSTORAGE_TYPE_MEMBERS(base_type_name_,session_storage_);\
762  NANO_XRCE_CUSTOMSTORAGE_CPP_CONSTRUCTOR(\
763  xrce_str_concat(base_type_name_,ClientStorageI),\
764  NANO_XRCE_CUSTOMCLIENTSTORAGE_INITIALIZE(this);)\
765 } xrce_str_concat(base_type_name_,ClientStorage)
766 
767 /*e
768  * @brief TODO
769  *
770  */
771 #define NANO_XRCE_CUSTOMCLIENTSTORAGE_DEFINE_TYPES(base_type_name_,max_requests_,builtin_rel_send_queue_len_,builtin_rel_max_payload_in_,max_user_streams_be_,max_user_streams_rel_)\
772 \
773 NANO_XRCE_CUSTOMSESSIONSTORAGE_DEFINE_TYPES(base_type_name_,builtin_rel_send_queue_len_,builtin_rel_max_payload_in_,max_user_streams_be_,max_user_streams_rel_) \
774 \
775 NANO_XRCE_CUSTOMCLIENTSTORAGE_DEFINE_TYPES_W_SESSION(base_type_name_,max_requests_,xrce_str_concat(base_type_name_,SessionStorage))
776 
777 /*e
778  * @brief TODO
779  *
780  */
781 #define NANO_XRCE_CUSTOMCLIENTSTORAGE_INITIALIZER \
782  NANO_XRCE_CUSTOMCLIENTSTORAGE_INITIALIZER_W_SESSION(\
783  NANO_XRCE_CUSTOMSESSIONSTORAGE_INITIALIZER)
784 
785 /*e
786  * @brief TODO
787  *
788  */
789 #define NANO_XRCE_CUSTOMCLIENTSTORAGE_INITIALIZER_W_SESSION(session_initializer_) \
790 {\
791  NANO_XRCE_CLIENTSTORAGE_INITIALIZER, /* base */\
792  NANO_XRCE_CUSTOMCLIENTREQUESTSSTORAGE_INITIALIZER, /* requests */\
793  session_initializer_ /* session */\
794 }
795 
796 /*e
797  * @brief TODO
798  *
799  */
800 #define NANO_XRCE_CUSTOMCLIENTSTORAGE_INITIALIZE(s_) \
801  NANO_XRCE_CUSTOMCLIENTSTORAGE_INITIALIZE_W_SESSION(s_,\
802  {\
803  NANO_XRCE_CUSTOMSESSIONSTORAGE_INITIALIZE(&(s_)->session);\
804  })
805 
806 /*e
807  * @brief TODO
808  *
809  */
810 #define NANO_XRCE_CUSTOMCLIENTSTORAGE_INITIALIZE_W_SESSION(s_,session_init_) \
811 {\
812  NANO_XRCE_CUSTOMCLIENTREQUESTSSTORAGE_INITIALIZE(&(s_)->requests);\
813  session_init_ \
814  NANO_XRCE_ClientStorage_initialize(&(s_)->base,\
815  &(s_)->requests.base, &(s_)->session.base);\
816 }
817 
818 /******************************************************************************
819  * DefaultClientStorage
820  ******************************************************************************/
821 
822 /*e
823  * @brief TODO
824  *
825  */
826 #define NANO_XRCE_DefaultClientStorage_initialize(s_) \
827  NANO_XRCE_CUSTOMCLIENTSTORAGE_INITIALIZE(s_)
828 
829 
831  NANO_XRCE_Default,
833  NANO_XRCE_DefaultSessionStorage);
834 
835 /*e
836  * @brief TODO
837  *
838  */
839 #define NANO_XRCE_DEFAULTCLIENTSTORAGE_INITIALIZER \
840  NANO_XRCE_CUSTOMCLIENTSTORAGE_INITIALIZER
841 
842 /******************************************************************************
843  * SimpleClientStorage
844  ******************************************************************************/
845 
846 #if NANO_FEAT_RELIABILITY
847 #define NANO_XRCE_SIMPLECLIENTSTORAGE_RELIABILITY_TYPE_MEMBERS(base_type_name_) \
848  NANO_XRCE_StreamStorage builtin_rel;
849 #define NANO_XRCE_SIMPLECLIENTSTORAGE_RELIABILITY_INITIALIZER \
850  NANO_XRCE_STREAMSTORAGE_INITIALIZER,
851 #define NANO_XRCE_SIMPLECLIENTSTORAGE_RELIABILITY_INITIALIZE(s_) \
852 {\
853  (s_)->builtin_rel = (s_)->messages.base;\
854 }
855 #define NANO_XRCE_SIMPLECLIENTSTORAGE_RELIABILITY_INITIALIZE_ARG(s_) \
856  &(s_)->builtin_rel
857 #else
858 #define NANO_XRCE_SIMPLECLIENTSTORAGE_RELIABILITY_TYPE_MEMBERS(base_type_name_)
859 #define NANO_XRCE_SIMPLECLIENTSTORAGE_RELIABILITY_INITIALIZER
860 #define NANO_XRCE_SIMPLECLIENTSTORAGE_RELIABILITY_INITIALIZE(s_)
861 #define NANO_XRCE_SIMPLECLIENTSTORAGE_RELIABILITY_INITIALIZE_ARG(s_) \
862  NULL
863 #endif /* NANO_FEAT_RELIABILITY */
864 
865 #if NANO_FEAT_SESSION_USER_STREAMS
866 #define NANO_XRCE_SIMPLECLIENTSTORAGE_USER_STREAMS_DEFINE_TYPE(base_type_name_,max_streams_be_, max_streams_rel_)\
867 typedef struct xrce_str_concat(base_type_name_,UserStreamsStorageI)\
868 {\
869  NANO_XRCE_CUSTOMUSERSTREAMSSTORAGE_TYPE_MEMBERS(max_streams_be_, max_streams_rel_);\
870 } xrce_str_concat(base_type_name_,UserStreamsStorage);
871 #define NANO_XRCE_SIMPLECLIENTSTORAGE_USER_STREAMS_TYPE_MEMBERS(base_type_name_) \
872  xrce_str_concat(base_type_name_,UserStreamsStorage) streams;
873 #define NANO_XRCE_SIMPLECLIENTSTORAGE_USER_STREAMS_INITIALIZER \
874  NANO_XRCE_CUSTOMUSERSTREAMSSTORAGE_INITIALIZER,
875 #define NANO_XRCE_SIMPLECLIENTSTORAGE_USER_STREAMS_INITIALIZE(s_) \
876 {\
877  NANO_XRCE_CUSTOMUSERSTREAMSSTORAGE_INITIALIZE(&(s_)->streams);\
878 }
879 #define NANO_XRCE_SIMPLECLIENTSTORAGE_USER_STREAMS_INITIALIZE_ARG(s_) \
880  &(s_)->streams.base
881 #else
882 #define NANO_XRCE_SIMPLECLIENTSTORAGE_USER_STREAMS_DEFINE_TYPE(base_type_name_,max_streams_be_, max_streams_rel_)
883 #define NANO_XRCE_SIMPLECLIENTSTORAGE_USER_STREAMS_TYPE_MEMBERS(base_type_name_)
884 #define NANO_XRCE_SIMPLECLIENTSTORAGE_USER_STREAMS_INITIALIZER
885 #define NANO_XRCE_SIMPLECLIENTSTORAGE_USER_STREAMS_INITIALIZE(s_)
886 #define NANO_XRCE_SIMPLECLIENTSTORAGE_USER_STREAMS_INITIALIZE_ARG(s_) \
887  NULL
888 
889 #endif /* NANO_FEAT_SESSION_USER_STREAMS */
890 
891 /*e
892  * @brief TODO
893  *
894  */
895 #define NANO_XRCE_SIMPLECLIENTSTORAGE_TYPE_MEMBERS(base_type_name_) \
896  NANO_XRCE_ClientStorage base;\
897  NANO_XRCE_SessionStorage session;\
898  NANO_XRCE_StreamStorage builtin_be;\
899  NANO_XRCE_SIMPLECLIENTSTORAGE_RELIABILITY_TYPE_MEMBERS(base_type_name_) \
900  xrce_str_concat(base_type_name_,ClientRequestsStorage) requests;\
901  NANO_XRCE_SIMPLECLIENTSTORAGE_USER_STREAMS_TYPE_MEMBERS(base_type_name_) \
902  xrce_str_concat(base_type_name_,StreamStorage) messages
903 
904 /*e
905  * @brief TODO
906  *
907  */
908 #define NANO_XRCE_SIMPLECLIENTSTORAGE_DEFINE_TYPES(base_type_name_,max_requests_,max_messages_,max_streams_be_,max_streams_rel_)\
909 \
910 typedef struct xrce_str_concat(base_type_name_,ClientRequestsStorageI)\
911 {\
912  NANO_XRCE_CUSTOMCLIENTREQUESTSSTORAGE_TYPE_MEMBERS(max_requests_);\
913 } xrce_str_concat(base_type_name_,ClientRequestsStorage);\
914 \
915 NANO_XRCE_SIMPLECLIENTSTORAGE_USER_STREAMS_DEFINE_TYPE(base_type_name_,max_streams_be_, max_streams_rel_)\
916 \
917 typedef struct xrce_str_concat(base_type_name_,StreamStorageI)\
918 {\
919  NANO_XRCE_CUSTOMSTREAMSTORAGE_TYPE_MEMBERS(\
920  max_messages_ /* header */,\
921  max_messages_ /* payload */,\
922  ((max_messages_ >= 2)?(max_messages_/2):max_messages_) /* payload_tail */,\
923  (max_messages_ * 2) /* payload_user */,\
924  max_messages_ /* payload_in */);\
925 } xrce_str_concat(base_type_name_,StreamStorage);\
926 \
927 typedef struct xrce_str_concat(base_type_name_,ClientStorageI)\
928 {\
929  NANO_XRCE_SIMPLECLIENTSTORAGE_TYPE_MEMBERS(base_type_name_);\
930  NANO_XRCE_CUSTOMSTORAGE_CPP_CONSTRUCTOR(\
931  xrce_str_concat(base_type_name_,ClientStorageI),\
932  NANO_XRCE_SIMPLECLIENTSTORAGE_INITIALIZE(this);)\
933 } xrce_str_concat(base_type_name_,ClientStorage)
934 
935 /*e
936  * @brief TODO
937  *
938  */
939 #define NANO_XRCE_SIMPLECLIENTSTORAGE_INITIALIZER \
940 {\
941  NANO_XRCE_CLIENTSTORAGE_INITIALIZER, /* base */\
942  NANO_XRCE_SESSIONSTORAGE_INITIALIZER, /* session */\
943  NANO_XRCE_STREAMSTORAGE_INITIALIZER, /* builtin_be */\
944  NANO_XRCE_SIMPLECLIENTSTORAGE_RELIABILITY_INITIALIZER \
945  NANO_XRCE_CUSTOMCLIENTREQUESTSSTORAGE_INITIALIZER, /* requests */\
946  NANO_XRCE_SIMPLECLIENTSTORAGE_USER_STREAMS_INITIALIZER /* streams */\
947  NANO_XRCE_CUSTOMSTREAMSTORAGE_INITIALIZER /* messages */\
948 }
949 
950 /*e
951  * @brief TODO
952  *
953  */
954 #define NANO_XRCE_SIMPLECLIENTSTORAGE_INITIALIZE(s_) \
955 {\
956  NANO_XRCE_CUSTOMCLIENTREQUESTSSTORAGE_INITIALIZE(&(s_)->requests);\
957  NANO_XRCE_CUSTOMSTREAMSTORAGE_INITIALIZE(&(s_)->messages);\
958  (s_)->builtin_be = (s_)->messages.base;\
959  NANO_XRCE_SIMPLECLIENTSTORAGE_RELIABILITY_INITIALIZE(s_)\
960  NANO_XRCE_SIMPLECLIENTSTORAGE_USER_STREAMS_INITIALIZE(s_)\
961  NANO_XRCE_SessionStorage_initialize(\
962  &(s_)->session,\
963  &(s_)->builtin_be,\
964  NANO_XRCE_SIMPLECLIENTSTORAGE_RELIABILITY_INITIALIZE_ARG(s_),\
965  NANO_XRCE_SIMPLECLIENTSTORAGE_USER_STREAMS_INITIALIZE_ARG(s_));\
966  NANO_XRCE_ClientStorage_initialize(\
967  &(s_)->base,\
968  &(s_)->requests.base,\
969  &(s_)->session);\
970 }
971 
972 /*e
973  * @brief TODO
974  *
975  */
976 #define NANO_XRCE_DefaultSimpleClientStorage_initialize(s_) \
977  NANO_XRCE_SIMPLECLIENTSTORAGE_INITIALIZE(s_)
978 
980  NANO_XRCE_DefaultSimple,
985 
986 /*e
987  * @brief TODO
988  *
989  */
990 #define NANO_XRCE_DEFAULTSIMPLECLIENTSTORAGE_INITIALIZER \
991  NANO_XRCE_SIMPLECLIENTSTORAGE_INITIALIZER
992 /* nano_api_storage_client */
994 
995 /******************************************************************************
996  * ClientProperties
997  ******************************************************************************/
998 
1004 /*e
1005  * @brief TODO
1006  *
1007  */
1008 typedef struct NANODllExport NANO_XRCE_ClientPropertiesI
1009 {
1010 #ifdef NANO_HAVE_CLIENT_LISTENER
1011  /*e
1012  * @brief TODO
1013  *
1014  */
1015  NANO_XRCE_ClientListener listener;
1016 #endif
1017  /*e
1018  * @brief TODO
1019  *
1020  */
1021  NANO_XRCE_ClientTransport *transport;
1022  /*e
1023  * @brief TODO
1024  *
1025  */
1026  NANO_XRCE_ClientTransportProperties *transport_properties;
1027  /*e
1028  * @brief TODO
1029  *
1030  */
1032  /*e
1033  * @brief TODO
1034  *
1035  */
1037  /*e
1038  * @brief TODO
1039  *
1040  */
1042 #if NANO_FEAT_AGENT_DISCOVERY
1043  /*e
1044  * @brief TODO
1045  *
1046  */
1048 #endif /* NANO_FEAT_AGENT_DISCOVERY */
1049 #if NANO_FEAT_RELIABILITY && NANO_FEAT_SYSTIME
1050  /*e
1051  * @brief TODO
1052  *
1053  */
1055  /*e
1056  * @brief TODO
1057  *
1058  */
1060 #endif /* NANO_FEAT_RELIABILITY && NANO_FEAT_SYSTIME */
1061 
1062 #if NANO_CPP
1063  /*e
1064  * @brief TODO
1065  *
1066  */
1067  NANO_XRCE_ClientPropertiesI():
1068  listener(),
1069  transport(),
1070  transport_properties(),
1071  storage(),
1072  key(),
1073  include_key_in_messages(
1075 #if NANO_FEAT_AGENT_DISCOVERY
1076  ,
1077  enable_discovery()
1078 #endif /* NANO_FEAT_AGENT_DISCOVERY */
1079 #if NANO_FEAT_RELIABILITY && NANO_FEAT_SYSTIME
1080  ,
1081  heartbeat_period(
1084  acknack_period(
1085  NANO_LIMIT_SESSION_ACKNACK_PERIOD_DEFAULT_SEC,
1086  NANO_LIMIT_SESSION_ACKNACK_PERIOD_DEFAULT_NSEC)
1087 #endif /* NANO_FEAT_RELIABILITY && NANO_FEAT_SYSTIME */
1088  {
1089 
1090  }
1091 #endif /*NANO_CPP */
1093 
1094 #ifdef NANO_HAVE_CLIENT_LISTENER
1095 #define NANO_XRCE_CLIENTPROPERTIES_LISTENER_INITIALIZER \
1096  NANO_XRCE_CLIENTLISTENER_INITIALIZER,
1097 #else
1098 #define NANO_XRCE_CLIENTPROPERTIES_LISTENER_INITIALIZER
1099 #endif /* NANO_FEAT_SUBSCRIBE */
1100 
1101 #if NANO_FEAT_AGENT_DISCOVERY
1102 #define NANO_XRCE_CLIENTPROPERTIES_DISCOVERY_INITIALIZER \
1103  ,\
1104  NANO_BOOL_FALSE /* enable_discovery */
1105 #else
1106 #define NANO_XRCE_CLIENTPROPERTIES_DISCOVERY_INITIALIZER
1107 #endif /* NANO_FEAT_AGENT_DISCOVERY */
1108 
1109 #if NANO_FEAT_RELIABILITY && NANO_FEAT_SYSTIME
1110 #define NANO_XRCE_CLIENTPROPERTIES_PERIOD_INITIALIZER \
1111  ,\
1112  {\
1113  NANO_LIMIT_SESSION_HEARTBEAT_PERIOD_DEFAULT_SEC,\
1114  NANO_LIMIT_SESSION_HEARTBEAT_PERIOD_DEFAULT_NSEC \
1115  }, /* heartbeat_period */\
1116  {\
1117  NANO_LIMIT_SESSION_ACKNACK_PERIOD_DEFAULT_SEC,\
1118  NANO_LIMIT_SESSION_ACKNACK_PERIOD_DEFAULT_NSEC \
1119  }, /* acknack_period */
1120 #else
1121 #define NANO_XRCE_CLIENTPROPERTIES_PERIOD_INITIALIZER
1122 #endif /* NANO_FEAT_RELIABILITY && NANO_FEAT_SYSTIME */
1123 
1124 /*e
1125  * @brief TODO
1126  *
1127  */
1128 #define NANO_XRCE_CLIENTPROPERTIES_INITIALIZER \
1129 {\
1130  NANO_XRCE_CLIENTPROPERTIES_LISTENER_INITIALIZER /* listener */\
1131  NULL, /* transport */\
1132  NULL, /* transport_properties */\
1133  NULL, /* storage */\
1134  NANO_XRCE_CLIENTKEY_INVALID, /* key */\
1135  NANO_LIMIT_CLIENT_INCLUDE_KEY_IN_MESSAGE_DEFAULT /* include_key_in_messages */\
1136  NANO_XRCE_CLIENTPROPERTIES_DISCOVERY_INITIALIZER /* discovery */ \
1137  NANO_XRCE_CLIENTPROPERTIES_PERIOD_INITIALIZER \
1138 }
1139 /* nano_api_clientproperties */
1141 
1142 /******************************************************************************
1143  * ClientFlags
1144  ******************************************************************************/
1145 
1146 /*i
1147  * @brief TODO
1148  *
1149  */
1150 typedef NANO_u8 NANO_XRCE_ClientFlags;
1151 
1152 /*i
1153  * @brief TODO
1154  *
1155  */
1156 #define NANO_XRCE_CLIENTFLAGS_DEFAULT (0)
1157 /*i
1158  * @brief TODO
1159  *
1160  */
1161 #define NANO_XRCE_CLIENTFLAGS_CONNECTED (0x01 << 0)
1162 /*i
1163  * @brief TODO
1164  *
1165  */
1166 #define NANO_XRCE_CLIENTFLAGS_CONNECTING (0x01 << 1)
1167 /*i
1168  * @brief TODO
1169  *
1170  */
1171 #define NANO_XRCE_CLIENTFLAGS_DISCOVERING (0x01 << 2)
1172 
1173 /******************************************************************************
1174  * Client
1175  ******************************************************************************/
1176 
1182 /*e
1183  *
1184  *
1185  */
1186 typedef struct NANODllExport NANO_XRCE_ClientI
1187 {
1188  /*i
1189  * @brief TODO
1190  *
1191  */
1192  NANO_XRCE_ClientStorage *storage;
1193 #ifdef NANO_HAVE_CLIENT_LISTENER
1194  /*i
1195  * @brief TODO
1196  *
1197  */
1198  NANO_XRCE_ClientListener listener;
1199 #endif /* NANO_HAVE_CLIENT_LISTENER */
1200  /*i
1201  * @brief TODO
1202  *
1203  */
1204  NANO_XRCE_Session session;
1205  /*i
1206  * @brief TODO
1207  *
1208  */
1209  NANO_XRCE_ClientFlags flags;
1210  /*i
1211  * @brief TODO
1212  *
1213  */
1214  NANO_u16 next_request;
1215  /*i
1216  * @brief TODO
1217  *
1218  */
1219  NANO_XRCE_ClientRequest *pending_requests;
1220 
1221 #if NANO_CPP
1222  /*e
1223  * @brief TODO
1224  *
1225  */
1226  NANO_XRCE_ClientI()
1227  :
1228  storage(NULL),
1229 #ifdef NANO_HAVE_CLIENT_LISTENER
1230  listener(),
1231 #endif /* NANO_HAVE_CLIENT_LISTENER */
1232  session(),
1233  flags(NANO_XRCE_CLIENTFLAGS_DEFAULT),
1234  next_request(0),
1235  pending_requests(NULL)
1236  { }
1237 
1238 #endif /* NANO_CPP */
1239 
1241 
1242 
1243 #ifdef NANO_HAVE_CLIENT_LISTENER
1244 #define NANO_XRCE_CLIENT_LISTENER_INITIALIZER \
1245  NANO_XRCE_CLIENTLISTENER_INITIALIZER,
1246 #else
1247 #define NANO_XRCE_CLIENT_LISTENER_INITIALIZER
1248 #endif /* NANO_FEAT_SUBSCRIBE */
1249 
1250 /*e
1251  * @brief TODO
1252  *
1253  */
1254 #define NANO_XRCE_CLIENT_INITIALIZER \
1255 {\
1256  NULL, /* storage */\
1257  NANO_XRCE_CLIENT_LISTENER_INITIALIZER /* listener */\
1258  NANO_XRCE_SESSION_INITIALIZER, /* session */\
1259  NANO_XRCE_CLIENTFLAGS_DEFAULT, /* flags */\
1260  0, /* next_request */\
1261  NULL /* pending_requests */ /* request */\
1262 }
1263 
1264 /*e
1265  * @brief TODO
1266  *
1267  * @param self
1268  * @param properties
1269  * @return NANO_RetCode
1270  */
1271 NANODllExport
1274  NANO_XRCE_Client *const self,
1275  const NANO_XRCE_ClientProperties *const properties);
1276 
1277 /*e
1278  * @brief TODO
1279  *
1280  * @param self
1281  */
1282 void
1284 
1285 #define NANO_XRCE_Client_finalize(s_) \
1286 {\
1287  NANO_XRCE_Session_finalize(&(s_)->session);\
1288 }
1289 
1290 /*e
1291  * @brief TODO
1292  *
1293  * @param self
1294  */
1295 void
1297 
1298 #define NANO_XRCE_Client_mark_connected(s_) \
1299 {\
1300  (s_)->flags |= NANO_XRCE_CLIENTFLAGS_CONNECTED;\
1301  NANO_XRCE_Session_connected(&(s_)->session);\
1302 }
1303 
1304 /*e
1305  * @brief TODO
1306  *
1307  * @param self
1308  * @return
1309  */
1310 NANODllExport
1311 void
1313 
1314 /*e
1315  * @brief TODO
1316  *
1317  * @param self
1318  * @return NANO_bool
1319  */
1320 NANO_bool
1321 NANO_XRCE_Client_connected(const NANO_XRCE_Client *const self);
1322 
1323 #define NANO_XRCE_Client_connected(s_) \
1324  ((s_)->flags & NANO_XRCE_CLIENTFLAGS_CONNECTED)
1325 
1326 /*e
1327  * @brief TODO
1328  *
1329  * @param self
1330  * @return NANO_bool
1331  */
1332 NANO_bool
1334 
1335 #define NANO_XRCE_Client_discovering(s_) \
1336  ((s_)->flags & NANO_XRCE_CLIENTFLAGS_DISCOVERING)
1337 
1338 /*e
1339  * @brief TODO
1340  *
1341  * @param self
1342  */
1343 NANODllExport
1344 void
1346 /* nano_api_client */
1348 
1353 /*e
1354  * @brief TODO
1355  *
1356  */
1357 typedef struct NANODllExport NANO_XRCE_RequestArgsI
1358 {
1359  /*e
1360  * @brief TODO
1361  *
1362  */
1364  /*e
1365  * @brief TODO
1366  *
1367  */
1369  /*e
1370  * @brief TODO
1371  *
1372  */
1374  /*e
1375  * @brief TODO
1376  *
1377  */
1378  NANO_XRCE_RequestFlags flags;
1379 
1380 #if NANO_CPP
1381  /*e
1382  * @brief TODO
1383  *
1384  */
1385  NANO_XRCE_RequestArgsI()
1386  : timeout_ms(NANO_TIMEOUT_INFINITE),
1387  obj_id(),
1388  stream_id(NANO_XRCE_STREAMID_NONE),
1390  {
1391 
1392  }
1393 #endif /* NANO_CPP */
1395 
1396 /*e
1397  * @brief TODO
1398  *
1399  */
1400 #define NANO_XRCE_REQUESTARGS_INITIALIZER \
1401 {\
1402  NANO_TIMEOUT_INFINITE, /* timeout_ms */\
1403  NANO_XRCE_OBJECTID_INVALID, /* obj_id */\
1404  NANO_XRCE_STREAMID_NONE, /* stream_id */\
1405  NANO_XRCE_REQUESTFLAGS_DEFAULT /* flags */\
1406 }
1407 
1408 #if NANO_FEAT_OBJECT_CREATE
1409 
1410 
1411 /*e
1412  * @brief TODO
1413  *
1414  */
1415 typedef struct NANODllExport NANO_XRCE_CreateArgsI
1416 {
1417  /*e
1418  * @brief TODO
1419  *
1420  */
1422  /*e
1423  * @brief TODO
1424  *
1425  */
1427  /*e
1428  * @brief TODO
1429  *
1430  */
1432  /*e
1433  * @brief TODO
1434  *
1435  */
1436  const NANO_u8 *repr;
1437  /*e
1438  * @brief TODO
1439  *
1440  */
1442  /*e
1443  * @brief TODO
1444  *
1445  */
1447  /*e
1448  * @brief TODO
1449  *
1450  */
1452  /*e
1453  * @brief TODO
1454  *
1455  */
1457 
1458 #if NANO_CPP
1459  /*e
1460  * @brief TODO
1461  *
1462  */
1463  NANO_XRCE_CreateArgsI()
1464  {
1465 
1466  }
1467 #endif /* NANO_CPP */
1469 
1470 /*e
1471  * @brief TODO
1472  *
1473  */
1474 #define NANO_XRCE_CREATEARGS_INITIALIZER \
1475 {\
1476  NANO_XRCE_REQUESTARGS_INITIALIZER, /* req */\
1477  NANO_XRCE_OBJK_INVALID, /* obj_kind */\
1478  NANO_XRCE_REPRESENTATION_INVALID, /* repr_fmt */\
1479  NULL, /* repr */\
1480  0, /* repr_len */\
1481  NULL, /* tail_data */\
1482  0, /* tail_data_len */\
1483  0 /* tail_data_align */\
1484 }
1485 
1486 #endif /* NANO_FEAT_OBJECT_CREATE */
1487 
1488 
1489 #if NANO_FEAT_PUBLISH
1490 
1491 /*e
1492  * @brief TODO
1493  *
1494  */
1495 typedef struct NANODllExport NANO_XRCE_WriteArgsI
1496 {
1497  /*e
1498  * @brief TODO
1499  *
1500  */
1502  /*e
1503  * @brief TODO
1504  *
1505  */
1507  /*e
1508  * @brief TODO
1509  *
1510  */
1511  NANO_MessageBuffer *payload;
1512 
1513 #if NANO_CPP
1514  /*e
1515  * @brief TODO
1516  *
1517  */
1518  NANO_XRCE_WriteArgsI()
1519  : req(),
1520  format(NANO_XRCE_FORMAT_INVALID),
1521  payload(NULL)
1522  {
1523 
1524  }
1525 #endif /* NANO_CPP */
1527 
1528 /*e
1529  * @brief TODO
1530  *
1531  */
1532 #define NANO_XRCE_WRITEARGS_INITIALIZER \
1533 {\
1534  NANO_XRCE_REQUESTARGS_INITIALIZER, /* req */\
1535  NANO_XRCE_FORMAT_INVALID, /* format */\
1536  NULL /* payload */\
1537 }
1538 
1539 #endif /* NANO_FEAT_PUBLISH */
1540 
1541 #if NANO_FEAT_SUBSCRIBE
1542 
1543 /*e
1544  * @brief TODO
1545  *
1546  */
1547 typedef struct NANODllExport NANO_XRCE_ReadArgsI
1548 {
1549  /*e
1550  * @brief TODO
1551  *
1552  */
1554  /*e
1555  * @brief TODO
1556  *
1557  */
1559 #if NANO_CPP
1560  /*e
1561  * @brief TODO
1562  *
1563  */
1564  NANO_XRCE_ReadArgsI()
1565  : req(),
1566  read_spec()
1567  {
1568 
1569  }
1570 #endif /* NANO_CPP */
1572 
1573 /*e
1574  * @brief TODO
1575  *
1576  */
1577 #define NANO_XRCE_READARGS_INITIALIZER \
1578 {\
1579  NANO_XRCE_REQUESTARGS_INITIALIZER, /* req */\
1580  NANO_XRCE_READSPECIFICATION_INITIALIZER /* read_spec */\
1581 }
1582 
1583 #endif /* NANO_FEAT_SUBSCRIBE */
1584 /* nano_api_clientrequests */
1586 
1591 /*e
1592  * @brief TODO
1593  *
1594  * @param self
1595  * @param timeout_ms
1596  * @return NANO_RetCode
1597  */
1598 NANODllExport
1601  NANO_XRCE_Client *const self,
1602  const NANO_Timeout timeout_ms);
1603 
1604 /*e
1605  * @brief TODO
1606  *
1607  * @param self
1608  * @param request_token
1609  * @param request_stream
1610  * @param request_flags
1611  * @param request_timeout_ms
1612  * @return NANO_RetCode
1613  */
1614 NANODllExport
1617  NANO_XRCE_Client *const self,
1618  NANO_XRCE_ClientRequestToken *const request_token,
1619  const NANO_XRCE_StreamId request_stream,
1620  const NANO_XRCE_RequestFlags request_flags,
1621  const NANO_Timeout request_timeout_ms);
1622 
1623 /*e
1624  * @brief TODO
1625  *
1626  * @param self
1627  * @param request_token
1628  * @param args
1629  * @return NANO_RetCode
1630  */
1631 NANODllExport
1634  NANO_XRCE_Client *const self,
1635  NANO_XRCE_ClientRequestToken *const request_token,
1636  const NANO_XRCE_RequestArgs *const args);
1637 
1638 /*e
1639  * @brief TODO
1640  *
1641  * @param self
1642  * @param request_token
1643  */
1644 NANODllExport
1645 void
1647  NANO_XRCE_Client *const self,
1648  NANO_XRCE_ClientRequestToken *const request_token);
1649 
1650 #if NANO_FEAT_OBJECT_CREATE
1651 /*e
1652  * @brief TODO
1653  *
1654  * @param self
1655  * @param request_token
1656  * @param args
1657  * @return NANO_RetCode
1658  */
1659 NANODllExport
1662  NANO_XRCE_Client *const self,
1663  NANO_XRCE_ClientRequestToken *const request_token,
1664  const NANO_XRCE_CreateArgs *const args);
1665 #endif /* NANO_FEAT_OBJECT_CREATE */
1666 
1667 #if NANO_FEAT_OBJECT_DELETE
1668 /*e
1669  * @brief TODO
1670  *
1671  * @param self
1672  * @param request_token
1673  * @param args
1674  * @return NANO_RetCode
1675  */
1676 NANODllExport
1679  NANO_XRCE_Client *const self,
1680  NANO_XRCE_ClientRequestToken *const request_token,
1681  const NANO_XRCE_RequestArgs *const args);
1682 
1683 #endif /* NANO_FEAT_OBJECT_DELETE */
1684 
1685 /*e
1686  * @brief TODO
1687  *
1688  * @param self
1689  * @param request_token
1690  * @param wait_timeout_ms
1691  * @return NANO_RetCode
1692  */
1693 NANODllExport
1696  NANO_XRCE_Client *const self,
1697  NANO_XRCE_ClientRequestToken *const request_token,
1698  const NANO_Timeout wait_timeout_ms);
1699 
1700 /*e
1701  * @brief TODO
1702  *
1703  * @param self
1704  * @param request_token
1705  * @param wait_timeout_ms
1706  * @param request_result_out
1707  * @return NANO_RetCode
1708  */
1709 NANODllExport
1712  NANO_XRCE_Client *const self,
1713  NANO_XRCE_ClientRequestToken *const request_token,
1714  const NANO_Timeout wait_timeout_ms,
1715  NANO_XRCE_ResultStatus *const request_result_out);
1716 
1717 #if NANO_FEAT_RELIABILITY
1718 /*e
1719  * @brief TODO
1720  *
1721  * @param self
1722  * @param request_token
1723  * @param wait_timeout_ms
1724  * @return NANO_RetCode
1725  */
1726 NANODllExport
1729  NANO_XRCE_Client *const self,
1730  NANO_XRCE_ClientRequestToken *const request_token,
1731  const NANO_Timeout wait_timeout_ms);
1732 
1733 #endif /* NANO_FEAT_RELIABILITY */
1734 
1735 #if NANO_FEAT_PUBLISH
1736 
1737 #if NANO_FEAT_EXTENDED_API
1738 /*e
1739  * @brief TODO
1740  *
1741  * @param self
1742  * @param stream_id
1743  * @param payload
1744  * @param payload_len
1745  * @return NANO_MessageBuffer
1746  */
1747 NANODllExport
1748 NANO_MessageBuffer*
1750  NANO_XRCE_Client *const self,
1751  const NANO_XRCE_StreamId stream_id,
1752  const NANO_u8 *const payload,
1753  const NANO_u16 payload_len);
1754 
1755 /*e
1756  * @brief TODO
1757  *
1758  * @param self
1759  * @param stream_id
1760  * @param mbuf
1761  * @return NANO_RetCode
1762  */
1763 NANODllExport
1766  NANO_XRCE_Client *const self,
1767  const NANO_XRCE_StreamId stream_id,
1768  NANO_MessageBuffer *const mbuf);
1769 
1770 #if NANO_FEAT_DATA_FORMAT_DATA
1771 /*e
1772  * @brief TODO
1773  *
1774  * @param self
1775  * @param request_token
1776  * @param request_stream
1777  * @param request_flags
1778  * @param request_timeout_ms
1779  * @param writer_id
1780  * @param payload
1781  * @param payload_len
1782  * @return NANO_RetCode
1783  */
1784 NANODllExport
1787  NANO_XRCE_Client *const self,
1788  NANO_XRCE_ClientRequestToken *const request_token,
1789  const NANO_XRCE_StreamId request_stream,
1790  const NANO_XRCE_RequestFlags request_flags,
1791  const NANO_Timeout request_timeout_ms,
1792  const NANO_u16 writer_id,
1793  const NANO_u8 *const payload,
1794  const NANO_u16 payload_len);
1795 #endif /* NANO_FEAT_DATA_FORMAT_DATA */
1796 #endif /* NANO_FEAT_EXTENDED_API */
1797 
1798 /*e
1799  * @brief TODO
1800  *
1801  * @param self
1802  * @param request_token
1803  * @param args
1804  * @return NANO_RetCode
1805  */
1806 NANODllExport
1809  NANO_XRCE_Client *const self,
1810  NANO_XRCE_ClientRequestToken *const request_token,
1811  const NANO_XRCE_WriteArgs *const args);
1812 
1813 #endif /* NANO_FEAT_PUBLISH */
1814 
1815 #if NANO_FEAT_SUBSCRIBE
1816 
1817 #if NANO_FEAT_EXTENDED_API
1818 
1819 /*e
1820  * @brief TODO
1821  *
1822  * @param self
1823  * @param request_token
1824  * @param request_stream
1825  * @param request_flags
1826  * @param request_timeout_ms
1827  * @param reader_id
1828  * @param read_stream
1829  * @param data_delivery_ctrl
1830  * @param content_filter
1831  * @return NANO_RetCode
1832  */
1833 NANODllExport
1836  NANO_XRCE_Client *const self,
1837  NANO_XRCE_ClientRequestToken *const request_token,
1838  const NANO_XRCE_StreamId request_stream,
1839  const NANO_XRCE_RequestFlags request_flags,
1840  const NANO_Timeout request_timeout_ms,
1841  const NANO_u16 reader_id,
1842  const NANO_XRCE_StreamId read_stream,
1843  const NANO_XRCE_DataDeliveryControl *const data_delivery_ctrl,
1844  const char *const content_filter);
1845 
1846 #endif /* NANO_FEAT_EXTENDED_API */
1847 
1848 /*e
1849  * @brief TODO
1850  *
1851  * @param self
1852  * @param request_token
1853  * @param args
1854  * @return NANO_RetCode
1855  */
1856 NANODllExport
1859  NANO_XRCE_Client *const self,
1860  NANO_XRCE_ClientRequestToken *const request_token,
1861  const NANO_XRCE_ReadArgs *const args);
1862 
1863 #endif /* NANO_FEAT_SUBSCRIBE */
1864 
1865 #if NANO_FEAT_AGENT_DISCOVERY
1866 /*e
1867  * @brief TODO
1868  *
1869  * @param self
1870  * @param locator_type
1871  * @param locator
1872  * @return NANO_RetCode
1873  */
1874 NANODllExport
1877  NANO_XRCE_Client *const self,
1878  const NANO_XRCE_ClientTransportLocatorType locator_type,
1879  const NANO_XRCE_TransportLocator *const locator);
1880 
1881 /*e
1882  * @brief TODO
1883  *
1884  * @param self
1885  * @param request_token
1886  * @param args
1887  * @return NANO_RetCode
1888  */
1889 NANODllExport
1892  NANO_XRCE_Client *const self,
1893  NANO_XRCE_ClientRequestToken *const request_token,
1894  const NANO_XRCE_RequestArgs *const args);
1895 #endif /* NANO_FEAT_AGENT_DISCOVERY */
1896 
1897 #if NANO_FEAT_EXTENDED_API
1898 
1899 #if NANO_FEAT_OBJECT_CREATE
1900 /*e
1901  * @brief TODO
1902  *
1903  * @param self
1904  * @param request_token
1905  * @param request_stream
1906  * @param request_flags
1907  * @param request_timeout_ms
1908  * @param object_kind
1909  * @param object_id
1910  * @param parent_id
1911  * @param object_xml_repr
1912  * @return NANO_RetCode
1913  */
1914 NANODllExport
1917  NANO_XRCE_Client *const self,
1918  NANO_XRCE_ClientRequestToken *const request_token,
1919  const NANO_XRCE_StreamId request_stream,
1920  const NANO_XRCE_RequestFlags request_flags,
1921  const NANO_Timeout request_timeout_ms,
1922  const NANO_XRCE_ObjectKind object_kind,
1923  const NANO_u16 object_id,
1924  const NANO_u16 parent_id,
1925  const char *const object_xml_repr);
1926 
1927 /*e
1928  * @brief TODO
1929  *
1930  * @param self
1931  * @param request_token
1932  * @param request_stream
1933  * @param request_flags
1934  * @param request_timeout_ms
1935  * @param object_kind
1936  * @param object_id
1937  * @param parent_id
1938  * @param object_ref
1939  * @return NANO_RetCode
1940  */
1941 NANODllExport
1944  NANO_XRCE_Client *const self,
1945  NANO_XRCE_ClientRequestToken *const request_token,
1946  const NANO_XRCE_StreamId request_stream,
1947  const NANO_XRCE_RequestFlags request_flags,
1948  const NANO_Timeout request_timeout_ms,
1949  const NANO_XRCE_ObjectKind object_kind,
1950  const NANO_u16 object_id,
1951  const NANO_u16 parent_id,
1952  const char *const object_ref);
1953 
1954 #if NANO_FEAT_OBJECT_KIND_PARTICIPANT
1955 /*e
1956  * @brief TODO
1957  *
1958  * @param self
1959  * @param request_token
1960  * @param request_stream
1961  * @param request_flags
1962  * @param request_timeout_ms
1963  * @param object_id
1964  * @param object_xml_repr
1965  * @return NANO_RetCode
1966  */
1969  NANO_XRCE_Client *const self,
1970  NANO_XRCE_ClientRequestToken *const request_token,
1971  const NANO_XRCE_StreamId request_stream,
1972  const NANO_XRCE_RequestFlags request_flags,
1973  const NANO_Timeout request_timeout_ms,
1974  const NANO_u16 object_id,
1975  const char *const object_xml_repr);
1976 
1977 #define NANO_XRCE_Client_create_participant_xml(s_, r_tkn_, r_st_, r_f_, r_t_, o_id_, o_xml_) \
1978  NANO_XRCE_Client_create_object_xml(\
1979  (s_),\
1980  (r_tkn_),\
1981  (r_st_),\
1982  (r_f_),\
1983  (r_t_),\
1984  NANO_XRCE_OBJK_PARTICIPANT,\
1985  (o_id_),\
1986  0 ,\
1987  (o_xml_))
1988 
1989 /*e
1990  * @brief TODO
1991  *
1992  * @param self
1993  * @param request_token
1994  * @param request_stream
1995  * @param request_flags
1996  * @param request_timeout_ms
1997  * @param object_id
1998  * @param object_ref
1999  * @return NANO_RetCode
2000  */
2003  NANO_XRCE_Client *const self,
2004  NANO_XRCE_ClientRequestToken *const request_token,
2005  const NANO_XRCE_StreamId request_stream,
2006  const NANO_XRCE_RequestFlags request_flags,
2007  const NANO_Timeout request_timeout_ms,
2008  const NANO_u16 object_id,
2009  const char *const object_ref);
2010 
2011 #define NANO_XRCE_Client_register_participant(s_, r_tkn_, r_st_, r_f_, r_t_, o_id_, o_ref_) \
2012  NANO_XRCE_Client_register_object(\
2013  (s_),\
2014  (r_tkn_),\
2015  (r_st_),\
2016  (r_f_),\
2017  (r_t_),\
2018  NANO_XRCE_OBJK_PARTICIPANT,\
2019  (o_id_),\
2020  0,\
2021  (o_ref_))
2022 
2023 #endif /* NANO_FEAT_OBJECT_KIND_PARTICIPANT */
2024 
2025 #if NANO_FEAT_OBJECT_KIND_TOPIC
2026 /*e
2027  * @brief TODO
2028  *
2029  * @param self
2030  * @param request_token
2031  * @param request_stream
2032  * @param request_flags
2033  * @param request_timeout_ms
2034  * @param object_id
2035  * @param object_xml_repr
2036  * @param participant_id
2037  * @return NANO_RetCode
2038  */
2041  NANO_XRCE_Client *const self,
2042  NANO_XRCE_ClientRequestToken *const request_token,
2043  const NANO_XRCE_StreamId request_stream,
2044  const NANO_XRCE_RequestFlags request_flags,
2045  const NANO_Timeout request_timeout_ms,
2046  const NANO_u16 object_id,
2047  const char *const object_xml_repr,
2048  const NANO_u16 participant_id);
2049 
2050 #define NANO_XRCE_Client_create_topic_xml(s_, r_tkn_, r_st_, r_f_, r_t_, o_id_, o_xml_, p_id_) \
2051  NANO_XRCE_Client_create_object_xml(\
2052  (s_),\
2053  (r_tkn_),\
2054  (r_st_),\
2055  (r_f_),\
2056  (r_t_),\
2057  NANO_XRCE_OBJK_TOPIC,\
2058  (o_id_),\
2059  (p_id_) ,\
2060  (o_xml_))
2061 
2062 /*e
2063  * @brief TODO
2064  *
2065  * @param self
2066  * @param request_token
2067  * @param request_stream
2068  * @param request_flags
2069  * @param request_timeout_ms
2070  * @param object_id
2071  * @param object_ref
2072  * @return NANO_RetCode
2073  */
2076  NANO_XRCE_Client *const self,
2077  NANO_XRCE_ClientRequestToken *const request_token,
2078  const NANO_XRCE_StreamId request_stream,
2079  const NANO_XRCE_RequestFlags request_flags,
2080  const NANO_Timeout request_timeout_ms,
2081  const NANO_u16 object_id,
2082  const char *const object_ref);
2083 
2084 #define NANO_XRCE_Client_register_topic(s_, r_tkn_, r_st_, r_f_, r_t_, o_id_, o_ref_) \
2085  NANO_XRCE_Client_register_object(\
2086  (s_),\
2087  (r_tkn_),\
2088  (r_st_),\
2089  (r_f_),\
2090  (r_t_),\
2091  NANO_XRCE_OBJK_TOPIC,\
2092  (o_id_),\
2093  0 ,\
2094  (o_ref_))
2095 
2096 #endif /* NANO_FEAT_OBJECT_KIND_TOPIC */
2097 
2098 #if NANO_FEAT_OBJECT_KIND_PUBLISHER
2099 /*e
2100  * @brief TODO
2101  *
2102  * @param self
2103  * @param request_token
2104  * @param request_stream
2105  * @param request_flags
2106  * @param request_timeout_ms
2107  * @param object_id
2108  * @param object_xml_repr
2109  * @param participant_id
2110  * @return NANO_RetCode
2111  */
2114  NANO_XRCE_Client *const self,
2115  NANO_XRCE_ClientRequestToken *const request_token,
2116  const NANO_XRCE_StreamId request_stream,
2117  const NANO_XRCE_RequestFlags request_flags,
2118  const NANO_Timeout request_timeout_ms,
2119  const NANO_u16 object_id,
2120  const char *const object_xml_repr,
2121  const NANO_u16 participant_id);
2122 
2123 #define NANO_XRCE_Client_create_publisher_xml(s_, r_tkn_, r_st_, r_f_, r_t_, o_id_, o_xml_, p_id_) \
2124  NANO_XRCE_Client_create_object_xml(\
2125  (s_),\
2126  (r_tkn_),\
2127  (r_st_),\
2128  (r_f_),\
2129  (r_t_),\
2130  NANO_XRCE_OBJK_PUBLISHER,\
2131  (o_id_),\
2132  (p_id_) ,\
2133  (o_xml_))
2134 
2135 /*e
2136  * @brief TODO
2137  *
2138  * @param self
2139  * @param request_token
2140  * @param request_stream
2141  * @param request_flags
2142  * @param request_timeout_ms
2143  * @param object_id
2144  * @param object_ref
2145  * @return NANO_RetCode
2146  */
2149  NANO_XRCE_Client *const self,
2150  NANO_XRCE_ClientRequestToken *const request_token,
2151  const NANO_XRCE_StreamId request_stream,
2152  const NANO_XRCE_RequestFlags request_flags,
2153  const NANO_Timeout request_timeout_ms,
2154  const NANO_u16 object_id,
2155  const char *const object_ref);
2156 
2157 #define NANO_XRCE_Client_register_publisher(s_, r_tkn_, r_st_, r_f_, r_t_, o_id_, o_ref_) \
2158  NANO_XRCE_Client_register_object(\
2159  (s_),\
2160  (r_tkn_),\
2161  (r_st_),\
2162  (r_f_),\
2163  (r_t_),\
2164  NANO_XRCE_OBJK_PUBLISHER,\
2165  (o_id_),\
2166  0 ,\
2167  (o_ref_))
2168 
2169 #endif /* NANO_FEAT_OBJECT_KIND_PUBLISHER */
2170 
2171 #if NANO_FEAT_OBJECT_KIND_SUBSCRIBER
2172 /*e
2173  * @brief TODO
2174  *
2175  * @param self
2176  * @param request_token
2177  * @param request_stream
2178  * @param request_flags
2179  * @param request_timeout_ms
2180  * @param object_id
2181  * @param object_xml_repr
2182  * @param participant_id
2183  * @return NANO_RetCode
2184  */
2187  NANO_XRCE_Client *const self,
2188  NANO_XRCE_ClientRequestToken *const request_token,
2189  const NANO_XRCE_StreamId request_stream,
2190  const NANO_XRCE_RequestFlags request_flags,
2191  const NANO_Timeout request_timeout_ms,
2192  const NANO_u16 object_id,
2193  const char *const object_xml_repr,
2194  const NANO_u16 participant_id);
2195 
2196 #define NANO_XRCE_Client_create_subscriber_xml(s_, r_tkn_, r_st_, r_f_, r_t_, o_id_, o_xml_, p_id_) \
2197  NANO_XRCE_Client_create_object_xml(\
2198  (s_),\
2199  (r_tkn_),\
2200  (r_st_),\
2201  (r_f_),\
2202  (r_t_),\
2203  NANO_XRCE_OBJK_SUBSCRIBER,\
2204  (o_id_),\
2205  (p_id_) ,\
2206  (o_xml_))
2207 
2208 /*e
2209  * @brief TODO
2210  *
2211  * @param self
2212  * @param request_token
2213  * @param request_stream
2214  * @param request_flags
2215  * @param request_timeout_ms
2216  * @param object_id
2217  * @param object_ref
2218  * @return NANO_RetCode
2219  */
2222  NANO_XRCE_Client *const self,
2223  NANO_XRCE_ClientRequestToken *const request_token,
2224  const NANO_XRCE_StreamId request_stream,
2225  const NANO_XRCE_RequestFlags request_flags,
2226  const NANO_Timeout request_timeout_ms,
2227  const NANO_u16 object_id,
2228  const char *const object_ref);
2229 
2230 #define NANO_XRCE_Client_register_subscriber(s_, r_tkn_, r_st_, r_f_, r_t_, o_id_, o_ref_) \
2231  NANO_XRCE_Client_register_object(\
2232  (s_),\
2233  (r_tkn_),\
2234  (r_st_),\
2235  (r_f_),\
2236  (r_t_),\
2237  NANO_XRCE_OBJK_SUBSCRIBER,\
2238  (o_id_),\
2239  0 ,\
2240  (o_ref_))
2241 
2242 #endif /* NANO_FEAT_OBJECT_KIND_SUBSCRIBER */
2243 
2244 #if NANO_FEAT_OBJECT_KIND_DATAWRITER
2245 /*e
2246  * @brief TODO
2247  *
2248  * @param self
2249  * @param request_token
2250  * @param request_stream
2251  * @param request_flags
2252  * @param request_timeout_ms
2253  * @param object_id
2254  * @param object_xml_repr
2255  * @param publisher_id
2256  * @return NANO_RetCode
2257  */
2260  NANO_XRCE_Client *const self,
2261  NANO_XRCE_ClientRequestToken *const request_token,
2262  const NANO_XRCE_StreamId request_stream,
2263  const NANO_XRCE_RequestFlags request_flags,
2264  const NANO_Timeout request_timeout_ms,
2265  const NANO_u16 object_id,
2266  const char *const object_xml_repr,
2267  const NANO_u16 publisher_id);
2268 
2269 #define NANO_XRCE_Client_create_datawriter_xml(s_, r_tkn_, r_st_, r_f_, r_t_, o_id_, o_xml_, p_id_) \
2270  NANO_XRCE_Client_create_object_xml(\
2271  (s_),\
2272  (r_tkn_),\
2273  (r_st_),\
2274  (r_f_),\
2275  (r_t_),\
2276  NANO_XRCE_OBJK_DATAWRITER,\
2277  (o_id_),\
2278  (p_id_) ,\
2279  (o_xml_))
2280 
2281 /*e
2282  * @brief TODO
2283  *
2284  * @param self
2285  * @param request_token
2286  * @param request_stream
2287  * @param request_flags
2288  * @param request_timeout_ms
2289  * @param object_id
2290  * @param object_ref
2291  * @return NANO_RetCode
2292  */
2295  NANO_XRCE_Client *const self,
2296  NANO_XRCE_ClientRequestToken *const request_token,
2297  const NANO_XRCE_StreamId request_stream,
2298  const NANO_XRCE_RequestFlags request_flags,
2299  const NANO_Timeout request_timeout_ms,
2300  const NANO_u16 object_id,
2301  const char *const object_ref);
2302 
2303 #define NANO_XRCE_Client_register_datawriter(s_, r_tkn_, r_st_, r_f_, r_t_, o_id_, o_ref_) \
2304  NANO_XRCE_Client_register_object(\
2305  (s_),\
2306  (r_tkn_),\
2307  (r_st_),\
2308  (r_f_),\
2309  (r_t_),\
2310  NANO_XRCE_OBJK_DATAWRITER,\
2311  (o_id_),\
2312  0 ,\
2313  (o_ref_))
2314 
2315 #endif /* NANO_FEAT_OBJECT_KIND_DATAWRITER */
2316 
2317 #if NANO_FEAT_OBJECT_KIND_DATAREADER
2318 /*e
2319  * @brief TODO
2320  *
2321  * @param self
2322  * @param request_token
2323  * @param request_stream
2324  * @param request_flags
2325  * @param request_timeout_ms
2326  * @param object_id
2327  * @param object_xml_repr
2328  * @param subscriber_id
2329  * @return NANO_RetCode
2330  */
2333  NANO_XRCE_Client *const self,
2334  NANO_XRCE_ClientRequestToken *const request_token,
2335  const NANO_XRCE_StreamId request_stream,
2336  const NANO_XRCE_RequestFlags request_flags,
2337  const NANO_Timeout request_timeout_ms,
2338  const NANO_u16 object_id,
2339  const char *const object_xml_repr,
2340  const NANO_u16 subscriber_id);
2341 
2342 #define NANO_XRCE_Client_create_datareader_xml(s_, r_tkn_, r_st_, r_f_, r_t_, o_id_, o_xml_, s_id_) \
2343  NANO_XRCE_Client_create_object_xml(\
2344  (s_),\
2345  (r_tkn_),\
2346  (r_st_),\
2347  (r_f_),\
2348  (r_t_),\
2349  NANO_XRCE_OBJK_DATAREADER,\
2350  (o_id_),\
2351  (s_id_) ,\
2352  (o_xml_))
2353 
2354 /*e
2355  * @brief TODO
2356  *
2357  * @param self
2358  * @param request_token
2359  * @param request_stream
2360  * @param request_flags
2361  * @param request_timeout_ms
2362  * @param object_id
2363  * @param object_ref
2364  * @return NANO_RetCode
2365  */
2368  NANO_XRCE_Client *const self,
2369  NANO_XRCE_ClientRequestToken *const request_token,
2370  const NANO_XRCE_StreamId request_stream,
2371  const NANO_XRCE_RequestFlags request_flags,
2372  const NANO_Timeout request_timeout_ms,
2373  const NANO_u16 object_id,
2374  const char *const object_ref);
2375 
2376 #define NANO_XRCE_Client_register_datareader(s_, r_tkn_, r_st_, r_f_, r_t_, o_id_, o_ref_) \
2377  NANO_XRCE_Client_register_object(\
2378  (s_),\
2379  (r_tkn_),\
2380  (r_st_),\
2381  (r_f_),\
2382  (r_t_),\
2383  NANO_XRCE_OBJK_DATAREADER,\
2384  (o_id_),\
2385  0 ,\
2386  (o_ref_))
2387 
2388 #endif /* NANO_FEAT_OBJECT_KIND_DATAREADER */
2389 
2390 #if NANO_FEAT_OBJECT_KIND_APPLICATION
2391 /*e
2392  * @brief TODO
2393  *
2394  * @param self
2395  * @param request_token
2396  * @param request_stream
2397  * @param request_flags
2398  * @param request_timeout_ms
2399  * @param object_id
2400  * @param object_xml_repr
2401  * @return NANO_RetCode
2402  */
2405  NANO_XRCE_Client *const self,
2406  NANO_XRCE_ClientRequestToken *const request_token,
2407  const NANO_XRCE_StreamId request_stream,
2408  const NANO_XRCE_RequestFlags request_flags,
2409  const NANO_Timeout request_timeout_ms,
2410  const NANO_u16 object_id,
2411  const char *const object_xml_repr);
2412 
2413 #define NANO_XRCE_Client_create_application_xml(s_, r_tkn_, r_st_, r_f_, r_t_, o_id_, o_xml_) \
2414  NANO_XRCE_Client_create_object_xml(\
2415  (s_),\
2416  (r_tkn_),\
2417  (r_st_),\
2418  (r_f_),\
2419  (r_t_),\
2420  NANO_XRCE_OBJK_APPLICATION,\
2421  (o_id_),\
2422  0 ,\
2423  (o_xml_))
2424 
2425 #endif /* NANO_FEAT_OBJECT_KIND_APPLICATION */
2426 
2427 #if NANO_FEAT_OBJECT_KIND_DOMAIN
2428 /*e
2429  * @brief TODO
2430  *
2431  * @param self
2432  * @param request_token
2433  * @param request_stream
2434  * @param request_flags
2435  * @param request_timeout_ms
2436  * @param object_id
2437  * @param object_xml_repr
2438  * @return NANO_RetCode
2439  */
2442  NANO_XRCE_Client *const self,
2443  NANO_XRCE_ClientRequestToken *const request_token,
2444  const NANO_XRCE_StreamId request_stream,
2445  const NANO_XRCE_RequestFlags request_flags,
2446  const NANO_Timeout request_timeout_ms,
2447  const NANO_u16 object_id,
2448  const char *const object_xml_repr);
2449 
2450 #define NANO_XRCE_Client_create_domain_xml(s_, r_tkn_, r_st_, r_f_, r_t_, o_id_, o_xml_) \
2451  NANO_XRCE_Client_create_object_xml(\
2452  (s_),\
2453  (r_tkn_),\
2454  (r_st_),\
2455  (r_f_),\
2456  (r_t_),\
2457  NANO_XRCE_OBJK_TOPIC,\
2458  (o_id_),\
2459  0 ,\
2460  (o_xml_))
2461 
2462 #endif /* NANO_FEAT_OBJECT_KIND_DOMAIN */
2463 
2464 #if NANO_FEAT_OBJECT_KIND_TYPE
2465 /*e
2466  * @brief TODO
2467  *
2468  * @param self
2469  * @param request_token
2470  * @param request_stream
2471  * @param request_flags
2472  * @param request_timeout_ms
2473  * @param object_id
2474  * @param object_xml_repr
2475  * @return NANO_RetCode
2476  */
2479  NANO_XRCE_Client *const self,
2480  NANO_XRCE_ClientRequestToken *const request_token,
2481  const NANO_XRCE_StreamId request_stream,
2482  const NANO_XRCE_RequestFlags request_flags,
2483  const NANO_Timeout request_timeout_ms,
2484  const NANO_u16 object_id,
2485  const char *const object_xml_repr);
2486 
2487 #define NANO_XRCE_Client_create_type_xml(s_, r_tkn_, r_st_, r_f_, r_t_, o_id_, o_xml_) \
2488  NANO_XRCE_Client_create_object_xml(\
2489  (s_),\
2490  (r_tkn_),\
2491  (r_st_),\
2492  (r_f_),\
2493  (r_t_),\
2494  NANO_XRCE_OBJK_TYPE,\
2495  (o_id_),\
2496  0 ,\
2497  (o_xml_))
2498 
2499 #endif /* NANO_FEAT_OBJECT_KIND_TYPE */
2500 
2501 #if NANO_FEAT_OBJECT_KIND_QOSPROFILE
2502 /*e
2503  * @brief TODO
2504  *
2505  * @param self
2506  * @param request_token
2507  * @param request_stream
2508  * @param request_flags
2509  * @param request_timeout_ms
2510  * @param object_id
2511  * @param object_xml_repr
2512  * @return NANO_RetCode
2513  */
2516  NANO_XRCE_Client *const self,
2517  NANO_XRCE_ClientRequestToken *const request_token,
2518  const NANO_XRCE_StreamId request_stream,
2519  const NANO_XRCE_RequestFlags request_flags,
2520  const NANO_Timeout request_timeout_ms,
2521  const NANO_u16 object_id,
2522  const char *const object_xml_repr);
2523 
2524 #define NANO_XRCE_Client_create_qosprofile_xml(s_, r_tkn_, r_st_, r_f_, r_t_, o_id_, o_xml_) \
2525  NANO_XRCE_Client_create_object_xml(\
2526  (s_),\
2527  (r_tkn_),\
2528  (r_st_),\
2529  (r_f_),\
2530  (r_t_),\
2531  NANO_XRCE_OBJK_QOSPROFILE,\
2532  (o_id_),\
2533  0 ,\
2534  (o_xml_))
2535 
2536 #endif /* NANO_FEAT_OBJECT_KIND_QOSPROFILE */
2537 
2538 #endif /* NANO_FEAT_OBJECT_CREATE */
2539 
2540 #if NANO_FEAT_FRAGMENT && NANO_FEAT_RELIABILITY
2541 /*e
2542  * @brief TODO
2543  *
2544  * @param self
2545  * @param stream_id
2546  * @param buffer
2547  * @param buffer_size
2548  * @return NANO_RetCode
2549  */
2552  NANO_XRCE_Client *const self,
2553  const NANO_XRCE_StreamId stream_id,
2554  NANO_u8 *const buffer,
2555  const NANO_usize buffer_size);
2556 
2557 
2558 #define NANO_XRCE_Client_fragment_reconstruction_buffer(s_, s_id_, b_, b_sz_) \
2559  NANO_XRCE_Session_register_reliable_stream_fragment_storage(\
2560  &(s_)->session,\
2561  (s_id_),\
2562  NANO_XRCE_MESSAGETYPE_FRAGMENT_RECV_BUFFER,\
2563  (NANO_u8*)(b_),\
2564  0,\
2565  (b_sz_))
2566 
2567 #endif /* NANO_FEAT_FRAGMENT && NANO_FEAT_RELIABILITY */
2568 
2569 #ifdef NANO_HAVE_CLIENT_LISTENER
2570 #if NANO_FEAT_SUBSCRIBE
2571 /*e
2572  * @brief TODO
2573  *
2574  * @param self
2575  * @param on_data
2576  * @param listener_ctx
2577  */
2578 void
2580  NANO_XRCE_Client *const self,
2582  void *const listener_ctx);
2583 
2584 #define NANO_XRCE_Client_on_data(s_, on_data_, ctx_) \
2585 {\
2586  (s_)->listener.on_data = (on_data_);\
2587  (s_)->listener.user_data = (ctx_);\
2588 }
2589 
2590 #endif /* NANO_FEAT_SUBSCRIBE */
2591 #endif /* NANO_HAVE_CLIENT_LISTENER */
2592 
2593 #if NANO_FEAT_SESSION_USER_STREAMS
2594 /*e
2595  * @brief TODO
2596  *
2597  * @param self
2598  * @param stream_id
2599  * @param storage
2600  * @return NANO_RetCode
2601  */
2604  NANO_XRCE_Client *const self,
2605  const NANO_XRCE_StreamId stream_id,
2606  NANO_XRCE_ClientStorage *const storage);
2607 
2608 #define NANO_XRCE_Client_enable_stream(s_, s_id_, st_) \
2609  NANO_XRCE_Session_register_stream(\
2610  &(s_)->session,\
2611  (s_id_),\
2612  (st_))
2613 
2614 #endif /* NANO_FEAT_SESSION_USER_STREAMS */
2615 
2616 #if NANO_FEAT_ASSERT_LIVELINESS
2617 /*e
2618  * @brief TODO
2619  *
2620  * @param self
2621  * @param period
2622  */
2623 void
2625  NANO_XRCE_Client *const self,
2626  const NANO_u64 period);
2627 
2628 #define NANO_XRCE_Client_liveliness_assertion_period(s_,p_) \
2629 {\
2630  (s_)->session.period_liveliness = (p_);\
2631 }
2632 #endif /* NANO_FEAT_ASSERT_LIVELINESS */
2633 
2634 #endif /* NANO_FEAT_EXTENDED_API */
2635 
2636 /*e
2637  * @brief TODO
2638  *
2639  * @param self
2640  * @param max_messages
2641  * @param timeout_ms
2642  * @return NANO_RetCode
2643  */
2646  NANO_XRCE_Client *const self,
2647  const NANO_usize max_messages,
2648  const NANO_Timeout timeout_ms);
2649 
2650 #define NANO_XRCE_Client_run_session(s_, max_msg_, timeout_)\
2651  NANO_XRCE_Session_run(&(s_)->session, (max_msg_), (timeout_))
2652 /* nano_api_client */
2654 
2655 #ifdef __cplusplus
2656 } /* extern "C" */
2657 #endif
2658 
2659 #endif /* nano_client_h */
#define NANO_LIMIT_CLIENT_MAX_PENDING_REQUESTS
Default maximum number of pending requests for a client.
Definition: nano_client_config.h:64
NANO_XRCE_ObjectKind obj_kind
TODO.
Definition: nano_client.h:1426
NANO_RetCode NANO_XRCE_Client_wait_for_data_received(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_Timeout wait_timeout_ms)
TODO.
NANO_RetCode NANO_XRCE_Client_update_locator(NANO_XRCE_Client *const self, const NANO_XRCE_ClientTransportLocatorType locator_type, const NANO_XRCE_TransportLocator *const locator)
TODO.
NANO_RetCode NANO_XRCE_Client_announce(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_RequestArgs *const args)
TODO.
void NANO_XRCE_Client_mark_disconnected(NANO_XRCE_Client *const self)
TODO.
NANO_RetCode NANO_XRCE_Client_register_publisher(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 object_id, const char *const object_ref)
TODO.
TODO.
Definition: nano_client.h:1357
NANO_XRCE_ClientRequest * client_requests
TODO.
Definition: nano_client.h:628
void(* NANO_XRCE_ClientListener_OnInfoFn)(NANO_XRCE_ClientListener *const self, NANO_XRCE_Client *const client, const NANO_XRCE_ObjectInfo *const info)
TODO.
Definition: nano_client.h:152
NANO_bool NANO_XRCE_Client_discovering(const NANO_XRCE_Client *const self)
TODO.
NANO_Timeout timeout_ms
TODO.
Definition: nano_client.h:1363
NANO_RetCode NANO_XRCE_Client_create_object_xml(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_XRCE_ObjectKind object_kind, const NANO_u16 object_id, const NANO_u16 parent_id, const char *const object_xml_repr)
TODO.
NANO_RetCode NANO_XRCE_Client_create_publisher_xml(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 object_id, const char *const object_xml_repr, const NANO_u16 participant_id)
TODO.
NANO_RetCode NANO_XRCE_Client_register_participant(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 object_id, const char *const object_ref)
TODO.
TODO.
Definition: nano_client.h:571
NANO_RetCode NANO_XRCE_Client_read_w_args(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_ReadArgs *const args)
TODO.
NANO_RetCode
An enumeration of return codes to convery the outcome for all NANO operations.
Definition: nano_core_osapi.h:51
struct NANO_XRCE_ClientI NANO_XRCE_Client
An object used to establish a session on a remote XRCE Agent and access its services.
Definition: nano_client.h:49
NANO_XRCE_ClientListener_OnWriteComplete on_write_complete
TODO.
Definition: nano_client.h:194
NANO_XRCE_ObjectId object_id
TODO.
Definition: nano_client.h:582
NANO_MessageBuffer * NANO_XRCE_Client_allocate_message_buffer(NANO_XRCE_Client *const self, const NANO_XRCE_StreamId stream_id, const NANO_u8 *const payload, const NANO_u16 payload_len)
TODO.
void NANO_XRCE_Client_drop_requests(NANO_XRCE_Client *const self)
TODO.
#define NANO_TIMEOUT_INFINITE
TODO.
Definition: nano_core_osapi.h:1136
void * user_data
TODO.
Definition: nano_client.h:220
#define NANO_LIMIT_RELIABLESTREAM_SENDQUEUE_MAX_LENGTH
Maximum number of unacknowledged output messages stored by a reliable XRCE stream.
Definition: nano_core_config.h:712
NANO_RetCode NANO_XRCE_Client_register_datareader(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 object_id, const char *const object_ref)
TODO.
#define NANO_LIMIT_CLIENT_INCLUDE_KEY_IN_MESSAGE_DEFAULT
TODO.
Definition: nano_client_config.h:72
TODO.
Definition: nano_client.h:1008
Library configuration.
A data type to convey the outcome of an XRCE operation.
Definition: nano_core_xrce_basic.h:132
void NANO_XRCE_Client_dismiss_request(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token)
TODO.
#define NANO_LIMIT_SESSION_MAX_USER_STREAMS_BESTEFFORT
Maximum number of best-effort “user streams” that may be registered on an XRCE session.
Definition: nano_core_config.h:741
NANO_XRCE_ClientTransport * transport
TODO.
Definition: nano_client.h:1021
NANO_RetCode NANO_XRCE_Client_connect(NANO_XRCE_Client *const self, const NANO_Timeout timeout_ms)
TODO.
void NANO_XRCE_Client_liveliness_assertion_period(NANO_XRCE_Client *const self, const NANO_u64 period)
TODO.
NANO_RetCode NANO_XRCE_Client_create_topic_xml(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 object_id, const char *const object_xml_repr, const NANO_u16 participant_id)
TODO.
NANO_Time heartbeat_period
TODO.
Definition: nano_client.h:1054
NANO_RetCode NANO_XRCE_Client_create_datawriter_xml(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 object_id, const char *const object_xml_repr, const NANO_u16 publisher_id)
TODO.
NANO_RetCode NANO_XRCE_Client_create_type_xml(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 object_id, const char *const object_xml_repr)
TODO.
Identifier for implementors of the XRCE protocol.
Definition: nano_core_xrce_basic.h:525
NANO_XRCE_ClientTransportProperties * transport_properties
TODO.
Definition: nano_client.h:1026
NANO_RetCode NANO_XRCE_Client_release_message_buffer(NANO_XRCE_Client *const self, const NANO_XRCE_StreamId stream_id, NANO_MessageBuffer *const mbuf)
TODO.
NANO_XRCE_ClientStorage * storage
TODO.
Definition: nano_client.h:1031
NANO_XRCE_ReadSpecification read_spec
TODO.
Definition: nano_client.h:1558
NANO_Time acknack_period
TODO.
Definition: nano_client.h:1059
NANO_RetCode NANO_XRCE_Client_register_topic(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 object_id, const char *const object_ref)
TODO.
#define NANO_XRCE_CUSTOMCLIENTSTORAGE_DEFINE_TYPES_W_SESSION(base_type_name_, max_requests_, session_storage_)
TODO.
Definition: nano_client.h:749
uint8_t NANO_u8
TODO.
Definition: nano_core_osapi_cc.h:54
NANO_XRCE_RequestId request_id
TODO.
Definition: nano_client.h:577
void NANO_XRCE_Client_finalize(NANO_XRCE_Client *const self)
TODO.
TODO.
Definition: nano_client.h:1547
NANO_usize client_requests_len
TODO.
Definition: nano_client.h:633
NANO_RetCode NANO_XRCE_Client_delete_object_w_args(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_RequestArgs *const args)
TODO.
NANO_XRCE_ClientListener_OnInfoFn on_info
TODO.
Definition: nano_client.h:207
#define NANO_LIMIT_SESSION_HEARTBEAT_PERIOD_DEFAULT_SEC
Default period for periodic HEARTBEAT messages (seconds component)
Definition: nano_core_config.h:777
TODO.
Definition: nano_core_xrce_basic.h:954
#define NANO_XRCE_SIMPLECLIENTSTORAGE_DEFINE_TYPES(base_type_name_, max_requests_, max_messages_, max_streams_be_, max_streams_rel_)
TODO.
Definition: nano_client.h:908
const NANO_u8 * repr
TODO.
Definition: nano_client.h:1436
#define NANO_LIMIT_SESSION_HEARTBEAT_PERIOD_DEFAULT_NSEC
Default period for periodic HEARTBEAT messages (nanoseconds component)
Definition: nano_core_config.h:784
NANO_RetCode NANO_XRCE_Client_fragment_reconstruction_buffer(NANO_XRCE_Client *const self, const NANO_XRCE_StreamId stream_id, NANO_u8 *const buffer, const NANO_usize buffer_size)
TODO.
NANO_RetCode NANO_XRCE_Client_wait_for_request_acked(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_Timeout wait_timeout_ms)
TODO.
NANO_RetCode NANO_XRCE_Client_initialize(NANO_XRCE_Client *const self, const NANO_XRCE_ClientProperties *const properties)
TODO.
TODO.
Definition: nano_core_xrce_message.h:47
TODO.
Definition: nano_core_xrce_message.h:357
#define NANO_XRCE_REQUESTFLAGS_DEFAULT
TODO.
Definition: nano_client.h:459
A sequence number type as defined by IETF RFC-1982 with SERIAL_BITS set to 16.
Definition: nano_core_xrce_basic.h:843
NANO_MessageBuffer * payload
TODO.
Definition: nano_client.h:1511
NANO_RetCode NANO_XRCE_Client_register_subscriber(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 object_id, const char *const object_ref)
TODO.
NANO_XRCE_RequestFlags flags
TODO.
Definition: nano_client.h:1378
NANO_bool include_key_in_messages
TODO.
Definition: nano_client.h:1041
NANO_XRCE_ObjectId obj_id
TODO.
Definition: nano_client.h:1368
const NANO_u8 * tail_data
TODO.
Definition: nano_client.h:1446
NANO_u8 NANO_XRCE_StreamId
Identifier for streams of XRCE messages.
Definition: nano_core_xrce_basic.h:746
NANO_RetCode NANO_XRCE_Client_register_datawriter(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 object_id, const char *const object_ref)
TODO.
NANO_XRCE_StreamId stream_id
TODO.
Definition: nano_client.h:1373
NANO_usize tail_data_len
TODO.
Definition: nano_client.h:1451
NANO_XRCE_DataFormat format
TODO.
Definition: nano_client.h:1506
TODO.
Definition: nano_client.h:622
void(* NANO_XRCE_ClientListener_OnMessageLostFn)(NANO_XRCE_ClientListener *const self, NANO_XRCE_Client *const client, const NANO_XRCE_StreamId stream_id, const NANO_XRCE_SeqNum lost, const NANO_XRCE_ReliableMessageLostReason reason)
TODO.
Definition: nano_client.h:134
void(* NANO_XRCE_ClientListener_OnWriteComplete)(NANO_XRCE_ClientListener *const self, NANO_XRCE_Client *const client, const NANO_XRCE_ClientRequest *const write_req)
TODO.
Definition: nano_client.h:118
NANO_RetCode NANO_XRCE_Client_create_participant_xml(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 object_id, const char *const object_xml_repr)
TODO.
#define NANO_XRCE_FORMAT_INVALID
TODO.
Definition: nano_core_xrce_message.h:230
A type to represent time-stamps and time durations.
Definition: nano_core_osapi.h:1145
#define NANO_XRCE_STREAMID_NONE
Constant to indicate the absence of a stream.
Definition: nano_core_xrce_basic.h:759
NANO_XRCE_RequestArgs req
TODO.
Definition: nano_client.h:1501
NANO_XRCE_StreamId stream_id
TODO.
Definition: nano_client.h:592
TODO.
Definition: nano_client.h:179
NANO_RetCode NANO_XRCE_Client_write_w_args(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_WriteArgs *const args)
TODO.
NANO_usize repr_len
TODO.
Definition: nano_client.h:1441
NANO_RetCode NANO_XRCE_Client_disconnect(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms)
TODO.
NANO_u8 NANO_XRCE_DataFormat
Identifier for the type of formatting of user data.
Definition: nano_core_xrce_message.h:216
NANO_RetCode NANO_XRCE_Client_register_object(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_XRCE_ObjectKind object_kind, const NANO_u16 object_id, const NANO_u16 parent_id, const char *const object_ref)
TODO.
TODO.
Definition: nano_core_xrce_session.h:1490
NANO_bool NANO_CDR_Endianness
TODO.
Definition: nano_core_cdr_basic.h:36
TODO.
Definition: nano_client.h:706
NANO_u8 NANO_bool
Boolean value.
Definition: nano_core_osapi_cc.h:215
uint64_t NANO_u64
TODO.
Definition: nano_core_osapi_cc.h:86
TODO.
Definition: nano_client.h:1415
NANO_i32 NANO_Timeout
TODO.
Definition: nano_core_osapi.h:1130
NANO_XRCE_ClientListener_OnMessageLostFn on_message_lost
TODO.
Definition: nano_client.h:200
NANO_RetCode NANO_XRCE_Client_run_session(NANO_XRCE_Client *const self, const NANO_usize max_messages, const NANO_Timeout timeout_ms)
TODO.
NANO_XRCE_ReliableMessageLostReason
TODO.
Definition: nano_core_xrce_session.h:1044
void NANO_XRCE_Client_mark_connected(NANO_XRCE_Client *const self)
TODO.
NANO_RetCode NANO_XRCE_Client_create_datareader_xml(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 object_id, const char *const object_xml_repr, const NANO_u16 subscriber_id)
TODO.
void(* NANO_XRCE_ClientListener_OnAgentDiscoveredFn)(NANO_XRCE_ClientListener *const self, NANO_XRCE_Client *const client, const NANO_XRCE_TransportLocator *const agent_locator, NANO_bool *const select)
TODO.
Definition: nano_client.h:168
NANO_RetCode NANO_XRCE_Client_create_object_w_args(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_CreateArgs *const args)
TODO.
TODO.
Definition: nano_core_xrce_message.h:276
#define NANO_LIMIT_SESSION_MAX_USER_STREAMS_RELIABLE
Maximum number of reliable “user streams” that may be registered on an XRCE session.
Definition: nano_core_config.h:732
NANO_RetCode NANO_XRCE_Client_wait_for_request_complete(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_Timeout wait_timeout_ms, NANO_XRCE_ResultStatus *const request_result_out)
TODO.
NANO_u8 NANO_XRCE_RepresentationFormat
TODO.
Definition: nano_core_xrce_repr.h:36
NANO_RetCode NANO_XRCE_Client_create_application_xml(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 object_id, const char *const object_xml_repr)
TODO.
NANO_u16 NANO_XRCE_RequestFlags
TODO.
Definition: nano_client.h:403
NANO_XRCE_RequestArgs req
TODO.
Definition: nano_client.h:1553
NANO_RetCode NANO_XRCE_Client_create_subscriber_xml(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 object_id, const char *const object_xml_repr, const NANO_u16 participant_id)
TODO.
NANO_XRCE_ClientKey key
TODO.
Definition: nano_client.h:1036
NANO_XRCE_ClientListener_OnDataFn on_data
TODO.
Definition: nano_client.h:186
void NANO_XRCE_Client_on_data(NANO_XRCE_Client *const self, NANO_XRCE_ClientListener_OnDataFn on_data, void *const listener_ctx)
TODO.
uint16_t NANO_u16
TODO.
Definition: nano_core_osapi_cc.h:66
NANO_RetCode NANO_XRCE_Client_create_qosprofile_xml(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 object_id, const char *const object_xml_repr)
TODO.
NANO_XRCE_ClientListener_OnAgentDiscoveredFn on_agent_discovered
TODO.
Definition: nano_client.h:214
void(* NANO_XRCE_ClientListener_OnDataFn)(NANO_XRCE_ClientListener *const self, NANO_XRCE_Client *const client, const NANO_XRCE_StreamId stream_id, const NANO_XRCE_RequestId *const read_request, const NANO_XRCE_ObjectId *const reader, const NANO_XRCE_DataFormat format, const NANO_CDR_Endianness endianness, const NANO_u8 *const data, const NANO_usize data_len)
TODO.
Definition: nano_client.h:97
size_t NANO_usize
TODO.
Definition: nano_core_osapi_cc.h:91
TODO.
Definition: nano_client.h:1495
NANO_usize tail_data_align
TODO.
Definition: nano_client.h:1456
NANO_RetCode NANO_XRCE_Client_enable_stream(NANO_XRCE_Client *const self, const NANO_XRCE_StreamId stream_id, NANO_XRCE_ClientStorage *const storage)
TODO.
NANO_RetCode NANO_XRCE_Client_read_data(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 reader_id, const NANO_XRCE_StreamId read_stream, const NANO_XRCE_DataDeliveryControl *const data_delivery_ctrl, const char *const content_filter)
TODO.
NANO_bool NANO_XRCE_Client_connected(const NANO_XRCE_Client *const self)
TODO.
NANO_XRCE_RepresentationFormat repr_fmt
TODO.
Definition: nano_client.h:1431
NANO_XRCE_RequestArgs req
TODO.
Definition: nano_client.h:1421
NANO_usize client_requests_max
TODO.
Definition: nano_client.h:638
NANO_bool enable_discovery
TODO.
Definition: nano_client.h:1047
NANO_u8 NANO_XRCE_ObjectKind
A type to represent the different kinds of XRCE objects.
Definition: nano_core_xrce_basic.h:421
NANO_RetCode NANO_XRCE_Client_write_data(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 writer_id, const NANO_u8 *const payload, const NANO_u16 payload_len)
TODO.
NANO_RetCode NANO_XRCE_Client_create_domain_xml(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_StreamId request_stream, const NANO_XRCE_RequestFlags request_flags, const NANO_Timeout request_timeout_ms, const NANO_u16 object_id, const char *const object_xml_repr)
TODO.
NANO_XRCE_SeqNum sn
TODO.
Definition: nano_client.h:587
NANO_RetCode NANO_XRCE_Client_disconnect_w_args(NANO_XRCE_Client *const self, NANO_XRCE_ClientRequestToken *const request_token, const NANO_XRCE_RequestArgs *const args)
TODO.
NANO_XRCE_ClientListener listener
TODO.
Definition: nano_client.h:1015