From a1eb105876f477ea18b94f6bcac82926677e659f Mon Sep 17 00:00:00 2001 From: jsphuebner Date: Wed, 5 Feb 2025 11:52:34 +0100 Subject: [PATCH 1/2] Implement user space SDO jsphuebner/libopeninv#25 --- Makefile | 2 +- libopeninv | 2 +- src/stm32_sine.cpp | 41 +++++++++++++++++++++++++++++++++++++++-- 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 8127eb6..5ab6f04 100644 --- a/Makefile +++ b/Makefile @@ -51,7 +51,7 @@ OBJSL = stm32_sine.o hwinit.o stm32scheduler.o params.o terminal.o terminal_prj my_string.o digio.o sine_core.o my_fp.o fu.o inc_encoder.o printf.o anain.o \ temp_meas.o param_save.o throttle.o errormessage.o pwmgeneration.o \ picontroller.o terminalcommands.o vehiclecontrol.o \ - stm32_can.o canmap.o canhardware.o cansdo.o + stm32_can.o canmap.o canhardware.o cansdo.o sdocommands.o ifeq ($(CONTROL), SINE) OBJSL += pwmgeneration-sine.o diff --git a/libopeninv b/libopeninv index 93e9bcd..d3d67d2 160000 --- a/libopeninv +++ b/libopeninv @@ -1 +1 @@ -Subproject commit 93e9bcdf730fddcf098a6dfd449ce42badf0a8f1 +Subproject commit d3d67d2643e51ca8dcc36293021a6bbfe89d422a diff --git a/src/stm32_sine.cpp b/src/stm32_sine.cpp index 5b65926..0ab2cc5 100644 --- a/src/stm32_sine.cpp +++ b/src/stm32_sine.cpp @@ -46,8 +46,11 @@ #include "stm32_can.h" #include "canmap.h" #include "cansdo.h" +#include "sdocommands.h" #define PRINT_JSON 0 +#define START_COMMAND_SUBINDEX 4 +#define STOP_COMMAND_SUBINDEX 5 HWREV hwRev; //Hardware variant of board we are running on @@ -220,13 +223,13 @@ static void Ms10Task(void) PwmGeneration::SetOpmode(MOD_OFF); Throttle::cruiseSpeed = -1; TerminalCommands::EnableSaving(); - canSdo->EnableSaving(); + SdoCommands::EnableSaving(); } else if (0 == initWait) { //Disable saving in Run mode TerminalCommands::DisableSaving(); - canSdo->DisableSaving(); + SdoCommands::DisableSaving(); PwmGeneration::SetTorquePercent(0); Throttle::RampThrottle(0); //Restart ramp Encoder::Reset(); @@ -356,6 +359,29 @@ void Param::Change(Param::PARAM_NUM paramNum) } } +static void ProcessCustomSdoCommands(CanSdo::SdoFrame* sdoFrame) +{ + if (sdoFrame->index == SDO_INDEX_COMMANDS && sdoFrame->cmd == SDO_WRITE) + { + switch (sdoFrame->subIndex) + { + case START_COMMAND_SUBINDEX: + if (sdoFrame->data < MOD_LAST) + { + Param::SetInt(Param::opmode, sdoFrame->data); + sdoFrame->cmd = SDO_WRITE_REPLY; + sdoFrame->data = 0; + } + break; + case STOP_COMMAND_SUBINDEX: + Param::SetInt(Param::opmode, 0); + sdoFrame->cmd = SDO_WRITE_REPLY; + sdoFrame->data = 0; + break; + } + } +} + static void UpgradeParameters() { Param::SetInt(Param::version, 4); //backward compatibility @@ -441,11 +467,22 @@ extern "C" int main(void) while(1) { char c = 0; + CanSdo::SdoFrame* sdoFrame = sdo.GetPendingUserspaceSdo(); t.Run(); + if (canSdo->GetPrintRequest() == PRINT_JSON) { TerminalCommands::PrintParamsJson(canSdo, &c); } + if (0 != sdoFrame) + { + SdoCommands::ProcessStandardCommands(sdoFrame); + + if (sdoFrame->cmd == SDO_ABORT) + ProcessCustomSdoCommands(sdoFrame); + + sdo.SendSdoReply(sdoFrame); + } } return 0; From 05bc282c5cd6cf3feb2b6da72192162f8a555bf5 Mon Sep 17 00:00:00 2001 From: jsphuebner Date: Wed, 5 Feb 2025 11:55:55 +0100 Subject: [PATCH 2/2] Added new files --- sinus.cbp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sinus.cbp b/sinus.cbp index 94cd215..1669052 100644 --- a/sinus.cbp +++ b/sinus.cbp @@ -102,6 +102,7 @@ + @@ -131,6 +132,7 @@ +