* 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
Stelios Bounanos 2008-12-10 22:48:52 +00:00
rodzic c24196744c
commit f498b19f73
7 zmienionych plików z 47 dodań i 53 usunięć

Wyświetl plik

@ -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)

Wyświetl plik

@ -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);

Wyświetl plik

@ -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);

Wyświetl plik

@ -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());
{

Wyświetl plik

@ -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;

Wyświetl plik

@ -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

Wyświetl plik

@ -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