Files
MontaukOS/tests/rtlsdr_r820t_test.cpp
2026-08-29 10:02:32 +02:00

55 lines
1.5 KiB
C++

#include "../programs/src/rtlsdr/r820t.hpp"
#include <cassert>
#include <cstdio>
#include <cstring>
#include <vector>
struct rtlsdr_device {};
struct I2cMessage {
uint8_t address;
std::vector<uint8_t> data;
};
static std::vector<I2cMessage> g_writes;
namespace rtlsdr_internal {
bool RtlI2cWrite(rtlsdr_device*, uint8_t address, const uint8_t* data, uint8_t len) {
g_writes.push_back({address, std::vector<uint8_t>(data, data + len)});
return true;
}
bool RtlI2cRead(rtlsdr_device*, uint8_t, uint8_t* data, uint8_t len) {
std::memset(data, 0, len);
if (len == 1) data[0] = R820T_CHECK_VAL;
if (len == 5) data[4] = 0x80; // bit-reversed logical value 0x01
if (len == 3) data[2] = 0x02; // bit-reversed PLL lock bit 0x40
return true;
}
}
int main() {
using namespace rtlsdr_internal;
rtlsdr_device owner;
assert(R820tDetect(&owner));
R820tDev tuner{};
assert(R820tInit(tuner, &owner, 28800000, 3570000));
assert(tuner.inited);
assert(R820tSetFreq(tuner, 100100000));
assert(tuner.hasLock);
assert(R820tSetGain(tuner, 0, 0));
assert(R820tSetGain(tuner, 1, 297));
R820tStandby(tuner);
int gainCount = 0;
const int* gains = R820tGainTable(&gainCount);
assert(gainCount == 29);
assert(gains[0] == 0 && gains[gainCount - 1] == 496);
assert(!g_writes.empty());
for (const auto& message : g_writes) {
assert(message.address == R820T_I2C_ADDR);
assert(!message.data.empty() && message.data.size() <= 8);
}
std::puts("rtlsdr R820T transport test passed");
}