Add shift time tables

This commit is contained in:
Ashcon Mohseninia 2022-12-04 11:34:55 +00:00
parent e02349d9c3
commit 60923af5e4
5 changed files with 327 additions and 158 deletions

View File

@ -10,11 +10,10 @@ name = "config_app"
path = "src/main.rs"
[dependencies]
serde_json = { version = "1.0.79" }
serde = { version = "1.0.137", features = ["derive"] }
ecu_diagnostics="0.90.51"
#ecu_diagnostics = {path="../../ecu_diagnostics"}
image = "0.24.1"
serde_json = { version = "1.0.89" }
serde = { version = "1.0.148", features = ["derive"] }
ecu_diagnostics="0.90.52"
image = "0.24.5"
serial-rs = {git="https://github.com/rnd-ash/serial-rs"}
nfd="0.0.4"
pollster = "0.2.5"
@ -22,7 +21,7 @@ eframe = {version="0.19.0", features=["wgpu"]}
egui_extras = "0.19.0"
modular-bitfield = "0.11.2"
static_assertions = "1.1.0"
env_logger="0.9.0"
egui-toast="0.3.0"
env_logger="0.10.0"
egui-toast="0.4.0"
chrono = "0.4.23"
nom="7.1.1"

View File

@ -0,0 +1,19 @@
use eframe::egui;
pub trait HelpView: Clone + Sized {
fn gen_ui(&self, meta: &super::MapData, raw_ui: &mut egui::Ui) -> bool where Self: Sized;
}
#[derive(Clone, Copy)]
pub struct FillingPressureHelp;
impl HelpView for FillingPressureHelp {
fn gen_ui(&self, meta: &super::MapData, raw_ui: &mut egui::Ui) -> bool {
if raw_ui.button("Back").clicked() {
return true;
}
return false;
}
}

View File

@ -0,0 +1,284 @@
use super::MapData;
pub (crate) const MAP_ARRAY: &[MapData] = &[
MapData::new(
0x01,
"Upshift (A)",
"%",
"",
"Pedal position (%)",
"Gear shift",
"Upshift RPM threshold",
"RPM",
None,
Some(&["1->2", "2->3", "3->4", "4->5"]),
//None
),
MapData::new(
0x02,
"Upshift (C)",
"%",
"",
"Pedal position (%)",
"Gear shift",
"Upshift RPM threshold",
"RPM",
None,
Some(&["1->2", "2->3", "3->4", "4->5"]),
//None
),
MapData::new(
0x03,
"Upshift (S)",
"%",
"",
"Pedal position (%)",
"Gear shift",
"Upshift RPM threshold",
"RPM",
None,
Some(&["1->2", "2->3", "3->4", "4->5"]),
//None
),
MapData::new(
0x04,
"Downshift (A)",
"%",
"",
"Pedal position (%)",
"Gear shift",
"Downshift RPM threshold",
"RPM",
None,
Some(&["2->1", "3->2", "4->3", "5->4"]),
//None
),
MapData::new(
0x05,
"Downshift (C)",
"%",
"",
"Pedal position (%)",
"Gear shift",
"Downshift RPM threshold",
"RPM",
None,
Some(&["2->1", "3->2", "4->3", "5->4"]),
//None
),
MapData::new(
0x06,
"Downshift (S)",
"%",
"",
"Pedal position (%)",
"Gear shift",
"Downshift RPM threshold",
"RPM",
None,
Some(&["2->1", "3->2", "4->3", "5->4"]),
//None
),
MapData::new(
0x07,
"Working pressure",
"%",
"",
"Input torque (% of rated)",
"Gear",
"Downshift RPM threshold",
"mBar",
None,
Some(&["P/N", "R1/R2", "1", "2", "3", "4", "5"]),
//None
),
MapData::new(
0x08,
"Pressure solenoid current",
"mBar",
"C",
"Working pressure",
"ATF Temperature",
"Solenoid current (mA)",
"mA",
None,
None,
//None
),
MapData::new(
0x09,
"TCC solenoid Pwm",
"mBar",
"C",
"Converter pressure",
"ATF Temperature",
"Solenoid PWM duty (4096 = 100% on)",
"/4096",
None,
None,
//None
),
MapData::new(
0x0A,
"Clutch filling time",
"C",
"",
"ATF Temperature",
"Clutch",
"filling time in millseconds",
"ms",
None,
Some(&["K1", "K2", "K3", "B1", "B2"]),
//None
),
MapData::new(
0x0B,
"Clutch filling pressure",
"C",
"",
"",
"Clutch",
"filling pressure in millibar",
"mBar",
None,
Some(&["K1", "K2", "K3", "B1", "B2"]),
//None
),
MapData::new(
0x10,
"Upshift overlap time (Agility)",
"%",
"RPM",
"",
"Pedal position",
"Input speed",
"ms",
None,
None,
//None
),
MapData::new(
0x11,
"Downshift overlap time (Agility)",
"%",
"RPM",
"",
"Pedal position",
"Input speed",
"ms",
None,
None,
//None
),
MapData::new(
0x12,
"Upshift overlap time (Standard)",
"%",
"RPM",
"",
"Pedal position",
"Input speed",
"ms",
None,
None,
//None
),
MapData::new(
0x13,
"Downshift overlap time (Standard)",
"%",
"RPM",
"",
"Pedal position",
"Input speed",
"ms",
None,
None,
//None
),
MapData::new(
0x14,
"Upshift overlap time (Comfort)",
"%",
"RPM",
"",
"Pedal position",
"Input speed",
"ms",
None,
None,
//None
),
MapData::new(
0x15,
"Downshift overlap time (Comfort)",
"%",
"RPM",
"",
"Pedal position",
"Input speed",
"ms",
None,
None,
//None
),
MapData::new(
0x16,
"Upshift overlap time (Winter)",
"%",
"RPM",
"",
"Pedal position",
"Input speed",
"ms",
None,
None,
//None
),
MapData::new(
0x17,
"Downshift overlap time (Winter)",
"%",
"RPM",
"",
"Pedal position",
"Input speed",
"ms",
None,
None,
//None
),
MapData::new(
0x18,
"Upshift overlap time (Manual)",
"%",
"RPM",
"",
"Pedal position",
"Input speed",
"ms",
None,
None,
//None
),
MapData::new(
0x19,
"Downshift overlap time (Manual)",
"%",
"RPM",
"",
"Pedal position",
"Input speed",
"ms",
None,
None,
//None
),
];

View File

@ -23,10 +23,12 @@ use egui_extras::{Size, Table, TableBuilder};
use egui_toast::ToastKind;
use nom::number::complete::le_u16;
mod map_widget;
mod help_view;
mod map_list;
use map_list::MAP_ARRAY;
use crate::window::PageAction;
use self::map_widget::MapWidget;
use self::{map_widget::MapWidget, help_view::HelpView};
use super::{
configuration::{
@ -329,7 +331,6 @@ impl Map {
let mut value = format!("{}", copy.data_modify[map_idx]);
if let Some((curr_edit_idx, current_edit_txt, resp)) = &copy.curr_edit_cell {
if *curr_edit_idx == map_idx {
println!("Editing current cell {}", current_edit_txt);
value = current_edit_txt.clone();
}
}
@ -343,7 +344,6 @@ impl Map {
response = response.on_hover_text(format!("Current in EEPROM: {}", copy.data_eeprom[map_idx]));
}
if response.lost_focus() || cell.ctx().input().key_pressed(egui::Key::Enter) {
println!("Cell ({},{}) lost focus, editing done", row_id, x_pos);
if let Ok(new_v) = i16::from_str_radix(&value, 10) {
copy.data_modify[map_idx] = new_v;
}
@ -455,7 +455,7 @@ impl Map {
if raw_ui.button("Write changes (To EEPROM)").clicked() {
return match self.save_to_eeprom() {
Ok(_) => {
if let Ok(new_data) = Self::new(self.meta.id, self.ecu_ref.clone(), self.meta) {
if let Ok(new_data) = Self::new(self.meta.id, self.ecu_ref.clone(), self.meta.clone()) {
*self = new_data;
}
Some(PageAction::SendNotification { text: format!("Map {} EEPROM save OK!", self.eeprom_key), kind: ToastKind::Success })
@ -473,7 +473,7 @@ impl Map {
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
#[derive(Debug, Clone)]
pub struct MapData {
id: u8,
name: &'static str,
@ -485,6 +485,7 @@ pub struct MapData {
value_unit: &'static str,
x_replace: Option<&'static [&'static str]>,
y_replace: Option<&'static [&'static str]>,
show_help: bool
}
impl MapData {
@ -498,7 +499,7 @@ impl MapData {
v_desc: &'static str,
value_unit: &'static str,
x_replace: Option<&'static [&'static str]>,
y_replace: Option<&'static [&'static str]>,
y_replace: Option<&'static [&'static str]>
) -> Self {
Self {
id,
@ -511,145 +512,11 @@ impl MapData {
value_unit,
x_replace,
y_replace,
show_help: false
}
}
}
const MAP_ARRAY: [MapData; 11] = [
MapData::new(
0x01,
"Upshift (A)",
"%",
"",
"Pedal position (%)",
"Gear shift",
"Upshift RPM threshold",
"RPM",
None,
Some(&["1->2", "2->3", "3->4", "4->5"]),
),
MapData::new(
0x02,
"Upshift (C)",
"%",
"",
"Pedal position (%)",
"Gear shift",
"Upshift RPM threshold",
"RPM",
None,
Some(&["1->2", "2->3", "3->4", "4->5"]),
),
MapData::new(
0x03,
"Upshift (S)",
"%",
"",
"Pedal position (%)",
"Gear shift",
"Upshift RPM threshold",
"RPM",
None,
Some(&["1->2", "2->3", "3->4", "4->5"]),
),
MapData::new(
0x04,
"Downshift (A)",
"%",
"",
"Pedal position (%)",
"Gear shift",
"Downshift RPM threshold",
"RPM",
None,
Some(&["2->1", "3->2", "4->3", "5->4"]),
),
MapData::new(
0x05,
"Downshift (C)",
"%",
"",
"Pedal position (%)",
"Gear shift",
"Downshift RPM threshold",
"RPM",
None,
Some(&["2->1", "3->2", "4->3", "5->4"]),
),
MapData::new(
0x06,
"Downshift (S)",
"%",
"",
"Pedal position (%)",
"Gear shift",
"Downshift RPM threshold",
"RPM",
None,
Some(&["2->1", "3->2", "4->3", "5->4"]),
),
MapData::new(
0x07,
"Working pressure",
"%",
"",
"Input torque (% of rated)",
"Gear",
"Downshift RPM threshold",
"mBar",
None,
Some(&["P/N", "R1/R2", "1", "2", "3", "4", "5"]),
),
MapData::new(
0x08,
"Pressure solenoid current",
"mBar",
"C",
"Working pressure",
"ATF Temperature",
"Solenoid current (mA)",
"mA",
None,
None,
),
MapData::new(
0x09,
"TCC solenoid Pwm",
"mBar",
"C",
"Converter pressure",
"ATF Temperature",
"Solenoid PWM duty (4096 = 100% on)",
"/4096",
None,
None,
),
MapData::new(
0x0A,
"Clutch filling time",
"C",
"",
"ATF Temperature",
"Clutch",
"filling time in millseconds",
"ms",
None,
Some(&["K1", "K2", "K3", "B1", "B2"]),
),
MapData::new(
0x0B,
"Clutch filling pressure",
"C",
"",
"",
"Clutch",
"filling pressure in millibar",
"mBar",
None,
Some(&["K1", "K2", "K3", "B1", "B2"]),
),
];
pub struct MapEditor {
bar: MainStatusBar,
server: Arc<Mutex<Kwp2000DiagnosticServer>>,
@ -675,7 +542,7 @@ impl super::InterfacePage for MapEditor {
ui: &mut eframe::egui::Ui,
frame: &eframe::Frame,
) -> crate::window::PageAction {
for map in &MAP_ARRAY {
for map in MAP_ARRAY {
if ui.button(map.name).clicked() {
self.error = None;
match Map::new(map.id, self.server.clone(), map.clone()) {

View File

@ -10,7 +10,7 @@ use crate::ui::{
status_bar::{self},
};
use eframe::{
egui::{self, Direction},
egui::{self, Direction, WidgetText, RichText},
epaint::Pos2,
};
use egui_toast::{Toast, ToastKind, ToastOptions, Toasts};
@ -69,7 +69,7 @@ impl eframe::App for MainWindow {
self.pop_page();
}
let mut toasts = Toasts::new(ctx)
let mut toasts = Toasts::new()
.anchor(Pos2::new(
5.0,
ctx.available_rect().height() - s_bar_height - 5.0,
@ -92,18 +92,18 @@ impl eframe::App for MainWindow {
}
PageAction::SendNotification { text, kind } => {
println!("Pushing notification {}", text);
toasts.add(
text,
toasts.add(Toast {
kind,
ToastOptions {
text: WidgetText::RichText(RichText::new(text)),
options: ToastOptions {
show_icon: true,
expires_at: Some(Instant::now().add(Duration::from_secs(5))),
},
);
}
});
}
}
});
toasts.show();
toasts.show(&ctx);
}
ctx.request_repaint();
}