diff --git a/sys_timex.c b/sys_timex.c index 0a6b438..9a8504e 100644 --- a/sys_timex.c +++ b/sys_timex.c @@ -68,6 +68,25 @@ static int sys_tai_offset; /* ================================================== */ +static double +convert_timex_frequency(const struct timex *txc) +{ + double freq_ppm; + + freq_ppm = txc->freq / FREQ_SCALE; + +#ifdef MACOSX + /* Temporary workaround for Apple bug treating freq as unsigned number */ + if (freq_ppm > 32767) { + freq_ppm -= 65536; + } +#endif + + return -freq_ppm; +} + +/* ================================================== */ + static double read_frequency(void) { @@ -77,7 +96,7 @@ read_frequency(void) SYS_Timex_Adjust(&txc, 0); - return txc.freq / -FREQ_SCALE; + return convert_timex_frequency(&txc); } /* ================================================== */ @@ -92,7 +111,7 @@ set_frequency(double freq_ppm) SYS_Timex_Adjust(&txc, 0); - return txc.freq / -FREQ_SCALE; + return convert_timex_frequency(&txc); } /* ================================================== */