mirror of
https://github.com/AlexandreRouma/SDRPlusPlus.git
synced 2024-12-24 18:08:27 +01:00
Added missing files
This commit is contained in:
parent
8a2d0fe56b
commit
7758c40bd7
101
source_modules/rtl_tcp_source/src/rtl_tcp_client.cpp
Normal file
101
source_modules/rtl_tcp_source/src/rtl_tcp_client.cpp
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
#include "rtl_tcp_client.h"
|
||||||
|
|
||||||
|
namespace rtltcp {
|
||||||
|
Client::Client(std::shared_ptr<net::Socket> sock, dsp::stream<dsp::complex_t>* stream) {
|
||||||
|
this->sock = sock;
|
||||||
|
this->stream = stream;
|
||||||
|
|
||||||
|
// Start worker
|
||||||
|
workerThread = std::thread(&Client::worker, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
Client::~Client() {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Client::isOpen() {
|
||||||
|
return sock->isOpen();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::close() {
|
||||||
|
sock->close();
|
||||||
|
stream->stopWriter();
|
||||||
|
if (workerThread.joinable()) {
|
||||||
|
workerThread.join();
|
||||||
|
}
|
||||||
|
stream->clearWriteStop();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::setFrequency(double freq) {
|
||||||
|
sendCommand(1, freq);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::setSampleRate(double sr) {
|
||||||
|
sendCommand(2, sr);
|
||||||
|
bufferSize = sr / 200.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::setGainMode(int mode) {
|
||||||
|
sendCommand(3, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::setGain(double gain) {
|
||||||
|
sendCommand(4, gain);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::setPPM(int ppm) {
|
||||||
|
sendCommand(5, (uint32_t)ppm);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::setAGCMode(int mode) {
|
||||||
|
sendCommand(8, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::setDirectSampling(int mode) {
|
||||||
|
sendCommand(9, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::setOffsetTuning(bool enabled) {
|
||||||
|
sendCommand(10, enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::setGainIndex(int index) {
|
||||||
|
sendCommand(13, index);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::setBiasTee(bool enabled) {
|
||||||
|
sendCommand(14, enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::sendCommand(uint8_t command, uint32_t param) {
|
||||||
|
Command cmd = { command, htonl(param) };
|
||||||
|
sock->send((uint8_t*)&cmd, sizeof(Command));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::worker() {
|
||||||
|
uint8_t* buffer = dsp::buffer::alloc<uint8_t>(STREAM_BUFFER_SIZE*2);
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
// Read data
|
||||||
|
int count = sock->recv(buffer, bufferSize * 2, true);
|
||||||
|
if (count <= 0) { break; }
|
||||||
|
|
||||||
|
// Convert to complex float
|
||||||
|
int scount = count/2;
|
||||||
|
for (int i = 0; i < scount; i++) {
|
||||||
|
stream->writeBuf[i].re = ((double)buffer[i * 2] - 128.0) / 128.0;
|
||||||
|
stream->writeBuf[i].im = ((double)buffer[(i * 2) + 1] - 128.0) / 128.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Swap buffer
|
||||||
|
if (!stream->swap(scount)) { break; }
|
||||||
|
}
|
||||||
|
|
||||||
|
dsp::buffer::free(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<Client> connect(dsp::stream<dsp::complex_t>* stream, std::string host, int port) {
|
||||||
|
auto sock = net::connect(host, port);
|
||||||
|
return std::make_shared<Client>(sock, stream);
|
||||||
|
}
|
||||||
|
}
|
44
source_modules/rtl_tcp_source/src/rtl_tcp_client.h
Normal file
44
source_modules/rtl_tcp_source/src/rtl_tcp_client.h
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <utils/net.h>
|
||||||
|
#include <dsp/stream.h>
|
||||||
|
#include <dsp/types.h>
|
||||||
|
|
||||||
|
namespace rtltcp {
|
||||||
|
#pragma pack(push, 1)
|
||||||
|
struct Command {
|
||||||
|
uint8_t cmd;
|
||||||
|
uint32_t param;
|
||||||
|
};
|
||||||
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
class Client {
|
||||||
|
public:
|
||||||
|
Client(std::shared_ptr<net::Socket> sock, dsp::stream<dsp::complex_t>* stream);
|
||||||
|
~Client();
|
||||||
|
|
||||||
|
bool isOpen();
|
||||||
|
void close();
|
||||||
|
|
||||||
|
void setFrequency(double freq);
|
||||||
|
void setSampleRate(double sr);
|
||||||
|
void setGainMode(int mode);
|
||||||
|
void setGain(double gain);
|
||||||
|
void setPPM(int ppm);
|
||||||
|
void setAGCMode(int mode);
|
||||||
|
void setDirectSampling(int mode);
|
||||||
|
void setOffsetTuning(bool enabled);
|
||||||
|
void setGainIndex(int index);
|
||||||
|
void setBiasTee(bool enabled);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void sendCommand(uint8_t command, uint32_t param);
|
||||||
|
void worker();
|
||||||
|
|
||||||
|
std::shared_ptr<net::Socket> sock;
|
||||||
|
std::thread workerThread;
|
||||||
|
dsp::stream<dsp::complex_t>* stream;
|
||||||
|
int bufferSize = 2400000 / 200;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::shared_ptr<Client> connect(dsp::stream<dsp::complex_t>* stream, std::string host, int port = 1234);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user