Time-of-Flight Library(ToF)  3.2.2
gige_interface.h
1 #ifndef _CHRONOPTICS_TOF_GIGE_INTERFACE_H_
2 #define _CHRONOPTICS_TOF_GIGE_INTERFACE_H_
3 
4 #include <chronoptics/tof/camera_config.h>
5 #include <chronoptics/tof/calibration.h>
6 #include <chronoptics/tof/data.h>
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 /** The possible depth streams that can be streamed from the camera
13  */
14 enum tof_depth_stream_type {
15  TOF_DEPTH_STREAM_TYPE_RAW = 0, /** Stream raw data */
16  TOF_DEPTH_STREAM_TYPE_RADIAL_INTENSITY = 1, /** Stream both radial and intensity */
17  TOF_DEPTH_STREAM_TYPE_RADIAL = 2, /** Stream radial */
18  TOF_DEPTH_STREAM_TYPE_INTENSITY = 3, /** Stream intensity */
19 };
20 
21 /** A gige discovery message containing camera information
22  */
23 typedef struct tof_discovery_message* tof_discovery_message_t;
24 
25 /** Destruct tof_discovery_message */
26 TOF_EXPORT void tof_discovery_message_delete(tof_discovery_message_t ptr);
27 
28 /** Get the camera's ip address
29  * @param ptr Pointer to class
30  * @param error Pointer to error
31  * @return Ip address
32  */
33 TOF_EXPORT const char* tof_discovery_message_ip(const tof_discovery_message_t ptr, tof_error_t *error);
34 
35 /** Get the camera's serial
36  * @param ptr Pointer to class
37  * @param error Pointer to error
38  * @return Serial
39  */
40 TOF_EXPORT const char* tof_discovery_message_serial(const tof_discovery_message_t ptr, tof_error_t *error);
41 
42 /** A persistent ip data structure
43  */
44 typedef struct tof_persistent_ip* tof_persistent_ip_t;
45 
46 /** Destruct tof_persistent_ip */
47 TOF_EXPORT void tof_persistent_ip_delete(tof_persistent_ip_t ptr);
48 
49 /** Create persistent ip
50  * @param ptr Pointer to class
51  * @param ip IP address
52  * @param netmask Netmask
53  * @param gateway Gateway
54  * @param enabled Enable or disable persistent ip
55  * @param error Pointer to error
56  * @return New object
57  */
58 TOF_EXPORT tof_persistent_ip_t tof_persistent_ip_new(const char* ip, const char* netmask, const char* gateway, bool enabled, tof_error_t *error);
59 
60 /** Get the IP address
61  * @param ptr Pointer to class
62  * @param error Pointer to error
63  * @return the IP address
64  */
65 TOF_EXPORT const char* tof_persistent_ip_get_ip(const tof_persistent_ip_t ptr, tof_error_t *error);
66 
67 /** Set the IP address
68  * @param ptr Pointer to class
69  * @param ip the IP address
70  * @param error Pointer to error
71  */
72 TOF_EXPORT void tof_persistent_ip_set_ip(tof_persistent_ip_t ptr, const char* ip, tof_error_t *error);
73 
74 /** Get the netmask
75  * @param ptr Pointer to class
76  * @param error Pointer to error
77  * @return The netmask
78  */
79 TOF_EXPORT const char* tof_persistent_ip_get_netmask(const tof_persistent_ip_t ptr, tof_error_t *error);
80 
81 /** Set the netmask
82  * @param ptr Pointer to class
83  * @param netmask The netmask
84  * @param error Pointer to error
85  */
86 TOF_EXPORT void tof_persistent_ip_set_netmask(tof_persistent_ip_t ptr, const char* netmask, tof_error_t *error);
87 
88 /** Get the gateway
89  * @param ptr Pointer to class
90  * @param error Pointer to error
91  * @return The gateway
92  */
93 TOF_EXPORT const char* tof_persistent_ip_get_gateway(const tof_persistent_ip_t ptr, tof_error_t *error);
94 
95 /** Set the gateway
96  * @param ptr Pointer to class
97  * @param gateway The gateway
98  * @param error Pointer to error
99  */
100 TOF_EXPORT void tof_persistent_ip_set_gateway(tof_persistent_ip_t ptr, const char* gateway, tof_error_t *error);
101 
102 /** Get if persistent ip is enabled
103  * @param ptr Pointer to class
104  * @param error Pointer to error
105  * @return Is enabled
106  */
107 TOF_EXPORT bool tof_persistent_ip_get_enabled(const tof_persistent_ip_t ptr, tof_error_t *error);
108 
109 /** Set if persistent ip is enabled
110  * @param ptr Pointer to class
111  * @param enabled Is enabled
112  * @param error Pointer to error
113  */
114 TOF_EXPORT void tof_persistent_ip_set_enabled(tof_persistent_ip_t ptr, bool enabled, tof_error_t *error);
115 
116 /** Connect to a camera directly using the gige interface
117  */
118 typedef struct tof_gige_interface* tof_gige_interface_t;
119 
120 /** Destruct tof_gige_interface */
121 TOF_EXPORT void tof_gige_interface_delete(tof_gige_interface_t ptr);
122 
123 /** Create an instance of the gige interface
124  * @param ptr Pointer to class
125  * @param port The port to use for GVCP communication, if 0 is specified it will
126  * use an OS assigned port
127  * @param error Pointer to error
128  * @return New object
129  */
130 TOF_EXPORT tof_gige_interface_t tof_gige_interface_new(uint16_t port, tof_error_t *error);
131 
132 /** Detect all the cameras on the network
133  * @param ptr Pointer to class
134  * @param messages A list of discovery messages
135  * @param capacity The amount of data the above pointer can hold
136  * @param error Pointer to error
137  * @return Number of pointers filled or complete array size
138  */
139 TOF_EXPORT size_t tof_gige_interface_discover(tof_gige_interface_t ptr, tof_discovery_message_t* messages, size_t capacity, tof_error_t *error);
140 
141 /** Returns a message of the first camera that responded
142  * @param ptr Pointer to class
143  * @param error Pointer to error
144  * @return A discovery message
145  */
146 TOF_EXPORT tof_discovery_message_t tof_gige_interface_discover_one(tof_gige_interface_t ptr, tof_error_t *error);
147 
148 /** Detect a specific camera on the network, will throw an error if it can't
149  * find the camera
150  * @param ptr Pointer to class
151  * @param serial Serial number of camera to find
152  * @param error Pointer to error
153  * @return A discovery message
154  */
155 TOF_EXPORT tof_discovery_message_t tof_gige_interface_find(tof_gige_interface_t ptr, const char* serial, tof_error_t *error);
156 
157 /** Connect to the camera and gain exclusive access
158  * @param ptr Pointer to class
159  * @param message Discovery message of the camera to connect to
160  * @param error Pointer to error
161  */
162 TOF_EXPORT void tof_gige_interface_connect(tof_gige_interface_t ptr, const tof_discovery_message_t message, tof_error_t *error);
163 
164 /** Disconnect from the camera
165  * @param ptr Pointer to class
166  * @param error Pointer to error
167  */
168 TOF_EXPORT void tof_gige_interface_disconnect(tof_gige_interface_t ptr, tof_error_t *error);
169 
170 /** Check whether a connection is still maintained with the camera
171  * @param ptr Pointer to class
172  * @param error Pointer to error
173  * @return Is connected
174  */
175 TOF_EXPORT bool tof_gige_interface_is_connected(const tof_gige_interface_t ptr, tof_error_t *error);
176 
177 /** Get stream packet size
178  * @param ptr Pointer to class
179  * @param error Pointer to error
180  * @return The packet size
181  */
182 TOF_EXPORT uint16_t tof_gige_interface_get_stream_packet_size(const tof_gige_interface_t ptr, tof_error_t *error);
183 
184 /** Set stream packet size
185  * @param ptr Pointer to class
186  * @param packet_size The packet size
187  * @param error Pointer to error
188  */
189 TOF_EXPORT void tof_gige_interface_set_stream_packet_size(tof_gige_interface_t ptr, uint16_t packet_size, tof_error_t *error);
190 
191 /** Test whether using the set packet size works
192  * @param ptr Pointer to class
193  * @param port Port to send test packets to
194  * @param error Pointer to error
195  * @return Packet size works
196  */
197 TOF_EXPORT bool tof_gige_interface_test_stream_packet_size(tof_gige_interface_t ptr, uint16_t port, tof_error_t *error);
198 
199 /** Get delay between network packets
200  * @param ptr Pointer to class
201  * @param error Pointer to error
202  * @return The delay, depending on the camera software it is in nanoseconds or
203  * in cpu instruction
204  */
205 TOF_EXPORT uint32_t tof_gige_interface_get_delay(const tof_gige_interface_t ptr, tof_error_t *error);
206 
207 /** Set delay between network packets
208  * @param ptr Pointer to class
209  * @param delay The delay, depending on the camera software it is in nanoseconds
210  * or in cpu instruction
211  * @param error Pointer to error
212  */
213 TOF_EXPORT void tof_gige_interface_set_delay(tof_gige_interface_t ptr, uint32_t delay, tof_error_t *error);
214 
215 /** Download camera configuration from the camera
216  * @param ptr Pointer to class
217  * @param port Port to download configuration on
218  * @param error Pointer to error
219  * @return Camera configuration
220  */
221 TOF_EXPORT tof_camera_config_t tof_gige_interface_download_configuration(tof_gige_interface_t ptr, uint16_t port, tof_error_t *error);
222 
223 /** Download calibration from the camera
224  * @param ptr Pointer to class
225  * @param port Port to download configuration on
226  * @param error Pointer to error
227  * @return Calibration
228  */
229 TOF_EXPORT tof_calibration_t tof_gige_interface_download_calibration(tof_gige_interface_t ptr, uint16_t port, tof_error_t *error);
230 
231 /** Upload camera configuration to the camera
232  * @param ptr Pointer to class
233  * @param config Camera configuration
234  * @param port Port to download configuration on
235  * @param error Pointer to error
236  */
237 TOF_EXPORT void tof_gige_interface_upload_configuration(tof_gige_interface_t ptr, const tof_camera_config_t config, uint16_t port, tof_error_t *error);
238 
239 /** Check whether this camera is capable of streaming the specified type
240  * @param ptr Pointer to class
241  * @param stream Depth stream type
242  * @param error Pointer to error
243  * @return Is capable
244  */
245 TOF_EXPORT bool tof_gige_interface_depth_stream_capable(const tof_gige_interface_t ptr, enum tof_depth_stream_type stream, tof_error_t *error);
246 
247 /** Start the depth stream
248  * @param ptr Pointer to class
249  * @param stream Depth stream type
250  * @param port Port to receive depth data on
251  * @param error Pointer to error
252  */
253 TOF_EXPORT void tof_gige_interface_start_depth_stream(tof_gige_interface_t ptr, enum tof_depth_stream_type stream, uint16_t port, tof_error_t *error);
254 
255 /** Stop the depth stream
256  * @param ptr Pointer to class
257  * @param error Pointer to error
258  */
259 TOF_EXPORT void tof_gige_interface_stop_depth_stream(tof_gige_interface_t ptr, tof_error_t *error);
260 
261 /** Returns true if a depth frame is available
262  * @param ptr Pointer to class
263  * @param error Pointer to error
264  * @return Depth frame available
265  */
266 TOF_EXPORT bool tof_gige_interface_has_depth_data(const tof_gige_interface_t ptr, tof_error_t *error);
267 
268 /** Get a depth frame
269  * @param ptr Pointer to class
270  * @param error Pointer to error
271  * @return Depth frame
272  */
273 TOF_EXPORT tof_data_t tof_gige_interface_get_depth_data(tof_gige_interface_t ptr, tof_error_t *error);
274 
275 /** Check whether camera supports an image stream
276  * @param ptr Pointer to class
277  * @param error Pointer to error
278  * @return Camera supports an image stream
279  */
280 TOF_EXPORT bool tof_gige_interface_image_stream_capable(const tof_gige_interface_t ptr, tof_error_t *error);
281 
282 /** Start image stream
283  * @param ptr Pointer to class
284  * @param port Port to receive image data on
285  * @param error Pointer to error
286  */
287 TOF_EXPORT void tof_gige_interface_start_image_stream(tof_gige_interface_t ptr, uint16_t port, tof_error_t *error);
288 
289 /** Stop image stream
290  * @param ptr Pointer to class
291  * @param error Pointer to error
292  */
293 TOF_EXPORT void tof_gige_interface_stop_image_stream(tof_gige_interface_t ptr, tof_error_t *error);
294 
295 /** Check whether image frame is available
296  * @param ptr Pointer to class
297  * @param error Pointer to error
298  * @return Image frame available
299  */
300 TOF_EXPORT bool tof_gige_interface_has_image_data(const tof_gige_interface_t ptr, tof_error_t *error);
301 
302 /** Get image frame
303  * @param ptr Pointer to class
304  * @param error Pointer to error
305  * @return Image data
306  */
307 TOF_EXPORT tof_data_t tof_gige_interface_get_image_data(tof_gige_interface_t ptr, tof_error_t *error);
308 
309 /** Get the image frame into the supplied pointer
310  * @param ptr Pointer to class
311  * @param pointer The pointer to the data to write into
312  * @param capacity The amount of data the pointer can hold
313  * @param callback Callback that will be called when pointer is no longer in
314  * use
315  * @param callback_user_data User data that will be passed back when the function pointer is called
316  * @param error Pointer to error
317  * @return Image data
318  */
319 TOF_EXPORT tof_data_t tof_gige_interface_get_image_data_into_pointer(tof_gige_interface_t ptr, uint8_t* pointer, size_t capacity, tof_user_pointer_destructed_t callback, void* callback_user_data, tof_error_t *error);
320 
321 /** Get whether the camera is persistent ip capable
322  * @param ptr Pointer to class
323  * @param error Pointer to error
324  * @return Persistent IP capable
325  */
326 TOF_EXPORT bool tof_gige_interface_persistent_ip_capable(const tof_gige_interface_t ptr, tof_error_t *error);
327 
328 /** Get the current persistent ip settings
329  * @param ptr Pointer to class
330  * @param error Pointer to error
331  * @return Persistent IP
332  */
333 TOF_EXPORT tof_persistent_ip_t tof_gige_interface_get_persistent_ip(const tof_gige_interface_t ptr, tof_error_t *error);
334 
335 /** Set the persistent ip settings. The persistent ip settings will be active on
336  * next reboot.
337  * @param ptr Pointer to class
338  * @param persistent_ip The persistent ip
339  * @param error Pointer to error
340  */
341 TOF_EXPORT void tof_gige_interface_set_persistent_ip(tof_gige_interface_t ptr, const tof_persistent_ip_t persistent_ip, tof_error_t *error);
342 
343 /** Get the capacity for amount of user pointers that can be registered
344  * @param ptr Pointer to class
345  * @param error Pointer to error
346  * @return User pointer capacity
347  */
348 TOF_EXPORT size_t tof_gige_interface_get_user_pointer_capacity(const tof_gige_interface_t ptr, tof_error_t *error);
349 
350 /** Set the capacity for amount of user pointers that can be registered
351  * @param ptr Pointer to class
352  * @param capacity User pointer capacity
353  * @param error Pointer to error
354  */
355 TOF_EXPORT void tof_gige_interface_set_user_pointer_capacity(tof_gige_interface_t ptr, size_t capacity, tof_error_t *error);
356 
357 /** Add a pointer that will be filled with depth data. This method allows you to
358  * fill data straight into your own data structure without any additional
359  * copying.
360  * @param ptr Pointer to class
361  * @param pointer The pointer to the data to write into
362  * @param capacity The amount of data the pointer can hold
363  * @param callback Callback that will be called when pointer is no longer in
364  * use
365  * @param callback_user_data User data that will be passed back when the function pointer is called
366  * @param error Pointer to error
367  */
368 TOF_EXPORT void tof_gige_interface_add_depth_user_pointer(tof_gige_interface_t ptr, uint8_t* pointer, size_t capacity, tof_user_pointer_destructed_t callback, void* callback_user_data, tof_error_t *error);
369 
370 /** Get the tof library version running on the camera
371  * @param ptr Pointer to class
372  * @param error Pointer to error
373  * @return Version
374  */
375 TOF_EXPORT const char* tof_gige_interface_version(tof_gige_interface_t ptr, tof_error_t *error);
376 
377 #ifdef __cplusplus
378 }
379 #endif
380 
381 #endif