mirror of
https://github.com/Hamlib/Hamlib.git
synced 2024-09-21 10:27:18 +00:00
Merge pull request #1610 from GeoBaltz/fix17
Implement kenwood_get_clock + fixes for TZ offsets
This commit is contained in:
commit
f4bb956bf9
@ -6006,6 +6006,65 @@ int kenwood_set_ext_parm(RIG *rig, hamlib_token_t token, value_t val)
|
|||||||
RETURNFUNC(-RIG_EINVAL);
|
RETURNFUNC(-RIG_EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* kenwood_set_clock
|
||||||
|
*/
|
||||||
|
int kenwood_set_clock(RIG *rig, int year, int month, int day, int hour, int min, int sec, double msec, int utc_offset)
|
||||||
|
{
|
||||||
|
return -RIG_ENIMPL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* kenwood_get_clock
|
||||||
|
*/
|
||||||
|
int kenwood_get_clock(RIG *rig, int *year, int *month, int *day, int *hour, int *min, int *sec, double *msec, int *utc_offset)
|
||||||
|
{
|
||||||
|
int retval;
|
||||||
|
int fields, zone;
|
||||||
|
char ans[20];
|
||||||
|
|
||||||
|
// Make sure the clock has been set at least once
|
||||||
|
retval = kenwood_transaction(rig, "CK1", ans, sizeof(ans));
|
||||||
|
if (retval != RIG_OK) {return retval;}
|
||||||
|
|
||||||
|
if (ans[3] != '1')
|
||||||
|
{
|
||||||
|
return -RIG_ENAVAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the local clock
|
||||||
|
retval = kenwood_transaction(rig, "CK0", ans, sizeof(ans));
|
||||||
|
if (retval != RIG_OK) {return retval;}
|
||||||
|
|
||||||
|
fields = sscanf(ans, "CK0%2d%2d%2d%2d%2d%2d", year, month, day, hour, min, sec);
|
||||||
|
|
||||||
|
// TS-890S doesn't define what P6 is, but it sure looks like seconds to me.
|
||||||
|
// TS-990S doesn't have a P6, so set it to 0
|
||||||
|
if (fields < 6)
|
||||||
|
{
|
||||||
|
*sec = 0;
|
||||||
|
}
|
||||||
|
// Add the century
|
||||||
|
if (*year <= 20) //TODO: Update this every decade or so
|
||||||
|
{
|
||||||
|
*year += 100;
|
||||||
|
}
|
||||||
|
*year += 2000; //TODO: Update this every century or so
|
||||||
|
|
||||||
|
// Now figure out the time zone
|
||||||
|
retval = kenwood_transaction(rig, "CK2", ans, sizeof(ans));
|
||||||
|
if (retval != RIG_OK) {return retval;}
|
||||||
|
|
||||||
|
zone = atoi(&ans[3]); // UTC offset in 15 minute intervals, centered on 56
|
||||||
|
zone = (zone / 4) * 100 + (zone % 4) * 15; // Pack as hours * 100 + minutes
|
||||||
|
*utc_offset = zone - 1400;
|
||||||
|
|
||||||
|
// No msec available
|
||||||
|
*msec = 0;
|
||||||
|
|
||||||
|
return RIG_OK;
|
||||||
|
}
|
||||||
|
|
||||||
int kenwood_get_ext_parm(RIG *rig, hamlib_token_t token, value_t *val)
|
int kenwood_get_ext_parm(RIG *rig, hamlib_token_t token, value_t *val)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
@ -264,6 +264,8 @@ int kenwood_get_id(RIG *rig, char *buf);
|
|||||||
int kenwood_get_if(RIG *rig);
|
int kenwood_get_if(RIG *rig);
|
||||||
int kenwood_send_voice_mem(RIG *rig, vfo_t vfo, int bank);
|
int kenwood_send_voice_mem(RIG *rig, vfo_t vfo, int bank);
|
||||||
int kenwood_stop_voice_mem(RIG *rig, vfo_t vfo);
|
int kenwood_stop_voice_mem(RIG *rig, vfo_t vfo);
|
||||||
|
int kenwood_get_clock(RIG *rig, int *year, int *month, int *day, int *hour, int *min, int *sec, double *msec, int *utc_offset);
|
||||||
|
int kenwood_set_clock(RIG *rig, int year, int month, int day, int hour, int min, int sec, double msec, int utc_offset);
|
||||||
|
|
||||||
int kenwood_set_trn(RIG *rig, int trn);
|
int kenwood_set_trn(RIG *rig, int trn);
|
||||||
int kenwood_get_trn(RIG *rig, int *trn);
|
int kenwood_get_trn(RIG *rig, int *trn);
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
|
|
||||||
#define TS890_VFO_OPS (RIG_OP_UP|RIG_OP_DOWN|RIG_OP_BAND_UP|RIG_OP_BAND_DOWN|RIG_OP_CPY|RIG_OP_TUNE)
|
#define TS890_VFO_OPS (RIG_OP_UP|RIG_OP_DOWN|RIG_OP_BAND_UP|RIG_OP_BAND_DOWN|RIG_OP_CPY|RIG_OP_TUNE)
|
||||||
|
|
||||||
int kenwood_ts890_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
|
static int kenwood_ts890_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
|
||||||
{
|
{
|
||||||
char levelbuf[16], *command_string;
|
char levelbuf[16], *command_string;
|
||||||
int kenwood_val, retval;
|
int kenwood_val, retval;
|
||||||
@ -109,7 +109,7 @@ int kenwood_ts890_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
|
|||||||
return kenwood_transaction(rig, levelbuf, NULL, 0);
|
return kenwood_transaction(rig, levelbuf, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int kenwood_ts890_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
static int kenwood_ts890_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
||||||
{
|
{
|
||||||
char ackbuf[50];
|
char ackbuf[50];
|
||||||
size_t ack_len, ack_len_expected, len;
|
size_t ack_len, ack_len_expected, len;
|
||||||
@ -403,7 +403,7 @@ int kenwood_ts890_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
|
|||||||
return -RIG_EINTERNAL;
|
return -RIG_EINTERNAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ts890_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
|
static int ts890_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
|
||||||
{
|
{
|
||||||
int mask, retval;
|
int mask, retval;
|
||||||
char current[4];
|
char current[4];
|
||||||
@ -434,7 +434,7 @@ int ts890_set_func(RIG *rig, vfo_t vfo, setting_t func, int status)
|
|||||||
return kenwood_transaction(rig, current, NULL, 0);
|
return kenwood_transaction(rig, current, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ts890_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
|
static int ts890_get_func(RIG *rig, vfo_t vfo, setting_t func, int *status)
|
||||||
{
|
{
|
||||||
int mask, retval;
|
int mask, retval;
|
||||||
char current[4];
|
char current[4];
|
||||||
@ -671,5 +671,7 @@ struct rig_caps ts890s_caps =
|
|||||||
.has_set_func = TS890_FUNC_ALL,
|
.has_set_func = TS890_FUNC_ALL,
|
||||||
.set_func = ts890_set_func,
|
.set_func = ts890_set_func,
|
||||||
.get_func = ts890_get_func,
|
.get_func = ts890_get_func,
|
||||||
|
.get_clock = kenwood_get_clock,
|
||||||
|
.set_clock = kenwood_set_clock,
|
||||||
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
|
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
|
||||||
};
|
};
|
||||||
|
@ -379,6 +379,8 @@ struct rig_caps ts990s_caps =
|
|||||||
.set_powerstat = kenwood_set_powerstat,
|
.set_powerstat = kenwood_set_powerstat,
|
||||||
.get_powerstat = kenwood_get_powerstat,
|
.get_powerstat = kenwood_get_powerstat,
|
||||||
.reset = kenwood_reset,
|
.reset = kenwood_reset,
|
||||||
|
.get_clock = kenwood_get_clock,
|
||||||
|
.set_clock = kenwood_set_clock,
|
||||||
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
|
.hamlib_check_rig_caps = HAMLIB_CHECK_RIG_CAPS
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -387,7 +389,7 @@ struct rig_caps ts990s_caps =
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ts2000_get_level
|
* ts990s_get_level
|
||||||
* Assumes rig!=NULL, val!=NULL
|
* Assumes rig!=NULL, val!=NULL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -46,7 +46,8 @@ int ra=0;
|
|||||||
int rl=0;
|
int rl=0;
|
||||||
int is=0;
|
int is=0;
|
||||||
int sp=0;
|
int sp=0;
|
||||||
|
int tzs[2] = {40, 56}; // 0=primary(EDT), 1=auxiiary(UTC)
|
||||||
|
char auxtzc = 'U'; // Auxiliary clock identifier (UTC)
|
||||||
|
|
||||||
#if defined(WIN32) || defined(_WIN32)
|
#if defined(WIN32) || defined(_WIN32)
|
||||||
int openPort(char *comport) // doesn't matter for using pts devices
|
int openPort(char *comport) // doesn't matter for using pts devices
|
||||||
@ -629,6 +630,85 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
sscanf(buf,"SP%d", &sp);
|
sscanf(buf,"SP%d", &sp);
|
||||||
}
|
}
|
||||||
|
else if (strncmp(buf, "CK", 2) == 0)
|
||||||
|
{ // All the clock functions
|
||||||
|
switch (buf[2]) {
|
||||||
|
case '0': // Get/Set Local clock
|
||||||
|
{
|
||||||
|
time_t t;
|
||||||
|
struct tm *localtm;
|
||||||
|
|
||||||
|
if (buf[3] == ';')
|
||||||
|
{
|
||||||
|
t = time(NULL);
|
||||||
|
localtm = localtime(&t);
|
||||||
|
strftime(&buf[3], BUFSIZ - 3, "%y%m%d%H%M%S;", localtm);
|
||||||
|
write(fd, buf, strlen(buf));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Sorry, can't set time (yet)\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case '1': // Setting status
|
||||||
|
buf[3] = '1';
|
||||||
|
buf[4] = ';';
|
||||||
|
buf[5] = 0;
|
||||||
|
write(fd, buf, 6);
|
||||||
|
break;
|
||||||
|
case '2': // Local clock time zone
|
||||||
|
case '3': // Secondary clock time zone
|
||||||
|
{
|
||||||
|
int idx = buf[2] - '2';
|
||||||
|
if (buf[3] == ';')
|
||||||
|
{
|
||||||
|
sprintf(&buf[3], "%3d;", tzs[idx]);
|
||||||
|
write(fd, buf, strlen(buf));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sscanf(&buf[3], "%3d;", &tzs[idx]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case '4': // ID character for secondary clock
|
||||||
|
if (buf[3] == ';')
|
||||||
|
{
|
||||||
|
buf[3] = auxtzc;
|
||||||
|
buf[4] = ';';
|
||||||
|
buf[5] = '\0';
|
||||||
|
write(fd, buf, 6);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auxtzc = buf[3];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '5': // Date format
|
||||||
|
break;
|
||||||
|
case '6': // Automatic date/time retrieval (NTP)
|
||||||
|
//For the time being, assume this is always on.
|
||||||
|
//TODO: Fix this when we can set the clock
|
||||||
|
if (buf[3] == ';')
|
||||||
|
{
|
||||||
|
buf[3] = 1;
|
||||||
|
buf[4] = ';';
|
||||||
|
buf[5] = 0;
|
||||||
|
write(fd, buf, strlen(buf));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Can't run without NTP, sorry\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '7': // NTP server address
|
||||||
|
case '8': // Force time update via NTP
|
||||||
|
case '9': // Clock display (primary/secondary/both)
|
||||||
|
default:
|
||||||
|
printf("Bad clock command - %s\n", buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (strlen(buf) > 0)
|
else if (strlen(buf) > 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Unknown command: %s\n", buf);
|
fprintf(stderr, "Unknown command: %s\n", buf);
|
||||||
|
@ -2834,7 +2834,7 @@ char *date_strget(char *buf, int buflen, int localtime)
|
|||||||
if (localtime)
|
if (localtime)
|
||||||
{
|
{
|
||||||
mytm = localtime_r(&t, &result);
|
mytm = localtime_r(&t, &result);
|
||||||
mytimezone = timezone;
|
mytimezone = - (int)result.tm_gmtoff;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -5657,7 +5657,7 @@ declare_proto_rig(set_clock)
|
|||||||
__func__, n, year, mon, day, hour, min, sec, msec, utc_offset >= 0 ? "+" : "-",
|
__func__, n, year, mon, day, hour, min, sec, msec, utc_offset >= 0 ? "+" : "-",
|
||||||
(unsigned)abs(utc_offset));
|
(unsigned)abs(utc_offset));
|
||||||
|
|
||||||
if (utc_offset < 24) { utc_offset *= 100; } // allow for minutes offset too
|
if (abs(utc_offset) < 24) { utc_offset *= 100; } // allow for minutes offset too
|
||||||
|
|
||||||
rig_debug(RIG_DEBUG_VERBOSE, "%s: utc_offset=%d\n", __func__, utc_offset);
|
rig_debug(RIG_DEBUG_VERBOSE, "%s: utc_offset=%d\n", __func__, utc_offset);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user