From 56d191b4381a592dd9d90664f02fc3c9db403f5f Mon Sep 17 00:00:00 2001 From: Paul Hollinsky Date: Tue, 14 May 2019 15:29:03 -0400 Subject: [PATCH] Add support for RADPluto over USB --- device/devicefinder.cpp | 8 ++++ include/icsneo/device/radpluto/radpluto.h | 45 +------------------- include/icsneo/device/radpluto/radplutousb.h | 29 +++++++++++++ include/icsneo/platform/posix/devices.h | 2 +- include/icsneo/platform/windows/devices.h | 2 +- 5 files changed, 40 insertions(+), 46 deletions(-) create mode 100644 include/icsneo/device/radpluto/radplutousb.h diff --git a/device/devicefinder.cpp b/device/devicefinder.cpp index 3807809..65d2ac8 100644 --- a/device/devicefinder.cpp +++ b/device/devicefinder.cpp @@ -38,6 +38,10 @@ static std::vector supportedDevices = { RADGalaxy::DEVICE_TYPE, #endif + #ifdef __RADPLUTOUSB_H_ + RADPlutoUSB::DEVICE_TYPE, + #endif + #ifdef __RADSTAR2ETH_H_ RADStar2ETH::DEVICE_TYPE, #endif @@ -112,6 +116,10 @@ std::vector> DeviceFinder::FindAll() { findResults.push_back(RADGalaxy::Find()); #endif + #ifdef __RADPLUTOUSB_H_ + findResults.push_back(RADPlutoUSB::Find()); + #endif + #ifdef __RADSTAR2ETH_H_ findResults.push_back(RADStar2ETH::Find()); #endif diff --git a/include/icsneo/device/radpluto/radpluto.h b/include/icsneo/device/radpluto/radpluto.h index 618d1a2..7c8bc97 100644 --- a/include/icsneo/device/radpluto/radpluto.h +++ b/include/icsneo/device/radpluto/radpluto.h @@ -13,39 +13,8 @@ class RADPluto : public Device { public: // Serial numbers start with PL static constexpr DeviceType::Enum DEVICE_TYPE = DeviceType::RADPluto; - static constexpr const uint16_t PRODUCT_ID = 0xffff; // Not yet set + static constexpr const uint16_t PRODUCT_ID = 0x1104; static constexpr const char* SERIAL_START = "PL"; - static std::vector> Find() { - std::vector> found; - - for(auto& foundDev : PCAP::FindAll()) { - auto fakedev = std::shared_ptr(new RADPluto({})); - for(auto& payload : foundDev.discoveryPackets) - fakedev->com->packetizer->input(payload); - for(auto& packet : fakedev->com->packetizer->output()) { - std::shared_ptr msg; - if(!fakedev->com->decoder->decode(msg, packet)) - continue; // We failed to decode this packet - - if(!msg || msg->network.getNetID() != Network::NetID::Main51) - continue; // Not a message we care about - auto sn = std::dynamic_pointer_cast(msg); - if(!sn) - continue; // Not a serial number message - - if(sn->deviceSerial.length() < 2) - continue; - if(sn->deviceSerial.substr(0, 2) != SERIAL_START) - continue; // Not a RADPluto - - foundDev.device.serial[sn->deviceSerial.copy(foundDev.device.serial, sizeof(foundDev.device.serial))] = '\0'; - found.emplace_back(new RADPluto(foundDev.device)); - break; - } - } - - return found; - } static const std::vector& GetSupportedNetworks() { static std::vector supportedNetworks = { @@ -65,28 +34,16 @@ public: } RADPluto(neodevice_t neodevice) : Device(neodevice) { - initialize(); getWritableNeoDevice().type = DEVICE_TYPE; productId = PRODUCT_ID; } protected: - void setupPacketizer(Packetizer& packetizer) override { - Device::setupPacketizer(packetizer); - packetizer.disableChecksum = true; - packetizer.align16bit = false; - } - virtual void setupEncoder(Encoder& encoder) override { Device::setupEncoder(encoder); encoder.supportCANFD = true; } - virtual void setupDecoder(Decoder& decoder) override { - Device::setupDecoder(decoder); - decoder.timestampMultiplier = 10; // Timestamps are in 10ns increments instead of the usual 25ns - } - virtual void setupSupportedRXNetworks(std::vector& rxNetworks) override { for(auto& netid : GetSupportedNetworks()) rxNetworks.emplace_back(netid); diff --git a/include/icsneo/device/radpluto/radplutousb.h b/include/icsneo/device/radpluto/radplutousb.h new file mode 100644 index 0000000..10a2fb3 --- /dev/null +++ b/include/icsneo/device/radpluto/radplutousb.h @@ -0,0 +1,29 @@ +#ifndef __RADPLUTOUSB_H_ +#define __RADPLUTOUSB_H_ + +#include "icsneo/device/radpluto/radpluto.h" +#include "icsneo/platform/stm32.h" + +namespace icsneo { + +class RADPlutoUSB : public RADPluto { +public: + // Serial numbers start with RP + static std::vector> Find() { + std::vector> found; + + for(auto neodevice : STM32::FindByProduct(PRODUCT_ID)) + found.emplace_back(new RADPlutoUSB(neodevice)); + + return found; + } + +private: + RADPlutoUSB(neodevice_t neodevice) : RADPluto(neodevice) { + initialize(); + } +}; + +} + +#endif \ No newline at end of file diff --git a/include/icsneo/platform/posix/devices.h b/include/icsneo/platform/posix/devices.h index b38b23d..6e98a2d 100644 --- a/include/icsneo/platform/posix/devices.h +++ b/include/icsneo/platform/posix/devices.h @@ -9,7 +9,7 @@ #include "icsneo/device/plasion/neoviion.h" #include "icsneo/device/plasion/neoviplasma.h" //#include "icsneo/device/radgalaxy/radgalaxy.h" -#include "icsneo/device/radpluto/radpluto.h" +#include "icsneo/device/radpluto/radplutousb.h" //#include "icsneo/device/radstar2/radstar2eth.h" #include "icsneo/device/radstar2/radstar2usb.h" #include "icsneo/device/radsupermoon/radsupermoon.h" diff --git a/include/icsneo/platform/windows/devices.h b/include/icsneo/platform/windows/devices.h index 34e460f..dea8c35 100644 --- a/include/icsneo/platform/windows/devices.h +++ b/include/icsneo/platform/windows/devices.h @@ -9,7 +9,7 @@ #include "icsneo/device/plasion/neoviion.h" #include "icsneo/device/plasion/neoviplasma.h" #include "icsneo/device/radgalaxy/radgalaxy.h" -#include "icsneo/device/radgalaxy/radpluto.h" +#include "icsneo/device/radpluto/radplutousb.h" #include "icsneo/device/radstar2/radstar2eth.h" #include "icsneo/device/radstar2/radstar2usb.h" #include "icsneo/device/radsupermoon/radsupermoon.h"