diff options
Diffstat (limited to 'controller/fw/src/protocol.c')
-rw-r--r-- | controller/fw/src/protocol.c | 44 |
1 files changed, 0 insertions, 44 deletions
diff --git a/controller/fw/src/protocol.c b/controller/fw/src/protocol.c deleted file mode 100644 index 6b7d8b7..0000000 --- a/controller/fw/src/protocol.c +++ /dev/null @@ -1,44 +0,0 @@ - -#include <assert.h> - -#include "sr_global.h" -#include "dsss_demod.h" -#include "con_usart.h" -#include "rslib.h" -#include "crypto.h" - -void handle_dsss_received(uint8_t data[static TRANSMISSION_SYMBOLS]) { - /* Console status output */ - con_printf("DSSS data received: "); - for (int i=0; i<TRANSMISSION_SYMBOLS; i++) { - int x = (data[i]>>1) * (data[i]&1 ? 1 : -1); - con_printf("%3d ", x); - } - con_printf("\r\n"); - - /* Run reed-solomon error correction */ - const int sym_bits = DSSS_GOLD_CODE_NBITS + 1; /* +1 for amplitude sign bit */ - /* TODO identify erasures in DSSS demod layer */ - (void) rslib_decode(sym_bits, TRANSMISSION_SYMBOLS, (char *)data); - /* TODO error detection & handling */ - - /* Re-bit-pack data buffer to be bit-continuous: - * [ . . a b c d e f ] [ . . g h i j k l ] [ . . m n o p q r ] ... - * ==> [ a b c d e f g h ] [ i j k l m n o p ] [ q r ... ] ... - */ - static_assert((TRANSMISSION_SYMBOLS - NPAR) * (DSSS_GOLD_CODE_NBITS + 1) == OOB_TRIGGER_LEN * 8); - for (uint8_t i=0, j=0; i < TRANSMISSION_SYMBOLS - NPAR; i++, j += sym_bits) { - uint32_t sym = data[i]; /* [ ... | . . X X X X X X ] for 5-bit dsss */ - data[i] = 0; /* clear for output */ - - sym <<= 8-sym_bits; /* left-align: [ ... | X X X X X X . . ] */ - sym <<= 8; /* shift to second byte: [ ... | X X X X X X . . | . . . . . . . . ]*/ - sym >>= (j%8); /* shift to bit write offset: [ ... | . . . . X X X X | X X . . . . . . ] for offset 4 */ - data[j/8] |= sym >> 8; /* write upper byte */ - data[j/8 + 1] |= sym & 0xff; /* write lower byte */ - } - - /* hand off to crypto.c */ - oob_message_received(data); -} - |