aboutsummaryrefslogtreecommitdiff
path: root/src/peripheral/itm.rs
diff options
context:
space:
mode:
authorGravatar Viktor Sonesten <v@tmplt.dev> 2021-12-06 17:23:14 +0100
committerGravatar Viktor Sonesten <v@tmplt.dev> 2021-12-07 13:07:16 +0100
commitbcb76ef24cda4b4b06830d7e63b55cf64b3148da (patch)
tree5733fd26d3afe858e3eeb7d9714592070fa6022d /src/peripheral/itm.rs
parentae1d2a62d895dc458784c465e021a010cb75a8b1 (diff)
downloadcortex-m-bcb76ef24cda4b4b06830d7e63b55cf64b3148da.tar.gz
cortex-m-bcb76ef24cda4b4b06830d7e63b55cf64b3148da.tar.zst
cortex-m-bcb76ef24cda4b4b06830d7e63b55cf64b3148da.zip
itm: derive serde for LocalTimestampOptions, impl gated TryFrom<u8>
Diffstat (limited to 'src/peripheral/itm.rs')
-rw-r--r--src/peripheral/itm.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/peripheral/itm.rs b/src/peripheral/itm.rs
index 4d0aa22..f155540 100644
--- a/src/peripheral/itm.rs
+++ b/src/peripheral/itm.rs
@@ -10,6 +10,9 @@ use volatile_register::{RO, RW, WO};
use crate::peripheral::ITM;
use bitfield::bitfield;
+#[cfg(feature = "serde")]
+use serde::{Deserialize, Serialize};
+
/// Register block
#[repr(C)]
pub struct RegisterBlock {
@@ -91,6 +94,7 @@ impl Stim {
/// The possible local timestamp options.
#[derive(Debug, Eq, PartialEq, Copy, Clone)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum LocalTimestampOptions {
/// Disable local timestamps.
Disabled,
@@ -107,6 +111,24 @@ pub enum LocalTimestampOptions {
EnabledDiv64,
}
+#[cfg(feature = "std-map")]
+impl core::convert::TryFrom<u8> for LocalTimestampOptions {
+ type Error = ();
+
+ /// Converts an integer value to an enabled [LocalTimestampOptions]
+ /// variant. Accepted values are: 1, 4, 16, 64. Any other value
+ /// yields `Err(())`.
+ fn try_from(value: u8) -> Result<Self, Self::Error> {
+ match value {
+ 1 => Ok(Self::Enabled),
+ 4 => Ok(Self::EnabledDiv4),
+ 16 => Ok(Self::EnabledDiv16),
+ 64 => Ok(Self::EnabledDiv64),
+ _ => Err(()),
+ }
+ }
+}
+
/// The possible global timestamp options.
#[derive(Debug, Eq, PartialEq, Copy, Clone)]
pub enum GlobalTimestampOptions {