55 lines
1.5 KiB
C++
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");
|
|
}
|