fix: move RTL-SDR to userspace
This commit is contained in:
+8
-3
@@ -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)
|
||||
|
||||
@@ -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