fix: move RTL-SDR to userspace
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
#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");
|
||||
}
|
||||
Reference in New Issue
Block a user