Skip to content

Commit

Permalink
Merge pull request #153 from card-io-ecg/compiler
Browse files Browse the repository at this point in the history
Update to 1.74 and work around changes
  • Loading branch information
bugadani committed Nov 16, 2023
2 parents 33e0f02 + 7e8d530 commit 6cf811a
Show file tree
Hide file tree
Showing 9 changed files with 219 additions and 185 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ esp-println = { version = "0.7.0", default-features = false, features = [
"critical-section",
] }
esp-alloc = "0.3.0"
esp-wifi = { git = "https://github.com/esp-rs/esp-wifi.git", rev = "5166089", default-features = false, features = [
esp-wifi = { git = "https://github.com/esp-rs/esp-wifi.git", rev = "0db7a70", default-features = false, features = [
"phy-enable-usb",
"ps-max-modem",
"wifi",
Expand Down
1 change: 0 additions & 1 deletion src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
#![feature(allocator_api)] // Box::try_new
#![feature(async_fn_in_trait)]
#![feature(type_alias_impl_trait)]
#![feature(impl_trait_projections)]
#![feature(let_chains)]
#![feature(never_type)] // Wifi net_task
#![feature(generic_const_exprs)] // norfs needs this
Expand Down
66 changes: 36 additions & 30 deletions src/states/menu/about.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,41 +25,47 @@ pub async fn about_menu(context: &mut Context) -> AppState {
}

struct AboutAppMenu;
type AboutMenuBuilder = impl AppMenuBuilder<AboutMenuEvents>;

impl MenuScreen for AboutAppMenu {
type Event = AboutMenuEvents;
type Result = AppState;
fn about_menu_builder(context: &mut Context) -> AboutMenuBuilder {
let list_item = |label| NavigationItem::new(label, AboutMenuEvents::None);

async fn menu(&mut self, context: &mut Context) -> impl AppMenuBuilder<Self::Event> {
let list_item = |label| NavigationItem::new(label, AboutMenuEvents::None);
let mut items = heapless::Vec::<_, 5>::new();
items.extend([
list_item(uformat!(20, "{}", env!("FW_VERSION_MENU_ITEM"))),
list_item(uformat!(20, "{}", env!("HW_VERSION_MENU_ITEM"))),
NavigationItem::new(
uformat!(20, "Serial {}", SerialNumber),
AboutMenuEvents::ToSerial,
),
list_item(match context.frontend.device_id() {
Some(id) => uformat!(20, "ADC {:?}", LeftPadAny(16, id)),
None => uformat!(20, "ADC Unknown"),
}),
]);

let mut items = heapless::Vec::<_, 5>::new();
items.extend([
list_item(uformat!(20, "{}", env!("FW_VERSION_MENU_ITEM"))),
list_item(uformat!(20, "{}", env!("HW_VERSION_MENU_ITEM"))),
NavigationItem::new(
uformat!(20, "Serial {}", SerialNumber),
AboutMenuEvents::ToSerial,
),
list_item(match context.frontend.device_id() {
Some(id) => uformat!(20, "ADC {:?}", LeftPadAny(16, id)),
None => uformat!(20, "ADC Unknown"),
}),
]);
#[cfg(feature = "battery_max17055")]
{
unwrap!(items
.push(
NavigationItem::new(uformat!(20, "Fuel gauge"), AboutMenuEvents::ToBatteryInfo)
.with_marker("MAX17055")
)
.ok());
}

#[cfg(feature = "battery_max17055")]
{
unwrap!(items
.push(
NavigationItem::new(uformat!(20, "Fuel gauge"), AboutMenuEvents::ToBatteryInfo)
.with_marker("MAX17055")
)
.ok());
}
create_menu("Device info")
.add_items(items)
.add_item(NavigationItem::new("Back", AboutMenuEvents::Back))
}

impl MenuScreen for AboutAppMenu {
type Event = AboutMenuEvents;
type Result = AppState;
type MenuBuilder = AboutMenuBuilder;

create_menu("Device info")
.add_items(items)
.add_item(NavigationItem::new("Back", AboutMenuEvents::Back))
async fn menu(&mut self, context: &mut Context) -> Self::MenuBuilder {
about_menu_builder(context)
}

async fn handle_event(
Expand Down
89 changes: 48 additions & 41 deletions src/states/menu/battery_info.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,58 +22,65 @@ pub async fn battery_info_menu(context: &mut Context) -> AppState {
}

struct BatteryInfoMenu;
impl MenuScreen for BatteryInfoMenu {
type Event = BatteryEvents;
type Result = AppState;
type BatteryInfoMenuBuilder = impl AppMenuBuilder<BatteryEvents>;

const REFRESH_PERIOD: Option<Duration> = Some(Duration::from_secs(1));
async fn battery_info_menu_builder(context: &mut Context) -> BatteryInfoMenuBuilder {
let mut items = heapless::Vec::<_, 6>::new();

async fn menu(&mut self, context: &mut Context) -> impl AppMenuBuilder<Self::Event> {
let mut items = heapless::Vec::<_, 6>::new();
let mut list_item = |label| {
unwrap!(items
.push(NavigationItem::new(label, BatteryEvents::None))
.ok())
};

let mut list_item = |label| {
unwrap!(items
.push(NavigationItem::new(label, BatteryEvents::None))
.ok())
};
let mut sensor = context.battery_monitor.sensor().await;

let mut sensor = context.battery_monitor.sensor().await;
if let Ok(voltage) = sensor.fg.read_vcell().await {
list_item(uformat!(
20,
"Voltage {}mV",
LeftPad(10, voltage as i32 / 1000)
));
}

if let Ok(voltage) = sensor.fg.read_vcell().await {
list_item(uformat!(
20,
"Voltage {}mV",
LeftPad(10, voltage as i32 / 1000)
));
}
if let Ok(current) = sensor.fg.read_current().await {
list_item(uformat!(20, "Current {}mA", LeftPad(10, current / 1000)));
}

if let Ok(current) = sensor.fg.read_current().await {
list_item(uformat!(20, "Current {}mA", LeftPad(10, current / 1000)));
}
if let Ok(cap) = sensor.fg.read_design_capacity().await {
list_item(uformat!(20, "Nominal {}mAh", LeftPad(9, cap as i32 / 1000)));
}

if let Ok(cap) = sensor.fg.read_design_capacity().await {
list_item(uformat!(20, "Nominal {}mAh", LeftPad(9, cap as i32 / 1000)));
}
if let Ok(cap) = sensor.fg.read_reported_capacity().await {
list_item(uformat!(
20,
"Capacity {}mAh",
LeftPad(8, cap as i32 / 1000)
));
}

if let Ok(cap) = sensor.fg.read_reported_capacity().await {
list_item(uformat!(
20,
"Capacity {}mAh",
LeftPad(8, cap as i32 / 1000)
));
}
if let Ok(age) = sensor.fg.read_cell_age().await {
list_item(uformat!(20, "Cell age {}%", LeftPad(10, age as i32)));
}

if let Ok(age) = sensor.fg.read_cell_age().await {
list_item(uformat!(20, "Cell age {}%", LeftPad(10, age as i32)));
}
if let Ok(cycles) = sensor.fg.read_charge_cycles().await {
list_item(uformat!(20, "Charge cycles {}", LeftPad(6, cycles as i32)));
}

if let Ok(cycles) = sensor.fg.read_charge_cycles().await {
list_item(uformat!(20, "Charge cycles {}", LeftPad(6, cycles as i32)));
}
create_menu("Battery info")
.add_items(items)
.add_item(NavigationItem::new("Back", BatteryEvents::Back))
}

impl MenuScreen for BatteryInfoMenu {
type Event = BatteryEvents;
type Result = AppState;
type MenuBuilder = BatteryInfoMenuBuilder;

const REFRESH_PERIOD: Option<Duration> = Some(Duration::from_secs(1));

create_menu("Battery info")
.add_items(items)
.add_item(NavigationItem::new("Back", BatteryEvents::Back))
async fn menu(&mut self, context: &mut Context) -> Self::MenuBuilder {
battery_info_menu_builder(context).await
}

async fn handle_event(
Expand Down
38 changes: 22 additions & 16 deletions src/states/menu/display.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use crate::{
config::types::{DisplayBrightness, FilterStrength},
initialized::Context,
},
states::menu::{AppMenu, MenuScreen},
states::menu::{AppMenu, AppMenuBuilder, MenuScreen},
AppState,
};
use embedded_menu::items::{NavigationItem, Select};
Expand All @@ -29,26 +29,32 @@ pub enum DisplayMenuEvents {
}

struct DisplayMenu;
type DisplayMenuBuilder = impl AppMenuBuilder<DisplayMenuEvents>;

fn display_menu_builder(context: &mut Context) -> DisplayMenuBuilder {
create_menu("Display")
.add_item(
Select::new("Brightness", context.config.display_brightness)
.with_value_converter(DisplayMenuEvents::ChangeBrigtness),
)
.add_item(
Select::new("Battery", context.config.battery_display_style)
.with_value_converter(DisplayMenuEvents::ChangeBatteryStyle),
)
.add_item(
Select::new("EKG Filter", context.config.filter_strength)
.with_value_converter(DisplayMenuEvents::ChangeFilterStrength),
)
.add_item(NavigationItem::new("Back", DisplayMenuEvents::Back))
}

impl MenuScreen for DisplayMenu {
type Event = DisplayMenuEvents;
type Result = AppState;
type MenuBuilder = DisplayMenuBuilder;

async fn menu(&mut self, context: &mut Context) -> impl super::AppMenuBuilder<Self::Event> {
create_menu("Display")
.add_item(
Select::new("Brightness", context.config.display_brightness)
.with_value_converter(DisplayMenuEvents::ChangeBrigtness),
)
.add_item(
Select::new("Battery", context.config.battery_display_style)
.with_value_converter(DisplayMenuEvents::ChangeBatteryStyle),
)
.add_item(
Select::new("EKG Filter", context.config.filter_strength)
.with_value_converter(DisplayMenuEvents::ChangeFilterStrength),
)
.add_item(NavigationItem::new("Back", DisplayMenuEvents::Back))
async fn menu(&mut self, context: &mut Context) -> Self::MenuBuilder {
display_menu_builder(context)
}

async fn handle_event(
Expand Down
54 changes: 30 additions & 24 deletions src/states/menu/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,37 +32,43 @@ pub async fn main_menu(context: &mut Context) -> AppState {
}

struct MainMenu;
type MainMenuBuilder = impl AppMenuBuilder<MainMenuEvents>;

impl MenuScreen for MainMenu {
type Event = MainMenuEvents;
type Result = AppState;
fn main_menu_builder(context: &mut Context) -> MainMenuBuilder {
let mut optional_items = heapless::Vec::<_, 4>::new();

async fn menu(&mut self, context: &mut Context) -> impl AppMenuBuilder<Self::Event> {
let mut optional_items = heapless::Vec::<_, 4>::new();
let mut optional_item =
|label, event| unwrap!(optional_items.push(NavigationItem::new(label, event)).ok());

let mut optional_item =
|label, event| unwrap!(optional_items.push(NavigationItem::new(label, event)).ok());
if context.can_enable_wifi() {
optional_item("Wifi setup", MainMenuEvents::WifiSetup);
optional_item("Wifi networks", MainMenuEvents::WifiListVisible);

if context.can_enable_wifi() {
optional_item("Wifi setup", MainMenuEvents::WifiSetup);
optional_item("Wifi networks", MainMenuEvents::WifiListVisible);
let network_configured =
!context.config.backend_url.is_empty() && !context.config.known_networks.is_empty();

let network_configured =
!context.config.backend_url.is_empty() && !context.config.known_networks.is_empty();

if network_configured {
optional_item("Firmware update", MainMenuEvents::FirmwareUpdate);
optional_item("Speed test", MainMenuEvents::Throughput);
}
if network_configured {
optional_item("Firmware update", MainMenuEvents::FirmwareUpdate);
optional_item("Speed test", MainMenuEvents::Throughput);
}
}

create_menu("Main menu")
.add_item(NavigationItem::new("Measure", MainMenuEvents::Measure))
.add_item(NavigationItem::new("Display", MainMenuEvents::Display))
.add_item(NavigationItem::new("Storage", MainMenuEvents::Storage))
.add_item(NavigationItem::new("Device info", MainMenuEvents::About))
.add_items(optional_items)
.add_item(NavigationItem::new("Shutdown", MainMenuEvents::Shutdown))
}

impl MenuScreen for MainMenu {
type Event = MainMenuEvents;
type Result = AppState;
type MenuBuilder = MainMenuBuilder;

create_menu("Main menu")
.add_item(NavigationItem::new("Measure", MainMenuEvents::Measure))
.add_item(NavigationItem::new("Display", MainMenuEvents::Display))
.add_item(NavigationItem::new("Storage", MainMenuEvents::Storage))
.add_item(NavigationItem::new("Device info", MainMenuEvents::About))
.add_items(optional_items)
.add_item(NavigationItem::new("Shutdown", MainMenuEvents::Shutdown))
async fn menu(&mut self, context: &mut Context) -> Self::MenuBuilder {
main_menu_builder(context)
}

async fn handle_event(
Expand Down
3 changes: 2 additions & 1 deletion src/states/menu/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -96,10 +96,11 @@ where
pub trait MenuScreen {
type Event;
type Result;
type MenuBuilder: AppMenuBuilder<Self::Event>;

const REFRESH_PERIOD: Option<Duration> = None;

async fn menu(&mut self, context: &mut Context) -> impl AppMenuBuilder<Self::Event>;
async fn menu(&mut self, context: &mut Context) -> Self::MenuBuilder;

async fn handle_event(
&mut self,
Expand Down
Loading

0 comments on commit 6cf811a

Please sign in to comment.