diff options
author | David Crocker <dcrocker@eschertech.com> | 2021-08-12 12:28:16 +0300 |
---|---|---|
committer | David Crocker <dcrocker@eschertech.com> | 2021-08-12 12:28:16 +0300 |
commit | c4a560b8eb181762eff870550b7ca292386dd055 (patch) | |
tree | d598e5dbbb95db3638b79f225817b6210512cfcc /src/CAN | |
parent | e83062d53c9056d16cbd02b54b80bc62254e6096 (diff) |
Process incoming board status reports
Diffstat (limited to 'src/CAN')
-rw-r--r-- | src/CAN/CommandProcessor.cpp | 10 | ||||
-rw-r--r-- | src/CAN/ExpansionManager.cpp | 28 | ||||
-rw-r--r-- | src/CAN/ExpansionManager.h | 4 |
3 files changed, 40 insertions, 2 deletions
diff --git a/src/CAN/CommandProcessor.cpp b/src/CAN/CommandProcessor.cpp index 5e8e8e95..70c5bc41 100644 --- a/src/CAN/CommandProcessor.cpp +++ b/src/CAN/CommandProcessor.cpp @@ -539,6 +539,14 @@ void CommandProcessor::ProcessReceivedMessage(CanMessageBuffer *buf) noexcept reprap.GetHeat().ProcessRemoteHeatersReport(buf->id.Src(), buf->msg.heatersStatusBroadcast); break; + case CanMessageType::driversStatusReport: + //TODO + break; + + case CanMessageType::boardStatusReport: + reprap.GetExpansion().ProcessBoardStatusReport(buf); + break; + case CanMessageType::heaterTuningReport: reprap.GetHeat().ProcessRemoteHeaterTuningReport(buf->id.Src(), buf->msg.heaterTuningReport); break; @@ -585,7 +593,7 @@ void CommandProcessor::ProcessReceivedMessage(CanMessageBuffer *buf) noexcept } break; #endif - case CanMessageType::driversStatusReport: // not handled yet + default: if (reprap.Debug(moduleCan)) { diff --git a/src/CAN/ExpansionManager.cpp b/src/CAN/ExpansionManager.cpp index fa843870..18015984 100644 --- a/src/CAN/ExpansionManager.cpp +++ b/src/CAN/ExpansionManager.cpp @@ -145,6 +145,34 @@ void ExpansionManager::ProcessAnnouncement(CanMessageBuffer *buf) noexcept CanInterface::SendResponseNoFree(buf); } +// Process a board status report +void ExpansionManager::ProcessBoardStatusReport(const CanMessageBuffer *buf) noexcept +{ + const CanAddress address = buf->id.Src(); + ExpansionBoardData& board = boards[address]; + if (board.state != BoardState::running) + { + UpdateBoardState(address, BoardState::running); + } + + const CanMessageBoardStatus msg = buf->msg.boardStatus; + + // We must process the data in the correct order, to ensure that we pick up the right values + size_t index = 0; + if (msg.hasVin) + { + board.vin = msg.values[index++]; + } + if (msg.hasV12) + { + board.v12 = msg.values[index++]; + } + if (msg.hasMcuTemp) + { + board.mcuTemp = msg.values[index++]; + } +} + // Return a pointer to the expansion board, if it is present const ExpansionBoardData *ExpansionManager::GetBoardDetails(uint8_t address) const noexcept { diff --git a/src/CAN/ExpansionManager.h b/src/CAN/ExpansionManager.h index cd7c7a5c..1899f536 100644 --- a/src/CAN/ExpansionManager.h +++ b/src/CAN/ExpansionManager.h @@ -35,9 +35,11 @@ public: ExpansionManager() noexcept; unsigned int GetNumExpansionBoards() const noexcept { return numExpansionBoards; } - void ProcessAnnouncement(CanMessageBuffer *buf) noexcept; const ExpansionBoardData *GetBoardDetails(uint8_t address) const noexcept; + void ProcessAnnouncement(CanMessageBuffer *buf) noexcept; + void ProcessBoardStatusReport(const CanMessageBuffer *buf) noexcept; + // Firmware update and related functions GCodeResult ResetRemote(uint32_t boardAddress, GCodeBuffer& gb, const StringRef& reply) THROWS(GCodeException); GCodeResult UpdateRemoteFirmware(uint32_t boardAddress, GCodeBuffer& gb, const StringRef& reply) THROWS(GCodeException); |