More UI tweaks

This commit is contained in:
Sebastian 2023-08-27 16:49:54 +02:00
parent 16d6e842a2
commit c3886bf888
2 changed files with 50 additions and 55 deletions

View File

@ -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]

View File

@ -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
}