aboutsummaryrefslogtreecommitdiff
path: root/include/survive.h
diff options
context:
space:
mode:
authorultramn <dchapm2@umbc.edu>2017-02-19 11:02:20 -0800
committerultramn <dchapm2@umbc.edu>2017-02-19 11:02:20 -0800
commit771ca61466c7b510d42bade3a8b607fabac49c32 (patch)
treef45cab2bb491a206cebb6c6c75fd86d478a9ad53 /include/survive.h
parente593db4c3a3575f826682d5eb9e402372aa1ba98 (diff)
parentbd89d46cb01f7069166e85f017f169e07acc7094 (diff)
downloadlibsurvive-771ca61466c7b510d42bade3a8b607fabac49c32.tar.gz
libsurvive-771ca61466c7b510d42bade3a8b607fabac49c32.tar.bz2
plot_lighthouse/Makefile
Diffstat (limited to 'include/survive.h')
-rw-r--r--include/survive.h56
1 files changed, 40 insertions, 16 deletions
diff --git a/include/survive.h b/include/survive.h
index d29b487..3e8dc35 100644
--- a/include/survive.h
+++ b/include/survive.h
@@ -3,13 +3,19 @@
#include <stdint.h>
-#define SV_FLOAT double
+#ifndef FLT
+#define FLT double
+#endif
struct SurviveContext;
//DANGER: This structure may be redefined. Note that it is logically split into 64-bit chunks
//for optimization on 32- and 64-bit systems.
+//Careful with this, you can't just add another one right now, would take minor changes in survive_data.c and the cal tools.
+//It will also require a recompile. TODO: revisit this and correct the comment once fixed.
+#define NUM_LIGHTHOUSES 2
+
struct SurviveObject
{
struct SurviveContext * ctx;
@@ -25,21 +31,27 @@ struct SurviveObject
int8_t ison:1;
int8_t additional_flags:6;
- SV_FLOAT * sensor_locations;
- SV_FLOAT * sensor_normals;
+ FLT * sensor_locations;
+ FLT * sensor_normals;
+
+ //Timing sensitive data (mostly for disambiguation)
+ int32_t timebase_hz; //48,000,000 for normal vive hardware. (checked)
+ int32_t timecenter_ticks; //200,000 for normal vive hardware. (checked)
+ int32_t pulsedist_max_ticks; //500,000 for normal vive hardware. (guessed)
+ int32_t pulselength_min_sync; //2,200 for normal vive hardware. (guessed)
+ int32_t pulse_in_clear_time; //35,000 for normal vive hardware. (guessed)
+ int32_t pulse_max_for_sweep; //1,800 for normal vive hardware. (guessed)
+ int32_t pulse_synctime_offset; //20,000 for normal vive hardware. (guessed)
+ int32_t pulse_synctime_slack; //5,000 for normal vive hardware. (guessed)
int8_t nr_locations;
//Flood info, for calculating which laser is currently sweeping.
int8_t oldcode;
-
- #ifdef USE_OLD_DISAMBIGUATOR
- uint32_t last_master_time;
- uint32_t last_slave_time;
- int32_t last_photo_length;
- #else
- uint32_t last_master_time;
- struct disambiguator * d;
- #endif
+ int8_t sync_set_number; //0 = master, 1 = slave, -1 = fault.
+ int8_t did_handle_ootx; //If unset, will send lightcap data for sync pulses next time a sensor is hit.
+ uint32_t last_time[NUM_LIGHTHOUSES];
+ uint32_t last_length[NUM_LIGHTHOUSES];
+ uint32_t recent_sync_time;
uint32_t last_lighttime; //May be a 24- or 32- bit number depending on what device.
@@ -47,17 +59,19 @@ struct SurviveObject
int tsl;
};
-typedef void (*text_feedback_fnptr)( struct SurviveContext * ctx, const char * fault );
+typedef void (*text_feedback_func)( struct SurviveContext * ctx, const char * fault );
typedef void (*light_process_func)( struct SurviveObject * so, int sensor_id, int acode, int timeinsweep, uint32_t timecode, uint32_t length );
typedef void (*imu_process_func)( struct SurviveObject * so, int16_t * accelgyro, uint32_t timecode, int id );
+typedef void (*angle_process_func)( struct SurviveObject * so, int sensor_id, int acode, uint32_t timecode, FLT length, FLT angle );
struct SurviveContext * survive_init();
//For any of these, you may pass in 0 for the function pointer to use default behavior.
-void survive_install_info_fn( struct SurviveContext * ctx, text_feedback_fnptr fbp );
-void survive_install_error_fn( struct SurviveContext * ctx, text_feedback_fnptr fbp );
+void survive_install_info_fn( struct SurviveContext * ctx, text_feedback_func fbp );
+void survive_install_error_fn( struct SurviveContext * ctx, text_feedback_func fbp );
void survive_install_light_fn( struct SurviveContext * ctx, light_process_func fbp );
void survive_install_imu_fn( struct SurviveContext * ctx, imu_process_func fbp );
+void survive_install_angle_fn( struct SurviveContext * ctx, angle_process_func fbp );
void survive_close( struct SurviveContext * ctx );
int survive_poll();
@@ -67,8 +81,18 @@ struct SurviveObject * survive_get_so_by_name( struct SurviveContext * ctx, cons
//Utilitiy functions.
int survive_simple_inflate( struct SurviveContext * ctx, const char * input, int inlen, char * output, int outlen );
-//TODO: Need to make this do haptic responses for hands.
+//TODO: Need to make this do haptic responses for hands.
int survive_usb_send_magic( struct SurviveContext * ctx, int on );
+//Install the calibrator.
+void survive_cal_install( struct SurviveContext * ctx );
+
+//Call these from your callback if overridden.
+//Accept higher-level data.
+void survive_default_light_process( struct SurviveObject * so, int sensor_id, int acode, int timeinsweep, uint32_t timecode, uint32_t length );
+void survive_default_imu_process( struct SurviveObject * so, int16_t * accelgyro, uint32_t timecode, int id );
+void survive_default_angle_process( struct SurviveObject * so, int sensor_id, int acode, uint32_t timecode, FLT length, FLT angle );
+
+
#endif