sdrangel/modemm17/M17Synchronizer.h

36 wiersze
700 B
C
Czysty Zwykły widok Historia

2022-07-20 07:07:00 +00:00
// Copyright 2020 Mobilinkd LLC.
#pragma once
#include <cstdint>
#include "Util.h"
2022-07-04 21:03:07 +00: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 21:03:07 +00:00
} // modemm17