1 /* 2 * This file is part of the OpenKinect Project. http://www.openkinect.org 3 * 4 * Copyright (c) 2010 individual OpenKinect contributors. See the CONTRIB file 5 * for details. 6 * 7 * This code is licensed to you under the terms of the Apache License, version 8 * 2.0, or, at your option, the terms of the GNU General Public License, 9 * version 2.0. See the APACHE20 and GPL2 files for the text of the licenses, 10 * or the following URLs: 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * http://www.gnu.org/licenses/gpl-2.0.txt 13 * 14 * If you redistribute this file in source form, modified or unmodified, you 15 * may: 16 * 1) Leave this header intact and distribute it under the same terms, 17 * accompanying it with the APACHE20 and GPL20 files, or 18 * 2) Delete the Apache 2.0 clause and accompany it with the GPL2 file, or 19 * 3) Delete the GPL v2 clause and accompany it with the APACHE20 file 20 * In all cases you must keep the copyright notice intact and include a copy 21 * of the CONTRIB file. 22 * 23 * Binary distributions must follow the binary distribution requirements of 24 * either License. 25 */ 26 27 #ifndef LIBFREENECT_H 28 #define LIBFREENECT_H 29 30 #include <stdint.h> 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 #define FREENECT_FRAME_W 640 37 #define FREENECT_FRAME_H 480 38 #define FREENECT_FRAME_PIX (FREENECT_FRAME_H*FREENECT_FRAME_W) 39 40 #define FREENECT_IR_FRAME_W 640 41 #define FREENECT_IR_FRAME_H 488 42 #define FREENECT_IR_FRAME_PIX (FREENECT_IR_FRAME_H*FREENECT_IR_FRAME_W) 43 44 #define FREENECT_VIDEO_RGB_SIZE (FREENECT_FRAME_PIX*3) 45 #define FREENECT_VIDEO_BAYER_SIZE (FREENECT_FRAME_PIX) 46 #define FREENECT_VIDEO_YUV_RGB_SIZE (FREENECT_VIDEO_RGB_SIZE) 47 #define FREENECT_VIDEO_YUV_RAW_SIZE (FREENECT_FRAME_PIX*2) 48 #define FREENECT_VIDEO_IR_8BIT_SIZE (FREENECT_IR_FRAME_PIX) 49 #define FREENECT_VIDEO_IR_10BIT_SIZE (FREENECT_IR_FRAME_PIX*sizeof(uint16_t)) 50 #define FREENECT_VIDEO_IR_10BIT_PACKED_SIZE 390400 51 52 #define FREENECT_DEPTH_11BIT_SIZE (FREENECT_FRAME_PIX*sizeof(uint16_t)) 53 #define FREENECT_DEPTH_10BIT_SIZE FREENECT_DEPTH_11BIT_SIZE 54 #define FREENECT_DEPTH_11BIT_PACKED_SIZE 422400 55 #define FREENECT_DEPTH_10BIT_PACKED_SIZE 384000 56 57 #define FREENECT_COUNTS_PER_G 819 58 59 typedef enum { 60 FREENECT_VIDEO_RGB = 0, 61 FREENECT_VIDEO_BAYER = 1, 62 FREENECT_VIDEO_IR_8BIT = 2, 63 FREENECT_VIDEO_IR_10BIT = 3, 64 FREENECT_VIDEO_IR_10BIT_PACKED = 4, 65 FREENECT_VIDEO_YUV_RGB = 5, 66 FREENECT_VIDEO_YUV_RAW = 6, 67 } freenect_video_format; 68 69 typedef enum { 70 LED_OFF = 0, 71 LED_GREEN = 1, 72 LED_RED = 2, 73 LED_YELLOW = 3, 74 LED_BLINK_YELLOW = 4, 75 LED_BLINK_GREEN = 5, 76 LED_BLINK_RED_YELLOW = 6 77 } freenect_led_options; 78 79 typedef enum { 80 FREENECT_DEPTH_11BIT = 0, 81 FREENECT_DEPTH_10BIT = 1, 82 FREENECT_DEPTH_11BIT_PACKED = 2, 83 FREENECT_DEPTH_10BIT_PACKED = 3, 84 } freenect_depth_format; 85 86 typedef enum { 87 TILT_STATUS_STOPPED = 0x00, 88 TILT_STATUS_LIMIT = 0x01, 89 TILT_STATUS_MOVING = 0x04 90 } freenect_tilt_status_code; 91 92 typedef struct { 93 int16_t accelerometer_x; 94 int16_t accelerometer_y; 95 int16_t accelerometer_z; 96 int8_t tilt_angle; 97 freenect_tilt_status_code tilt_status; 98 } freenect_raw_tilt_state; 99 100 struct _freenect_context; 101 typedef struct _freenect_context freenect_context; 102 103 struct _freenect_device; 104 typedef struct _freenect_device freenect_device; 105 106 // usb backend specific section 107 #include <libusb-1.0/libusb.h> 108 typedef libusb_context freenect_usb_context; 109 // 110 111 typedef enum { 112 FREENECT_LOG_FATAL = 0, 113 FREENECT_LOG_ERROR, 114 FREENECT_LOG_WARNING, 115 FREENECT_LOG_NOTICE, 116 FREENECT_LOG_INFO, 117 FREENECT_LOG_DEBUG, 118 FREENECT_LOG_SPEW, 119 FREENECT_LOG_FLOOD, 120 } freenect_loglevel; 121 122 int freenect_init(freenect_context **ctx, freenect_usb_context *usb_ctx); 123 int freenect_shutdown(freenect_context *ctx); 124 125 typedef void (*freenect_log_cb)(freenect_context *dev, freenect_loglevel level, const char *msg); 126 127 void freenect_set_log_level(freenect_context *ctx, freenect_loglevel level); 128 void freenect_set_log_callback(freenect_context *ctx, freenect_log_cb cb); 129 130 int freenect_process_events(freenect_context *ctx); 131 132 int freenect_num_devices(freenect_context *ctx); 133 int freenect_open_device(freenect_context *ctx, freenect_device **dev, int index); 134 int freenect_close_device(freenect_device *dev); 135 136 void freenect_set_user(freenect_device *dev, void *user); 137 void *freenect_get_user(freenect_device *dev); 138 139 typedef void (*freenect_depth_cb)(freenect_device *dev, void *depth, uint32_t timestamp); 140 typedef void (*freenect_video_cb)(freenect_device *dev, void *video, uint32_t timestamp); 141 142 void freenect_set_depth_callback(freenect_device *dev, freenect_depth_cb cb); 143 void freenect_set_video_callback(freenect_device *dev, freenect_video_cb cb); 144 145 int freenect_set_depth_format(freenect_device *dev, freenect_depth_format fmt); 146 int freenect_set_video_format(freenect_device *dev, freenect_video_format fmt); 147 148 int freenect_set_depth_buffer(freenect_device *dev, void *buf); 149 int freenect_set_video_buffer(freenect_device *dev, void *buf); 150 151 int freenect_start_depth(freenect_device *dev); 152 int freenect_start_video(freenect_device *dev); 153 int freenect_stop_depth(freenect_device *dev); 154 int freenect_stop_video(freenect_device *dev); 155 156 int freenect_update_tilt_state(freenect_device *dev); 157 freenect_raw_tilt_state* freenect_get_tilt_state(freenect_device *dev); 158 double freenect_get_tilt_degs(freenect_raw_tilt_state *state); 159 int freenect_set_tilt_degs(freenect_device *dev, double angle); 160 int freenect_set_led(freenect_device *dev, freenect_led_options option); 161 void freenect_get_mks_accel(freenect_raw_tilt_state *state, double* x, double* y, double* z); 162 163 #ifdef __cplusplus 164 } 165 #endif 166 167 #endif // 168 169