From 3b4e67d740ff96e08fe1453e5aba0e00a806583e Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Fri, 17 Sep 2021 17:35:10 +0200 Subject: [PATCH] fixed iMotMax and fieldWeakMax overflow (with ~40A) --- bobbycar-protocol | 2 +- main.cpp | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/bobbycar-protocol b/bobbycar-protocol index 2e0f97d..2c6fb11 160000 --- a/bobbycar-protocol +++ b/bobbycar-protocol @@ -1 +1 @@ -Subproject commit 2e0f97d6dd3e71cf01d0859bd332548be2187d24 +Subproject commit 2c6fb114f2ea6e3aed243acea1afd28ca34938c9 diff --git a/main.cpp b/main.cpp index 26b3724..e124438 100644 --- a/main.cpp +++ b/main.cpp @@ -1440,9 +1440,9 @@ void parseCommand() left.iDcMax = command.left.iDcMax; left.rtP.z_ctrlTypSel = uint8_t(command.left.ctrlTyp); - left.rtP.i_max = (command.left.iMotMax * A2BIT_CONV) << 4; + left.rtP.i_max = (int16_t(command.left.iMotMax) * A2BIT_CONV) << 4; left.rtP.n_max = command.left.nMotMax << 4; - left.rtP.id_fieldWeakMax = (command.left.fieldWeakMax * A2BIT_CONV) << 4; + left.rtP.id_fieldWeakMax = (int16_t(command.left.fieldWeakMax) * A2BIT_CONV) << 4; left.rtP.a_phaAdvMax = command.left.phaseAdvMax << 4; left.rtU.z_ctrlModReq = uint8_t(command.left.ctrlMod); left.rtU.r_inpTgt = command.left.pwm; @@ -1450,9 +1450,9 @@ void parseCommand() right.iDcMax = command.right.iDcMax; right.rtP.z_ctrlTypSel = uint8_t(command.right.ctrlTyp); - right.rtP.i_max = (command.right.iMotMax * A2BIT_CONV) << 4; // fixdt(1,16,4) + right.rtP.i_max = (int16_t(command.right.iMotMax) * A2BIT_CONV) << 4; // fixdt(1,16,4) right.rtP.n_max = command.right.nMotMax << 4; // fixdt(1,16,4) - right.rtP.id_fieldWeakMax = (command.right.fieldWeakMax * A2BIT_CONV) << 4; // fixdt(1,16,4) + right.rtP.id_fieldWeakMax = (int16_t(command.right.fieldWeakMax) * A2BIT_CONV) << 4; // fixdt(1,16,4) right.rtP.a_phaAdvMax = command.right.phaseAdvMax << 4; // fixdt(1,16,4) right.rtU.z_ctrlModReq = uint8_t(command.right.ctrlMod); right.rtU.r_inpTgt = command.right.pwm; @@ -1593,14 +1593,14 @@ void applyIncomingCanMessage() case MotorController ::Command::CtrlTyp: right.rtP.z_ctrlTypSel = *((uint8_t*)buf); break; case MotorController::Command::CtrlMod: left .rtU.z_ctrlModReq = *((uint8_t*)buf); break; case MotorController ::Command::CtrlMod: right.rtU.z_ctrlModReq = *((uint8_t*)buf); break; - case MotorController::Command::IMotMax: left .rtP.i_max = (*((uint8_t*)buf) * A2BIT_CONV) << 4; break; - case MotorController ::Command::IMotMax: right.rtP.i_max = (*((uint8_t*)buf) * A2BIT_CONV) << 4; break; + case MotorController::Command::IMotMax: left .rtP.i_max = (int16_t(*((uint8_t*)buf)) * A2BIT_CONV) << 4; break; + case MotorController ::Command::IMotMax: right.rtP.i_max = (int16_t(*((uint8_t*)buf)) * A2BIT_CONV) << 4; break; case MotorController::Command::IDcMax: left .iDcMax = *((uint8_t*)buf); break; case MotorController ::Command::IDcMax: right.iDcMax = *((uint8_t*)buf); break; case MotorController::Command::NMotMax: left .rtP.n_max = *((uint16_t*)buf) << 4; break; case MotorController ::Command::NMotMax: right.rtP.n_max = *((uint16_t*)buf) << 4; break; - case MotorController::Command::FieldWeakMax: left .rtP.id_fieldWeakMax = (*((uint8_t*)buf) * A2BIT_CONV) << 4; break; - case MotorController ::Command::FieldWeakMax: right.rtP.id_fieldWeakMax = (*((uint8_t*)buf) * A2BIT_CONV) << 4; break; + case MotorController::Command::FieldWeakMax: left .rtP.id_fieldWeakMax = (int16_t(*((uint8_t*)buf)) * A2BIT_CONV) << 4; break; + case MotorController ::Command::FieldWeakMax: right.rtP.id_fieldWeakMax = (int16_t(*((uint8_t*)buf)) * A2BIT_CONV) << 4; break; case MotorController::Command::PhaseAdvMax: left .rtP.a_phaAdvMax = *((uint16_t*)buf) << 4; break; case MotorController ::Command::PhaseAdvMax: right.rtP.a_phaAdvMax = *((uint16_t*)buf) << 4; break; case MotorController::Command::CruiseCtrlEna: left .rtP.b_cruiseCtrlEna = *((bool*)buf); break;