Merge branch 'master' of git://github.com/jamescoxon/dl-fldigi

pull/2/head
Simrun Basuita 2010-03-21 00:28:49 +00:00
commit 2016a76866
8 zmienionych plików z 200 dodań i 11 usunięć

Wyświetl plik

@ -3862,7 +3862,9 @@ void noop_controls() // create and then hide all controls not being used
btnMacroTimer = new Fl_Button(defwidget); btnMacroTimer->hide();
ReceiveText = new FTextRX(0,0,100,100); ReceiveText->hide();
if(bWF_only) {
ReceiveText = new FTextRX(0,0,100,100); ReceiveText->hide();
}
TransmitText = new FTextTX(0,0,100,100); TransmitText->hide();
FHdisp = new Raster(0,0,10,100); FHdisp->hide();
@ -4188,6 +4190,8 @@ int HAB_height = 0;
void create_fl_digi_main_dl_fldigi() {
progdefaults.autoextract == true;
int fnt = fl_font();
int fsize = fl_size();
int freqheight = Hentry + 2 * pad;

Wyświetl plik

@ -1079,7 +1079,10 @@
"report.pskreporter.info") \
ELEM_(std::string, pskrep_port, "PSKREPPORT", \
"Reception report server port", \
"4739")
"4739") \
ELEM_(std::string, xmlFields, "", "", "7") \
ELEM_(std::string, xmlField_delimiter, "", "", ",") \
ELEM_(std::string, xmlSentence_delimiter, "", "", "$$")
// declare the struct

Wyświetl plik

@ -0,0 +1,10 @@
#ifndef _EXTRA_H_
#define _EXTRA_H_
#include <string>
void UpperCase(std::string& str);
//void TrimSpaces( string& str);
#endif

Wyświetl plik

@ -31,10 +31,40 @@
#include "fl_digi.h"
#include "configuration.h"
//jcoxon
#include "extra.h"
//
using namespace std;
const char *beg = "[WRAP:beg]";
const char *end = "[WRAP:end]";
//jcoxon
void UpperCase(string& str)
{
for(int i = 0; i < str.length(); i++)
{
str[i] = toupper(str[i]);
}
return;
}
//
void TrimSpaces( string& str)
{
// Trim Both leading and trailing spaces
size_t startpos = str.find_first_not_of(" "); // Find the first character position after excluding leading blank spaces
size_t endpos = str.find_last_not_of("\r\n"); // Find the first character position from reverse af
// if all spaces or empty return an empty string
if(( string::npos == startpos ) || ( string::npos == endpos))
{
str = "";
}
else
str = str.substr( startpos, endpos-startpos+1 );
}
const char *end = "\n";
#ifdef __WIN32__
const char *txtWrapInfo = "\
Detect the occurance of [WRAP:beg] and [WRAP:end]\n\
@ -56,6 +86,20 @@ bool bInit = false;
char dttm[64];
//jcoxon
//Default rules
int total_string_length = 100;
int min_number_fields = 10;
int field_length = 10;
int dodge_data = 0;
bool validate_output;
int number_commas;
int old_i = 0, field_number = 0;
string rx_buff_edit;
string tmpfield;
//
void rx_extract_reset()
{
rx_buff.clear();
@ -66,6 +110,8 @@ void rx_extract_reset()
void rx_extract_add(int c)
{
extern int rjh_pfds[2];
if (!c) return;
if (!bInit) {
@ -76,7 +122,11 @@ void rx_extract_add(int c)
memmove(rx_extract_buff, &rx_extract_buff[1], bufsize - 1);
rx_extract_buff[bufsize - 1] = ch;
//jcoxon
//Reads the stentence delimter previously read from the xml file.
//const char* beg = (progdefaults.xmlSentence_delimiter.empty() ? "UNKNOWN" : progdefaults.xmlSentence_delimiter.c_str());
const char* beg = "$$";
//
if ( strstr(rx_extract_buff, beg) != NULL ) {
rx_buff = beg;
rx_extract_msg = "Extracting";
@ -107,6 +157,48 @@ void rx_extract_add(int c)
rx_extract_msg.append(WRAP_recv_dir);
put_status(rx_extract_msg.c_str(), 20, STATUS_CLEAR);
//jcoxon
//Trim Spaces
TrimSpaces(rx_buff);
// Find the sentence start marker and remove up to the end of it
// dkjhdskdkfdakhd $$icarus,... -> icarus,...
rx_buff = rx_buff.substr(
rx_buff.find(progdefaults.xmlSentence_delimiter)+
progdefaults.xmlSentence_delimiter.length());
//I've removed the old swap callsign function as its not needed any longer.
//Counts number of fields
number_commas = count(rx_buff.begin(), rx_buff.end(), progdefaults.xmlField_delimiter.at(0));
//Gets info for number of fields
//min_number_fields = atoi(progdefaults.xmlFields.c_str());
//Check rules - telem string length and number of fields and whether each field has been validated
if ((rx_buff.length() < total_string_length) and (number_commas == min_number_fields - 1)) {
string identity_callsign = (progdefaults.myCall.empty() ? "UNKNOWN" : progdefaults.myCall.c_str());
UpperCase (identity_callsign);
string postData = "string=" + rx_buff + "&identity=" + identity_callsign + "\n";
//We really don't want people sending status updates from UNKNOWN - somehow need to remind people to change their callsign
if (identity_callsign != "UNKNOWN") {
#if !defined(__CYGWIN__)
cout << "PARENT: sent " + postData ;
#endif
const char* data = postData.c_str();
write (rjh_pfds[1],data,strlen(data));
rx_extract_msg = "Data uploaded to server";
put_status(rx_extract_msg.c_str(), 20, STATUS_CLEAR);
}
else {
#if !defined(__CYGWIN__)
cout << "Need to enter a callsign, please go to 'Configure' then 'Operator' and add a callsign/nickname.\n";
#endif
}
}
//
rx_extract_reset();
} else if (rx_buff.length() > 16384) {
rx_extract_msg = "Extract length exceeded 16384 bytes";

Wyświetl plik

@ -113,10 +113,7 @@
using namespace std;
//jcoxon include files
#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>
#include "misc/extra.h"
#include "misc/dlpipe.h"
//
string appname;

Wyświetl plik

@ -1,7 +1,9 @@
#ifndef _EXTRA_H_
#define _EXTRA_H_
//void UpperCase(string& str);
#include <string>
#include <curl/curl.h>
#include <curl/types.h>
#include <curl/easy.h>
//-------------------------------------//
/* RJH Pipe vars */

Wyświetl plik

@ -393,6 +393,8 @@ void status::initLastState()
if (bWF_only)
fl_digi_main->resize(mainX, mainY, mainW, Hmenu + Hwfall + Hstatus + 4);
else if (bHAB)
fl_digi_main->resize(mainX, mainY, mainW, Hmenu + Hwfall + 100 + Hstatus + 4);
else {
fl_digi_main->resize(mainX, mainY, mainW, mainH);
if (!(RxTextHeight > 0 && RxTextHeight < TiledGroup->h()))

Wyświetl plik

@ -51,6 +51,21 @@ LOG_FILE_SOURCE(debug::LOG_MODEM);
using namespace std;
//New stuff added by jcoxon
#include <time.h>
#include <iostream>
#include "extra.h";
time_t rawtime;
struct tm * timeinfo;
time_t seconds;
int status_count = 901; //Why 1001? well as it'll trigger the status update to be sent when fldigi starts
int old_seconds = 0;
char date_time [80];
//
void trx_reset_loop();
void trx_start_modem_loop();
void trx_receive_loop();
@ -89,6 +104,10 @@ void trx_trx_receive_loop()
{
size_t numread;
int current_samplerate;
//jcoxon
extern int rjh_pfds[2];
//
assert(powerof2(SCBLOCKSIZE));
if (unlikely(!active_modem)) {
@ -126,6 +145,66 @@ void trx_trx_receive_loop()
active_modem->rx_init();
while (1) {
//New stuff added by jcoxon
if (status_count >= 1000) {
seconds = time (NULL);
#if !defined(__CYGWIN__)
cout << seconds << "\n";
#endif
if (int(seconds) > old_seconds + 900) {
//Send status update
#if !defined(__CYGWIN__)
cout << "Send status update\n";
#endif
string identity_callsign = (progdefaults.myCall.empty() ? "UNKNOWN" : progdefaults.myCall.c_str());
UpperCase (identity_callsign);
//string string_lat = (progdefaults.myLat.empty() ? "UNKNOWN" : progdefaults.myLat.c_str());
string string_lat = "52.0";
UpperCase (string_lat);
//string string_lon = (progdefaults.myLon.empty() ? "UNKNOWN" : progdefaults.myLon.c_str());
string string_lon = "0.0";
UpperCase (string_lon);
//string string_radio = (progdefaults.myRadio.empty() ? "UNKNOWN" : progdefaults.myRadio.c_str());
string string_radio = "radio";
UpperCase (string_radio);
string string_antenna = (progdefaults.myAntenna.empty() ? "UNKNOWN" : progdefaults.myAntenna.c_str());
UpperCase (string_antenna);
//string string_payload = (progdefaults.flight_sel.empty() ? "UNKNOWN" : progdefaults.flight_sel.c_str());
string string_payload = "Test";
UpperCase (string_payload);
time ( &rawtime );
timeinfo = gmtime ( &rawtime );
strftime(date_time,80,"%Y-%m-%d %H:%M:%S",timeinfo);
#if !defined(__CYGWIN__)
cout << date_time << "\n";
#endif
//--------------------------------------------------------
string dlfldigi_version = "r100"; //Please update with revision number
//-------------------------------------------------------
//ZZ,Callsign,Date Time,Lat,Lon,Radio,Antenna
string rx_data ="ZZ," + identity_callsign + "," + date_time + "," + string_lat + "," + string_lon + "," + string_radio + "," + string_antenna + "," + dlfldigi_version + "," + string_payload;
string postData = "string=" + rx_data + "&identity=" + identity_callsign + "\n";
//We really don't want people sending status updates from UNKNOWN - somehow need to remind people to change their callsign
if (identity_callsign != "UNKNOWN") {
const char* data = postData.c_str();
write (rjh_pfds[1],data,strlen(data));
}
else {
#if !defined(__CYGWIN__)
cout << "Need to enter a callsign, please go to 'Configure' then 'Operator' and add a callsign/nickname.\n";
#endif
}
old_seconds = seconds;
}
status_count = 0;
}
else {
status_count++;
}
//--------------------------
try {
numread = 0;
while (numread < SCBLOCKSIZE && trx_state == STATE_RX)