Skip to content

Commit 68d949d

Browse files
committed
Merge accelerometers.c and motors.c into tilt.c, clean up a bit
We don't need two calls for degrees and radians for tilt, since everyone knows how to trivially convert between them. Signed-off-by: Hector Martin <[email protected]>
1 parent 85f7d40 commit 68d949d

File tree

5 files changed

+39
-79
lines changed

5 files changed

+39
-79
lines changed

c/examples/glview.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ int main(int argc, char **argv)
273273
printf("Could not open device\n");
274274
return 1;
275275
}
276-
freenect_set_tilt_in_degrees(f_dev,0);
276+
freenect_set_tilt_degs(f_dev,0);
277277
freenect_set_led(f_dev,LED_RED);
278278
freenect_set_depth_callback(f_dev, depth_cb);
279279
freenect_set_rgb_callback(f_dev, rgb_cb);
@@ -292,9 +292,9 @@ int main(int argc, char **argv)
292292
while(!die && freenect_process_events(f_ctx) >= 0 )
293293
{
294294
int16_t ax,ay,az;
295-
freenect_get_raw_accelerometers(f_dev, &ax, &ay, &az);
295+
freenect_get_raw_accel(f_dev, &ax, &ay, &az);
296296
double dx,dy,dz;
297-
freenect_get_mks_accelerometers(f_dev, &dx, &dy, &dz);
297+
freenect_get_mks_accel(f_dev, &dx, &dy, &dz);
298298
printf("\r raw acceleration: %4d %4d %4d mks acceleration: %4f %4f %4f", ax, ay, az, dx, dy, dz);
299299
fflush(stdout);
300300
}

c/include/libfreenect.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,11 @@ int freenect_start_rgb(freenect_device *dev);
100100
int freenect_stop_depth(freenect_device *dev);
101101
int freenect_stop_rgb(freenect_device *dev);
102102

103-
int freenect_set_tilt_in_degrees(freenect_device *dev, double angle);
104-
int freenect_set_tilt_in_radians(freenect_device *dev, double angle);
103+
int freenect_set_tilt_degs(freenect_device *dev, double angle);
105104
int freenect_set_led(freenect_device *dev, freenect_led_options option);
106105

107-
int freenect_get_raw_accelerometers(freenect_device *dev, int16_t* x, int16_t* y, int16_t* z);
108-
int freenect_get_mks_accelerometers(freenect_device *dev, double* x, double* y, double* z);
106+
int freenect_get_raw_accel(freenect_device *dev, int16_t* x, int16_t* y, int16_t* z);
107+
int freenect_get_mks_accel(freenect_device *dev, double* x, double* y, double* z);
109108

110109
#ifdef __cplusplus
111110
}

c/lib/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ find_package(Threads REQUIRED)
55
find_package(USB REQUIRED)
66
include_directories(${USB_INCLUDE_DIRS})
77

8-
SET(SRC motors.c accelerometers.c core.c cameras.c usb_libusb10.c)
8+
SET(SRC core.c tilt.c cameras.c usb_libusb10.c)
99

1010
if (NOT PROJECT_OS_WIN)
1111
add_library (freenect SHARED ${SRC} ${CMAKE_CURRENT_BINARY_DIR}/inits.c)

c/lib/motors.c

Lines changed: 0 additions & 63 deletions
This file was deleted.

c/lib/accelerometers.c renamed to c/lib/tilt.c

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,38 +31,62 @@
3131
#include <math.h>
3232

3333
#include "freenect_internal.h"
34+
35+
// The kinect can tilt from +31 to -31 degrees in what looks like 1 degree increments
36+
// The control input looks like 2*desired_degrees
37+
#define MAX_TILT_ANGLE 31
38+
#define MIN_TILT_ANGLE (-31)
39+
3440
#define GRAVITY 9.80665
3541

36-
int freenect_get_raw_accelerometers(freenect_device *dev, int16_t* x, int16_t* y, int16_t* z)
42+
int freenect_set_tilt_degs(freenect_device *dev, double angle)
43+
{
44+
int ret;
45+
uint8_t empty[0x1];
46+
47+
angle = (angle<MIN_TILT_ANGLE) ? MIN_TILT_ANGLE : ((angle>MAX_TILT_ANGLE) ? MAX_TILT_ANGLE : angle);
48+
angle = angle * 2;
49+
50+
ret = fnusb_control(&dev->usb_motor, 0x40, 0x31, (uint16_t)angle, 0x0, empty, 0x0);
51+
return ret;
52+
}
53+
54+
int freenect_set_led(freenect_device *dev, freenect_led_options option)
3755
{
38-
unsigned char buf[10];
56+
int ret;
57+
uint8_t empty[0x1];
58+
ret = fnusb_control(&dev->usb_motor, 0x40, 0x06, (uint16_t)option, 0x0, empty, 0x0);
59+
return ret;
60+
}
61+
62+
int freenect_get_raw_accel(freenect_device *dev, int16_t* x, int16_t* y, int16_t* z)
63+
{
64+
uint8_t buf[10];
3965
uint16_t ux, uy, uz;
4066
int ret = fnusb_control(&dev->usb_motor, 0xC0, 0x32, 0x0, 0x0, buf, 10);
4167
if (ret != 10)
4268
printf("Error in accelerometer reading, libusb_control_transfer returned %d\n", ret);
43-
69+
4470
ux = ((uint16_t)buf[2] << 8) | buf[3];
4571
uy = ((uint16_t)buf[4] << 8) | buf[5];
4672
uz = ((uint16_t)buf[6] << 8) | buf[7];
4773
*x = (int16_t)ux;
4874
*y = (int16_t)uy;
4975
*z = (int16_t)uz;
50-
76+
5177
return ret;
5278
}
5379

54-
int freenect_get_mks_accelerometers(freenect_device *dev, double* x, double* y, double* z)
80+
int freenect_get_mks_accel(freenect_device *dev, double* x, double* y, double* z)
5581
{
5682
//the documentation for the accelerometer (http://www.kionix.com/Product%20Sheets/KXSD9%20Product%20Brief.pdf)
5783
//states there are 819 counts/g
5884
int16_t ix, iy, iz;
59-
int ret = freenect_get_raw_accelerometers(dev,&ix,&iy,&iz);
85+
int ret = freenect_get_raw_accel(dev,&ix,&iy,&iz);
6086

6187
*x = (double)ix/FREENECT_COUNTS_PER_G*GRAVITY;
6288
*y = (double)iy/FREENECT_COUNTS_PER_G*GRAVITY;
6389
*z = (double)iz/FREENECT_COUNTS_PER_G*GRAVITY;
6490

6591
return ret;
6692
}
67-
68-

0 commit comments

Comments
 (0)