satdump/plugins/sdr_sources/remote_sdr_support/plugin/main.cpp

130 lines
5 KiB
C++
Raw Normal View History

2023-09-14 14:45:27 -04:00
#ifdef _WIN32
#include <ws2tcpip.h>
#else
#include <arpa/inet.h>
#endif
2023-09-10 00:53:18 +02:00
#include "core/plugin.h"
#include "logger.h"
#include "remote_source.h"
2023-09-14 10:38:02 +02:00
#include "core/config.h"
#include "core/module.h"
#include "imgui/imgui.h"
std::vector<std::pair<std::string, int>> additional_servers;
2023-09-10 00:53:18 +02:00
class RemoteSDRSupport : public satdump::Plugin
{
2023-09-14 10:38:02 +02:00
public:
static std::string address_to_add;
static int port_to_add;
static void renderConfig()
{
// ImGui::Text("This is the config!!");
2023-09-14 14:45:27 -04:00
if (additional_servers.size() > 0)
2023-09-14 10:38:02 +02:00
{
2023-09-14 14:45:27 -04:00
ImGuiStyle style = ImGui::GetStyle();
ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, ImVec2(style.CellPadding.x, 5.0 * ui_scale));
if (ImGui::BeginTable("##satdumpremotesdrsettings", 3, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg))
2023-09-14 10:38:02 +02:00
{
2023-09-14 14:45:27 -04:00
ImGui::TableSetupColumn("##satdumpremotesdrsettingsip");
ImGui::TableSetupColumn("##satdumpremotesdrsettingsport");
ImGui::TableSetupColumn("##satdumpremotesdrsettingsremove", ImGuiTableColumnFlags_WidthFixed);
2023-09-14 10:38:02 +02:00
ImGui::TableNextRow();
ImGui::TableSetColumnIndex(0);
2023-09-14 14:45:27 -04:00
ImGui::TextUnformatted("SDR Server");
2023-09-14 10:38:02 +02:00
ImGui::TableSetColumnIndex(1);
2023-09-14 14:45:27 -04:00
ImGui::TextUnformatted("Port");
int i = 0;
for (auto& servers : additional_servers)
{
ImGui::TableNextRow();
ImGui::TableSetColumnIndex(0);
ImGui::SetNextItemWidth(200 * ui_scale);
ImGui::InputTextWithHint(std::string("##ipinpuputremote" + std::to_string(i)).c_str(), "127.0.0.1", &servers.first, ImGuiInputTextFlags_CharsDecimal);
ImGui::TableSetColumnIndex(1);
ImGui::SetNextItemWidth(100 * ui_scale);
if (ImGui::InputInt(std::string("##ipinpuputport" + std::to_string(i)).c_str(), &servers.second))
{
if (servers.second < 1)
servers.second = 1;
if (servers.second > 65535)
servers.second = 65535;
}
ImGui::TableSetColumnIndex(2);
if (ImGui::Button(std::string("Remove##remoteserverremove" + std::to_string(i)).c_str()))
additional_servers.erase(additional_servers.begin() + i);
i++;
}
ImGui::EndTable();
2023-09-14 10:38:02 +02:00
}
2023-09-14 14:45:27 -04:00
ImGui::PopStyleVar();
2023-09-14 10:38:02 +02:00
}
2023-09-14 14:45:27 -04:00
ImGui::TextUnformatted("Add new Server: ");
ImGui::SameLine();
2023-09-14 10:38:02 +02:00
ImGui::SetNextItemWidth(200 * ui_scale);
2023-09-14 14:45:27 -04:00
ImGui::InputTextWithHint("##remoteaddaddress", "127.0.0.1", &address_to_add, ImGuiInputTextFlags_CharsDecimal);
2023-09-14 10:38:02 +02:00
ImGui::SameLine();
ImGui::SetNextItemWidth(100 * ui_scale);
2023-09-14 14:45:27 -04:00
if (ImGui::InputInt("##remoteaddport", &port_to_add))
{
if (port_to_add < 1)
port_to_add = 1;
if (port_to_add > 65535)
port_to_add = 65535;
}
2023-09-14 10:38:02 +02:00
ImGui::SameLine();
if (ImGui::Button("Add###addremotenew"))
2023-09-14 14:45:27 -04:00
{
struct sockaddr_in sa;
if (inet_pton(AF_INET, address_to_add.c_str(), &(sa.sin_addr)) > 0)
{
additional_servers.push_back({ address_to_add, port_to_add });
address_to_add = "";
port_to_add = 5656;
}
else
logger->warn("Not adding invalid Remote SDR IP %s", address_to_add.c_str());
}
2023-09-14 10:38:02 +02:00
}
static void save()
{
2023-09-21 23:17:26 -04:00
satdump::config::main_cfg["plugin_settings"]["remote_sdr_support"] = nlohmann::json::array();
for (auto& server : additional_servers)
satdump::config::main_cfg["plugin_settings"]["remote_sdr_support"].push_back({ {"ip", server.first}, {"port", server.second}});
2023-09-14 10:38:02 +02:00
}
2023-09-10 00:53:18 +02:00
public:
std::string getID()
{
return "remote_sdr_support";
}
void init()
{
satdump::eventBus->register_handler<dsp::RegisterDSPSampleSourcesEvent>(registerSources);
2023-09-14 10:38:02 +02:00
satdump::eventBus->register_handler<satdump::config::RegisterPluginConfigHandlersEvent>(registerConfigHandler);
2023-09-21 23:17:26 -04:00
for (auto& server : satdump::config::main_cfg["plugin_settings"]["remote_sdr_support"])
additional_servers.push_back({ server["ip"], server["port"] });
2023-09-10 00:53:18 +02:00
}
static void registerSources(const dsp::RegisterDSPSampleSourcesEvent &evt)
{
evt.dsp_sources_registry.insert({RemoteSource::getID(), {RemoteSource::getInstance, RemoteSource::getAvailableSources}});
}
2023-09-14 10:38:02 +02:00
static void registerConfigHandler(const satdump::config::RegisterPluginConfigHandlersEvent &evt)
{
evt.plugin_config_handlers.push_back({"Remote SDR", RemoteSDRSupport::renderConfig, RemoteSDRSupport::save});
}
2023-09-10 00:53:18 +02:00
};
2023-09-14 10:38:02 +02:00
std::string RemoteSDRSupport::address_to_add = "";
2023-09-14 14:45:27 -04:00
int RemoteSDRSupport::port_to_add = 5656;
2023-09-14 10:38:02 +02:00
2023-09-10 00:53:18 +02:00
PLUGIN_LOADER(RemoteSDRSupport)