kopia lustrzana https://github.com/jamescoxon/dl-fldigi
Fix log timer
* Make the time-off field a read-only Fl_Input2 * Add new ztimer function that is called once every minute to update the time-off field and store the date/time * Add ztime() and zdate() functions * Always use nanosleep in MilliSleep()pull/2/head
rodzic
c24196744c
commit
f498b19f73
|
@ -149,7 +149,7 @@ Fl_Button *btnAltMacros;
|
|||
Fl_Button *btn_afconoff;
|
||||
Fl_Button *btn_sqlonoff;
|
||||
Fl_Input2 *inpFreq;
|
||||
Fl_Output *inpTimeOff;
|
||||
Fl_Input2 *inpTimeOff;
|
||||
Fl_Input2 *inpTimeOn;
|
||||
Fl_Input2 *inpCall;
|
||||
Fl_Input2 *inpName;
|
||||
|
@ -1218,23 +1218,36 @@ void cb_sldrSquelch(Fl_Slider* o, void*) {
|
|||
restoreFocus();
|
||||
}
|
||||
|
||||
char zuluLogTime[5];
|
||||
char zuluLogDate[9];
|
||||
|
||||
void zuluDateTime()
|
||||
static char ztbuf[14];
|
||||
|
||||
const char* zdate(void) { return ztbuf; }
|
||||
const char* ztime(void) { return ztbuf + 9; }
|
||||
|
||||
void ztimer(void* first_call)
|
||||
{
|
||||
time_t t;
|
||||
struct tm tm;
|
||||
zuluLogTime[0] = 0;
|
||||
zuluLogDate[0] = 0;
|
||||
if ((t = time(NULL)) != (time_t)-1 && gmtime_r(&t, &tm)) {
|
||||
snprintf(zuluLogTime, sizeof(zuluLogTime), "%02d%02d",
|
||||
tm.tm_hour, tm.tm_min);
|
||||
snprintf (zuluLogDate, sizeof(zuluLogDate), "%4d%02d%02d",
|
||||
1900 + tm.tm_year, tm.tm_mon + 1, tm.tm_mday);
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv, NULL);
|
||||
|
||||
double st = 60.0 - tv.tv_sec % 60 - tv.tv_usec / 1e6;
|
||||
if (!first_call) {
|
||||
tv.tv_sec = 60.0 * round(tv.tv_sec / 60.0);
|
||||
if (st < 1.0)
|
||||
st += 60.0;
|
||||
}
|
||||
Fl::repeat_timeout(st, ztimer);
|
||||
|
||||
struct tm tm;
|
||||
gmtime_r(&tv.tv_sec, &tm);
|
||||
if (!strftime(ztbuf, sizeof(ztbuf), "%Y%m%d %H%M", &tm))
|
||||
memset(ztbuf, 0, sizeof(ztbuf));
|
||||
else
|
||||
ztbuf[8] = '\0';
|
||||
|
||||
inpTimeOff->value(ztbuf + 9);
|
||||
}
|
||||
|
||||
|
||||
bool oktoclear = true;
|
||||
|
||||
void updateOutSerNo()
|
||||
|
@ -2207,9 +2220,10 @@ void create_fl_digi_main() {
|
|||
inpTimeOn->tooltip(_(""));
|
||||
inpTimeOn->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
|
||||
|
||||
inpTimeOff = new Fl_Output(rightof(inpTimeOn) + pad, y2, w_inpTime, qh - pad, _("Off"));
|
||||
inpTimeOff = new Fl_Input2(rightof(inpTimeOn) + pad, y2, w_inpTime, qh - pad, _("Off"));
|
||||
inpTimeOff->tooltip(_(""));
|
||||
inpTimeOff->align(FL_ALIGN_TOP | FL_ALIGN_LEFT);
|
||||
inpTimeOff->type(FL_NORMAL_OUTPUT);
|
||||
|
||||
inpCall = new Fl_Input2(rightof(inpTimeOff) + pad, y2, w_inpCall, qh - pad, _("Call"));
|
||||
inpCall->tooltip(_(""));
|
||||
|
@ -2610,6 +2624,9 @@ void create_fl_digi_main() {
|
|||
|
||||
if (!progdefaults.menuicons)
|
||||
toggle_icon_labels();
|
||||
|
||||
// ztimer must be run by FLTK's timeout handler
|
||||
Fl::add_timeout(0.0, ztimer, (void*)true);
|
||||
}
|
||||
|
||||
void put_freq(double frequency)
|
||||
|
|
|
@ -70,7 +70,7 @@ extern Fl_Slider *sldrSquelch;
|
|||
extern Progress *pgrsSquelch;
|
||||
extern Fl_Button *btnMacro[];
|
||||
extern Fl_Input2 *inpFreq;
|
||||
extern Fl_Output *inpTimeOff;
|
||||
extern Fl_Input2 *inpTimeOff;
|
||||
extern Fl_Input2 *inpTimeOn;
|
||||
extern Fl_Input2 *inpCall;
|
||||
extern Fl_Input2 *inpName;
|
||||
|
@ -205,9 +205,8 @@ extern void stopMacroTimer();
|
|||
extern void cb_ResetSerNbr();
|
||||
extern void updateOutSerNo();
|
||||
|
||||
extern void zuluDateTime();
|
||||
extern char zuluLogTime[];
|
||||
extern char zuluLogDate[];
|
||||
const char* zdate(void);
|
||||
const char* ztime(void);
|
||||
|
||||
Fl_Color adjust_color(Fl_Color fg, Fl_Color bg);
|
||||
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
#define _MISC_H
|
||||
|
||||
#include <math.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
extern unsigned long hweight32(unsigned long w);
|
||||
extern unsigned short int hweight16(unsigned short int w);
|
||||
|
|
|
@ -310,10 +310,9 @@ void cb_SortByFreq (void) {
|
|||
|
||||
void DupCheck(const char *callsign)
|
||||
{
|
||||
zuluDateTime();
|
||||
if (qsodb.duplicate(
|
||||
callsign,
|
||||
zuluLogDate, zuluLogTime, progdefaults.timespan, progdefaults.duptimespan,
|
||||
zdate(), ztime(), progdefaults.timespan, progdefaults.duptimespan,
|
||||
inpFreq->value(), progdefaults.dupband,
|
||||
inpState->value(), progdefaults.dupstate,
|
||||
mode_info[active_modem->get_mode()].adif_name, progdefaults.dupmode,
|
||||
|
@ -511,12 +510,11 @@ void EditRecord( int i )
|
|||
|
||||
void AddRecord ()
|
||||
{
|
||||
// zuluDateTime();
|
||||
inpCall_log->value(inpCall->value());
|
||||
inpName_log->value (inpName->value());
|
||||
inpDate_log->value (zuluLogDate);
|
||||
inpDate_log->value (zdate());
|
||||
inpTimeOn_log->value (inpTimeOn->value());
|
||||
inpTimeOff_log->value (zuluLogTime);
|
||||
inpTimeOff_log->value (ztime());
|
||||
inpRstR_log->value (inpRstIn->value());
|
||||
inpRstS_log->value (inpRstOut->value());
|
||||
{
|
||||
|
|
|
@ -133,12 +133,12 @@ int submit_log(void)
|
|||
log_msg = "";
|
||||
log_msg = log_msg + "program:" + PACKAGE_NAME + " v " + PACKAGE_VERSION + LOG_MSEPARATOR;
|
||||
log_msg = log_msg + "version:" + LOG_MVERSION + LOG_MSEPARATOR;
|
||||
log_msg = log_msg + "date:" + zuluLogDate + LOG_MSEPARATOR;
|
||||
putadif(QSO_DATE, zuluLogDate);
|
||||
// log_msg = log_msg + "time:" + zuluLogTime + LOG_MSEPARATOR;
|
||||
// putadif(TIME_ON, zuluLogTime);
|
||||
log_msg = log_msg + "endtime:" + zuluLogTime + LOG_MSEPARATOR;
|
||||
putadif(TIME_OFF, zuluLogTime);
|
||||
log_msg = log_msg + "date:" + zdate() + LOG_MSEPARATOR;
|
||||
putadif(QSO_DATE, zdate());
|
||||
// log_msg = log_msg + "time:" + ztime() + LOG_MSEPARATOR;
|
||||
// putadif(TIME_ON, ztime());
|
||||
log_msg = log_msg + "endtime:" + ztime() + LOG_MSEPARATOR;
|
||||
putadif(TIME_OFF, ztime());
|
||||
log_msg = log_msg + "call:" + inpCall->value() + LOG_MSEPARATOR;
|
||||
putadif(CALL, inpCall->value());
|
||||
log_msg = log_msg + "mhz:" + strFreqMhz + LOG_MSEPARATOR;
|
||||
|
|
|
@ -591,9 +591,6 @@ char arq_get_char()
|
|||
// ============================================================================
|
||||
// Implementation using thread vice the fldigi timeout facility
|
||||
// ============================================================================
|
||||
static string timestr = "";
|
||||
static string clocktime = "";
|
||||
|
||||
static pthread_t arq_thread;
|
||||
|
||||
static void *arq_loop(void *args);
|
||||
|
@ -622,15 +619,6 @@ static void *arq_loop(void *args)
|
|||
if (tlfio == true)
|
||||
TLF_arqRx();
|
||||
#endif
|
||||
// delay for 50 msec interval
|
||||
// check for updating the time display on fldigi main dialog
|
||||
zuluDateTime();
|
||||
clocktime = zuluLogTime;
|
||||
if (timestr.empty() || timestr != clocktime) {
|
||||
timestr = clocktime;
|
||||
inpTimeOff->value(timestr.c_str());
|
||||
}
|
||||
|
||||
MilliSleep(50);
|
||||
}
|
||||
// exit the arq thread
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <config.h>
|
||||
|
||||
#include "misc.h"
|
||||
#include <time.h>
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
|
@ -146,18 +147,10 @@ unsigned char graydecode(unsigned char data)
|
|||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void MilliSleep(long msecs) {
|
||||
#ifdef WIN32
|
||||
struct timespec tv;
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_nsec = msecs * 1000000L;
|
||||
void MilliSleep(long msecs)
|
||||
{
|
||||
struct timespec tv = {0, msecs * 1000000L};
|
||||
nanosleep(&tv, NULL);
|
||||
#else
|
||||
struct timeval tv;
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = msecs * 1000L;
|
||||
select (0, (fd_set *)0, (fd_set *)0, (fd_set *)0, &tv);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Rectangular - no pre filtering of data array
|
||||
|
|
Ładowanie…
Reference in New Issue