|
46 | 46 | #include "stm32_can.h" |
47 | 47 | #include "canmap.h" |
48 | 48 | #include "cansdo.h" |
| 49 | +#include "sdocommands.h" |
49 | 50 |
|
50 | 51 | #define PRINT_JSON 0 |
| 52 | +#define START_COMMAND_SUBINDEX 4 |
| 53 | +#define STOP_COMMAND_SUBINDEX 5 |
51 | 54 |
|
52 | 55 | HWREV hwRev; //Hardware variant of board we are running on |
53 | 56 |
|
@@ -220,13 +223,13 @@ static void Ms10Task(void) |
220 | 223 | PwmGeneration::SetOpmode(MOD_OFF); |
221 | 224 | Throttle::cruiseSpeed = -1; |
222 | 225 | TerminalCommands::EnableSaving(); |
223 | | - canSdo->EnableSaving(); |
| 226 | + SdoCommands::EnableSaving(); |
224 | 227 | } |
225 | 228 | else if (0 == initWait) |
226 | 229 | { |
227 | 230 | //Disable saving in Run mode |
228 | 231 | TerminalCommands::DisableSaving(); |
229 | | - canSdo->DisableSaving(); |
| 232 | + SdoCommands::DisableSaving(); |
230 | 233 | PwmGeneration::SetTorquePercent(0); |
231 | 234 | Throttle::RampThrottle(0); //Restart ramp |
232 | 235 | Encoder::Reset(); |
@@ -356,6 +359,29 @@ void Param::Change(Param::PARAM_NUM paramNum) |
356 | 359 | } |
357 | 360 | } |
358 | 361 |
|
| 362 | +static void ProcessCustomSdoCommands(CanSdo::SdoFrame* sdoFrame) |
| 363 | +{ |
| 364 | + if (sdoFrame->index == SDO_INDEX_COMMANDS && sdoFrame->cmd == SDO_WRITE) |
| 365 | + { |
| 366 | + switch (sdoFrame->subIndex) |
| 367 | + { |
| 368 | + case START_COMMAND_SUBINDEX: |
| 369 | + if (sdoFrame->data < MOD_LAST) |
| 370 | + { |
| 371 | + Param::SetInt(Param::opmode, sdoFrame->data); |
| 372 | + sdoFrame->cmd = SDO_WRITE_REPLY; |
| 373 | + sdoFrame->data = 0; |
| 374 | + } |
| 375 | + break; |
| 376 | + case STOP_COMMAND_SUBINDEX: |
| 377 | + Param::SetInt(Param::opmode, 0); |
| 378 | + sdoFrame->cmd = SDO_WRITE_REPLY; |
| 379 | + sdoFrame->data = 0; |
| 380 | + break; |
| 381 | + } |
| 382 | + } |
| 383 | +} |
| 384 | + |
359 | 385 | static void UpgradeParameters() |
360 | 386 | { |
361 | 387 | Param::SetInt(Param::version, 4); //backward compatibility |
@@ -441,11 +467,22 @@ extern "C" int main(void) |
441 | 467 | while(1) |
442 | 468 | { |
443 | 469 | char c = 0; |
| 470 | + CanSdo::SdoFrame* sdoFrame = sdo.GetPendingUserspaceSdo(); |
444 | 471 | t.Run(); |
| 472 | + |
445 | 473 | if (canSdo->GetPrintRequest() == PRINT_JSON) |
446 | 474 | { |
447 | 475 | TerminalCommands::PrintParamsJson(canSdo, &c); |
448 | 476 | } |
| 477 | + if (0 != sdoFrame) |
| 478 | + { |
| 479 | + SdoCommands::ProcessStandardCommands(sdoFrame); |
| 480 | + |
| 481 | + if (sdoFrame->cmd == SDO_ABORT) |
| 482 | + ProcessCustomSdoCommands(sdoFrame); |
| 483 | + |
| 484 | + sdo.SendSdoReply(sdoFrame); |
| 485 | + } |
449 | 486 | } |
450 | 487 |
|
451 | 488 | return 0; |
|
0 commit comments