1#![no_std]
2#![feature(doc_cfg)]
3
4#![cfg_attr(feature = "arduino-diecimila", doc = "**Arduino Diecimila**.")]
10#![cfg_attr(feature = "arduino-leonardo", doc = "**Arduino Leonardo**.")]
11#![cfg_attr(feature = "arduino-mega2560", doc = "**Arduino Mega 2560**.")]
12#![cfg_attr(feature = "arduino-mega1280", doc = "**Arduino Mega 1280**.")]
13#![cfg_attr(feature = "arduino-micro", doc = "**Arduino Micro**.")]
14#![cfg_attr(feature = "arduino-nano", doc = "**Arduino Nano**.")]
15#![cfg_attr(feature = "arduino-uno", doc = "**Arduino Uno**.")]
16#![cfg_attr(feature = "sparkfun-promicro", doc = "**SparkFun ProMicro**.")]
17#![cfg_attr(
18 feature = "sparkfun-promini-3v3",
19 doc = "**SparkFun ProMini 3.3V (8MHz)**."
20)]
21#![cfg_attr(
22 feature = "sparkfun-promini-5v",
23 doc = "**SparkFun ProMini 5V (16MHz)**."
24)]
25#![cfg_attr(feature = "trinket-pro", doc = "**Trinket Pro**.")]
26#![cfg_attr(feature = "trinket", doc = "**Trinket**.")]
27#![cfg_attr(feature = "nano168", doc = "**Nano clone (ATmega168)**.")]
28#[cfg(not(feature = "board-selected"))]
59compile_error!(
60 "This crate requires you to specify your target Arduino board as a feature.
61
62 Please select one of the following
63
64 * arduino-diecimila
65 * arduino-leonardo
66 * arduino-mega2560
67 * arduino-mega1280
68 * arduino-micro
69 * arduino-nano
70 * arduino-uno
71 * sparkfun-promicro
72 * sparkfun-promini-3v3
73 * sparkfun-promini-5v
74 * trinket-pro
75 * trinket
76 * nano168
77 "
78);
79
80#[cfg(any(feature = "rt", doc))]
96#[doc(cfg(feature = "rt"))]
97pub use avr_device::entry;
98
99#[doc(no_inline)]
100#[cfg(feature = "mcu-atmega")]
101pub use atmega_hal as hal;
102#[doc(no_inline)]
103#[cfg(feature = "mcu-atmega")]
104pub use atmega_hal::pac;
105
106#[doc(no_inline)]
107#[cfg(feature = "mcu-attiny")]
108pub use attiny_hal as hal;
109#[doc(no_inline)]
110#[cfg(feature = "mcu-attiny")]
111pub use attiny_hal::pac;
112
113#[doc(no_inline)]
114#[cfg(feature = "board-selected")]
115pub use hal::Peripherals;
116
117#[cfg(feature = "board-selected")]
118pub mod clock;
119#[cfg(feature = "board-selected")]
120pub use clock::default::DefaultClock;
121
122#[cfg(feature = "board-selected")]
123mod delay;
124#[cfg(feature = "board-selected")]
125pub use delay::{delay_ms, delay_ns, delay_us, Delay};
126
127#[cfg(feature = "board-selected")]
128pub mod port;
129
130#[doc(no_inline)]
131#[cfg(feature = "board-selected")]
132pub use port::Pins;
133
134#[cfg(feature = "mcu-atmega")]
136pub mod adc {
137 pub use crate::hal::adc::{
138 channel, AdcChannel, AdcOps, AdcSettings, Channel, ClockDivider, ReferenceVoltage,
139 };
140
141 pub type Adc = crate::hal::Adc<crate::DefaultClock>;
143}
144#[doc(no_inline)]
145#[cfg(feature = "mcu-atmega")]
146pub use adc::Adc;
147
148#[cfg(feature = "mcu-atmega")]
150pub mod i2c {
151 pub use crate::hal::i2c::*;
152
153 pub type I2c = crate::hal::i2c::I2c<crate::DefaultClock>;
154}
155#[doc(no_inline)]
156#[cfg(feature = "mcu-atmega")]
157pub use i2c::I2c;
158
159#[cfg(feature = "mcu-atmega")]
161pub mod spi {
162 pub use crate::hal::spi::*;
163
164 pub type Spi = crate::hal::spi::Spi;
165}
166#[doc(no_inline)]
167#[cfg(feature = "mcu-atmega")]
168pub use spi::Spi;
169
170#[cfg(feature = "mcu-atmega")]
171pub mod usart {
172 pub use crate::hal::usart::{Baudrate, UsartOps};
173
174 pub type Usart<USART, RX, TX> = crate::hal::usart::Usart<USART, RX, TX, crate::DefaultClock>;
175 pub type UsartWriter<USART, RX, TX> =
176 crate::hal::usart::UsartWriter<USART, RX, TX, crate::DefaultClock>;
177 pub type UsartReader<USART, RX, TX> =
178 crate::hal::usart::UsartReader<USART, RX, TX, crate::DefaultClock>;
179}
180
181#[doc(no_inline)]
182#[cfg(feature = "mcu-atmega")]
183pub use usart::Usart;
184
185#[cfg(feature = "board-selected")]
186pub mod eeprom {
187 pub use crate::hal::eeprom::{Eeprom, EepromOps, OutOfBoundsError};
188}
189#[doc(no_inline)]
190#[cfg(feature = "board-selected")]
191pub use eeprom::Eeprom;
192
193#[cfg(feature = "board-selected")]
194pub mod simple_pwm {
195 #[cfg(feature = "mcu-atmega")]
196 pub use atmega_hal::simple_pwm::*;
197
198 #[cfg(feature = "mcu-attiny")]
199 pub use attiny_hal::simple_pwm::*;
200}
201
202#[cfg(feature = "mcu-atmega")]
203pub mod prelude {
204 pub use crate::hal::prelude::*;
205
206 cfg_if::cfg_if! {
207 if #[cfg(any(
208 feature = "arduino-diecimila",
209 feature = "arduino-mega2560",
210 feature = "arduino-mega1280",
211 feature = "arduino-uno"
212 ))] {
213 pub use crate::hal::usart::BaudrateArduinoExt as _;
214 } else {
215 pub use crate::hal::usart::BaudrateExt as _;
216 }
217 }
218}
219
220#[cfg(feature = "board-selected")]
228#[macro_export]
229macro_rules! pins {
230 ($p:expr) => {
231 $crate::Pins::with_mcu_pins($crate::hal::pins!($p))
232 };
233}
234
235#[cfg(any(feature = "arduino-leonardo", feature = "arduino-micro"))]
244#[macro_export]
245macro_rules! default_serial {
246 ($p:expr, $pins:expr, $baud:expr) => {
247 $crate::Usart::new(
248 $p.USART1,
249 $pins.d0,
250 $pins.d1.into_output(),
251 $crate::hal::usart::BaudrateExt::into_baudrate($baud),
252 )
253 };
254}
255
256#[cfg(any(feature = "sparkfun-promicro"))]
265#[macro_export]
266macro_rules! default_serial {
267 ($p:expr, $pins:expr, $baud:expr) => {
268 $crate::Usart::new(
269 $p.USART1,
270 $pins.rx,
271 $pins.tx.into_output(),
272 $crate::hal::usart::BaudrateExt::into_baudrate($baud),
273 )
274 };
275}
276
277#[cfg(any(
301 feature = "arduino-diecimila",
302 feature = "arduino-mega2560",
303 feature = "arduino-mega1280",
304 feature = "arduino-uno"
305))]
306#[macro_export]
307macro_rules! default_serial {
308 ($p:expr, $pins:expr, $baud:expr) => {
309 $crate::Usart::new(
310 $p.USART0,
311 $pins.d0,
312 $pins.d1.into_output(),
313 $crate::hal::usart::BaudrateArduinoExt::into_baudrate($baud),
316 )
317 };
318}
319
320#[cfg(any(
329 feature = "arduino-nano",
330 feature = "nano168",
331 feature = "sparkfun-promini-3v3",
332 feature = "sparkfun-promini-5v",
333))]
334#[macro_export]
335macro_rules! default_serial {
336 ($p:expr, $pins:expr, $baud:expr) => {
337 $crate::Usart::new(
338 $p.USART0,
339 $pins.d0,
340 $pins.d1.into_output(),
341 $crate::hal::usart::BaudrateExt::into_baudrate($baud),
342 )
343 };
344}