From 001ca7699038d08f9a3a042279f058073a17eba7 Mon Sep 17 00:00:00 2001 From: Marcin Nowak Date: Sat, 3 Aug 2024 00:17:26 +0200 Subject: [PATCH] (commands) add epbrakecontrolenable and epbrakecontroldisable --- Train.cpp | 30 ++++++++++++++++++++++++++++++ Train.h | 2 ++ command.cpp | 2 ++ command.h | 2 ++ driverkeyboardinput.cpp | 2 ++ drivermouseinput.cpp | 6 ++++++ 6 files changed, 44 insertions(+) diff --git a/Train.cpp b/Train.cpp index 187b2545..9f34496b 100644 --- a/Train.cpp +++ b/Train.cpp @@ -254,6 +254,8 @@ TTrain::commandhandler_map const TTrain::m_commandhandlers = { { user_command::autosandboxactivate, &TTrain::OnCommand_autosandboxactivate }, { user_command::autosandboxdeactivate, &TTrain::OnCommand_autosandboxdeactivate }, { user_command::epbrakecontroltoggle, &TTrain::OnCommand_epbrakecontroltoggle }, + { user_command::epbrakecontrolenable, &TTrain::OnCommand_epbrakecontrolenable }, + { user_command::epbrakecontroldisable, &TTrain::OnCommand_epbrakecontroldisable }, { user_command::trainbrakeoperationmodeincrease, &TTrain::OnCommand_trainbrakeoperationmodeincrease }, { user_command::trainbrakeoperationmodedecrease, &TTrain::OnCommand_trainbrakeoperationmodedecrease }, { user_command::brakeactingspeedincrease, &TTrain::OnCommand_brakeactingspeedincrease }, @@ -1969,6 +1971,34 @@ void TTrain::OnCommand_autosandboxdeactivate(TTrain *Train, command_data const & } }; +void TTrain::OnCommand_epbrakecontrolenable( TTrain *Train, command_data const &Command ) { + auto const istoggle{ ( static_cast( Train->ggEPFuseButton.type() ) & static_cast( TGaugeType::toggle ) ) != 0 }; + if( Command.action == GLFW_PRESS ) { + // command only works for bistable switch + if(istoggle) { + if( Train->mvOccupied->EpFuseSwitch( true ) ) { + // audio feedback + if( Train->dsbPneumaticSwitch ) { + Train->dsbPneumaticSwitch->play(); + } + Train->ggEPFuseButton.UpdateValue(1.0f, Train->dsbSwitch); + }; + } + } +} + +void TTrain::OnCommand_epbrakecontroldisable( TTrain *Train, command_data const &Command ) { + auto const istoggle{ ( static_cast( Train->ggEPFuseButton.type() ) & static_cast( TGaugeType::toggle ) ) != 0 }; + if( Command.action == GLFW_PRESS ) { + // command only works for bistable switch + if(istoggle) { + if( Train->mvOccupied->EpFuseSwitch( false ) ) { + Train->ggEPFuseButton.UpdateValue(0.0f, Train->dsbSwitch); + }; + } + } +} + void TTrain::OnCommand_epbrakecontroltoggle( TTrain *Train, command_data const &Command ) { if( Command.action == GLFW_REPEAT ) { return; } diff --git a/Train.h b/Train.h index 4e2afda1..a1d6f245 100644 --- a/Train.h +++ b/Train.h @@ -277,6 +277,8 @@ class TTrain { static void OnCommand_autosandboxactivate(TTrain *Train, command_data const &Command); static void OnCommand_autosandboxdeactivate(TTrain *Train, command_data const &Command); static void OnCommand_epbrakecontroltoggle( TTrain *Train, command_data const &Command ); + static void OnCommand_epbrakecontrolenable( TTrain *Train, command_data const &Command ); + static void OnCommand_epbrakecontroldisable( TTrain *Train, command_data const &Command ); static void OnCommand_trainbrakeoperationmodeincrease(TTrain *Train, command_data const &Command); static void OnCommand_trainbrakeoperationmodedecrease(TTrain *Train, command_data const &Command); static void OnCommand_brakeactingspeedincrease( TTrain *Train, command_data const &Command ); diff --git a/command.cpp b/command.cpp index cef9f524..8e2ea97b 100644 --- a/command.cpp +++ b/command.cpp @@ -120,6 +120,8 @@ commanddescription_sequence Commands_descriptions = { { "universalrelayreset3", command_target::vehicle, command_mode::oneoff }, { "notchingrelaytoggle", command_target::vehicle, command_mode::oneoff }, { "epbrakecontroltoggle", command_target::vehicle, command_mode::oneoff }, + { "epbrakecontrolenable", command_target::vehicle, command_mode::oneoff }, + { "epbrakecontroldisable", command_target::vehicle, command_mode::oneoff }, { "trainbrakeoperationmodeincrease", command_target::vehicle, command_mode::oneoff }, { "trainbrakeoperationmodedecrease", command_target::vehicle, command_mode::oneoff }, { "brakeactingspeedincrease", command_target::vehicle, command_mode::oneoff }, diff --git a/command.h b/command.h index 47ae1b31..8fb5a87d 100644 --- a/command.h +++ b/command.h @@ -113,6 +113,8 @@ enum class user_command { universalrelayreset3, notchingrelaytoggle, epbrakecontroltoggle, + epbrakecontrolenable, + epbrakecontroldisable, trainbrakeoperationmodeincrease, trainbrakeoperationmodedecrease, brakeactingspeedincrease, diff --git a/driverkeyboardinput.cpp b/driverkeyboardinput.cpp index a093f023..ded09670 100644 --- a/driverkeyboardinput.cpp +++ b/driverkeyboardinput.cpp @@ -122,6 +122,8 @@ driverkeyboard_input::default_bindings() { // universalrelayreset3, { user_command::notchingrelaytoggle, {GLFW_KEY_G, ""} }, { user_command::epbrakecontroltoggle, {GLFW_KEY_Z | keymodifier::control, ""} }, + // epbrakecontrolenable + // epbrakecontroldisable { user_command::trainbrakeoperationmodeincrease, {GLFW_KEY_KP_2 | keymodifier::control, ""} }, { user_command::trainbrakeoperationmodedecrease, {GLFW_KEY_KP_8 | keymodifier::control, ""} }, { user_command::brakeactingspeedincrease, {GLFW_KEY_B | keymodifier::shift, ""} }, diff --git a/drivermouseinput.cpp b/drivermouseinput.cpp index 78529a23..65fde07e 100644 --- a/drivermouseinput.cpp +++ b/drivermouseinput.cpp @@ -638,6 +638,12 @@ drivermouse_input::default_bindings() { { "epbrake_bt:",{ user_command::epbrakecontroltoggle, user_command::none } }, + { "epbrakeon_bt:",{ + user_command::epbrakecontrolenable, + user_command::none } }, + { "epbrakeoff_bt:",{ + user_command::epbrakecontroldisable, + user_command::none } }, { "sand_bt:", { user_command::sandboxactivate, user_command::none } },