From 25e6f593d3cd29cb2d67dbff6836481c2bb76bb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andis=20Z=C4=ABle?= Date: Tue, 17 Sep 2024 23:24:01 +0300 Subject: [PATCH] Added mode translators --- firmware/src/dccd/brakes.cpp | 40 ++++++++++++++++++++++++++++ firmware/src/dccd/brakes.h | 2 ++ firmware/src/dccd/dccd.cpp | 13 ++++----- firmware/src/dccd/handbrake.cpp | 47 +++++++++++++++++++++++++++++++++ firmware/src/dccd/handbrake.h | 2 ++ firmware/src/dccd/tps.cpp | 47 +++++++++++++++++++++++++++++++++ firmware/src/dccd/tps.h | 2 ++ 7 files changed, 147 insertions(+), 6 deletions(-) diff --git a/firmware/src/dccd/brakes.cpp b/firmware/src/dccd/brakes.cpp index 988c5f8..0411333 100644 --- a/firmware/src/dccd/brakes.cpp +++ b/firmware/src/dccd/brakes.cpp @@ -74,4 +74,44 @@ Brakes::bmode_t dccd::Brakes::cycle_mode(void) return this->mode; } +uint8_t dccd::Brakes::get_mode_int(void) +{ + switch(this->mode) + { + case OPEN: + return 0; + + case KEEP: + return 1; + + case LOCK: + return 2; + + default: + return 0; + } +} + +void dccd::Brakes::set_mode_int(uint8_t mode_int) +{ + switch(mode_int) + { + case 0: + this->mode = OPEN; + break; + + case 1: + this->mode = KEEP; + break; + + case 2: + this->mode = LOCK; + break; + + default: + this->mode = OPEN; + break; + } +} + /**** Private function definitions ***/ diff --git a/firmware/src/dccd/brakes.h b/firmware/src/dccd/brakes.h index 6da5a7a..b0516de 100644 --- a/firmware/src/dccd/brakes.h +++ b/firmware/src/dccd/brakes.h @@ -30,6 +30,8 @@ class Brakes void cfg_debounce(uint16_t dbnc_time); bmode_t cycle_mode(void); uint8_t process(void); + uint8_t get_mode_int(void); + void set_mode_int(uint8_t mode_int); #ifdef TESTING protected: diff --git a/firmware/src/dccd/dccd.cpp b/firmware/src/dccd/dccd.cpp index 6f31da1..89da6e6 100644 --- a/firmware/src/dccd/dccd.cpp +++ b/firmware/src/dccd/dccd.cpp @@ -83,9 +83,10 @@ void dccd::DccdApp::init(DccdHw* dccd_hw, cfg_app_t* def_cfg) this->user_force.btn_force = 100; this->nvmem.dynamic_cfg.btn_force = 100; }; - this->tps.mode = (Thtrottle::tpsmode_t)this->nvmem.dynamic_cfg.tps_mode; - this->hbrake.mode = (Handbrake::hbmode_t)this->nvmem.dynamic_cfg.hbrake_mode; - this->brakes.mode = (Brakes::bmode_t)this->nvmem.dynamic_cfg.brakes_mode; + + this->tps.set_mode_int(this->nvmem.dynamic_cfg.tps_mode); + this->hbrake.set_mode_int(this->nvmem.dynamic_cfg.hbrake_mode); + this->brakes.set_mode_int(this->nvmem.dynamic_cfg.brakes_mode); // Initialize state this->hardware->read(); @@ -116,17 +117,17 @@ void dccd::DccdApp::process(void) if(this->hbrake.is_active) { this->hbrake.cycle_mode(); - this->nvmem.dynamic_cfg.hbrake_mode = (uint8_t)this->hbrake.mode; + this->nvmem.dynamic_cfg.hbrake_mode = this->hbrake.get_mode_int(); } else if (this->brakes.is_active) { this->brakes.cycle_mode(); - this->nvmem.dynamic_cfg.brakes_mode = (uint8_t)this->brakes.mode; + this->nvmem.dynamic_cfg.brakes_mode = this->brakes.get_mode_int(); } else { this->tps.cycle_mode(); - this->nvmem.dynamic_cfg.tps_mode = (uint8_t)this->tps.mode; + this->nvmem.dynamic_cfg.tps_mode = this->tps.get_mode_int(); } }; diff --git a/firmware/src/dccd/handbrake.cpp b/firmware/src/dccd/handbrake.cpp index ca76eb7..9b7cce1 100644 --- a/firmware/src/dccd/handbrake.cpp +++ b/firmware/src/dccd/handbrake.cpp @@ -104,6 +104,53 @@ uint8_t dccd::Handbrake::process(void) return this->is_active; } +uint8_t dccd::Handbrake::get_mode_int(void) +{ + switch(this->mode) + { + case LATCH0: + return 0; + + case LATCH1: + return 1; + + case LATCH2: + return 2; + + case LATCH3: + return 3; + + default: + return 0; + } +} + +void dccd::Handbrake::set_mode_int(uint8_t mode_int) +{ + switch(mode_int) + { + case 0: + this->mode = LATCH0; + break; + + case 1: + this->mode = LATCH1; + break; + + case 2: + this->mode = LATCH2; + break; + + case 3: + this->mode = LATCH3; + break; + + default: + this->mode = LATCH0; + break; + } +} + /**** Private function definitions ***/ uint16_t dccd::Handbrake::act_latch_time(void) { diff --git a/firmware/src/dccd/handbrake.h b/firmware/src/dccd/handbrake.h index 261194d..74c219b 100644 --- a/firmware/src/dccd/handbrake.h +++ b/firmware/src/dccd/handbrake.h @@ -35,6 +35,8 @@ class Handbrake uint8_t process(void); void cfg_debounce(uint16_t dbnc_time); hbmode_t cycle_mode(void); + uint8_t get_mode_int(void); + void set_mode_int(uint8_t mode_int); #ifdef TESTING protected: diff --git a/firmware/src/dccd/tps.cpp b/firmware/src/dccd/tps.cpp index d392b76..cf9ad71 100644 --- a/firmware/src/dccd/tps.cpp +++ b/firmware/src/dccd/tps.cpp @@ -102,6 +102,53 @@ void dccd::Thtrottle::process(void) } } +uint8_t dccd::Thtrottle::get_mode_int(void) +{ + switch(this->mode) + { + case MODE0: + return 0; + + case MODE1: + return 1; + + case MODE2: + return 2; + + case MODE3: + return 3; + + default: + return 0; + } +} + +void dccd::Thtrottle::set_mode_int(uint8_t mode_int) +{ + switch(mode_int) + { + case 0: + this->mode = MODE0; + break; + + case 1: + this->mode = MODE1; + break; + + case 2: + this->mode = MODE2; + break; + + case 3: + this->mode = MODE3; + break; + + default: + this->mode = MODE0; + break; + } +} + uint8_t dccd::Thtrottle::is_active(void) { if(this->is_timed_out) return 0; diff --git a/firmware/src/dccd/tps.h b/firmware/src/dccd/tps.h index 7c0da70..efa82b2 100644 --- a/firmware/src/dccd/tps.h +++ b/firmware/src/dccd/tps.h @@ -36,6 +36,8 @@ class Thtrottle void process(void); tpsmode_t cycle_mode(void); + uint8_t get_mode_int(void); + void set_mode_int(uint8_t mode_int); #ifdef TESTING protected: