Skip to content

Commit

Permalink
#23 add possibility to override text
Browse files Browse the repository at this point in the history
  • Loading branch information
F4FXL committed Mar 24, 2022
1 parent a1cca3f commit c2a940b
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 30 deletions.
2 changes: 1 addition & 1 deletion .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/DGWVoiceTransmit/dgwvoicetransmit",
"args": ["F4FXL B", "${workspaceFolder}/Sandbox/Announce_F5ZEE__B.dvtool"],
"args": ["F4FXL B", "${workspaceFolder}/Sandbox/Announce_F5ZEE__B.dvtool", "-text", "www.F5KAV.fr"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
Expand Down
10 changes: 5 additions & 5 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,10 @@
"USE_GPSD=1",
"DGWVoiceTransmit/dgwvoicetransmit"
],
"group": "build",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
},
{
Expand All @@ -91,10 +94,7 @@
"ENABLE_DEBUG=1",
"USE_GPSD=1"
],
"group": {
"kind": "build",
"isDefault": true
},
"group": "build",
"problemMatcher": []
}
]
Expand Down
72 changes: 50 additions & 22 deletions DGWVoiceTransmit/VoiceTransmit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,16 +22,18 @@
#include <thread>
#include <chrono>

#include "ProgramArgs.h"
#include "DStarDefines.h"
#include "VoiceTransmit.h"
#include "SlowDataEncoder.h"

int main(int argc, char** argv)
int main(int argc, const char * argv[])
{
std::string repeater;
std::string repeater, text;
std::vector<std::string> filenames;

if (!parseCLIArgs(argc, argv, repeater, filenames)) {
::fprintf(stderr, "dgwvoicetransmit: invalid command line usage: dgwvoicetransmit <repeater> <file1> <file2> ..., exiting\n");
if (!parseCLIArgs(argc, argv, repeater, filenames, text)) {
::fprintf(stderr, "dgwvoicetransmit: invalid command line usage: dgwvoicetransmit [-text text] <repeater> <file1> <file2> ..., exiting\n");
return 1;
}

Expand All @@ -44,7 +46,7 @@ int main(int argc, char** argv)
return 1;
}

CVoiceTransmit tt(repeater, &store);
CVoiceTransmit tt(repeater, &store, text);
bool ret = tt.run();

store.close();
Expand All @@ -53,30 +55,36 @@ int main(int argc, char** argv)
return ret ? 0 : 1;
}

bool parseCLIArgs(int argc, char * argv[], std::string& repeater, std::vector<std::string>& files)
bool parseCLIArgs(int argc, const char * argv[], std::string& repeater, std::vector<std::string>& files, std::string& text)
{
if(argc < 3)
return false;

repeater.assign(argv[1]);
boost::to_upper(repeater);
boost::replace_all(repeater, "_", " ");
repeater.resize(LONG_CALLSIGN_LENGTH, ' ');
std::unordered_map<std::string, std::string> namedArgs;
std::vector<std::string> positionalArgs;

files.clear();
CProgramArgs::eatArguments(argc, argv, namedArgs, positionalArgs);

for(int i = 2; i < argc; i++) {
if(argv[i] != nullptr) {
files.push_back(std::string(argv[i]));
}
if(positionalArgs.size() < 2U)
return false;

repeater.assign(positionalArgs[0]);
files.assign(positionalArgs.begin() + 1, positionalArgs.end());

if(namedArgs.count("text") > 0U) {
text.assign(namedArgs["text"]);
}
else {
text.assign("");
}

return files.size() > 0U;
return true;
}

CVoiceTransmit::CVoiceTransmit(const std::string& callsign, CVoiceStore* store) :
CVoiceTransmit::CVoiceTransmit(const std::string& callsign, CVoiceStore* store, const std::string& text) :
m_socket("", 0U),
m_callsign(callsign),
m_text(text),
m_store(store)
{
assert(store != NULL);
Expand All @@ -88,6 +96,7 @@ CVoiceTransmit::~CVoiceTransmit()

bool CVoiceTransmit::run()
{
CSlowDataEncoder * slowData = nullptr;
bool opened = m_socket.open();
if (!opened)
return false;
Expand All @@ -110,6 +119,12 @@ bool CVoiceTransmit::run()
header->setRptCall2(m_callsign);
header->setDestination(address, G2_DV_PORT);

if(!m_text.empty()) {
slowData = new CSlowDataEncoder();
slowData->setHeaderData(*header);
slowData->setTextData(m_text);
}

sendHeader(header);

delete header;
Expand All @@ -127,10 +142,6 @@ bool CVoiceTransmit::run()
CAMBEData* ambe = m_store->getAMBE();

if (ambe == NULL) {
seqNo++;
if (seqNo >= 21U)
seqNo = 0U;

CAMBEData data;
data.setData(END_PATTERN_BYTES, DV_FRAME_LENGTH_BYTES);
data.setDestination(address, G2_DV_PORT);
Expand All @@ -145,8 +156,22 @@ bool CVoiceTransmit::run()
return true;
}

seqNo = ambe->getSeq();
if(slowData != nullptr) { // Override slowdata if specified so
unsigned char buffer[DV_FRAME_LENGTH_BYTES];
ambe->getData(buffer, DV_FRAME_LENGTH_BYTES);

// Insert sync bytes when the sequence number is zero, slow data otherwise
if (seqNo == 0U) {
::memcpy(buffer + VOICE_FRAME_LENGTH_BYTES, DATA_SYNC_BYTES, DATA_FRAME_LENGTH_BYTES);
slowData->sync();
} else {
slowData->getInterleavedData(buffer + VOICE_FRAME_LENGTH_BYTES);
}

ambe->setData(buffer, DV_FRAME_LENGTH_BYTES);
}

ambe->setSeq(seqNo);
ambe->setDestination(address, G2_DV_PORT);
ambe->setEnd(false);
ambe->setId(id);
Expand All @@ -156,6 +181,9 @@ bool CVoiceTransmit::run()
delete ambe;

out++;

seqNo++;
if(seqNo >= 21U) seqNo = 0U;
}

std::this_thread::sleep_for(std::chrono::milliseconds(10U));
Expand Down
5 changes: 3 additions & 2 deletions DGWVoiceTransmit/VoiceTransmit.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,19 @@
#include "HeaderData.h"
#include "AMBEData.h"

bool parseCLIArgs(int argc, char * argv[], std::string& repeater, std::vector<std::string>& vector);
bool parseCLIArgs(int argc, const char * argv[], std::string& repeater, std::vector<std::string>& vector, std::string& text);

class CVoiceTransmit {
public:
CVoiceTransmit(const std::string& callsign, CVoiceStore* store);
CVoiceTransmit(const std::string& callsign, CVoiceStore* store, const std::string& text);
~CVoiceTransmit();

bool run();

private:
CUDPReaderWriter m_socket;
std::string m_callsign;
std::string m_text;
CVoiceStore* m_store;

bool sendHeader(CHeaderData* header);
Expand Down

0 comments on commit c2a940b

Please sign in to comment.