aboutsummaryrefslogtreecommitdiff
path: root/tools/ootx_decode/ootx_decoder.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/ootx_decode/ootx_decoder.c')
-rw-r--r--tools/ootx_decode/ootx_decoder.c74
1 files changed, 63 insertions, 11 deletions
diff --git a/tools/ootx_decode/ootx_decoder.c b/tools/ootx_decode/ootx_decoder.c
index b386132..6ec0857 100644
--- a/tools/ootx_decode/ootx_decoder.c
+++ b/tools/ootx_decode/ootx_decoder.c
@@ -16,6 +16,7 @@
#define MAX_BUFF_SIZE 1024
void (*ootx_packet_clbk)(ootx_packet* packet) = NULL;
+void ootx_pump_bit(ootx_decoder_context *ctx, uint8_t dbit);
void ootx_init_decoder_context(ootx_decoder_context *ctx) {
ctx->buf_offset = 0;
@@ -45,26 +46,70 @@ void ootx_init_buffer() {
int8_t ootx_decode_lighthouse_number(uint8_t last_num, uint32_t ticks, int32_t delta) {
if (ticks<2000) return -1; //sweep
- if ((ticks > 2000) & (delta>100000)) return 0; //master
- if ((ticks > 2000) & (delta>10000)) return last_num+1; //a slave
+ if (delta>100000) return 0; //master
+ if (delta>10000) return 1; //a slave
return -1;
}
+uint8_t decode_internal(uint32_t length) {
+ uint16_t temp = length - 2880;
+// printf
-uint8_t ootx_decode_bit(uint32_t ticks) {
- ticks = ((ticks/500)*500)+500;
+#if BETTER_SAFE_THAN_FAST
+ if (temp < 0 || length > 6525) {
+ return -1;
+ }
+#endif
+
+ if ((temp % 500) < 150) {
+ return temp / 500;
+ }
- ticks-=3000;
- if (ticks>=2000) { ticks-=2000; }
- if (ticks>=1000) { return 0xFF; }
+ return -1;
+
+}
+
+uint8_t ootx_decode_bit(uint32_t length) {
+ length = ((length/500)*500)+500;
+
+ length-=3000;
+ if (length>=2000) { length-=2000; }
+ if (length>=1000) { return 0xFF; }
return 0x00;
}
+/*
+uint8_t ootx_decode_bit(uint32_t ticks) {
+ int8_t bits = decode_internal(ticks);
+ return bits&0x02;
+}
+*/
+
+void ootx_log_bit(ootx_decoder_context *ctx, uint32_t ticks) {
+ int8_t dbit = ootx_decode_bit(ticks);
+// printf("%d\n\n", dbit);
+ ctx->bit_count[(dbit&0x01)]++;
+// printf("%d %d %d\n", dbit, ctx->bit_count[0], ctx->bit_count[1]);
+}
+
+void ootx_pump_greatest_bit(ootx_decoder_context *ctx) {
+ //pump the bit
+ if (ctx->bit_count[0] > ctx->bit_count[1]) {
+// printf("Pump 0x00\n");
+ ootx_pump_bit( ctx, 0x00 );
+ } else {
+// printf("Pump 0xFF\n");
+ ootx_pump_bit( ctx, 0xFF );
+ }
+
+ ctx->bit_count[0] = 0;
+ ctx->bit_count[1] = 0;
+}
uint8_t ootx_detect_preamble(ootx_decoder_context *ctx, uint8_t dbit) {
ctx->preamble <<= 1;
ctx->preamble |= (0x01 & dbit);
- if ((ctx->preamble & 0x0001ffff) == 0x01) return 1;
+ if ((ctx->preamble & 0x0001ffff) == 0x00000001) return 1;
return 0;
}
@@ -92,8 +137,10 @@ void ootx_inc_buffer_offset(ootx_decoder_context *ctx) {
void ootx_write_to_buffer(ootx_decoder_context *ctx, uint8_t dbit) {
uint8_t *current_byte = ctx->buffer + ctx->buf_offset;
// printf("%d\n", dbit);
- *current_byte >>= 1;
- *current_byte |= (0x80 & dbit);
+// *current_byte >>= 1;
+// *current_byte |= (0x80 & dbit);
+ *current_byte <<= 1;
+ *current_byte |= (0x01 & dbit);
++(ctx->bits_written);
if (ctx->bits_written>7) {
ctx->bits_written=0;
@@ -103,7 +150,12 @@ void ootx_write_to_buffer(ootx_decoder_context *ctx, uint8_t dbit) {
}
void ootx_process_bit(ootx_decoder_context *ctx, uint32_t length) {
- uint8_t dbit = ootx_decode_bit(length);
+ int8_t dbit = ootx_decode_bit(length);
+ ootx_pump_bit( ctx, dbit );
+}
+
+void ootx_pump_bit(ootx_decoder_context *ctx, uint8_t dbit) {
+// uint8_t dbit = ootx_decode_bit(length);
++(ctx->bits_processed);
// printf("z %d %d\n", bits_processed,dbit);