RS41ng/src/si5351_handler.cpp

95 wiersze
2.3 KiB
C++

#include "drivers/si5351/si5351.h"
#include "drivers/si5351fast/si5351mcu.h"
#include "si5351_handler.h"
Si5351 *si5351;
Si5351mcu si5351_fast;
bool si5351_handler_init()
{
si5351 = new Si5351(&DEFAULT_I2C_PORT);
// Change the 2nd parameter in init if using a reference oscillator other than 25 MHz
bool si5351_found = si5351->init(SI5351_CRYSTAL_LOAD_8PF, 0, 0);
if (!si5351_found) {
return si5351_found;
}
// si5351_fast.init(&DEFAULT_I2C_PORT, SIADDR);
return si5351_found;
}
bool si5351_set_frequency(si5351_clock_id clock, uint64_t frequency_hz_100)
{
return si5351->set_freq(frequency_hz_100, (enum si5351_clock) clock) == 0;
}
void si5351_output_enable(si5351_clock_id clock, bool enabled)
{
si5351->output_enable((enum si5351_clock) clock, enabled ? 1 : 0);
}
void si5351_set_drive_strength(si5351_clock_id clock, uint8_t drive)
{
si5351_drive si5351_drive;
switch (drive) {
case 0:
si5351_drive = SI5351_DRIVE_2MA;
break;
case 1:
si5351_drive = SI5351_DRIVE_4MA;
break;
case 2:
si5351_drive = SI5351_DRIVE_6MA;
break;
case 3:
si5351_drive = SI5351_DRIVE_8MA;
break;
default:
si5351_drive = SI5351_DRIVE_2MA;
}
si5351->drive_strength((enum si5351_clock) clock, si5351_drive);
}
bool si5351_set_frequency_fast(si5351_clock_id clock, uint64_t frequency_hz_100)
{
si5351_fast.setFreq((uint8_t) clock, frequency_hz_100 / 100L);
return true;
}
void si5351_output_enable_fast(si5351_clock_id clock, bool enabled)
{
if (enabled) {
si5351_fast.enable((uint8_t) clock);
} else {
si5351_fast.disable((uint8_t) clock);
}
}
void si5351_set_drive_strength_fast(si5351_clock_id clock, uint8_t drive)
{
int si5351_drive;
switch (drive) {
case 0:
si5351_drive = SIOUT_2mA;
break;
case 1:
si5351_drive = SIOUT_4mA;
break;
case 2:
si5351_drive = SIOUT_6mA;
break;
case 3:
si5351_drive = SIOUT_8mA;
break;
default:
si5351_drive = SIOUT_2mA;
}
si5351_fast.setPower(si5351_drive, (uint8_t) clock);
}