vrpn  07.33
Virtual Reality Peripheral Network
vrpn_RedundantTransmission.h
Go to the documentation of this file.
1 #ifndef VRPN_REDUNDANT_TRANSMISSION_H
2 #define VRPN_REDUNDANT_TRANSMISSION_H
3 
9 
10 #include <stddef.h> // for NULL
11 
12 #include "vrpn_BaseClass.h" // for vrpn_BaseClass
13 #include "vrpn_Configure.h" // for VRPN_API, VRPN_CALLBACK
14 #include "vrpn_Connection.h" // for vrpn_Connection (ptr only), etc
15 #include "vrpn_Shared.h" // for timeval
16 #include "vrpn_Types.h" // for vrpn_uint32, vrpn_bool, etc
17 
18 struct timeval;
19 
21 
22 public:
25 
26  // ACCESSORS
27 
28  vrpn_uint32 defaultRetransmissions(void) const;
29  timeval defaultInterval(void) const;
30  vrpn_bool isEnabled(void) const;
31 
32  // MANIPULATORS
33 
34  virtual void mainloop(void);
37 
38  void enable(vrpn_bool);
39 
40  virtual void setDefaults(vrpn_uint32 numRetransmissions,
41  timeval transmissionInterval);
43 
44  virtual int pack_message(vrpn_uint32 len, timeval time, vrpn_uint32 type,
45  vrpn_uint32 sender, const char *buffer,
46  vrpn_uint32 class_of_service,
47  vrpn_int32 numRetransmissions = -1,
48  timeval *transmissionInterval = NULL);
54 
55 protected:
57 
58  struct queuedMessage {
62  timeval nextValidTime;
64  };
65 
67  vrpn_uint32 d_numMessagesQueued;
69 
70  // Default values.
71 
72  vrpn_uint32 d_numTransmissions;
74 
75  vrpn_bool d_isEnabled;
76 };
77 
79 
80  char *encode_set(int *len, vrpn_uint32 num, timeval interval);
81  void decode_set(const char **buf, vrpn_uint32 *num, timeval *interval);
82 
83  char *encode_enable(int *len, vrpn_bool);
84  void decode_enable(const char **buf, vrpn_bool *);
85 
87 
88  vrpn_int32 d_set_type;
89  vrpn_int32 d_enable_type;
90 };
91 
95 
97 
98 public:
101 
102  void mainloop(void);
103  // Do nothing; vrpn_BaseClass requires this.
104 
105 protected:
106  virtual int register_types(void);
107 
109 
110  static int VRPN_CALLBACK handle_set(void *, vrpn_HANDLERPARAM);
111  static int VRPN_CALLBACK handle_enable(void *, vrpn_HANDLERPARAM);
112 
114 };
115 
119 
121 
122 public:
124  ~vrpn_RedundantRemote(void);
125 
126  void mainloop(void);
127  // Do nothing; vrpn_BaseClass requires this.
128 
129  void set(int numRetransmissions, timeval transmissionInterval);
130  void enable(vrpn_bool);
131 
132 protected:
133  int register_types(void);
134 
136 };
137 
149 
150 // A TypeDispatcher insists on too much control of its table for
151 // us to use one here - we want to use the same indices as the
152 // vrpn_Connection we're attached to, but if we had our own TypeDispatcher
153 // we'd have an independent, inconsistent set of type & sender ids.
154 
155 #define VRPN_RR_LENGTH 8
156 
158 
159 public:
161  ~vrpn_RedundantReceiver(void);
162 
163  virtual int register_handler(vrpn_int32 type, vrpn_MESSAGEHANDLER handler,
164  void *userdata,
165  vrpn_int32 sender = vrpn_ANY_SENDER);
166  virtual int unregister_handler(vrpn_int32 type, vrpn_MESSAGEHANDLER handler,
167  void *userdata,
168  vrpn_int32 sender = vrpn_ANY_SENDER);
169 
170  void record(vrpn_bool);
173 
174  void writeMemory(const char *filename);
179 
180  void clearMemory(void);
182 
183 protected:
185 
187  RRRecord(void);
188 
189  timeval timestampSeen[VRPN_RR_LENGTH];
190  int numSeen[VRPN_RR_LENGTH];
192 
195  };
196 
199 
200  struct RRMemory {
201  timeval timestamp;
202  int numSeen;
204  };
205 
208  vrpn_bool d_record;
209 
210  static int VRPN_CALLBACK
211  handle_possiblyRedundantMessage(void *, vrpn_HANDLERPARAM);
212 };
213 
214 #endif // VRPN_REDUNDANT_TRANSMISSION_H
vrpn_RedundantTransmission::queuedMessage::next
queuedMessage * next
Definition: vrpn_RedundantTransmission.h:63
vrpn_RedundantController::d_protocol
vrpn_RedundantController_Protocol d_protocol
Definition: vrpn_RedundantTransmission.h:108
vrpn_BaseClass.h
vrpn_RedundantReceiver::RRRecord::handlerIsRegistered
vrpn_bool handlerIsRegistered
Definition: vrpn_RedundantTransmission.h:194
vrpn_RedundantController_Protocol::d_enable_type
vrpn_int32 d_enable_type
Definition: vrpn_RedundantTransmission.h:89
vrpn_Types.h
vrpn_RedundantController::d_object
vrpn_RedundantTransmission * d_object
Definition: vrpn_RedundantTransmission.h:113
vrpn_RedundantController
Definition: vrpn_RedundantTransmission.h:96
vrpn_RedundantReceiver::RRRecord::nextTimestampToReplace
int nextTimestampToReplace
Definition: vrpn_RedundantTransmission.h:191
vrpn_RedundantReceiver::RRMemory::timestamp
timeval timestamp
Definition: vrpn_RedundantTransmission.h:201
vrpn_RedundantController_Protocol::encode_set
char * encode_set(int *len, vrpn_uint32 num, timeval interval)
Definition: vrpn_RedundantTransmission.C:217
vrpn_RedundantReceiver
Definition: vrpn_RedundantTransmission.h:157
vrpn_RedundantRemote::d_protocol
vrpn_RedundantController_Protocol d_protocol
Definition: vrpn_RedundantTransmission.h:135
vrpn_RedundantReceiver::d_record
vrpn_bool d_record
Definition: vrpn_RedundantTransmission.h:208
vrpnMsgCallbackEntry
Description of a callback entry for a user type.
Definition: vrpn_Connection.h:174
vrpn_RedundantController_Protocol::d_set_type
vrpn_int32 d_set_type
Definition: vrpn_RedundantTransmission.h:88
vrpn_RedundantController_Protocol::encode_enable
char * encode_enable(int *len, vrpn_bool)
Definition: vrpn_RedundantTransmission.C:248
vrpn_RedundantController_Protocol::register_types
void register_types(vrpn_Connection *)
Definition: vrpn_RedundantTransmission.C:275
vrpn_RedundantTransmission::d_messageList
queuedMessage * d_messageList
Definition: vrpn_RedundantTransmission.h:66
vrpn_RedundantReceiver::d_connection
vrpn_Connection * d_connection
Definition: vrpn_RedundantTransmission.h:184
vrpn_RedundantTransmission::queuedMessage::nextValidTime
timeval nextValidTime
Definition: vrpn_RedundantTransmission.h:62
vrpn_HANDLERPARAM
This structure is what is passed to a vrpn_Connection message callback.
Definition: vrpn_Connection.h:44
vrpn_RedundantTransmission::d_numMessagesQueued
vrpn_uint32 d_numMessagesQueued
For debugging, mostly.
Definition: vrpn_RedundantTransmission.h:67
vrpn_Shared.h
vrpn_CONNECTION_MAX_TYPES
const int vrpn_CONNECTION_MAX_TYPES
Definition: vrpn_Connection.h:71
vrpn_RedundantTransmission::queuedMessage::transmissionInterval
timeval transmissionInterval
Definition: vrpn_RedundantTransmission.h:61
vrpn_RedundantTransmission::d_numTransmissions
vrpn_uint32 d_numTransmissions
Definition: vrpn_RedundantTransmission.h:72
vrpn_RedundantTransmission::queuedMessage
Definition: vrpn_RedundantTransmission.h:58
vrpn_RedundantRemote
Definition: vrpn_RedundantTransmission.h:120
vrpn_RedundantController_Protocol::decode_set
void decode_set(const char **buf, vrpn_uint32 *num, timeval *interval)
Definition: vrpn_RedundantTransmission.C:240
vrpn_BaseClass::mainloop
virtual void mainloop()=0
Called once through each main loop iteration to handle updates. Remote object mainloop() should call ...
vrpn_Connection
Generic connection class not specific to the transport mechanism.
Definition: vrpn_Connection.h:510
vrpn_Connection.h
vrpn_RedundantReceiver::d_lastMemory
RRMemory * d_lastMemory
Definition: vrpn_RedundantTransmission.h:207
vrpn_RedundantTransmission::d_connection
vrpn_Connection * d_connection
Definition: vrpn_RedundantTransmission.h:56
vrpn_RedundantController_Protocol
Definition: vrpn_RedundantTransmission.h:78
vrpn_RedundantReceiver::RRMemory::next
RRMemory * next
Definition: vrpn_RedundantTransmission.h:203
vrpn_ANY_SENDER
const int vrpn_ANY_SENDER
vrpn_ANY_SENDER can be used to register callbacks on a given message type from any sender.
Definition: vrpn_Connection.h:77
vrpn_RedundantReceiver::RRMemory::numSeen
int numSeen
Definition: vrpn_RedundantTransmission.h:202
vrpn_BaseClass::register_types
virtual int register_types(void)=0
Register the types of messages this device sends/receives. Return 0 on success, -1 on fail.
vrpn_MESSAGEHANDLER
int(VRPN_CALLBACK * vrpn_MESSAGEHANDLER)(void *userdata, vrpn_HANDLERPARAM p)
Type of a message handler for vrpn_Connection messages.
Definition: vrpn_Connection.h:53
VRPN_CALLBACK
#define VRPN_CALLBACK
Definition: vrpn_Configure.h:647
vrpn_RedundantReceiver::RRRecord::cb
vrpnMsgCallbackEntry * cb
Definition: vrpn_RedundantTransmission.h:193
vrpn_RedundantTransmission
class VRPN_API vrpn_RedundantTransmission
Definition: vrpn_Tracker.h:32
vrpn_RedundantController_Protocol::decode_enable
void decode_enable(const char **buf, vrpn_bool *)
Definition: vrpn_RedundantTransmission.C:269
vrpn_RedundantTransmission::d_transmissionInterval
timeval d_transmissionInterval
Definition: vrpn_RedundantTransmission.h:73
vrpn_RedundantReceiver::RRRecord
Definition: vrpn_RedundantTransmission.h:186
vrpn_RedundantTransmission::d_isEnabled
vrpn_bool d_isEnabled
Definition: vrpn_RedundantTransmission.h:75
vrpn_Configure.h
vrpn_RedundantTransmission::queuedMessage::p
vrpn_HANDLERPARAM p
Definition: vrpn_RedundantTransmission.h:59
vrpn_RedundantReceiver::d_memory
RRMemory * d_memory
Definition: vrpn_RedundantTransmission.h:206
VRPN_API
#define VRPN_API
Definition: vrpn_Configure.h:646
vrpn_RedundantReceiver::d_generic
RRRecord d_generic
Definition: vrpn_RedundantTransmission.h:198
vrpn_BaseClass
Class from which all user-level (and other) classes that communicate with vrpn_Connections should der...
Definition: vrpn_BaseClass.h:313
vrpn_RedundantTransmission
Definition: vrpn_RedundantTransmission.h:20
VRPN_RR_LENGTH
#define VRPN_RR_LENGTH
Definition: vrpn_RedundantTransmission.h:155
vrpn_RedundantReceiver::RRMemory
Definition: vrpn_RedundantTransmission.h:200
vrpn_RedundantTransmission::queuedMessage::remainingTransmissions
vrpn_uint32 remainingTransmissions
Definition: vrpn_RedundantTransmission.h:60