More UI tweaks
This commit is contained in:
parent
16d6e842a2
commit
c3886bf888
34
src/main.rs
34
src/main.rs
|
@ -28,47 +28,23 @@ mod app {
|
|||
use stm32f4xx_hal::{
|
||||
adc::{
|
||||
self,
|
||||
config::{
|
||||
AdcConfig, Continuous, Dma, ExternalTrigger, SampleTime, Scan, Sequence,
|
||||
TriggerMode,
|
||||
},
|
||||
config::{AdcConfig, Dma, ExternalTrigger, SampleTime, Scan, Sequence, TriggerMode},
|
||||
Adc,
|
||||
},
|
||||
dma::{
|
||||
self, config::DmaConfig, PeripheralToMemory, Stream0, Stream7, StreamsTuple, Transfer,
|
||||
},
|
||||
dma::{config::DmaConfig, PeripheralToMemory, Stream0, Stream7, StreamsTuple, Transfer},
|
||||
gpio::{self, gpioa, gpioc, Analog, Output, PushPull},
|
||||
i2c::{self, I2c},
|
||||
pac::{ADC1, DMA1, DMA2, I2C1, SPI1, SYST, TIM2, TIM4},
|
||||
pac::{ADC1, DMA1, DMA2, I2C1, TIM4},
|
||||
prelude::*,
|
||||
qei,
|
||||
spi::{self, Spi},
|
||||
timer::{
|
||||
self, Channel, Channel1, Channel3, ChannelBuilder, CounterHz, Event, PwmHz, CCR, CCR3,
|
||||
},
|
||||
timer::{Channel, Channel1, Channel3, ChannelBuilder, PwmHz, CCR, CCR3},
|
||||
};
|
||||
|
||||
use cortex_m::{asm, singleton};
|
||||
|
||||
use microfft::complex::cfft_128;
|
||||
use num_traits::{float::Float, Pow};
|
||||
use cortex_m::singleton;
|
||||
|
||||
use crate::filters;
|
||||
use crate::si5153;
|
||||
use crate::ui::UI;
|
||||
|
||||
use embedded_graphics::mono_font::MonoTextStyle;
|
||||
use embedded_graphics::pixelcolor::Rgb565;
|
||||
use embedded_graphics::prelude::*;
|
||||
use embedded_graphics::primitives::rectangle::Rectangle;
|
||||
use embedded_graphics::primitives::{Line, PrimitiveStyle};
|
||||
use embedded_graphics::text::Text;
|
||||
use profont::PROFONT_14_POINT;
|
||||
|
||||
use core::fmt::Write;
|
||||
|
||||
use st7735_lcd::{Orientation, ST7735};
|
||||
|
||||
type AudioPwm = PwmHz<TIM4, ChannelBuilder<TIM4, 2>>;
|
||||
|
||||
#[local]
|
||||
|
|
71
src/ui.rs
71
src/ui.rs
|
@ -1,21 +1,10 @@
|
|||
use stm32f4xx_hal::{
|
||||
adc::{
|
||||
self,
|
||||
config::{
|
||||
AdcConfig, Continuous, Dma, ExternalTrigger, SampleTime, Scan, Sequence, TriggerMode,
|
||||
},
|
||||
Adc,
|
||||
},
|
||||
dma::{self, config::DmaConfig, PeripheralToMemory, Stream0, Stream7, StreamsTuple, Transfer},
|
||||
gpio::{self, Alternate, Analog, Input, Output, PushPull},
|
||||
i2c::{self, I2c},
|
||||
pac::{ADC1, DMA1, DMA2, I2C1, SPI1, SYST, TIM2, TIM4},
|
||||
gpio::{self, Alternate, Input, Output, PushPull},
|
||||
i2c::I2c,
|
||||
pac::{I2C1, SPI1, SYST, TIM2},
|
||||
prelude::*,
|
||||
qei, rcc,
|
||||
spi::{self, Spi},
|
||||
timer::{
|
||||
self, Channel, Channel1, Channel3, ChannelBuilder, CounterHz, Event, PwmHz, CCR, CCR3,
|
||||
},
|
||||
};
|
||||
|
||||
use st7735_lcd::{Orientation, ST7735};
|
||||
|
@ -56,11 +45,12 @@ pub struct UI {
|
|||
row_pos: u16,
|
||||
row_buffer: [Complex<f32>; 128],
|
||||
row_buffer_count: usize,
|
||||
max_mag: f32,
|
||||
|
||||
encoder: qei::Qei<TIM2>,
|
||||
last_encoder_pos: u32,
|
||||
carrier_freq: u32,
|
||||
|
||||
initial_render: bool,
|
||||
}
|
||||
|
||||
impl UI {
|
||||
|
@ -114,10 +104,10 @@ impl UI {
|
|||
row_pos: 0,
|
||||
row_buffer: [Complex::<f32>::new(0.0, 0.0); 128],
|
||||
row_buffer_count: 0,
|
||||
max_mag: 0.0,
|
||||
encoder,
|
||||
last_encoder_pos: 0,
|
||||
carrier_freq: 7_100_000,
|
||||
initial_render: true,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -173,30 +163,59 @@ impl UI {
|
|||
defmt::info!("Position is {}", self.row_pos);
|
||||
}
|
||||
|
||||
if self.initial_render {
|
||||
Rectangle::new(Point::new(0, 0), Size::new(30, 24))
|
||||
.into_styled(PrimitiveStyle::with_fill(Rgb565::GREEN))
|
||||
.draw(&mut self.disp)
|
||||
.unwrap();
|
||||
|
||||
let text_style = MonoTextStyle::new(&PROFONT_14_POINT, Rgb565::BLACK);
|
||||
Text::new("RX", Point::new(6, 16), text_style)
|
||||
.draw(&mut self.disp)
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
let encoder_pos = self.encoder.count();
|
||||
let diff = encoder_pos.wrapping_sub(self.last_encoder_pos) as i32 / 4;
|
||||
|
||||
if diff >= 1 || diff <= -1 {
|
||||
self.carrier_freq = (self.carrier_freq as i32 + diff * 100) as u32;
|
||||
if diff != 0 || self.initial_render {
|
||||
if diff != 0 {
|
||||
self.carrier_freq = (self.carrier_freq as i32 + diff * 100) as u32;
|
||||
|
||||
pll.set_pll_freq(i2c, si5153::PLL::A, self.carrier_freq * 100);
|
||||
pll.set_ms_freq(i2c, si5153::Multisynth::MS0, self.carrier_freq);
|
||||
pll.set_ms_freq(i2c, si5153::Multisynth::MS1, self.carrier_freq);
|
||||
pll.set_pll_freq(i2c, si5153::PLL::A, self.carrier_freq * 100);
|
||||
pll.set_ms_freq(i2c, si5153::Multisynth::MS0, self.carrier_freq);
|
||||
pll.set_ms_freq(i2c, si5153::Multisynth::MS1, self.carrier_freq);
|
||||
}
|
||||
|
||||
Rectangle::new(Point::new(0, 0), Size::new(160, 28))
|
||||
Rectangle::new(Point::new(32, 0), Size::new(160, 28))
|
||||
.into_styled(PrimitiveStyle::with_fill(Rgb565::BLACK))
|
||||
.draw(&mut self.disp)
|
||||
.unwrap();
|
||||
|
||||
let mut freq_txt = arrayvec::ArrayString::<11>::new();
|
||||
write!(freq_txt, "{}", self.carrier_freq).unwrap();
|
||||
let freq_str = format_frequency(self.carrier_freq);
|
||||
let text_style = MonoTextStyle::new(&PROFONT_14_POINT, Rgb565::WHITE);
|
||||
Text::new(&freq_txt, Point::new(8, 16), text_style)
|
||||
Text::new(&freq_str, Point::new(32, 16), text_style)
|
||||
.draw(&mut self.disp)
|
||||
.unwrap();
|
||||
|
||||
self.last_encoder_pos = encoder_pos;
|
||||
|
||||
defmt::info!("Carrier freq is {}", self.carrier_freq);
|
||||
}
|
||||
defmt::info!("Carrier freq is {}", self.carrier_freq);
|
||||
|
||||
self.initial_render = false;
|
||||
}
|
||||
}
|
||||
|
||||
fn format_frequency(freq: u32) -> arrayvec::ArrayString<10> {
|
||||
let hz = freq % 1000;
|
||||
let rest = freq / 1000;
|
||||
let khz = rest % 1000;
|
||||
let rest = rest / 1000;
|
||||
let mhz = rest % 1000;
|
||||
|
||||
let mut freq_str = arrayvec::ArrayString::new();
|
||||
write!(freq_str, "{:02}.{:03}.{:03}", mhz, khz, hz).unwrap();
|
||||
|
||||
freq_str
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue