1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-11-18 14:21:49 -05:00
sdrangel/modemm17/M17Synchronizer.h

36 lines
700 B
C
Raw Normal View History

2022-07-20 03:07:00 -04:00
// Copyright 2020 Mobilinkd LLC.
#pragma once
#include <cstdint>
#include "Util.h"
2022-07-04 17:03:07 -04:00
namespace modemm17
{
struct M17Synchronizer
{
uint16_t expected_;
int allowable_errors_;
uint16_t buffer_ = 0;
M17Synchronizer(uint16_t word = 0x3243, int bit_errors = 1)
: expected_(word), allowable_errors_(bit_errors)
{}
bool operator()(int bits)
{
// Add one symbol (2 bits) of data to the synchronizer.
// Returns true when a sync word has been detected.
buffer_ = ((buffer_ << 2) | bits) & 0xFFFF;
auto tmp = buffer_ ^ expected_;
return popcount(tmp) <= allowable_errors_;
}
void reset() { buffer_ = 0; }
};
2022-07-04 17:03:07 -04:00
} // modemm17