1#![no_std]
46#![feature(asm_experimental_arch)]
47#![feature(asm_const)]
48#![feature(asm_sym)]
49
50mod address;
51mod buffer;
52
53use core::ops::Deref;
54use const_env__value::value_from_env;
55pub mod spm;
56pub use address::Address;
57pub use buffer::PageBuffer;
58
59pub const SPM_PAGESIZE_BYTES: usize = value_from_env!("AVR_BOOT_SPM_PAGESIZE": usize);
61
62pub const SPM_PAGESIZE_WORDS: usize = SPM_PAGESIZE_BYTES / 2;
64
65#[cfg(any(extended_addressing))]
66#[doc(hidden)]
67pub const RAMPZ: *mut u8 = value_from_env!("AVR_RAMPZ": u8) as *mut u8;
68#[cfg(target_arch = "avr")]
69const SPMCSR: *mut u8 = value_from_env!("AVR_BOOT_SPMCSR": u8) as *mut u8;
70#[cfg(target_arch = "avr")]
71const PAGE_ERASE: u8 = value_from_env!("AVR_BOOT_PAGE_ERASE": u8);
72#[cfg(target_arch = "avr")]
73const PAGE_WRITE: u8 = value_from_env!("AVR_BOOT_PAGE_WRITE": u8);
74#[cfg(target_arch = "avr")]
75const PAGE_FILL: u8 = value_from_env!("AVR_BOOT_PAGE_FILL": u8);
76#[cfg(target_arch = "avr")]
77const LOCK_BITS_SET: u8 = value_from_env!("AVR_BOOT_LOCK_BITS_SET": u8);
78#[cfg(rww_enable)]
79const RWW_ENABLE: u8 = value_from_env!("AVR_BOOT_RWW_ENABLE": u8);
80
81pub struct DataPage(pub [u16; SPM_PAGESIZE_WORDS]);
83
84impl<'a> From<&'a [u16; SPM_PAGESIZE_WORDS]> for &'a DataPage {
85 fn from(data: &'a [u16; SPM_PAGESIZE_WORDS]) -> &'a DataPage {
86 unsafe { core::mem::transmute(data) }
87 }
88}
89
90impl<'a> From<&'a [u8; SPM_PAGESIZE_BYTES]> for &'a DataPage {
91 fn from(data: &'a [u8; SPM_PAGESIZE_BYTES]) -> &'a DataPage {
92 unsafe { core::mem::transmute(data) }
93 }
94}
95
96impl From<[u16; SPM_PAGESIZE_WORDS]> for DataPage {
97 fn from(data: [u16; SPM_PAGESIZE_WORDS]) -> DataPage {
98 unsafe { core::mem::transmute(data) }
99 }
100}
101
102impl From<[u8; SPM_PAGESIZE_BYTES]> for DataPage {
103 fn from(data: [u8; SPM_PAGESIZE_BYTES]) -> DataPage {
104 unsafe { core::mem::transmute(data) }
105 }
106}
107
108impl Deref for DataPage {
109 type Target = [u16; SPM_PAGESIZE_WORDS];
110 fn deref(&self) -> &Self::Target {
111 &self.0
112 }
113}