Skip to content

Commit a8e4c63

Browse files
authored
Add ComponentDetails::GpioToggleCount (#452)
1 parent 64f5741 commit a8e4c63

File tree

4 files changed

+47
-3
lines changed

4 files changed

+47
-3
lines changed

faux-mgs/src/main.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2263,6 +2263,7 @@ fn component_details_to_json(details: SpComponentDetails) -> serde_json::Value {
22632263
PortStatus(Result<PortStatus, PortStatusError>),
22642264
Measurement(Measurement),
22652265
LastPostCode(u32),
2266+
GpioToggleCount { edge_count: u32, cycles_since_last_edge: u32 },
22662267
}
22672268

22682269
#[derive(serde::Serialize)]
@@ -2289,6 +2290,12 @@ fn component_details_to_json(details: SpComponentDetails) -> serde_json::Value {
22892290
gateway_messages::ComponentDetails::LastPostCode(code) => {
22902291
ComponentDetails::LastPostCode(code.0)
22912292
}
2293+
gateway_messages::ComponentDetails::GpioToggleCount(n) => {
2294+
ComponentDetails::GpioToggleCount {
2295+
edge_count: n.edge_count,
2296+
cycles_since_last_edge: n.cycles_since_last_edge,
2297+
}
2298+
}
22922299
})
22932300
.collect::<Vec<_>>();
22942301

gateway-messages/src/sp_to_mgs.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,15 @@ use serde::Serialize;
2222
use serde_repr::Deserialize_repr;
2323
use serde_repr::Serialize_repr;
2424

25+
pub mod host_cpu_details;
2526
pub mod ignition;
2627
pub mod measurement;
2728
pub mod monorail_port_status;
28-
pub mod sp5_details;
2929

30+
pub use host_cpu_details::GpioToggleCount;
31+
pub use host_cpu_details::LastPostCode;
3032
pub use ignition::IgnitionState;
3133
pub use measurement::Measurement;
32-
pub use sp5_details::LastPostCode;
3334

3435
use ignition::IgnitionError;
3536
use measurement::MeasurementHeader;
@@ -719,6 +720,7 @@ pub enum ComponentDetails {
719720
PortStatus(Result<PortStatus, PortStatusError>),
720721
Measurement(Measurement),
721722
LastPostCode(LastPostCode),
723+
GpioToggleCount(GpioToggleCount),
722724
}
723725

724726
impl ComponentDetails {
@@ -727,6 +729,7 @@ impl ComponentDetails {
727729
ComponentDetails::PortStatus(_) => PortStatus::TAG,
728730
ComponentDetails::Measurement(_) => MeasurementHeader::TAG,
729731
ComponentDetails::LastPostCode(_) => LastPostCode::TAG,
732+
ComponentDetails::GpioToggleCount(_) => GpioToggleCount::TAG,
730733
}
731734
}
732735

@@ -751,6 +754,9 @@ impl ComponentDetails {
751754
ComponentDetails::LastPostCode(code) => {
752755
hubpack::serialize(buf, code)
753756
}
757+
ComponentDetails::GpioToggleCount(code) => {
758+
hubpack::serialize(buf, code)
759+
}
754760
}
755761
}
756762
}

gateway-messages/src/sp_to_mgs/sp5_details.rs renamed to gateway-messages/src/sp_to_mgs/host_cpu_details.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,19 @@ use crate::tlv;
66
use hubpack::SerializedSize;
77
use serde::{Deserialize, Serialize};
88

9+
/// Timestamped count values for a toggling GPIO, used for liveness checks
10+
#[derive(Copy, Clone, Debug, Serialize, Deserialize, SerializedSize)]
11+
pub struct GpioToggleCount {
12+
/// Number of edges seen on the GPIO
13+
pub edge_count: u32,
14+
/// Number of clock cycles since the last GPIO edge has been seen
15+
pub cycles_since_last_edge: u32,
16+
}
17+
18+
impl GpioToggleCount {
19+
pub const TAG: tlv::Tag = tlv::Tag(*b"TOGL");
20+
}
21+
922
/// Most recent POST code seen by the sequencer FPGA
1023
#[derive(Copy, Clone, Debug, Serialize, Deserialize, SerializedSize)]
1124
pub struct LastPostCode(pub u32);

gateway-sp-comms/src/single_sp.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1572,11 +1572,12 @@ impl TlvRpc for ComponentDetailsTlvRpc<'_> {
15721572
tag: tlv::Tag,
15731573
value: &[u8],
15741574
) -> Result<Option<Self::Item>> {
1575+
use gateway_messages::host_cpu_details::GpioToggleCount;
1576+
use gateway_messages::host_cpu_details::LastPostCode;
15751577
use gateway_messages::measurement::Measurement;
15761578
use gateway_messages::measurement::MeasurementHeader;
15771579
use gateway_messages::monorail_port_status::PortStatus;
15781580
use gateway_messages::monorail_port_status::PortStatusError;
1579-
use gateway_messages::sp5_details::LastPostCode;
15801581

15811582
match tag {
15821583
PortStatus::TAG => {
@@ -1640,6 +1641,23 @@ impl TlvRpc for ComponentDetailsTlvRpc<'_> {
16401641

16411642
Ok(Some(ComponentDetails::LastPostCode(result)))
16421643
}
1644+
GpioToggleCount::TAG => {
1645+
let (result, leftover) =
1646+
gateway_messages::deserialize::<GpioToggleCount>(value)
1647+
.map_err(|err| CommunicationError::TlvDeserialize {
1648+
tag,
1649+
err,
1650+
})?;
1651+
1652+
if !leftover.is_empty() {
1653+
info!(
1654+
self.log,
1655+
"ignoring unexpected data in GpioToggleCount TLV entry"
1656+
);
1657+
}
1658+
1659+
Ok(Some(ComponentDetails::GpioToggleCount(result)))
1660+
}
16431661
_ => {
16441662
info!(
16451663
self.log,

0 commit comments

Comments
 (0)