Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Duet3D/RepRapFirmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src/CAN
diff options
context:
space:
mode:
authorDavid Crocker <dcrocker@eschertech.com>2021-08-12 12:28:16 +0300
committerDavid Crocker <dcrocker@eschertech.com>2021-08-12 12:28:16 +0300
commitc4a560b8eb181762eff870550b7ca292386dd055 (patch)
treed598e5dbbb95db3638b79f225817b6210512cfcc /src/CAN
parente83062d53c9056d16cbd02b54b80bc62254e6096 (diff)
Process incoming board status reports
Diffstat (limited to 'src/CAN')
-rw-r--r--src/CAN/CommandProcessor.cpp10
-rw-r--r--src/CAN/ExpansionManager.cpp28
-rw-r--r--src/CAN/ExpansionManager.h4
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);