27
27
#define SPARK_HEARTBEAT_ID 0x2052C80
28
28
#define HEARTBEAT_PERIOD_MS 20
29
29
30
+ #define SPARK_HEARTBEAT_LENGTH 8
31
+ #define REV_COMMON_HEARTBEAT_LENGTH 1
32
+
30
33
rev::usb::CandleWinUSBDriver* driver = new rev::usb::CandleWinUSBDriver();
31
34
32
35
std::set<std::string> devicesRegisteredToHal; // TODO(Noah): Protect with mutex
@@ -41,8 +44,8 @@ std::mutex watchdogMtx;
41
44
// These values should only be accessed while holding watchdogMtx
42
45
std::vector<std::string> heartbeatsRunning;
43
46
bool heartbeatTimeoutExpired = false ; // Should only be changed in heartbeatsWatchdog()
44
- std::map<std::string, std::array<uint8_t , 1 >> revCommonHeartbeatMap;
45
- std::map<std::string, std::array<uint8_t , 8 >> sparkHeartbeatMap;
47
+ std::map<std::string, std::array<uint8_t , REV_COMMON_HEARTBEAT_LENGTH >> revCommonHeartbeatMap;
48
+ std::map<std::string, std::array<uint8_t , SPARK_HEARTBEAT_LENGTH >> sparkHeartbeatMap;
46
49
auto latestHeartbeatAck = std::chrono::steady_clock::now();
47
50
48
51
// Only call when holding canDevicesMtx
@@ -684,15 +687,15 @@ void heartbeatsWatchdog() {
684
687
for (int i = 0 ; i < heartbeatsRunning.size (); i++) {
685
688
if (sparkHeartbeatMap.contains (heartbeatsRunning[i])) {
686
689
// Clear the scheduled heartbeat that has outdated data so that the updated one gets sent out immediately
687
- _sendCANMessage (heartbeatsRunning[i], SPARK_HEARTBEAT_ID, disabledSparkHeartbeat, 8 , -1 );
690
+ _sendCANMessage (heartbeatsRunning[i], SPARK_HEARTBEAT_ID, disabledSparkHeartbeat, SPARK_HEARTBEAT_LENGTH , -1 );
688
691
689
- _sendCANMessage (heartbeatsRunning[i], SPARK_HEARTBEAT_ID, disabledSparkHeartbeat, 8 , HEARTBEAT_PERIOD_MS);
692
+ _sendCANMessage (heartbeatsRunning[i], SPARK_HEARTBEAT_ID, disabledSparkHeartbeat, SPARK_HEARTBEAT_LENGTH , HEARTBEAT_PERIOD_MS);
690
693
}
691
694
if (revCommonHeartbeatMap.contains (heartbeatsRunning[i])) {
692
695
// Clear the scheduled heartbeat that has outdated data so that the updated one gets sent out immediately
693
- _sendCANMessage (heartbeatsRunning[i], REV_COMMON_HEARTBEAT_ID, disabledRevCommonHeartbeat, 1 , -1 );
696
+ _sendCANMessage (heartbeatsRunning[i], REV_COMMON_HEARTBEAT_ID, disabledRevCommonHeartbeat, REV_COMMON_HEARTBEAT_LENGTH , -1 );
694
697
695
- _sendCANMessage (heartbeatsRunning[i], REV_COMMON_HEARTBEAT_ID, disabledRevCommonHeartbeat, 1 , HEARTBEAT_PERIOD_MS);
698
+ _sendCANMessage (heartbeatsRunning[i], REV_COMMON_HEARTBEAT_ID, disabledRevCommonHeartbeat, REV_COMMON_HEARTBEAT_LENGTH , HEARTBEAT_PERIOD_MS);
696
699
}
697
700
}
698
701
} else if (elapsed_seconds.count () < 1 && heartbeatTimeoutExpired) {
@@ -701,15 +704,15 @@ void heartbeatsWatchdog() {
701
704
for (int i = 0 ; i < heartbeatsRunning.size (); i++) {
702
705
if (auto heartbeatEntry = sparkHeartbeatMap.find (heartbeatsRunning[i]); heartbeatEntry != sparkHeartbeatMap.end ()) {
703
706
// Clear the scheduled heartbeat that has outdated data so that the updated one gets sent out immediately
704
- _sendCANMessage (heartbeatsRunning[i], SPARK_HEARTBEAT_ID, heartbeatEntry->second .data (), 8 , -1 );
707
+ _sendCANMessage (heartbeatsRunning[i], SPARK_HEARTBEAT_ID, heartbeatEntry->second .data (), SPARK_HEARTBEAT_LENGTH , -1 );
705
708
706
- _sendCANMessage (heartbeatsRunning[i], SPARK_HEARTBEAT_ID, heartbeatEntry->second .data (), 8 , HEARTBEAT_PERIOD_MS);
709
+ _sendCANMessage (heartbeatsRunning[i], SPARK_HEARTBEAT_ID, heartbeatEntry->second .data (), SPARK_HEARTBEAT_LENGTH , HEARTBEAT_PERIOD_MS);
707
710
}
708
711
if (auto heartbeatEntry = revCommonHeartbeatMap.find (heartbeatsRunning[i]); heartbeatEntry != revCommonHeartbeatMap.end ()) {
709
712
// Clear the scheduled heartbeat that has outdated data so that the updated one gets sent out immediately
710
- _sendCANMessage (heartbeatsRunning[i], REV_COMMON_HEARTBEAT_ID, heartbeatEntry->second .data (), 1 , -1 );
713
+ _sendCANMessage (heartbeatsRunning[i], REV_COMMON_HEARTBEAT_ID, heartbeatEntry->second .data (), REV_COMMON_HEARTBEAT_LENGTH , -1 );
711
714
712
- _sendCANMessage (heartbeatsRunning[i], REV_COMMON_HEARTBEAT_ID, heartbeatEntry->second .data (), 1 , HEARTBEAT_PERIOD_MS);
715
+ _sendCANMessage (heartbeatsRunning[i], REV_COMMON_HEARTBEAT_ID, heartbeatEntry->second .data (), REV_COMMON_HEARTBEAT_LENGTH , HEARTBEAT_PERIOD_MS);
713
716
}
714
717
}
715
718
}
@@ -733,12 +736,12 @@ void startRevCommonHeartbeat(const Napi::CallbackInfo& info) {
733
736
if (deviceIterator == canDeviceMap.end ()) return ;
734
737
}
735
738
736
- std::array<uint8_t , 1 > payload = {1 };
739
+ std::array<uint8_t , REV_COMMON_HEARTBEAT_LENGTH > payload = {1 };
737
740
738
741
std::scoped_lock lock{watchdogMtx};
739
742
740
743
if (!heartbeatTimeoutExpired) {
741
- _sendCANMessage (descriptor, REV_COMMON_HEARTBEAT_ID, payload.data (), 1 , HEARTBEAT_PERIOD_MS);
744
+ _sendCANMessage (descriptor, REV_COMMON_HEARTBEAT_ID, payload.data (), REV_COMMON_HEARTBEAT_LENGTH , HEARTBEAT_PERIOD_MS);
742
745
}
743
746
744
747
revCommonHeartbeatMap[descriptor] = payload;
@@ -764,7 +767,7 @@ void setSparkMaxHeartbeatData(const Napi::CallbackInfo& info) {
764
767
std::string descriptor = info[0 ].As <Napi::String>().Utf8Value ();
765
768
Napi::Array dataParam = info[1 ].As <Napi::Array>();
766
769
767
- std::array<uint8_t , 8 > heartbeat = {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
770
+ std::array<uint8_t , SPARK_HEARTBEAT_LENGTH > heartbeat = {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 };
768
771
769
772
{
770
773
std::scoped_lock lock{canDevicesMtx};
@@ -782,9 +785,9 @@ void setSparkMaxHeartbeatData(const Napi::CallbackInfo& info) {
782
785
783
786
if (!heartbeatTimeoutExpired) {
784
787
// Clear the scheduled heartbeat that has outdated data so that the updated one gets sent out immediately
785
- _sendCANMessage (descriptor, SPARK_HEARTBEAT_ID, heartbeat.data (), 8 , -1 );
788
+ _sendCANMessage (descriptor, SPARK_HEARTBEAT_ID, heartbeat.data (), SPARK_HEARTBEAT_LENGTH , -1 );
786
789
787
- _sendCANMessage (descriptor, SPARK_HEARTBEAT_ID, heartbeat.data (), 8 , HEARTBEAT_PERIOD_MS);
790
+ _sendCANMessage (descriptor, SPARK_HEARTBEAT_ID, heartbeat.data (), SPARK_HEARTBEAT_LENGTH , HEARTBEAT_PERIOD_MS);
788
791
}
789
792
790
793
sparkHeartbeatMap[descriptor] = heartbeat;
0 commit comments