Implement kenwood_set_clock

Add warning to man page about NTP use and aux clock display.
This commit is contained in:
George Baltz N3GB 2024-09-15 15:47:43 -04:00
parent 496d8fde31
commit d81726e724
2 changed files with 46 additions and 2 deletions

View File

@ -1320,10 +1320,15 @@ YYYY-MM-DD (sets date only)
local (sets both clocks to local time) local (sets both clocks to local time)
utc (sets both clocks to utc time) utc (sets both clocks to utc time)
Note: Icom rigs expect you to set local time and the hours off to UTC. Note: Icom rigs expect you to set local time and the hours off to UTC.
So...4PM EST example would be 2021-12-01T16:00:00+0500 So...4PM EST example would be 2021-12-01T16:00:00-0500
But...if you want to display GMT you must set the clock for GMT with zero UTC offset. But...if you want to display GMT you must set the clock for GMT with zero UTC offset.
Hopefully Icom will allow displaying either clock in the future Hopefully Icom will allow displaying either clock in the future
Note: Kenwood rigs only allow setting local clock, and then only if not autoset by NTP.
Trying to set clock when NTP is in use will set the offset, but not the time -
and no error status will be returned.
Time displayed on the auxiliary clock is solely determined by UTC and the aux offset.
.EE .EE
. .
.TP .TP

View File

@ -6011,7 +6011,46 @@ int kenwood_set_ext_parm(RIG *rig, hamlib_token_t token, value_t val)
*/ */
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_clock(RIG *rig, int year, int month, int day, int hour, int min, int sec, double msec, int utc_offset)
{ {
return -RIG_ENIMPL; char cmd[20];
int retval, kenwood_val;
/* Do the offset first. Then if the clock is synced to NTP,
* the set failure still should allow correct display
*
* utc_offset = hours * 100 + minutes
* Kenwood value = 15 minute intervals normalized to 56 ( = UTC+00)
*/
// Convert utc_offset to minutes
kenwood_val = ((utc_offset / 100) * 60) + (utc_offset % 100);
// Now convert to 15 minute intervals, centered on 56
kenwood_val = kenwood_val / 15 + 56;
SNPRINTF(cmd, sizeof(cmd), "CK2%03d", kenwood_val);
retval = kenwood_transaction(rig, cmd, NULL, 0);
if (retval != RIG_OK) {return retval;}
// Offset is set, now check if clock is settable
retval = kenwood_transaction(rig, "CK6", cmd, sizeof(cmd));
if (retval != RIG_OK) {return retval;}
if (cmd[3] == '1')
{
// OK, autoset by NTP is on so we can't set it
// What should we tell the user?
// Until I hear otherwise, pretend everything worked, and
// the local clock should display the correct time in whatever
// zone the app thought it was trying to set.
return RIG_OK;
}
// Local clock should be settable; build the command
SNPRINTF(cmd, sizeof(cmd), "CK0%02d%02d%02d%02d%02d%02d", year % 100, month, day,
hour, min, sec);
if (RIG_IS_TS990S)
{ // TS-990S does not have seconds
cmd[13] = '\0';
}
retval = kenwood_transaction(rig, cmd, NULL, 0);
return retval;
} }
/* /*