Skip to content

Commit b6c2eb3

Browse files
committed
Add ability to control IR projector brightness - fixes OpenKinect#433
Signed-off-by: Benn Snyder <[email protected]>
1 parent b2043d0 commit b6c2eb3

File tree

3 files changed

+65
-4
lines changed

3 files changed

+65
-4
lines changed

examples/glview.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,16 @@ void keyPressed(unsigned char key, int x, int y)
237237
freenect_set_flag(f_dev, FREENECT_NEAR_MODE, near_mode);
238238
near_mode = near_mode ? FREENECT_OFF : FREENECT_ON;
239239
}
240+
241+
if (key == '+') {
242+
uint16_t brightness = freenect_get_ir_brightness(f_dev) + 2;
243+
freenect_set_ir_brightness(f_dev, brightness);
244+
}
245+
if (key == '-') {
246+
uint16_t brightness = freenect_get_ir_brightness(f_dev) - 2;
247+
freenect_set_ir_brightness(f_dev, brightness);
248+
}
249+
240250
if (key == '1') {
241251
freenect_set_led(f_dev,LED_GREEN);
242252
}
@@ -259,6 +269,7 @@ void keyPressed(unsigned char key, int x, int y)
259269
if (key == '0') {
260270
freenect_set_led(f_dev,LED_OFF);
261271
}
272+
262273
if (key == 'o') {
263274
if (camera_rotate) {
264275
camera_rotate = 0;
@@ -420,7 +431,7 @@ void *freenect_threadfunc(void *arg)
420431
freenect_start_depth(f_dev);
421432
freenect_start_video(f_dev);
422433

423-
printf("'w' - tilt up, 's' - level, 'x' - tilt down, '0'-'6' - select LED mode \n");
434+
printf("'w' - tilt up, 's' - level, 'x' - tilt down, '0'-'6' - select LED mode, '+' & '-' - change IR intensity \n");
424435
printf("'f' - change video format, 'm' - mirror video, 'o' - rotate video with accelerometer \n");
425436
printf("'e' - auto exposure, 'b' - white balance, 'r' - raw color, 'n' - near mode (K4W only) \n");
426437

include/libfreenect.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,6 +670,24 @@ FREENECTAPI int freenect_set_depth_mode(freenect_device* dev, const freenect_fra
670670
*/
671671
FREENECTAPI int freenect_set_flag(freenect_device *dev, freenect_flag flag, freenect_flag_value value);
672672

673+
/**
674+
* Returns the brightness of the IR projector
675+
*
676+
* @param dev Device to get IR brightness
677+
*
678+
* @return IR brightness, UINT16_MAX if error
679+
*/
680+
FREENECTAPI uint16_t freenect_get_ir_brightness(freenect_device *dev);
681+
682+
/**
683+
* Sets the brightness of the IR projector
684+
*
685+
* @param dev Device to set IR brightness
686+
* @param brighness Brightness value in range 1 - 50
687+
*
688+
* @return 0 on success, < 0 if error
689+
*/
690+
FREENECTAPI int freenect_set_ir_brightness(freenect_device *dev, uint16_t brightness);
673691

674692
/**
675693
* Allows the user to specify a pointer to the audio firmware in memory for the Xbox 360 Kinect

src/flags.c

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,6 @@
3030
#include "flags.h"
3131

3232

33-
// freenect_set_flag is the only function exposed in libfreenect.h
34-
// The rest are available internally via #include flags.h
35-
3633
FN_INTERNAL int register_for_flag(int flag)
3734
{
3835
switch(flag)
@@ -96,6 +93,41 @@ int freenect_set_flag(freenect_device *dev, freenect_flag flag, freenect_flag_va
9693
return write_cmos_register(dev, 0x0106, cmos_value);
9794
}
9895

96+
uint16_t freenect_get_ir_brightness(freenect_device *dev)
97+
{
98+
freenect_context *ctx = dev->parent;
99+
100+
const uint16_t brightness = read_register(dev, 0x15);
101+
if (brightness == UINT16_MAX)
102+
{
103+
FN_WARNING("Failed to get IR brightness!");
104+
}
105+
106+
return brightness;
107+
}
108+
109+
int freenect_set_ir_brightness(freenect_device *dev, uint16_t brightness)
110+
{
111+
freenect_context *ctx = dev->parent;
112+
113+
if (brightness < 1)
114+
{
115+
brightness = 1;
116+
}
117+
if (brightness > 50)
118+
{
119+
brightness = 50;
120+
}
121+
122+
const int ret = write_register(dev, 0x15, brightness);
123+
if (ret < 0)
124+
{
125+
FN_WARNING("Failed to set IR brightness");
126+
}
127+
128+
return ret;
129+
}
130+
99131
typedef struct {
100132
uint8_t magic[2];
101133
uint16_t len;

0 commit comments

Comments
 (0)