Merge branch 'clkout_enable' of https://github.com/dqs105/portapack-mayhem into upstream

This commit is contained in:
dqs105 2020-10-14 20:15:36 +08:00
commit 48ccc1e988
8 changed files with 74 additions and 10 deletions

View File

@ -144,6 +144,7 @@ SetRadioView::SetRadioView(
} }
add_children({ add_children({
&check_clkout,
&labels_bias, &labels_bias,
&check_bias, &check_bias,
&button_done, &button_done,
@ -156,6 +157,14 @@ SetRadioView::SetRadioView(
form_init(model); form_init(model);
check_clkout.set_value(portapack::persistent_memory::clkout_enabled());
check_clkout.on_select = [this](Checkbox&, bool v) {
clock_manager.enable_clock_output(v);
portapack::persistent_memory::set_clkout_enabled(v);
StatusRefreshMessage message { };
EventDispatcher::send_message(message);
};
check_bias.set_value(portapack::get_antenna_bias()); check_bias.set_value(portapack::get_antenna_bias());
check_bias.on_select = [this](Checkbox&, bool v) { check_bias.on_select = [this](Checkbox&, bool v) {
portapack::set_antenna_bias(v); portapack::set_antenna_bias(v);

View File

@ -147,8 +147,14 @@ private:
}; };
Labels labels_correction { Labels labels_correction {
{ { 2 * 8, 4 * 16 }, "Frequency correction:", Color::light_grey() }, { { 2 * 8, 3 * 16 }, "Frequency correction:", Color::light_grey() },
{ { 6 * 8, 5 * 16 }, "PPM", Color::light_grey() }, { { 6 * 8, 4 * 16 }, "PPM", Color::light_grey() },
};
Checkbox check_clkout {
{ 28, (6 * 16 - 4) },
4,
"Enable 10MHz CLKOUT"
}; };
Labels labels_bias { Labels labels_bias {
@ -159,7 +165,7 @@ private:
}; };
NumberField field_ppm { NumberField field_ppm {
{ 2 * 8, 5 * 16 }, { 2 * 8, 4 * 16 },
3, 3,
{ -50, 50 }, { -50, 50 },
1, 1,

View File

@ -463,3 +463,17 @@ void ClockManager::stop_audio_pll() {
cgu::pll0audio::power_down(); cgu::pll0audio::power_down();
while( cgu::pll0audio::is_locked() ); while( cgu::pll0audio::is_locked() );
} }
void ClockManager::enable_clock_output(bool enable) {
if(enable) {
clock_generator.enable_output(clock_generator_output_clkout);
clock_generator.set_ms_frequency(clock_generator_output_clkout, 10000000, si5351_vco_f, 0);
} else {
clock_generator.disable_output(clock_generator_output_clkout);
}
if(enable)
clock_generator.set_clock_control(clock_generator_output_clkout, si5351_clock_control_common[clock_generator_output_clkout].ms_src(get_reference_clock_generator_pll(reference.source)).clk_pdn(ClockControl::ClockPowerDown::Power_On));
else
clock_generator.set_clock_control(clock_generator_output_clkout, ClockControl::power_off());
}

View File

@ -79,6 +79,8 @@ public:
Reference get_reference() const; Reference get_reference() const;
void enable_clock_output(bool enable);
private: private:
I2C& i2c0; I2C& i2c0;
si5351::Si5351& clock_generator; si5351::Si5351& clock_generator;

View File

@ -113,7 +113,7 @@ SystemStatusView::SystemStatusView(
&button_camera, &button_camera,
&button_sleep, &button_sleep,
&button_bias_tee, &button_bias_tee,
&image_clock_status, &button_clock_status,
&sd_card_status_view, &sd_card_status_view,
}); });
@ -168,6 +168,10 @@ SystemStatusView::SystemStatusView(
DisplaySleepMessage message; DisplaySleepMessage message;
EventDispatcher::send_message(message); EventDispatcher::send_message(message);
}; };
button_clock_status.on_select = [this](ImageButton&) {
this->on_clk();
};
} }
void SystemStatusView::refresh() { void SystemStatusView::refresh() {
@ -188,11 +192,16 @@ void SystemStatusView::refresh() {
} }
if (portapack::clock_manager.get_reference().source == ClockManager::ReferenceSource::External) { if (portapack::clock_manager.get_reference().source == ClockManager::ReferenceSource::External) {
image_clock_status.set_bitmap(&bitmap_icon_clk_ext); button_clock_status.set_bitmap(&bitmap_icon_clk_ext);
button_bias_tee.set_foreground(ui::Color::green()); // button_bias_tee.set_foreground(ui::Color::green()); Typo?
} else { } else {
image_clock_status.set_bitmap(&bitmap_icon_clk_int); button_clock_status.set_bitmap(&bitmap_icon_clk_int);
button_bias_tee.set_foreground(ui::Color::light_grey()); // button_bias_tee.set_foreground(ui::Color::green());
}
if(portapack::persistent_memory::clkout_enabled()) {
button_clock_status.set_foreground(ui::Color::green());
} else {
button_clock_status.set_foreground(ui::Color::light_grey());
} }
set_dirty(); set_dirty();
@ -302,6 +311,18 @@ void SystemStatusView::on_camera() {
} }
} }
void SystemStatusView::on_clk() {
bool v = portapack::persistent_memory::clkout_enabled();
if(v) {
v = false;
} else {
v = true;
}
portapack::clock_manager.enable_clock_output(v);
portapack::persistent_memory::set_clkout_enabled(v);
refresh();
}
void SystemStatusView::on_title() { void SystemStatusView::on_title() {
if(nav_.is_top()) if(nav_.is_top())
nav_.push<AboutView>(); nav_.push<AboutView>();

View File

@ -180,7 +180,7 @@ private:
Color::dark_grey() Color::dark_grey()
}; };
Image image_clock_status { ImageButton button_clock_status {
{ 27 * 8, 0 * 16, 2 * 8, 1 * 16 }, { 27 * 8, 0 * 16, 2 * 8, 1 * 16 },
&bitmap_icon_clk_int, &bitmap_icon_clk_int,
Color::light_grey(), Color::light_grey(),
@ -198,6 +198,7 @@ private:
void on_camera(); void on_camera();
void on_title(); void on_title();
void refresh(); void refresh();
void on_clk();
MessageHandlerRegistration message_handler_refresh { MessageHandlerRegistration message_handler_refresh {
Message::ID::StatusRefresh, Message::ID::StatusRefresh,

View File

@ -85,7 +85,7 @@ struct data_t {
uint32_t playdead_sequence; uint32_t playdead_sequence;
// UI // UI
uint32_t ui_config; uint32_t ui_config;
uint32_t pocsag_last_address; uint32_t pocsag_last_address;
uint32_t pocsag_ignore_address; uint32_t pocsag_ignore_address;
@ -287,5 +287,13 @@ void set_pocsag_ignore_address(uint32_t address) {
data->pocsag_ignore_address = address; data->pocsag_ignore_address = address;
} }
bool clkout_enabled() {
return (data->ui_config & 0x08000000UL);
}
void set_clkout_enabled(bool enable) {
data->ui_config = (data->ui_config & ~0x08000000UL) | (enable << 27);
}
} /* namespace persistent_memory */ } /* namespace persistent_memory */
} /* namespace portapack */ } /* namespace portapack */

View File

@ -93,6 +93,9 @@ void set_pocsag_last_address(uint32_t address);
uint32_t pocsag_ignore_address(); uint32_t pocsag_ignore_address();
void set_pocsag_ignore_address(uint32_t address); void set_pocsag_ignore_address(uint32_t address);
bool clkout_enabled();
void set_clkout_enabled(bool enable);
} /* namespace persistent_memory */ } /* namespace persistent_memory */
} /* namespace portapack */ } /* namespace portapack */