aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data_recorder.c43
-rw-r--r--include/survive.h3
-rw-r--r--src/disambiguator.c17
-rw-r--r--src/disambiguator.h (renamed from include/disambiguator.h)14
-rw-r--r--src/survive.c4
-rw-r--r--src/survive_data.c10
6 files changed, 45 insertions, 46 deletions
diff --git a/data_recorder.c b/data_recorder.c
index 913f8e0..cdcf4f5 100644
--- a/data_recorder.c
+++ b/data_recorder.c
@@ -33,51 +33,44 @@ void HandleMotion( int x, int y, int mask )
{
}
-int bufferpts[32*2];
-char buffermts[32*128];
-int buffertimeto[32];
+int bufferpts[32*2*3];
+char buffermts[32*128*3];
+int buffertimeto[32*3];
void my_light_process( struct SurviveObject * so, int sensor_id, int acode, int timeinsweep, uint32_t timecode, uint32_t length )
{
if( acode == -1 ) return;
+ int jumpoffset = sensor_id;
+ if( strcmp( so->codename, "WM0" ) == 0 ) jumpoffset += 32;
+ else if( strcmp( so->codename, "WM1" ) == 0 ) jumpoffset += 64;
+
+
if( acode == 0 || acode == 2 ) //data = 0
{
printf( "L X %s %d %d %d %d %d\n", so->codename, timecode, sensor_id, acode, timeinsweep, length );
- if( strcmp( so->codename, "HMD" ) == 0 )
- {
- bufferpts[sensor_id*2+0] = (timeinsweep-100000)/500;
- buffertimeto[sensor_id] = 0;
- }
+ bufferpts[jumpoffset*2+0] = (timeinsweep-100000)/500;
+ buffertimeto[jumpoffset] = 0;
}
if( acode == 1 || acode == 3 ) //data = 1
{
printf( "L Y %s %d %d %d %d %d\n", so->codename, timecode, sensor_id, acode, timeinsweep, length );
- if( strcmp( so->codename, "HMD" ) == 0 )
- {
- bufferpts[sensor_id*2+1] = (timeinsweep-100000)/500;
- buffertimeto[sensor_id] = 0;
- }
+ bufferpts[jumpoffset*2+1] = (timeinsweep-100000)/500;
+ buffertimeto[jumpoffset] = 0;
}
if( acode == 4 || acode == 6 ) //data = 0
{
printf( "R X %s %d %d %d %d %d\n", so->codename, timecode, sensor_id, acode, timeinsweep, length );
- if( strcmp( so->codename, "HMD" ) == 0 )
- {
- bufferpts[sensor_id*2+0] = (timeinsweep-100000)/500;
- buffertimeto[sensor_id] = 0;
- }
+ bufferpts[jumpoffset*2+0] = (timeinsweep-100000)/500;
+ buffertimeto[jumpoffset] = 0;
}
if( acode == 5 || acode == 7 ) //data = 1
{
printf( "R Y %s %d %d %d %d %d\n", so->codename, timecode, sensor_id, acode, timeinsweep, length );
- if( strcmp( so->codename, "HMD" ) == 0 )
- {
- bufferpts[sensor_id*2+1] = (timeinsweep-100000)/500;
- buffertimeto[sensor_id] = 0;
- }
+ bufferpts[jumpoffset*2+1] = (timeinsweep-100000)/500;
+ buffertimeto[jumpoffset] = 0;
}
}
@@ -105,9 +98,9 @@ void * GuiThread( void * v )
CNFGGetDimensions( &screenx, &screeny );
int i;
- for( i = 0; i < 32; i++ )
+ for( i = 0; i < 32*3; i++ )
{
- if( buffertimeto[i] < 5 )
+ if( buffertimeto[i] < 50 )
{
uint32_t color = i * 3231349;
uint8_t r = color & 0xff;
diff --git a/include/survive.h b/include/survive.h
index e29c82b..889e24d 100644
--- a/include/survive.h
+++ b/include/survive.h
@@ -1,7 +1,6 @@
#ifndef _SURVIVE_H
#define _SURVIVE_H
-#include "disambiguator.h"
#include <stdint.h>
#define SV_FLOAT double
@@ -38,7 +37,7 @@ struct SurviveObject
int32_t total_photo_time;
int32_t total_pulsecode_time;
#else
- disambiguator d;
+ struct disambiguator * d;
#endif
};
diff --git a/src/disambiguator.c b/src/disambiguator.c
index f03299d..8a5a993 100644
--- a/src/disambiguator.c
+++ b/src/disambiguator.c
@@ -2,11 +2,11 @@
//
//All MIT/x11 Licensed Code in this file may be relicensed freely under the GPL or LGPL licenses.
-#include "../include/disambiguator.h"
+#include "disambiguator.h"
#include <stdlib.h>
#include <string.h>
-void disambiguator_init(disambiguator * d) {
+void disambiguator_init( struct disambiguator * d ) {
memset(&(d->times), 0x0, sizeof(d->times));
memset(&(d->scores), 0x0, sizeof(d->scores));
d->state = D_STATE_UNLOCKED;
@@ -14,9 +14,10 @@ void disambiguator_init(disambiguator * d) {
d->max_confidence = 0;
}
-inline void disambiguator_discard(disambiguator * d, long age);
+inline void disambiguator_discard( struct disambiguator * d, long age );
-void disambiguator_discard(disambiguator * d, long age) {
+void disambiguator_discard( struct disambiguator * d, long age )
+{
int confidence = 0;
for (unsigned int i = 0; i < DIS_NUM_VALUES; ++i) {
if (d->times[i] != 0 && d->times[i] < age) {
@@ -31,9 +32,10 @@ void disambiguator_discard(disambiguator * d, long age) {
d->max_confidence = confidence;
}
-inline int disambiguator_find_nearest(disambiguator * d, long time, int max_diff);
+inline int disambiguator_find_nearest( struct disambiguator * d, long time, int max_diff );
-int disambiguator_find_nearest(disambiguator * d, long time, int max_diff) {
+int disambiguator_find_nearest( struct disambiguator * d, long time, int max_diff )
+{
int diff = max_diff; // max allowed diff for a match
int idx = -1;
for (unsigned int i = 0; i < DIS_NUM_VALUES; ++i) {
@@ -49,7 +51,8 @@ int disambiguator_find_nearest(disambiguator * d, long time, int max_diff) {
return idx;
}
-pulse_type disambiguator_step(disambiguator * d, long time, int length) {
+pulse_type disambiguator_step( struct disambiguator * d, long time, int length)
+{
if (length < 2750) {
return d->state == D_STATE_LOCKED ? P_SWEEP : P_UNKNOWN;
}
diff --git a/include/disambiguator.h b/src/disambiguator.h
index a17fc8d..0db19de 100644
--- a/include/disambiguator.h
+++ b/src/disambiguator.h
@@ -18,21 +18,21 @@ typedef enum {
P_SWEEP = 2,
} pulse_type;
-typedef struct disambiguator_ {
+struct disambiguator {
long times[DIS_NUM_VALUES];
int scores[DIS_NUM_VALUES];
dis_state state;
long last;
int max_confidence;
char code;
-} disambiguator;
+};
-typedef struct classified_pulse_ {
+struct classified_pulse_ {
pulse_type t;
int length;
-} classified_pulse;
+};
-void disambiguator_init(disambiguator * d);
-pulse_type disambiguator_step(disambiguator * d, long time, int length);
+void disambiguator_init( struct disambiguator * d);
+pulse_type disambiguator_step( struct disambiguator * d, long time, int length);
-#endif /* DISAMBIGUATOR_H */ \ No newline at end of file
+#endif /* DISAMBIGUATOR_H */
diff --git a/src/survive.c b/src/survive.c
index b12c4cc..73df29d 100644
--- a/src/survive.c
+++ b/src/survive.c
@@ -8,6 +8,7 @@
#include <jsmn.h>
#include <string.h>
#include <zlib.h>
+#include "disambiguator.h"
static int jsoneq(const char *json, jsmntok_t *tok, const char *s) {
if (tok->type == JSMN_STRING && (int) strlen(s) == tok->end - tok->start &&
@@ -146,12 +147,15 @@ struct SurviveContext * survive_init()
ctx->headset.ctx = ctx;
memcpy( ctx->headset.codename, "HMD", 4 );
+ ctx->headset.d = calloc( 1, sizeof( struct disambiguator ) );
ctx->watchman[0].ctx = ctx;
memcpy( ctx->watchman[0].codename, "WM0", 4 );
+ ctx->watchman[0].d = calloc( 1, sizeof( struct disambiguator ) );
ctx->watchman[1].ctx = ctx;
memcpy( ctx->watchman[1].codename, "WM1", 4 );
+ ctx->watchman[1].d = calloc( 1, sizeof( struct disambiguator ) );
//USB must happen last.
if( r = survive_usb_init( ctx ) )
diff --git a/src/survive_data.c b/src/survive_data.c
index ef35e0e..cb3e8a2 100644
--- a/src/survive_data.c
+++ b/src/survive_data.c
@@ -42,18 +42,18 @@ static void handle_lightcap( struct SurviveObject * so, struct LightcapElement *
if( le->type != 0xfe || le->length < 50 ) return;
//le->timestamp += (le->length/2);
- int32_t offset = le->timestamp - so->d.last;
- switch(disambiguator_step(&(so->d), le->timestamp, le->length)) {
+ int32_t offset = le->timestamp - so->d->last;
+ switch( disambiguator_step( so->d, le->timestamp, le->length ) ) {
default:
case P_UNKNOWN:
// not currently locked
case P_SYNC:
ct->lightproc( so, le->sensor_id, -1, 0, le->timestamp, offset );
- so->d.code = ((le->length+125)/250) - 12;
+ so->d->code = ((le->length+125)/250) - 12;
break;
case P_SWEEP:
- if (so->d.code & 1) return;
- ct->lightproc( so, le->sensor_id, so->d.code >> 1, offset, le->timestamp, le->length );
+ if (so->d->code & 1) return;
+ ct->lightproc( so, le->sensor_id, so->d->code >> 1, offset, le->timestamp, le->length );
break;
}
#if 0