39 - 8 *
sizeof(vrpn_int16)
40 - 6 *
sizeof(vrpn_int32)) /
44 - 8 *
sizeof(vrpn_int16)
45 - 6 *
sizeof(vrpn_int32)) /
50 - 8 *
sizeof(vrpn_int16)
51 - 6 *
sizeof(vrpn_int32)) /
83 inline bool buffer(
char **insertPt, vrpn_int32 *buflen)
const
101 vrpn_uint32 compression;
115 typedef enum {
NONE = 0 } ChannelCompression;
166 int add_channel(
const char *name,
const char *units =
"unsigned8bit",
167 vrpn_float32 minVal = 0, vrpn_float32 maxVal = 255,
168 vrpn_float32 scale = 1, vrpn_float32 offset = 0);
177 const vrpn_uint16 rMin,
const vrpn_uint16 rMax,
178 const vrpn_uint16 dMin = 0,
179 const vrpn_uint16 dMax = 0,
180 const struct timeval *time = NULL);
181 bool send_end_frame(
const vrpn_uint16 cMin,
const vrpn_uint16 cMax,
182 const vrpn_uint16 rMin,
const vrpn_uint16 rMax,
183 const vrpn_uint16 dMin = 0,
const vrpn_uint16 dMax = 0,
184 const struct timeval *time = NULL);
186 const struct timeval *time = NULL);
195 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
196 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_uint8 *data,
197 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16
nRows = 0,
198 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
199 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
200 const struct timeval *time = NULL);
202 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
203 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_uint16 *data,
204 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16
nRows = 0,
205 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
206 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
207 const struct timeval *time = NULL);
209 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
210 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_float32 *data,
211 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16
nRows = 0,
212 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
213 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
214 const struct timeval *time = NULL);
229 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
230 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_uint8 *data,
231 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16
nRows = 0,
232 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
233 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
234 const struct timeval *time = NULL);
236 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
237 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_uint16 *data,
238 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16
nRows = 0,
239 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
240 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
241 const struct timeval *time = NULL);
243 vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax,
244 vrpn_uint16 rMin, vrpn_uint16 rMax,
const vrpn_float32 *data,
245 vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16
nRows = 0,
246 bool invert_rows =
false, vrpn_uint32 depthStride = 0,
247 vrpn_uint16 dMin = 0, vrpn_uint16 dMax = 0,
248 const struct timeval *time = NULL);
330 bool compute_pixel_center(vrpn_float64 *center,
const vrpn_Imager &image,
331 vrpn_uint16 col, vrpn_uint16 row,
332 vrpn_uint16 depth = 0);
349 const vrpn_float64 dCol[3],
350 const vrpn_float64 dRow[3],
351 const vrpn_float64 *dDepth = NULL,
355 bool set_range(
const vrpn_float64 origin[3],
const vrpn_float64 dCol[3],
356 const vrpn_float64 dRow[3],
357 const vrpn_float64 *dDepth = NULL);
392typedef struct _vrpn_IMAGERREGIONCB {
403 void *userdata,
const struct timeval msg_time);
405typedef struct _vrpn_IMAGERBEGINFRAMECB {
415typedef struct _vrpn_IMAGERENDFRAMECB {
425typedef struct _vrpn_IMAGERDISCARDEDFRAMESCB {
474 vrpn_uint8 &val, vrpn_uint16 d = 0)
const
478 fprintf(stderr,
"vrpn_Imager_Region::read_unscaled_pixel(): "
479 "Invalid region or out of range\n");
484 fprintf(stderr,
"XXX "
485 "vrpn_Imager_Region::read_unscaled_pixel(): "
486 "Transcoding not implemented yet\n");
495 ((
const vrpn_uint8 *)
510 vrpn_uint16 &val, vrpn_uint16 d = 0)
const
514 fprintf(stderr,
"vrpn_Imager_Region::read_unscaled_pixel(): "
515 "Invalid region or out of range\n");
521 fprintf(stderr,
"XXX "
522 "vrpn_Imager_Region::read_unscaled_pixel(): "
523 "Transcoding not implemented yet\n");
526 else if (vrpn_big_endian) {
527 fprintf(stderr,
"XXX "
528 "vrpn_Imager_Region::read_unscaled_pixel(): "
529 "Not implemented on big-endian yet\n");
538 ((
const vrpn_uint16 *)
553 vrpn_float32 &val, vrpn_uint16 d = 0)
const
557 fprintf(stderr,
"vrpn_Imager_Region::read_unscaled_pixel(): "
558 "Invalid region or out of range\n");
563 fprintf(stderr,
"XXX "
564 "vrpn_Imager_Region::read_unscaled_pixel(): "
565 "Transcoding not implemented yet\n");
568 else if (vrpn_big_endian) {
569 fprintf(stderr,
"XXX "
570 "vrpn_Imager_Region::read_unscaled_pixel(): "
571 "Not implemented on big-endian yet\n");
580 ((
const vrpn_float32 *)
592 bool decode_unscaled_region_using_base_pointer(
593 vrpn_uint8 *data, vrpn_uint32 colStride, vrpn_uint32 rowStride,
594 vrpn_uint32 depthStride = 0, vrpn_uint16 nRows = 0,
595 bool invert_rows =
false,
unsigned repeat = 1)
const;
597 bool decode_unscaled_region_using_base_pointer(
598 vrpn_uint16 *data, vrpn_uint32 colStride, vrpn_uint32 rowStride,
599 vrpn_uint32 depthStride = 0, vrpn_uint16 nRows = 0,
600 bool invert_rows =
false,
unsigned repeat = 1)
const;
601 bool decode_unscaled_region_using_base_pointer(
602 vrpn_float32 *data, vrpn_uint32 colStride, vrpn_uint32 rowStride,
603 vrpn_uint32 depthStride = 0, vrpn_uint16 nRows = 0,
604 bool invert_rows =
false,
unsigned repeat = 1)
const;
707 virtual bool throttle_sender(vrpn_int32 N);
723 virtual void mainloop(
void);
771 void *userdata,
const struct timeval msg_time);
793 virtual void mainloop(
void);
vrpn_MESSAGEHANDLER handler
vrpn_BaseClass(const char *name, vrpn_Connection *c=NULL)
Names the device and assigns or opens connection, calls registration methods.
Generic connection class not specific to the transport mechanism.
vrpn_ImagerPose_Remote(const char *name, vrpn_Connection *c=NULL)
virtual int unregister_description_handler(void *userdata, vrpn_IMAGERDESCRIPTIONHANDLER handler)
virtual int register_description_handler(void *userdata, vrpn_IMAGERDESCRIPTIONHANDLER handler)
Register a handler for when the object's description changes (if desired)
static int VRPN_CALLBACK handle_description_message(void *userdata, vrpn_HANDLERPARAM p)
Handler for resolution and channel list message from the server.
vrpn_Callback_List< struct timeval > d_description_list
static int VRPN_CALLBACK handle_ping_message(void *userdata, vrpn_HANDLERPARAM p)
bool send_description(void)
Sends a description of the imager so the remote can process the region messages.
bool set_range(const vrpn_float64 origin[3], const vrpn_float64 dCol[3], const vrpn_float64 dRow[3], const vrpn_float64 *dDepth=NULL)
Set the range or units. Return true on success.
vrpn_ImagerPose_Server(const char *name, const vrpn_float64 origin[3], const vrpn_float64 dCol[3], const vrpn_float64 dRow[3], const vrpn_float64 *dDepth=NULL, vrpn_Connection *c=NULL)
virtual void mainloop(void)
Handle baseclass ping/pong messages.
vrpn_ImagerPose(const char *name, vrpn_Connection *c=NULL)
vrpn_int32 d_description_m_id
void get_origin(vrpn_float64 *origin) const
Returns the origin of the coordinate system,.
void get_dRow(vrpn_float64 *dRow) const
This is the total span of the image in rows;.
void get_dDepth(vrpn_float64 *dDepth) const
This is the total span of the image in depth;.
virtual int register_types(void)
Register the types of messages this device sends/receives. Return 0 on success, -1 on fail.
void get_dCol(vrpn_float64 *dCol) const
This is the total span of the image in columns;.
Holds the description needed to convert from raw data to values for a channel.
ChannelCompression d_compression
friend class vrpn_Imager_Server
bool buffer(char **insertPt, vrpn_int32 *buflen) const
friend class vrpn_Imager_Remote
vrpn_Imager_Channel(void)
bool unbuffer(const char **buffer)
friend class vrpn_Imager_Stream_Buffer
Helper function to convert data for a sub-region of one channel of.
bool read_unscaled_pixel(vrpn_uint16 c, vrpn_uint16 r, vrpn_uint16 &val, vrpn_uint16 d=0) const
Reads pixel from the region with no scale and offset applied to the value. Not.
vrpn_uint16 get_val_type(void) const
vrpn_uint32 getNumVals() const
Returns the number of values in the region.
friend class VRPN_API vrpn_Imager_Remote
friend void VRPN_CALLBACK java_vrpn_handle_region_change(void *userdata, const vrpn_IMAGERREGIONCB info)
bool read_unscaled_pixel(vrpn_uint16 c, vrpn_uint16 r, vrpn_float32 &val, vrpn_uint16 d=0) const
Reads pixel from the region with no scale and offset applied to the value. Not.
bool read_unscaled_pixel(vrpn_uint16 c, vrpn_uint16 r, vrpn_uint8 &val, vrpn_uint16 d=0) const
Reads pixel from the region with no scale and offset applied to the value. Not the most efficient way...
static int VRPN_CALLBACK handle_begin_frame_message(void *userdata, vrpn_HANDLERPARAM p)
Handler for begin-frame message from the server.
virtual int register_description_handler(void *userdata, vrpn_IMAGERDESCRIPTIONHANDLER handler)
Register a handler for when the object's description changes (if desired).
virtual int unregister_discarded_frames_handler(void *userdata, vrpn_IMAGERDISCARDEDFRAMESHANDLER handler)
virtual int unregister_region_handler(void *userdata, vrpn_IMAGERREGIONHANDLER handler)
static int VRPN_CALLBACK handle_discarded_frames_message(void *userdata, vrpn_HANDLERPARAM p)
Handler for discarded-frames message from the server.
virtual int register_region_handler(void *userdata, vrpn_IMAGERREGIONHANDLER handler)
Register a handler for when new data arrives (can look up info in object when this happens)
vrpn_Callback_List< vrpn_IMAGERBEGINFRAMECB > d_begin_frame_list
static int VRPN_CALLBACK handle_description_message(void *userdata, vrpn_HANDLERPARAM p)
Handler for resolution and channel list message from the server.
virtual int register_begin_frame_handler(void *userdata, vrpn_IMAGERBEGINFRAMEHANDLER handler)
Register a handler for frame beginning (if the application cares)
vrpn_Callback_List< vrpn_IMAGERENDFRAMECB > d_end_frame_list
vrpn_Callback_List< vrpn_IMAGERDISCARDEDFRAMESCB > d_discarded_frames_list
static int VRPN_CALLBACK handle_connection_dropped_message(void *userdata, vrpn_HANDLERPARAM p)
Handler for connection dropped message.
static int VRPN_CALLBACK handle_end_frame_message(void *userdata, vrpn_HANDLERPARAM p)
Handler for end-frame message from the server.
bool is_description_valid()
have we gotten a description message yet?
static int VRPN_CALLBACK handle_region_message(void *userdata, vrpn_HANDLERPARAM p)
Handler for region update message from the server.
virtual int unregister_end_frame_handler(void *userdata, vrpn_IMAGERENDFRAMEHANDLER handler)
vrpn_Imager_Remote(const char *name, vrpn_Connection *c=NULL)
virtual int register_end_frame_handler(void *userdata, vrpn_IMAGERENDFRAMEHANDLER handler)
Register a handler for frame end (if the application cares)
virtual int unregister_begin_frame_handler(void *userdata, vrpn_IMAGERBEGINFRAMEHANDLER handler)
virtual int register_discarded_frames_handler(void *userdata, vrpn_IMAGERDISCARDEDFRAMESHANDLER handler)
Register a handler for discarded frame notifications (if the application cares)
vrpn_Callback_List< struct timeval > d_description_list
vrpn_Callback_List< vrpn_IMAGERREGIONCB > d_region_list
virtual int unregister_description_handler(void *userdata, vrpn_IMAGERDESCRIPTIONHANDLER handler)
int add_channel(const char *name, const char *units="unsigned8bit", vrpn_float32 minVal=0, vrpn_float32 maxVal=255, vrpn_float32 scale=1, vrpn_float32 offset=0)
Add a channel to the server, returns index of the channel or -1 on failure.
vrpn_int32 d_frames_to_send
bool send_region_using_base_pointer(vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax, vrpn_uint16 rMin, vrpn_uint16 rMax, const vrpn_uint8 *data, vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16 nRows=0, bool invert_rows=false, vrpn_uint32 depthStride=0, vrpn_uint16 dMin=0, vrpn_uint16 dMax=0, const struct timeval *time=NULL)
Pack and send the region as efficiently as possible; strides are in steps of the element being sent.
bool set_resolution(vrpn_int32 nCols, vrpn_int32 nRows, vrpn_int32 nDepth=1)
Set the resolution to a different value than it had been before. Returns true on success.
vrpn_Imager_Server(const char *name, vrpn_Connection *c, vrpn_int32 nCols, vrpn_int32 nRows, vrpn_int32 nDepth=1)
static int VRPN_CALLBACK handle_throttle_message(void *userdata, vrpn_HANDLERPARAM p)
static int VRPN_CALLBACK handle_last_drop_message(void *userdata, vrpn_HANDLERPARAM p)
bool send_begin_frame(const vrpn_uint16 cMin, const vrpn_uint16 cMax, const vrpn_uint16 rMin, const vrpn_uint16 rMax, const vrpn_uint16 dMin=0, const vrpn_uint16 dMax=0, const struct timeval *time=NULL)
Servers must send begin/end frame pairs around contiguous sections of the image.
vrpn_uint16 d_dropped_due_to_throttle
bool send_end_frame(const vrpn_uint16 cMin, const vrpn_uint16 cMax, const vrpn_uint16 rMin, const vrpn_uint16 rMax, const vrpn_uint16 dMin=0, const vrpn_uint16 dMax=0, const struct timeval *time=NULL)
bool send_discarded_frames(const vrpn_uint16 count=0, const struct timeval *time=NULL)
bool send_description(void)
Sends a description of the imager so the remote can process the region messages.
bool send_region_using_first_pointer(vrpn_int16 chanIndex, vrpn_uint16 cMin, vrpn_uint16 cMax, vrpn_uint16 rMin, vrpn_uint16 rMax, const vrpn_uint8 *data, vrpn_uint32 colStride, vrpn_uint32 rowStride, vrpn_uint16 nRows=0, bool invert_rows=false, vrpn_uint32 depthStride=0, vrpn_uint16 dMin=0, vrpn_uint16 dMax=0, const struct timeval *time=NULL)
Pack and send the region as efficiently as possible; strides are in steps of the element being sent.
static int VRPN_CALLBACK handle_ping_message(void *userdata, vrpn_HANDLERPARAM p)
virtual void mainloop(void)
Handle baseclass ping/pong messages.
Base class for Imager class.
vrpn_int32 d_description_m_id
vrpn_int32 nDepth(void) const
vrpn_int32 nChannels(void) const
vrpn_int32 d_regionf32_m_id
virtual int register_types(void)
Register the types of messages this device sends/receives. Return 0 on success, -1 on fail.
vrpn_int32 nCols(void) const
vrpn_Imager(const char *name, vrpn_Connection *c=NULL)
vrpn_int32 d_throttle_frames_m_id
vrpn_int32 d_begin_frame_m_id
vrpn_int32 d_regionu8_m_id
vrpn_int32 d_end_frame_m_id
vrpn_int32 d_regionu12in16_m_id
vrpn_int32 nRows(void) const
vrpn_int32 d_regionu16_m_id
vrpn_int32 d_discarded_frames_m_id
vrpn_Imager_Channel d_channels[vrpn_IMAGER_MAX_CHANNELS]
This structure is what is passed to a vrpn_Connection message callback.
const vrpn_Imager_Region * region
All types of client/server/peer objects in VRPN should be derived from the vrpn_BaseClass type descri...
char cName[100]
Length of names within VRPN.
const int vrpn_CONNECTION_TCP_BUFLEN
void(VRPN_CALLBACK * vrpn_IMAGERDESCRIPTIONHANDLER)(void *userdata, const struct timeval msg_time)
const unsigned vrpn_IMAGER_MAX_REGIONf32
const vrpn_uint16 vrpn_IMAGER_VALTYPE_FLOAT32
const unsigned vrpn_IMAGER_MAX_REGIONu8
Set of constants to tell how many points you can put into a region depending on the type you are putt...
const unsigned vrpn_IMAGER_MAX_REGIONu12in16
void(VRPN_CALLBACK * vrpn_IMAGERDISCARDEDFRAMESHANDLER)(void *userdata, const vrpn_IMAGERDISCARDEDFRAMESCB info)
const vrpn_uint16 vrpn_IMAGER_VALTYPE_UINT16
const unsigned vrpn_IMAGER_MAX_REGIONu16
void(VRPN_CALLBACK * vrpn_IMAGERREGIONHANDLER)(void *userdata, const vrpn_IMAGERREGIONCB info)
void(VRPN_CALLBACK * vrpn_IMAGERBEGINFRAMEHANDLER)(void *userdata, const vrpn_IMAGERBEGINFRAMECB info)
void(VRPN_CALLBACK * vrpn_IMAGERPOSEDESCRIPTIONHANDLER)(void *userdata, const struct timeval msg_time)
const vrpn_uint16 vrpn_IMAGER_VALTYPE_UINT8
const vrpn_uint16 vrpn_IMAGER_VALTYPE_UINT12IN16
const unsigned vrpn_IMAGER_MAX_CHANNELS
const vrpn_uint16 vrpn_IMAGER_VALTYPE_UNKNOWN
void(VRPN_CALLBACK * vrpn_IMAGERENDFRAMEHANDLER)(void *userdata, const vrpn_IMAGERENDFRAMECB info)
VRPN_API int vrpn_unbuffer(const char **buffer, timeval *t)
Utility routine for taking a struct timeval from a buffer that was sent as a message.
VRPN_API int vrpn_buffer(char **insertPt, vrpn_int32 *buflen, const timeval t)
Utility routine for placing a timeval struct into a buffer that is to be sent as a message.