diff --git a/Controller.cpp b/Controller.cpp
index 7f8d263..4a3a1f8 100644
--- a/Controller.cpp
+++ b/Controller.cpp
@@ -14,12 +14,17 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+#include
#include
#include
#include "TranscoderPacket.h"
#include "Controller.h"
+CController::CController() : dmr_vocoder_count(0), current_dmr_vocoder(0), dstar_vocoder_count(0), current_dstar_vocoder(0), keep_running(true)
+{
+}
+
bool CController::Start()
{
if (InitDevices() || reader.Open(REF2TC))
@@ -56,12 +61,27 @@ void CController::Stop()
bool CController::InitDevices()
{
- // unpack all the device paths
std::set deviceset;
- CSVtoSet(DEVICES, deviceset);
+ std::string device;
+
+ for (int i=0; i<32; i++) {
+ device.assign("/dev/ttyUSB");
+ device += std::to_string(i);
+
+ if (access(device.c_str(), R_OK | W_OK))
+ break;
+ else
+ deviceset.insert(device);
+ }
+
+ if (deviceset.empty()) {
+ std::cerr << "could not find a device!" << std::endl;
+ return true;
+ }
+
if (2 > deviceset.size())
{
- std::cerr << "You must specify at least two DVSI 3003 devices" << std::endl;
+ std::cerr << "You need at least two DVSI 3003 devices" << std::endl;
return true;
}
@@ -107,21 +127,6 @@ bool CController::InitDevices()
return false;
}
-void CController::CSVtoSet(const std::string &str, std::set &set, const std::string &delimiters)
-{
- auto lastPos = str.find_first_not_of(delimiters, 0); // Skip delimiters at beginning.
- auto pos = str.find_first_of(delimiters, lastPos); // Find first non-delimiter.
-
- while (std::string::npos != pos || std::string::npos != lastPos)
- {
- std::string element = str.substr(lastPos, pos-lastPos);
- set.insert(element);
-
- lastPos = str.find_first_not_of(delimiters, pos); // Skip delimiters.
- pos = str.find_first_of(delimiters, lastPos); // Find next non-delimiter.
- }
-}
-
void CController::IncrementDMRVocoder()
{
current_dmr_vocoder = (current_dmr_vocoder + 1) % dmr_vocoder_count;
diff --git a/Controller.h b/Controller.h
index 63864c2..071ee7d 100644
--- a/Controller.h
+++ b/Controller.h
@@ -25,7 +25,6 @@
#include "codec2.h"
#include "DV3003.h"
-#include "configure.h"
#include "UnixDgramSocket.h"
enum class EAmbeType { dstar, dmr };
@@ -33,10 +32,9 @@ enum class EAmbeType { dstar, dmr };
class CController
{
public:
- CController() : dmr_vocoder_count(0), current_dmr_vocoder(0), dstar_vocoder_count(0), current_dstar_vocoder(0), keep_running(true) {}
+ CController();
bool Start();
void Stop();
- bool IsRunning() { return keep_running; }
protected:
unsigned int dmr_vocoder_count, current_dmr_vocoder, dstar_vocoder_count, current_dstar_vocoder;
@@ -56,6 +54,4 @@ protected:
void ReadAmbeDevices();
void ReadDevice(std::shared_ptr dv3003, EAmbeType type);
void AddFDSet(int &max, int newfd, fd_set *set) const;
-
- void CSVtoSet(const std::string &str, std::set &set, const std::string &delimiters = ",");
};
diff --git a/DV3003.cpp b/DV3003.cpp
index 78d9c10..a3d81d7 100644
--- a/DV3003.cpp
+++ b/DV3003.cpp
@@ -125,10 +125,10 @@ bool CDV3003::OpenDevice(const std::string &ttyname, int baudrate)
if (SetBaudRate(baudrate))
return true;
- std::cout << "Baudrade it set to " << baudrate << std::endl;
+ //std::cout << "Baudrate it set to " << baudrate << std::endl;
devicepath.assign(ttyname);
- std::cout << "Opened " << devicepath << std::endl;
+ //std::cout << "Opened " << devicepath << std::endl;
return false;
}
@@ -159,7 +159,7 @@ bool CDV3003::InitDV3003()
return true;
}
- std::cout << "Successfully reset " << devicepath << std::endl;
+ //std::cout << "Successfully reset " << devicepath << std::endl;
// ********** turn off parity *********
ctrlPacket.header.payload_length = htons(4);
@@ -185,7 +185,7 @@ bool CDV3003::InitDV3003()
return true;
}
- std::cout << "Successfully disabled parity on " << devicepath << std::endl;
+ //std::cout << "Successfully disabled parity on " << devicepath << std::endl;
// ********* Product ID and Version *************
ctrlPacket.header.payload_length = htons(1);
@@ -262,7 +262,7 @@ bool CDV3003::ConfigureCodec(uint8_t pkt_ch, Encoding type)
std::cerr << "codec config response packet failed" << std::endl;
return true;
};
- std::cout << "channel " << (unsigned int)pkt_ch << " is now configured for " << ((Encoding::dstar == type) ? "D-Star" : "DMR") << std::endl;
+ //std::cout << "channel " << (unsigned int)pkt_ch << " is now configured for " << ((Encoding::dstar == type) ? "D-Star" : "DMR") << std::endl;
return false;
}
diff --git a/Main.cpp b/Main.cpp
index 3814d59..a88ca06 100644
--- a/Main.cpp
+++ b/Main.cpp
@@ -1,4 +1,4 @@
-// urfd -- The universal reflector
+// tcd - a hybrid transcoder using DVSI hardware and Codec2 software
// Copyright © 2021 Thomas A. Early N7TAE
//
// This program is free software: you can redistribute it and/or modify
@@ -25,6 +25,8 @@ int main()
if (controller.Start())
return EXIT_FAILURE;
+ std::cout << "Hybrid Transcoder Version #211205 Successfully started" << std::endl;
+
pause();
controller.Stop();
diff --git a/PacketQueue.h b/PacketQueue.h
index 2b7f63e..c1e982d 100644
--- a/PacketQueue.h
+++ b/PacketQueue.h
@@ -2,7 +2,7 @@
// Copyright © 2015 Jean-Luc Deltombe (LX3JL). All rights reserved.
-// urfd -- The universal reflector
+// tcd - a hybrid transcoder using DVSI hardware and Codec2 software
// Copyright © 2021 Thomas A. Early N7TAE
//
// This program is free software: you can redistribute it and/or modify