fix: move RTL-SDR to userspace

This commit is contained in:
2026-08-29 10:02:32 +02:00
parent b1f1cfe32b
commit 5cd5c2e6be
35 changed files with 1922 additions and 1592 deletions
+8 -3
View File
@@ -3,10 +3,11 @@ CXXFLAGS ?= -std=c++20 -O2 -Wall -Wextra
HTTP_TEST := http_test
SVG_TEST := svg_renderer_test
RTLSDR_TEST := rtlsdr_r820t_test
.PHONY: all check clean
all: $(HTTP_TEST) $(SVG_TEST)
all: $(HTTP_TEST) $(SVG_TEST) $(RTLSDR_TEST)
$(HTTP_TEST): http_test.cpp
$(CXX) $(CXXFLAGS) -I../programs/include \
@@ -15,9 +16,13 @@ $(HTTP_TEST): http_test.cpp
$(SVG_TEST): svg_renderer_test.cpp ../programs/include/gui/svg.hpp
$(CXX) $(CXXFLAGS) -I../programs/include $< -o $@
check: $(HTTP_TEST) $(SVG_TEST)
$(RTLSDR_TEST): rtlsdr_r820t_test.cpp ../programs/src/rtlsdr/r820t.cpp
$(CXX) $(CXXFLAGS) -I../programs/src/rtlsdr $^ -o $@
check: $(HTTP_TEST) $(SVG_TEST) $(RTLSDR_TEST)
./$(HTTP_TEST)
./$(SVG_TEST)
./$(RTLSDR_TEST)
clean:
rm -f $(HTTP_TEST) $(SVG_TEST)
rm -f $(HTTP_TEST) $(SVG_TEST) $(RTLSDR_TEST)
+54
View File
@@ -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");
}