mirror of https://github.com/wb2osz/direwolf.git
New branch for 64 bit processing. Probably not needed.
This commit is contained in:
parent
98b8949f3b
commit
7d58e40bdb
|
@ -114,7 +114,7 @@ struct hdlc_state_s {
|
||||||
|
|
||||||
int eas_fields_after_plus; /* Number of "-" characters after the "+". */
|
int eas_fields_after_plus; /* Number of "-" characters after the "+". */
|
||||||
|
|
||||||
uint32_t eotd_acc; /* Accumulate last recent 32 bits for EOTD. */
|
uint64_t eotd_acc; /* Accumulate last recent 32 bits for EOTD. */
|
||||||
|
|
||||||
int eotd_gathering; /* Decoding in progress - valid frame. */
|
int eotd_gathering; /* Decoding in progress - valid frame. */
|
||||||
};
|
};
|
||||||
|
@ -429,9 +429,13 @@ a good modem here and providing a result when it is received.
|
||||||
*
|
*
|
||||||
***********************************************************************************/
|
***********************************************************************************/
|
||||||
|
|
||||||
#define EOTD_PREAMBLE_AND_BARKER_CODE 0x55555712
|
#define EOTD_MAX_BYTES 8
|
||||||
#define HOTD_PREAMBLE_AND_BARKER_CODE 0x558f1129
|
|
||||||
#define EOTD_MAX_LEN 8
|
#define EOTD_PREAMBLE_AND_BARKER_CODE 0x48eaaaaa00000000ULL
|
||||||
|
#define EOTD_PREAMBLE_MASK 0xffffffff00000000ULL
|
||||||
|
|
||||||
|
#define HOTD_PREAMBLE_AND_BARKER_CODE 0x9488f1aa00000000ULL
|
||||||
|
#define HOTD_PREAMBLE_MASK 0xffffffff00000000ULL
|
||||||
|
|
||||||
static void eotd_rec_bit (int chan, int subchan, int slice, int raw, int future_use)
|
static void eotd_rec_bit (int chan, int subchan, int slice, int raw, int future_use)
|
||||||
{
|
{
|
||||||
|
@ -447,40 +451,40 @@ dw_printf("chan=%d subchan=%d slice=%d raw=%d\n", chan, subchan, slice, raw);
|
||||||
#endif
|
#endif
|
||||||
//dw_printf ("slice %d = %d\n", slice, raw);
|
//dw_printf ("slice %d = %d\n", slice, raw);
|
||||||
|
|
||||||
// Accumulate most recent 32 bits in MSB-first order.
|
// Accumulate most recent 32 bits in LSB-first order.
|
||||||
|
|
||||||
H->eotd_acc <<= 1;
|
H->eotd_acc >>= 1;
|
||||||
H->eotd_acc |= raw;
|
if (raw) {
|
||||||
|
H->eotd_acc |= 0x8000000000000000UL;
|
||||||
|
}
|
||||||
|
|
||||||
int done = 0;
|
int done = 0;
|
||||||
|
|
||||||
if (!H->eotd_gathering &&
|
if (!H->eotd_gathering &&
|
||||||
(H->eotd_acc == EOTD_PREAMBLE_AND_BARKER_CODE ||
|
((H->eotd_acc & EOTD_PREAMBLE_MASK) == EOTD_PREAMBLE_AND_BARKER_CODE ||
|
||||||
H->eotd_acc == HOTD_PREAMBLE_AND_BARKER_CODE)) {
|
(H->eotd_acc & HOTD_PREAMBLE_MASK) == HOTD_PREAMBLE_AND_BARKER_CODE)) {
|
||||||
#ifdef EOTD_DEBUG
|
#ifdef EOTD_DEBUG
|
||||||
dw_printf ("Barker Code Found %x\n", H->eotd_acc);
|
dw_printf ("Barker Code Found %llx\n", H->eotd_acc);
|
||||||
#endif
|
#endif
|
||||||
H->olen = 0;
|
H->olen = 0;
|
||||||
H->eotd_gathering = 1;
|
H->eotd_gathering = 1;
|
||||||
H->frame_len = 0;
|
H->frame_len = 0;
|
||||||
|
H->eotd_acc = 0ULL;
|
||||||
}
|
}
|
||||||
else if (H->eotd_gathering) {
|
else if (H->eotd_gathering) {
|
||||||
H->olen++;
|
H->olen++;
|
||||||
|
|
||||||
if (H->olen == 8) {
|
if (H->olen == EOTD_MAX_BYTES * 8) {
|
||||||
H->olen = 0;
|
H->frame_len = EOTD_MAX_BYTES;
|
||||||
char ch = H->eotd_acc & 0xff;
|
for (int i = EOTD_MAX_BYTES -1; i >=0; i--) {
|
||||||
H->frame_buf[H->frame_len++] = ch;
|
H->frame_buf[i] = H->eotd_acc & 0xff;
|
||||||
H->frame_buf[H->frame_len] = '\0';
|
H->eotd_acc >>= 8;
|
||||||
//dw_printf ("frame_buf = %s\n", H->frame_buf);
|
}
|
||||||
|
|
||||||
if (H->frame_len == EOTD_MAX_LEN) { // FIXME: look for other places with max length
|
|
||||||
done = 1;
|
done = 1;
|
||||||
#ifdef EOTD_DEBUG
|
#ifdef EOTD_DEBUG
|
||||||
for (int ii=0; ii < EOTD_MAX_LEN; ii++) {dw_printf("%02x ", H->frame_buf[ii]); } dw_printf("\n");
|
for (int ii=0; ii < EOTD_MAX_BYTES; ii++) {dw_printf("%02x ", H->frame_buf[ii]); } dw_printf("\n");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (done) {
|
if (done) {
|
||||||
|
|
Loading…
Reference in New Issue