Skip to content

Commit fe3bb8b

Browse files
authored
Merge pull request Hamlib#1722 from N0NB/aclog_get_freq-thousands_separator
Avoid truncating AC Log frequencies above 1 GHz
2 parents 12265fd + c8838cd commit fe3bb8b

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

rigs/dummy/aclog.c

+30-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
*
2020
*/
2121

22+
#include <ctype.h>
2223
#include <stdio.h>
2324
#include <stdlib.h>
2425
#include <string.h>
@@ -421,9 +422,14 @@ static rmode_t modeMapGetHamlib(const char *modeACLog)
421422
/*
422423
* aclog_get_freq
423424
* Assumes rig!=NULL, STATE(rig)->priv!=NULL, freq!=NULL
425+
*
426+
* string='<CMD><READBMFRESPONSE><BAND>23</BAND><MODE>SSB</MODE><MODETEST>PH</MODETEST><FREQ>1,296.171100</FREQ></CMD> '
424427
*/
425428
static int aclog_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
426429
{
430+
int i, j = 0;
431+
char f_string[32];
432+
427433
char value[MAXARGLEN];
428434
struct aclog_priv_data *priv = (struct aclog_priv_data *) STATE(rig)->priv;
429435

@@ -461,7 +467,30 @@ static int aclog_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
461467
char *p = strstr(value, "<FREQ>");
462468
*freq = 0;
463469

464-
if (p) { sscanf(p, "<FREQ>%'lf", freq); }
470+
if (p)
471+
{
472+
// Move the pointer to the first digit.
473+
p += strlen("<FREQ>");
474+
475+
// Parse "1,296.171100" ignoring the comma.
476+
for (i = 0; p[i] != '<'; i++)
477+
{
478+
if (isdigit(p[i]))
479+
{
480+
f_string[j++] = p[i];
481+
}
482+
else if (ispunct(p[i]) && p[i] == '.')
483+
{
484+
f_string[j++] = p[i];
485+
}
486+
}
487+
488+
f_string[j] = '\0';
489+
rig_debug(RIG_DEBUG_TRACE, "%s: f_string=%s\n", __func__, f_string);
490+
491+
*freq = strtold(f_string, NULL);
492+
rig_debug(RIG_DEBUG_TRACE, "%s: freq=%.0f\n", __func__, *freq);
493+
}
465494

466495
*freq *= 1e6; // convert from MHz to Hz
467496

0 commit comments

Comments
 (0)