#include "../programs/src/rtlsdr/r820t.hpp" #include #include #include #include struct rtlsdr_device {}; struct I2cMessage { uint8_t address; std::vector data; }; static std::vector 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(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"); }