diff options
| author | Nicolas Viennot <[email protected]> | 2022-03-15 03:20:19 -0400 |
|---|---|---|
| committer | Nicolas Viennot <[email protected]> | 2022-03-15 04:17:55 -0400 |
| commit | cfa7f4e55b3a97737eef997dcb0617f486fbfd46 (patch) | |
| tree | be715cbd824d13d6188fb469f035242c9c5b2cf4 | |
| parent | cb1be3983a47029e0e6a1c07082dd6ed18eda2a7 (diff) | |
Remove duplicate stm32-metapac/src/common.rs with chiptool
| -rw-r--r-- | stm32-metapac-gen/src/lib.rs | 2 | ||||
| -rw-r--r-- | stm32-metapac/build.rs | 4 | ||||
| -rw-r--r-- | stm32-metapac/build_pregenerated.rs | 4 | ||||
| -rw-r--r-- | stm32-metapac/src/common.rs | 80 | ||||
| -rw-r--r-- | stm32-metapac/src/lib.rs | 4 |
5 files changed, 12 insertions, 82 deletions
diff --git a/stm32-metapac-gen/src/lib.rs b/stm32-metapac-gen/src/lib.rs index 14625097e..c959e1a61 100644 --- a/stm32-metapac-gen/src/lib.rs +++ b/stm32-metapac-gen/src/lib.rs | |||
| @@ -332,7 +332,7 @@ impl Gen { | |||
| 332 | .unwrap(); | 332 | .unwrap(); |
| 333 | fs::write( | 333 | fs::write( |
| 334 | self.opts.out_dir.join("src/common.rs"), | 334 | self.opts.out_dir.join("src/common.rs"), |
| 335 | include_bytes!("../../stm32-metapac/src/common.rs"), | 335 | chiptool::generate::COMMON_MODULE, |
| 336 | ) | 336 | ) |
| 337 | .unwrap(); | 337 | .unwrap(); |
| 338 | fs::write( | 338 | fs::write( |
diff --git a/stm32-metapac/build.rs b/stm32-metapac/build.rs index 44c10eced..32939eefe 100644 --- a/stm32-metapac/build.rs +++ b/stm32-metapac/build.rs | |||
| @@ -58,6 +58,10 @@ fn main() { | |||
| 58 | out_dir.display(), | 58 | out_dir.display(), |
| 59 | chip_core_name | 59 | chip_core_name |
| 60 | ); | 60 | ); |
| 61 | println!( | ||
| 62 | "cargo:rustc-env=STM32_METAPAC_COMMON_PATH={}/src/common.rs", | ||
| 63 | out_dir.display(), | ||
| 64 | ); | ||
| 61 | 65 | ||
| 62 | println!("cargo:rerun-if-changed=build.rs"); | 66 | println!("cargo:rerun-if-changed=build.rs"); |
| 63 | } | 67 | } |
diff --git a/stm32-metapac/build_pregenerated.rs b/stm32-metapac/build_pregenerated.rs index 2219acb55..660a95533 100644 --- a/stm32-metapac/build_pregenerated.rs +++ b/stm32-metapac/build_pregenerated.rs | |||
| @@ -33,6 +33,10 @@ fn main() { | |||
| 33 | "cargo:rustc-env=STM32_METAPAC_METADATA_PATH=chips/{}/metadata.rs", | 33 | "cargo:rustc-env=STM32_METAPAC_METADATA_PATH=chips/{}/metadata.rs", |
| 34 | chip_core_name | 34 | chip_core_name |
| 35 | ); | 35 | ); |
| 36 | println!( | ||
| 37 | "cargo:rustc-env=STM32_METAPAC_COMMON_PATH={}/src/common.rs", | ||
| 38 | crate_dir.display(), | ||
| 39 | ); | ||
| 36 | 40 | ||
| 37 | println!("cargo:rerun-if-changed=build.rs"); | 41 | println!("cargo:rerun-if-changed=build.rs"); |
| 38 | } | 42 | } |
diff --git a/stm32-metapac/src/common.rs b/stm32-metapac/src/common.rs deleted file mode 100644 index 568a98486..000000000 --- a/stm32-metapac/src/common.rs +++ /dev/null | |||
| @@ -1,80 +0,0 @@ | |||
| 1 | use core::marker::PhantomData; | ||
| 2 | |||
| 3 | #[derive(Copy, Clone, PartialEq, Eq)] | ||
| 4 | pub struct RW; | ||
| 5 | #[derive(Copy, Clone, PartialEq, Eq)] | ||
| 6 | pub struct R; | ||
| 7 | #[derive(Copy, Clone, PartialEq, Eq)] | ||
| 8 | pub struct W; | ||
| 9 | |||
| 10 | mod sealed { | ||
| 11 | use super::*; | ||
| 12 | pub trait Access {} | ||
| 13 | impl Access for R {} | ||
| 14 | impl Access for W {} | ||
| 15 | impl Access for RW {} | ||
| 16 | } | ||
| 17 | |||
| 18 | pub trait Access: sealed::Access + Copy {} | ||
| 19 | impl Access for R {} | ||
| 20 | impl Access for W {} | ||
| 21 | impl Access for RW {} | ||
| 22 | |||
| 23 | pub trait Read: Access {} | ||
| 24 | impl Read for RW {} | ||
| 25 | impl Read for R {} | ||
| 26 | |||
| 27 | pub trait Write: Access {} | ||
| 28 | impl Write for RW {} | ||
| 29 | impl Write for W {} | ||
| 30 | |||
| 31 | #[derive(Copy, Clone, PartialEq, Eq)] | ||
| 32 | pub struct Reg<T: Copy, A: Access> { | ||
| 33 | ptr: *mut u8, | ||
| 34 | phantom: PhantomData<*mut (T, A)>, | ||
| 35 | } | ||
| 36 | unsafe impl<T: Copy, A: Access> Send for Reg<T, A> {} | ||
| 37 | unsafe impl<T: Copy, A: Access> Sync for Reg<T, A> {} | ||
| 38 | |||
| 39 | impl<T: Copy, A: Access> Reg<T, A> { | ||
| 40 | pub fn from_ptr(ptr: *mut u8) -> Self { | ||
| 41 | Self { | ||
| 42 | ptr, | ||
| 43 | phantom: PhantomData, | ||
| 44 | } | ||
| 45 | } | ||
| 46 | |||
| 47 | pub fn ptr(&self) -> *mut T { | ||
| 48 | self.ptr as _ | ||
| 49 | } | ||
| 50 | } | ||
| 51 | |||
| 52 | impl<T: Copy, A: Read> Reg<T, A> { | ||
| 53 | pub unsafe fn read(&self) -> T { | ||
| 54 | (self.ptr as *mut T).read_volatile() | ||
| 55 | } | ||
| 56 | } | ||
| 57 | |||
| 58 | impl<T: Copy, A: Write> Reg<T, A> { | ||
| 59 | pub unsafe fn write_value(&self, val: T) { | ||
| 60 | (self.ptr as *mut T).write_volatile(val) | ||
| 61 | } | ||
| 62 | } | ||
| 63 | |||
| 64 | impl<T: Default + Copy, A: Write> Reg<T, A> { | ||
| 65 | pub unsafe fn write<R>(&self, f: impl FnOnce(&mut T) -> R) -> R { | ||
| 66 | let mut val = Default::default(); | ||
| 67 | let res = f(&mut val); | ||
| 68 | self.write_value(val); | ||
| 69 | res | ||
| 70 | } | ||
| 71 | } | ||
| 72 | |||
| 73 | impl<T: Copy, A: Read + Write> Reg<T, A> { | ||
| 74 | pub unsafe fn modify<R>(&self, f: impl FnOnce(&mut T) -> R) -> R { | ||
| 75 | let mut val = self.read(); | ||
| 76 | let res = f(&mut val); | ||
| 77 | self.write_value(val); | ||
| 78 | res | ||
| 79 | } | ||
| 80 | } | ||
diff --git a/stm32-metapac/src/lib.rs b/stm32-metapac/src/lib.rs index 4eab29861..58a1c5e45 100644 --- a/stm32-metapac/src/lib.rs +++ b/stm32-metapac/src/lib.rs | |||
| @@ -4,7 +4,9 @@ | |||
| 4 | #![allow(non_camel_case_types)] | 4 | #![allow(non_camel_case_types)] |
| 5 | #![doc(html_no_source)] | 5 | #![doc(html_no_source)] |
| 6 | 6 | ||
| 7 | pub mod common; | 7 | pub mod common { |
| 8 | include!(env!("STM32_METAPAC_COMMON_PATH")); | ||
| 9 | } | ||
| 8 | 10 | ||
| 9 | #[cfg(feature = "pac")] | 11 | #[cfg(feature = "pac")] |
| 10 | include!(env!("STM32_METAPAC_PAC_PATH")); | 12 | include!(env!("STM32_METAPAC_PAC_PATH")); |
