aboutsummaryrefslogtreecommitdiff
path: root/src/disambiguator.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/disambiguator.h')
-rw-r--r--src/disambiguator.h49
1 files changed, 39 insertions, 10 deletions
diff --git a/src/disambiguator.h b/src/disambiguator.h
index 0db19de..dbd4921 100644
--- a/src/disambiguator.h
+++ b/src/disambiguator.h
@@ -4,35 +4,64 @@
#ifndef DISAMBIGUATOR_H
#define DISAMBIGUATOR_H
-#define DIS_NUM_VALUES 8
+// Determines the number of samples stored in the disambiguator struct.
+// Has to be higher than the maximum number of pulses expected between sync pulses.
+#define DIS_NUM_VALUES 48
+#define DIS_NUM_PULSES_BEFORE_LOCK 30
+#include <stdint.h>
+/**
+ * internal disambiguator state
+ */
typedef enum {
D_STATE_INVALID = 0,
D_STATE_LOCKED = 1,
D_STATE_UNLOCKED = -1,
} dis_state;
+/**
+ * classification result
+ */
typedef enum {
P_UNKNOWN = 0,
P_SYNC = 1,
P_SWEEP = 2,
} pulse_type;
+/**
+ * internal state of the disambiguator
+ */
struct disambiguator {
- long times[DIS_NUM_VALUES];
- int scores[DIS_NUM_VALUES];
+ // the timestamps of the recorded pulses
+ uint32_t times[DIS_NUM_VALUES];
+ // countes how many sync pulses we have seen, that match the time offset at the same offset
+ uint16_t scores[DIS_NUM_VALUES];
+ // current state
dis_state state;
- long last;
+ // last sync pulse time
+ uint32_t last;
+ // the absolute maximum counter value
int max_confidence;
+ // the last code type seen
char code;
};
-struct classified_pulse_ {
- pulse_type t;
- int length;
-};
+/**
+ * Initialize a new disambiguator. calloc or memset with 0x00 will work just as well.
+ *
+ * @param d Pointer to the struct
+ */
void disambiguator_init( struct disambiguator * d);
-pulse_type disambiguator_step( struct disambiguator * d, long time, int length);
-#endif /* DISAMBIGUATOR_H */
+/**
+ * Feed in one pulse to have if classified.
+ *
+ * @param d Pointer to disambiguator state
+ * @param time Rising edge of the pulse
+ * @param length Length of the pulse
+ * @return Classification result
+ */
+pulse_type disambiguator_step( struct disambiguator * d, uint32_t time, int length);
+
+#endif /* DISAMBIGUATOR_H */ \ No newline at end of file