nrf24l01_commands/registers.rs
1//! Register bitfields for the nRF24L01.
2//!
3//! ## Example with the CONFIG register
4//! ```rust
5//! use nrf24l01_commands::registers;
6//!
7//! // Default value
8//! let reg = registers::Config::new();
9//! assert_eq!(reg.into_bits(), 0b0000_1000);
10//!
11//! // Read fields
12//! let reg = registers::Config::from_bits(0b0000_0110);
13//! assert!(!reg.mask_rx_dr());
14//! assert!(!reg.mask_tx_ds());
15//! assert!(!reg.mask_max_rt());
16//! assert!(!reg.en_crc());
17//! assert!(reg.crco());
18//! assert!(reg.pwr_up());
19//! assert!(!reg.prim_rx());
20//!
21//! // Write fields
22//! let reg = registers::Config::new()
23//! .with_mask_rx_dr(true)
24//! .with_mask_tx_ds(false)
25//! .with_mask_max_rt(false)
26//! .with_en_crc(false)
27//! .with_crco(true)
28//! .with_pwr_up(true)
29//! .with_prim_rx(false);
30//! assert_eq!(reg.into_bits(), 0b0100_0110);
31//! ```
32use bitfield_struct::bitfield;
33
34/// A trait for nRF24L01 registers. Defines the register's address.
35pub trait Register {
36 /// Register address.
37 const ADDRESS: u8;
38}
39
40/// # CONFIG register
41///
42/// Address = `0x00`
43///
44/// ## Fields
45///
46/// #### `mask_rx_dr` | bit 6
47/// Mask/unmask interrupt caused by __RX_DR__.
48///
49/// `0`: unmasked, interrupt reflected on IRQ
50///
51/// `1`: masked, interrupt not reflected on IRQ
52///
53/// #### `mask_tx_ds` | bit 5
54/// Mask/unmask interrupt caused by __TX_DS__.
55///
56/// `0`: unmasked, interrupt reflected on IRQ
57///
58/// `1`: masked, interrupt not reflected on IRQ
59///
60/// #### `mask_max_rt` | bit 4
61/// Mask/unmask interrupt caused by __MAX_RT__.
62///
63/// `0`: unmasked, interrupt reflected on IRQ
64///
65/// `1`: masked, interrupt not reflected on IRQ
66///
67/// #### `en_crc` | bit 3
68/// Enable/disable CRC. Default value: `1` (enabled)
69///
70/// #### `crco` | bit 2
71/// CRC encoding scheme.
72///
73/// `0`: 1 byte
74///
75/// `1`: 2 byte
76///
77/// #### `pwr_up` | bit 1
78/// Power down/up.
79///
80/// `0`: Power down
81///
82/// `1`: Power up
83///
84/// #### `prim_rx` | bit 0
85/// Set primary TX/RX.
86///
87/// `0`: primary TX
88///
89/// `1`: primary RX
90///
91/// ## Example
92/// ```rust
93/// use nrf24l01_commands::registers;
94///
95/// // Default value
96/// let reg = registers::Config::new();
97/// assert_eq!(reg.into_bits(), 0b0000_1000);
98///
99/// // Write fields
100/// let reg = registers::Config::new()
101/// .with_mask_rx_dr(true)
102/// .with_mask_tx_ds(false)
103/// .with_mask_max_rt(false)
104/// .with_en_crc(false)
105/// .with_crco(true)
106/// .with_pwr_up(true)
107/// .with_prim_rx(false);
108/// assert_eq!(reg.into_bits(), 0b0100_0110);
109/// ```
110#[bitfield(u8, order = Msb)]
111pub struct Config {
112 #[bits(1)]
113 __: bool,
114
115 /// Mask/unmask interrupt caused by __RX_DR__.
116 ///
117 /// `0`: unmasked, interrupt reflected on IRQ
118 ///
119 /// `1`: masked, interrupt not reflected on IRQ
120 #[bits(1)]
121 pub mask_rx_dr: bool,
122
123 /// Mask/unmask interrupt caused by __TX_DS__.
124 ///
125 /// `0`: unmasked, interrupt reflected on IRQ
126 ///
127 /// `1`: masked, interrupt not reflected on IRQ
128 #[bits(1)]
129 pub mask_tx_ds: bool,
130
131 /// Mask/unmask interrupt caused by __MAX_RT__.
132 ///
133 /// `0`: unmasked, interrupt reflected on IRQ
134 ///
135 /// `1`: masked, interrupt not reflected on IRQ
136 #[bits(1)]
137 pub mask_max_rt: bool,
138
139 /// Enable/disable CRC. Default value: `1` (enabled)
140 #[bits(1, default = true)]
141 pub en_crc: bool,
142
143 /// CRC encoding scheme.
144 ///
145 /// `0`: 1 byte
146 ///
147 /// `1`: 2 byte
148 #[bits(1)]
149 pub crco: bool,
150
151 /// Power down/up.
152 ///
153 /// `0`: Power down
154 ///
155 /// `1`: Power up
156 #[bits(1)]
157 pub pwr_up: bool,
158
159 /// Set primary TX/RX.
160 ///
161 /// `0`: primary TX
162 ///
163 /// `1`: primary RX
164 #[bits(1)]
165 pub prim_rx: bool,
166}
167
168impl Register for Config {
169 const ADDRESS: u8 = 0x00;
170}
171
172/// # EN_AA register
173/// Enable 'Auto Acknowledgement' on data pipes 0-5.
174///
175/// Address = `0x01`
176///
177/// ## Fields
178/// All fields default to 1.
179///
180/// #### `enaa_pN` | bit `N`
181/// Enable 'Auto Acknowledgement' on data pipes `N` = 0-5.
182///
183/// ## Example
184/// ```rust
185/// use nrf24l01_commands::registers;
186///
187/// // Default value
188/// let reg = registers::EnAa::new();
189/// assert_eq!(reg.into_bits(), 0b0011_1111);
190///
191/// // Write fields
192/// let reg = registers::EnAa::new()
193/// .with_enaa_p5(true)
194/// .with_enaa_p4(true)
195/// .with_enaa_p3(false)
196/// .with_enaa_p2(false)
197/// .with_enaa_p1(false)
198/// .with_enaa_p0(false);
199/// assert_eq!(reg.into_bits(), 0b0011_0000);
200/// ```
201#[bitfield(u8, order = Msb)]
202pub struct EnAa {
203 #[bits(2)]
204 __: u8,
205 /// Enable 'Auto Acknowledgement' on data pipe 5.
206 #[bits(1, default = true)]
207 pub enaa_p5: bool,
208 /// Enable 'Auto Acknowledgement' on data pipe 4.
209 #[bits(1, default = true)]
210 pub enaa_p4: bool,
211 /// Enable 'Auto Acknowledgement' on data pipe 3.
212 #[bits(1, default = true)]
213 pub enaa_p3: bool,
214 /// Enable 'Auto Acknowledgement' on data pipe 2.
215 #[bits(1, default = true)]
216 pub enaa_p2: bool,
217 /// Enable 'Auto Acknowledgement' on data pipe 1.
218 #[bits(1, default = true)]
219 pub enaa_p1: bool,
220 /// Enable 'Auto Acknowledgement' on data pipe 0.
221 #[bits(1, default = true)]
222 pub enaa_p0: bool,
223}
224
225impl Register for EnAa {
226 const ADDRESS: u8 = 0x01;
227}
228
229/// # EN_RXADDR register
230/// Enable RX address on data pipes 0-5.
231///
232/// Address = `0x02`
233///
234/// ## Fields
235///
236/// `erx_p0` and `erx_p1` default to 1.
237///
238/// #### `erx_pN` | bit `N`
239/// Enable RX adddress on data pipes `N` = 0-5.
240///
241/// ## Example
242/// ```rust
243/// use nrf24l01_commands::registers;
244///
245/// // Default value
246/// let reg = registers::EnRxaddr::new();
247/// assert_eq!(reg.into_bits(), 0b0000_0011);
248///
249/// // Write fields
250/// let reg = registers::EnRxaddr::new()
251/// .with_erx_p5(true)
252/// .with_erx_p4(false)
253/// .with_erx_p3(false)
254/// .with_erx_p2(false)
255/// .with_erx_p1(true)
256/// .with_erx_p0(false);
257/// assert_eq!(reg.into_bits(), 0b0010_0010);
258/// ```
259#[bitfield(u8, order = Msb)]
260pub struct EnRxaddr {
261 #[bits(2)]
262 __: u8,
263 /// Enable RX address for data pipe 5.
264 #[bits(1)]
265 pub erx_p5: bool,
266 /// Enable RX address for data pipe 4.
267 #[bits(1)]
268 pub erx_p4: bool,
269 /// Enable RX address for data pipe 3.
270 #[bits(1)]
271 pub erx_p3: bool,
272 /// Enable RX address for data pipe 2.
273 #[bits(1)]
274 pub erx_p2: bool,
275 /// Enable RX address for data pipe 1.
276 #[bits(1, default = true)]
277 pub erx_p1: bool,
278 /// Enable RX address for data pipe 0.
279 #[bits(1, default = true)]
280 pub erx_p0: bool,
281}
282
283impl Register for EnRxaddr {
284 const ADDRESS: u8 = 0x02;
285}
286
287/// # SETUP_AW register
288/// Set up address width. This applies to [`TxAddr`] and all RX addresses for data pipes.
289///
290/// Address = `0x03`
291///
292/// ## Fields
293///
294/// #### `aw` | bits 1:0
295/// Address width. Default value: `11` (5 byte address).
296///
297/// `00`: Illegal
298///
299/// `01`: 3 bytes
300///
301/// `10`: 4 bytes
302///
303/// `11`: 5 bytes
304///
305/// ## Example
306/// ```rust
307/// use nrf24l01_commands::registers;
308///
309/// // Default value
310/// let reg = registers::SetupAw::new();
311/// assert_eq!(reg.into_bits(), 0b0000_0011);
312///
313/// // Write fields
314/// let reg = registers::SetupAw::new().with_aw(0b10);
315/// assert_eq!(reg.into_bits(), 0b0000_0010);
316/// ```
317#[bitfield(u8, order = Msb)]
318pub struct SetupAw {
319 #[bits(6)]
320 __: u8,
321
322 /// Address width. Default value: `11` (5 byte address).
323 ///
324 /// `00`: Illegal
325 ///
326 /// `01`: 3 bytes
327 ///
328 /// `10`: 4 bytes
329 ///
330 /// `11`: 5 bytes
331 #[bits(2, default = 3)]
332 pub aw: u8,
333}
334
335impl Register for SetupAw {
336 const ADDRESS: u8 = 0x03;
337}
338
339/// # SETUP_RETR register
340/// Set up 'Automatic Retransmission'.
341///
342/// Address = `0x04`
343///
344/// ## Fields
345///
346/// #### `ard` | bits 7:4
347/// Auto retransmit delay.
348///
349/// `0000`: Wait 250µS
350///
351/// `0001`: Wait 500µS
352///
353/// `0010`: Wait 750µS
354///
355/// ……
356///
357/// `1111`: Wait 4000µS
358///
359/// #### `arc` | bits 3:0
360/// Maximum auto retransmits. Default value: `0011` (3 retransmits)
361///
362/// `0000`: Auto retransmit disabled
363///
364/// `0001`: Up to 1 retransmit
365///
366/// `0010`: Up to 2 retransmits
367///
368/// ……
369///
370/// `1111`: Up to 15 retransmits
371///
372/// ## Example
373/// ```rust
374/// use nrf24l01_commands::registers;
375///
376/// // Default value
377/// let reg = registers::SetupRetr::new();
378/// assert_eq!(reg.into_bits(), 0b0000_0011);
379///
380/// // Write fields
381/// let reg = registers::SetupRetr::new()
382/// .with_ard(0b10)
383/// .with_arc(0b1111);
384/// assert_eq!(reg.into_bits(), 0b0010_1111);
385/// ```
386#[bitfield(u8, order = Msb)]
387pub struct SetupRetr {
388 /// Auto retransmit delay.
389 ///
390 /// `0000`: Wait 250µS
391 ///
392 /// `0001`: Wait 500µS
393 ///
394 /// `0010`: Wait 750µS
395 ///
396 /// ……
397 ///
398 /// `1111`: Wait 4000µS
399 #[bits(4)]
400 pub ard: u8,
401
402 /// Maximum auto retransmits. Default value: `0011` (3 retransmits)
403 ///
404 /// `0000`: Auto retransmit disabled
405 ///
406 /// `0001`: Up to 1 retransmit
407 ///
408 /// `0010`: Up to 2 retransmits
409 ///
410 /// ……
411 ///
412 /// `1111`: Up to 15 retransmits
413 #[bits(4, default = 3)]
414 pub arc: u8,
415}
416
417impl Register for SetupRetr {
418 const ADDRESS: u8 = 0x04;
419}
420
421/// # RF_CH register
422/// Set RF channel.
423///
424/// Address = `0x05`
425///
426/// ## Fields
427/// #### `rf_ch` | bits 6:0
428/// Sets the frequency channel to operate on 0 - 125. Default value: `2`.
429///
430/// ## Example
431/// ```rust
432/// use nrf24l01_commands::registers;
433///
434/// // Default value
435/// let reg = registers::RfCh::new();
436/// assert_eq!(reg.into_bits(), 0b0000_0010);
437///
438/// // Write fields
439/// let reg = registers::RfCh::new().with_rf_ch(89);
440/// assert_eq!(reg.into_bits(), 89);
441/// ```
442#[bitfield(u8, order = Msb)]
443pub struct RfCh {
444 #[bits(1)]
445 __: bool,
446
447 /// Sets the frequency channel to operate on 0 - 125. Default value: `2`.
448 #[bits(7, default = 2)]
449 pub rf_ch: u8,
450}
451
452impl Register for RfCh {
453 const ADDRESS: u8 = 0x05;
454}
455
456/// # RF_SETUP register
457/// Set RF air data rate, output power and LNA gain.
458///
459/// Address = `0x06`
460///
461/// ## Fields
462/// #### `pll_lock` | bit 4
463/// Force PLL lock signal. Only used in test.
464///
465/// #### `rf_dr` | bit 3
466/// Air data rate. Default value: `1` (2 Mbps)
467///
468/// `0`: 1 Mbps
469///
470/// `1`: 2 Mbps
471///
472/// #### `rf_pwr` | bits 2:1
473/// RF output power in TX mode. Default value: `11` (0 dBm)
474///
475/// `00`: -18 dBm
476///
477/// `01`: -12 dBm
478///
479/// `10`: -6 dBm
480///
481/// `11`: 0 dbm
482///
483/// #### `lna_hcurr` | bit 0
484/// Set LNA gain. Default value: `1` (higher gain).
485///
486/// `0`: lower gain and current consumption
487///
488/// `1`: higher gain and current consumption
489///
490/// ## Example
491/// ```rust
492/// use nrf24l01_commands::registers;
493///
494/// // Default value
495/// let reg = registers::RfSetup::new();
496/// assert_eq!(reg.into_bits(), 0b0000_1111);
497///
498/// // Write fields
499/// let reg = registers::RfSetup::new()
500/// .with_pll_lock(false)
501/// .with_rf_dr(false)
502/// .with_rf_pwr(0b10)
503/// .with_lna_hcurr(true);
504/// assert_eq!(reg.into_bits(), 0b0000_0101);
505/// ```
506#[bitfield(u8, order = Msb)]
507pub struct RfSetup {
508 #[bits(3)]
509 __: u8,
510
511 /// Force PLL lock signal. Only used in test.
512 #[bits(1)]
513 pub pll_lock: bool,
514
515 /// Air data rate. Default value: `1` (2 Mbps)
516 ///
517 /// `0`: 1 Mbps
518 ///
519 /// `1`: 2 Mbps
520 #[bits(1, default = true)]
521 pub rf_dr: bool,
522
523 /// RF output power in TX mode. Default value: `11` (0 dBm)
524 ///
525 /// `00`: -18 dBm
526 ///
527 /// `01`: -12 dBm
528 ///
529 /// `10`: -6 dBm
530 ///
531 /// `11`: 0 dbm
532 #[bits(2, default = 3)]
533 pub rf_pwr: u8,
534
535 /// Set LNA gain. Default value: `1` (higher gain).
536 ///
537 /// `0`: lower gain and current consumption
538 ///
539 /// `1`: higher gain and current consumption
540 #[bits(1, default = true)]
541 pub lna_hcurr: bool,
542}
543
544impl Register for RfSetup {
545 const ADDRESS: u8 = 0x06;
546}
547
548/// # STATUS register
549///
550/// Address = `0x07`
551///
552/// ## Fields
553/// #### `rx_dr` | bit 6
554/// Data ready RX FIFO interrupt. Asserted when new data arrives in RX FIFO. Write 1 to clear bit.
555///
556/// #### `tx_ds` | bit 5
557/// Data sent TX FIFO interrupt. Asserted when packet is transmitted. If AUTO_ACK is activated, ACK must be received before interrupt goes high. Write 1 to clear bit.
558///
559/// #### `max_rt` | bit 4
560/// Maximum number of TX retransmits interrupt. If MAX_RT is asserted it must be cleared before communication can continue. Write 1 to clear bit.
561///
562/// #### `rx_p_no` | bits 3:1
563/// Data pipe number for the payload available from reading RX FIFO. This field is read-only.
564///
565/// `000`-`101`: Data pipe number
566///
567/// `110`: Not used
568///
569/// `111`: RX FIFO empty
570///
571/// #### `tx_full` | bit 0
572/// TX FIFO full flag. This field is read-only.
573///
574/// `0`: Not full
575///
576/// `1`: TX FIFO full
577///
578/// ## Example
579/// ```rust
580/// use nrf24l01_commands::registers;
581///
582/// // Default value
583/// let reg = registers::Status::new();
584/// assert_eq!(reg.into_bits(), 0);
585///
586/// // Read fields
587/// let reg = registers::Status::from_bits(0b0011_0101);
588/// assert!(!reg.rx_dr());
589/// assert!(reg.tx_ds());
590/// assert!(reg.max_rt());
591/// assert_eq!(reg.rx_p_no(), 2);
592/// assert!(reg.tx_full());
593///
594/// // Write fields
595/// let reg = registers::Status::new()
596/// .with_rx_dr(false)
597/// .with_tx_ds(true)
598/// .with_max_rt(false);
599/// assert_eq!(reg.into_bits(), 0b0010_0000);
600/// ```
601#[bitfield(u8, order = Msb)]
602pub struct Status {
603 #[bits(1)]
604 __: bool,
605
606 /// Data ready RX FIFO interrupt. Asserted when new data arrives in RX FIFO. Write 1 to clear bit.
607 #[bits(1)]
608 pub rx_dr: bool,
609
610 /// Data sent TX FIFO interrupt. Asserted when packet is transmitted. If AUTO_ACK is activated, ACK must be received before interrupt goes high. Write 1 to clear bit.
611 #[bits(1)]
612 pub tx_ds: bool,
613
614 /// Maximum number of TX retransmits interrupt. If MAX_RT is asserted it must be cleared before communication can continue. Write 1 to clear bit.
615 #[bits(1)]
616 pub max_rt: bool,
617
618 /// Data pipe number for the payload available from reading RX FIFO. This field is read-only.
619 ///
620 /// `000`-`101`: Data pipe number
621 ///
622 /// `110`: Not used
623 ///
624 /// `111`: RX FIFO empty
625 #[bits(3, access = RO)]
626 pub rx_p_no: u8,
627
628 /// TX FIFO full flag. This field is read-only.
629 ///
630 /// `0`: Not full
631 ///
632 /// `1`: TX FIFO full
633 #[bits(1, access = RO)]
634 pub tx_full: bool,
635}
636
637impl Register for Status {
638 const ADDRESS: u8 = 0x07;
639}
640
641/// # OBSERVE_TX register
642/// Transmit observe register.
643///
644/// Address = `0x08`
645///
646/// #### `plos_cnt` | bits 7:4
647/// Count lost packets. This counter is overflow protected to 15,
648/// and continues at max until reset. This counter is reset by writing
649/// to [`RfCh`]. This field is read-only.
650///
651/// #### `arc_cnt` | 3:0
652/// Count retransmitted packets. The counter is reset when transmission
653/// of a new packet starts. This field is read-only.
654///
655/// ## Example
656/// ```rust
657/// use nrf24l01_commands::registers;
658///
659/// // Default value
660/// let reg = registers::ObserveTx::new();
661/// assert_eq!(reg.into_bits(), 0);
662///
663/// // Read fields
664/// let reg = registers::ObserveTx::from_bits(0b1010_1100);
665/// assert_eq!(reg.plos_cnt(), 10);
666/// assert_eq!(reg.arc_cnt(), 12);
667/// ```
668#[bitfield(u8, order = Msb)]
669pub struct ObserveTx {
670 /// Count lost packets. This counter is overflow protected to 15,
671 /// and continues at max until reset. This counter is reset by writing
672 /// to __RF_CH__. This field is read-only.
673 #[bits(4, access = RO)]
674 pub plos_cnt: u8,
675
676 /// Count retransmitted packets. The counter is reset when transmission
677 /// of a new packet starts. This field is read-only.
678 #[bits(4, access = RO)]
679 pub arc_cnt: u8,
680}
681
682impl Register for ObserveTx {
683 const ADDRESS: u8 = 0x08;
684}
685
686/// # CD register
687/// Carrier detect register.
688///
689/// Address = `0x09`
690///
691/// ## Fields
692/// #### `cd` | bit 0
693/// Carrier detect. The carrier detect is a signal that is set high
694/// when an RF signal is detected inside the receiving frequency channel. This field is read-only.
695///
696/// ## Example
697/// ```rust
698/// use nrf24l01_commands::registers;
699///
700/// let reg = registers::Cd::from_bits(1);
701/// assert!(reg.cd());
702/// ```
703#[bitfield(u8, order = Msb)]
704pub struct Cd {
705 #[bits(7)]
706 __: u8,
707
708 /// Carrier detect. The carrier detect is a signal that is set high
709 /// when an RF signal is detected inside the receiving frequency channel. This field is read-only.
710 #[bits(1, access = RO)]
711 pub cd: bool,
712}
713
714impl Register for Cd {
715 const ADDRESS: u8 = 0x09;
716}
717
718/// # RX_ADDR_P0 register
719/// RX address data pipe 0.
720///
721/// Address = `0x0A`
722///
723/// Const parameter `N`: address width in bytes.
724/// <div class="warning">
725/// N must be of {3, 4, 5}.
726/// </div>
727///
728/// ## Fields
729/// #### `rx_addr_p0` | bits 39:0
730/// RX address data pipe 0. Default value: `0xE7E7E7E7E7`.
731///
732/// ## Example
733/// ```rust
734/// use nrf24l01_commands::registers;
735///
736/// // Default value
737/// let reg = registers::RxAddrP0::<4>::new();
738/// assert_eq!(reg.into_bits(), 0xE7E7E7E7E7);
739///
740/// // Write fields
741/// let reg = registers::RxAddrP0::<5>::new().with_rx_addr_p0(0xC2840DF659);
742/// assert_eq!(reg.into_bits(), 0xC2840DF659);
743///
744/// // Convert to little-endian bytes
745/// assert_eq!(reg.into_bytes(), [0x59, 0xF6, 0x0D, 0x84, 0xC2]);
746///
747/// // 3 byte address width
748/// let reg = registers::RxAddrP0::<3>::new().with_rx_addr_p0(0xC2840DF659);
749/// assert_eq!(reg.into_bytes(), [0x59, 0xF6, 0x0D]);
750/// ```
751#[derive(Copy, Clone)]
752pub struct RxAddrP0<const N: usize>(RxAddrP0Fields);
753
754#[bitfield(u64, order = Msb)]
755struct RxAddrP0Fields {
756 #[bits(24)]
757 __: u32,
758
759 /// RX address data pipe 0. Default value: `0xE7E7E7E7E7`.
760 #[bits(40, default = 0xE7E7E7E7E7)]
761 rx_addr_p0: u64,
762}
763
764impl<const N: usize> Register for RxAddrP0<N> {
765 const ADDRESS: u8 = 0x0A;
766}
767
768/// Convert u64 address to little-endian bytes.
769/// Const parameter `N`: address width in bytes. Constraint: `N` in {3, 4, 5}.
770#[inline(always)]
771const fn address_into_bytes<const N: usize>(addr: u64) -> [u8; N] {
772 let le_bytes: [u8; 8] = addr.to_le_bytes();
773 let mut bytes = [0; N];
774 let mut i = 0;
775 while i < N {
776 bytes[i] = le_bytes[i];
777 i += 1;
778 }
779 bytes
780}
781
782impl<const N: usize> RxAddrP0<N> {
783 /// Creates a new default initialized bitfield.
784 pub const fn new() -> Self {
785 Self(RxAddrP0Fields::new())
786 }
787
788 /// Convert from bits.
789 pub const fn from_bits(bits: u64) -> Self {
790 Self(RxAddrP0Fields::from_bits(bits))
791 }
792
793 /// Convert into bits.
794 pub const fn into_bits(self) -> u64 {
795 self.0.into_bits()
796 }
797
798 /// RX address data pipe 0. Default value: `0xE7E7E7E7E7`.
799 pub const fn rx_addr_p0(&self) -> u64 {
800 self.0.rx_addr_p0()
801 }
802
803 /// RX address data pipe 0. Default value: `0xE7E7E7E7E7`.
804 pub const fn with_rx_addr_p0(mut self, value: u64) -> Self {
805 self.0 = self.0.with_rx_addr_p0(value);
806 self
807 }
808
809 /// Convert into bytes ordered by LSByte first.
810 pub const fn into_bytes(self) -> [u8; N] {
811 address_into_bytes(self.0 .0)
812 }
813}
814
815impl<const N: usize> Default for RxAddrP0<N> {
816 fn default() -> Self {
817 Self::new()
818 }
819}
820
821/// # RX_ADDR_P1 register
822/// RX address data pipe 1.
823///
824/// Address = `0x0B`
825///
826/// Const parameter `N`: address width in bytes.
827/// <div class="warning">
828/// N must be of {3, 4, 5}.
829/// </div>
830///
831/// ## Fields
832/// #### `rx_addr_p1` | bits 39:0
833/// RX address data pipe 1. Default value: `0xC2C2C2C2C2`.
834///
835/// ## Example
836/// ```rust
837/// use nrf24l01_commands::registers;
838///
839/// // Default value
840/// let reg = registers::RxAddrP1::<4>::new();
841/// assert_eq!(reg.into_bits(), 0xC2C2C2C2C2);
842///
843/// // Write fields
844/// let reg = registers::RxAddrP1::<5>::new().with_rx_addr_p1(0xC2840DF659);
845/// assert_eq!(reg.into_bits(), 0xC2840DF659);
846///
847/// // Convert to little-endian bytes
848/// assert_eq!(reg.into_bytes(), [0x59, 0xF6, 0x0D, 0x84, 0xC2]);
849///
850/// // 3 byte address width
851/// let reg = registers::RxAddrP1::<3>::new().with_rx_addr_p1(0xC2840DF659);
852/// assert_eq!(reg.into_bytes(), [0x59, 0xF6, 0x0D]);
853/// ```
854#[derive(Copy, Clone)]
855pub struct RxAddrP1<const N: usize>(RxAddrP1Fields);
856
857#[bitfield(u64, order = Msb)]
858struct RxAddrP1Fields {
859 #[bits(24)]
860 __: u32,
861
862 /// RX address data pipe 1. Default value: `0xC2C2C2C2C2`.
863 #[bits(40, default = 0xC2C2C2C2C2)]
864 rx_addr_p1: u64,
865}
866
867impl<const N: usize> Register for RxAddrP1<N> {
868 const ADDRESS: u8 = 0x0B;
869}
870
871impl<const N: usize> RxAddrP1<N> {
872 /// Creates a new default initialized bitfield.
873 pub const fn new() -> Self {
874 Self(RxAddrP1Fields::new())
875 }
876
877 /// Convert from bits.
878 pub const fn from_bits(bits: u64) -> Self {
879 Self(RxAddrP1Fields::from_bits(bits))
880 }
881
882 /// Convert into bits.
883 pub const fn into_bits(self) -> u64 {
884 self.0.into_bits()
885 }
886
887 /// RX address data pipe 1. Default value: `0xC2C2C2C2C2`.
888 pub const fn rx_addr_p1(&self) -> u64 {
889 self.0.rx_addr_p1()
890 }
891
892 /// RX address data pipe 1. Default value: `0xC2C2C2C2C2`.
893 pub const fn with_rx_addr_p1(mut self, value: u64) -> Self {
894 self.0 = self.0.with_rx_addr_p1(value);
895 self
896 }
897
898 /// Convert into bytes ordered by LSByte first.
899 pub const fn into_bytes(self) -> [u8; N] {
900 address_into_bytes(self.0 .0)
901 }
902}
903
904impl<const N: usize> Default for RxAddrP1<N> {
905 fn default() -> Self {
906 Self::new()
907 }
908}
909
910/// # RX_ADDR_P2 register
911/// RX address data pipe 2. Only LSByte is stored.
912/// MSBytes are equal to [`RxAddrP1`] bits 39:8.
913///
914/// Address = `0x0C`
915///
916/// ## Fields
917/// #### `rx_addr_p2` | bits 7:0
918/// RX address data pipe 2. Default value: `0xC3`.
919///
920/// ## Example
921/// ```rust
922/// use nrf24l01_commands::registers;
923///
924/// // Default value
925/// let reg = registers::RxAddrP2::new();
926/// assert_eq!(reg.into_bits(), 0xC3);
927///
928/// // Write fields
929/// let reg = registers::RxAddrP2::new().with_rx_addr_p2(172);
930/// assert_eq!(reg.into_bits(), 172);
931/// ```
932#[bitfield(u8)]
933pub struct RxAddrP2 {
934 /// RX address data pipe 2. Default value: `0xC3`.
935 #[bits(8, default = 0xC3)]
936 pub rx_addr_p2: u8,
937}
938
939impl Register for RxAddrP2 {
940 const ADDRESS: u8 = 0x0C;
941}
942
943/// # RX_ADDR_P3 register
944/// RX address data pipe 3. Only LSByte is stored.
945/// MSBytes are equal to [`RxAddrP1`] bits 39:8.
946///
947/// Address = `0x0D`
948///
949/// ## Fields
950/// #### `rx_addr_p3` | bits 7:0
951/// RX address data pipe 3. Default value: `0xC4`.
952///
953/// ## Example
954/// ```rust
955/// use nrf24l01_commands::registers;
956///
957/// // Default value
958/// let reg = registers::RxAddrP3::new();
959/// assert_eq!(reg.into_bits(), 0xC4);
960///
961/// // Write fields
962/// let reg = registers::RxAddrP3::new().with_rx_addr_p3(172);
963/// assert_eq!(reg.into_bits(), 172);
964/// ```
965#[bitfield(u8)]
966pub struct RxAddrP3 {
967 /// RX address data pipe 3. Default value: `0xC4`.
968 #[bits(8, default = 0xC4)]
969 pub rx_addr_p3: u8,
970}
971
972impl Register for RxAddrP3 {
973 const ADDRESS: u8 = 0x0D;
974}
975
976/// # RX_ADDR_P4 register
977/// RX address data pipe 4. Only LSByte is stored.
978/// MSBytes are equal to [`RxAddrP1`] bits 39:8.
979///
980/// Address = `0x0E`
981///
982/// ## Fields
983/// #### `rx_addr_p4` | bits 7:0
984/// RX address data pipe 4. Default value: `0xC5`.
985///
986/// ## Example
987/// ```rust
988/// use nrf24l01_commands::registers;
989///
990/// // Default value
991/// let reg = registers::RxAddrP4::new();
992/// assert_eq!(reg.into_bits(), 0xC5);
993///
994/// // Write fields
995/// let reg = registers::RxAddrP4::new().with_rx_addr_p4(172);
996/// assert_eq!(reg.into_bits(), 172);
997/// ```
998#[bitfield(u8)]
999pub struct RxAddrP4 {
1000 /// RX address data pipe 4. Default value: `0xC5`.
1001 #[bits(8, default = 0xC5)]
1002 pub rx_addr_p4: u8,
1003}
1004
1005impl Register for RxAddrP4 {
1006 const ADDRESS: u8 = 0x0E;
1007}
1008
1009/// # RX_ADDR_P5 register
1010/// RX address data pipe 5. Only LSByte is stored.
1011/// MSBytes are equal to [`RxAddrP1`] bits 39:8.
1012///
1013/// Address = `0x0F`
1014///
1015/// ## Fields
1016/// #### `rx_addr_p5` | bits 7:0
1017/// RX address data pipe 5. Default value: `0xC6`.
1018///
1019/// ## Example
1020/// ```rust
1021/// use nrf24l01_commands::registers;
1022///
1023/// // Default value
1024/// let reg = registers::RxAddrP5::new();
1025/// assert_eq!(reg.into_bits(), 0xC6);
1026///
1027/// // Write fields
1028/// let reg = registers::RxAddrP5::new().with_rx_addr_p5(172);
1029/// assert_eq!(reg.into_bits(), 172);
1030/// ```
1031#[bitfield(u8)]
1032pub struct RxAddrP5 {
1033 /// RX address data pipe 5. Default value: `0xC6`.
1034 #[bits(8, default = 0xC6)]
1035 pub rx_addr_p5: u8,
1036}
1037
1038impl Register for RxAddrP5 {
1039 const ADDRESS: u8 = 0x0F;
1040}
1041
1042/// # TX_ADDR register
1043/// TX address. Set [`RxAddrP0`] equal to this address to handle ACK automatically.
1044///
1045/// Address = `0x10`
1046///
1047/// Const parameter `N`: address width in bytes.
1048/// <div class="warning">
1049/// N must be of {3, 4, 5}.
1050/// </div>
1051///
1052/// ## Fields
1053/// #### `tx_addr` | bits 39:0
1054/// TX address. Default value: `0xE7E7E7E7E7`.
1055///
1056/// ## Example
1057/// ```rust
1058/// use nrf24l01_commands::registers;
1059///
1060/// // Default value
1061/// let reg = registers::TxAddr::<4>::new();
1062/// assert_eq!(reg.into_bits(), 0xE7E7E7E7E7);
1063///
1064/// // Write fields
1065/// let reg = registers::TxAddr::<5>::new().with_tx_addr(0xC2840DF659);
1066/// assert_eq!(reg.into_bits(), 0xC2840DF659);
1067///
1068/// // Convert to little-endian bytes
1069/// assert_eq!(reg.into_bytes(), [0x59, 0xF6, 0x0D, 0x84, 0xC2]);
1070///
1071/// // 3 byte address width
1072/// let reg = registers::TxAddr::<3>::new().with_tx_addr(0xC2840DF659);
1073/// assert_eq!(reg.into_bytes(), [0x59, 0xF6, 0x0D]);
1074/// ```
1075#[derive(Copy, Clone)]
1076pub struct TxAddr<const N: usize>(TxAddrFields);
1077
1078#[bitfield(u64, order = Msb)]
1079struct TxAddrFields {
1080 #[bits(24)]
1081 __: u32,
1082
1083 /// TX address. Default value: `0xE7E7E7E7E7`.
1084 #[bits(40, default = 0xE7E7E7E7E7)]
1085 tx_addr: u64,
1086}
1087
1088impl<const N: usize> Register for TxAddr<N> {
1089 const ADDRESS: u8 = 0x10;
1090}
1091
1092impl<const N: usize> TxAddr<N> {
1093 /// Creates a new default initialized bitfield.
1094 pub const fn new() -> Self {
1095 Self(TxAddrFields::new())
1096 }
1097
1098 /// Convert from bits.
1099 pub const fn from_bits(bits: u64) -> Self {
1100 Self(TxAddrFields::from_bits(bits))
1101 }
1102
1103 /// Convert into bits.
1104 pub const fn into_bits(self) -> u64 {
1105 self.0.into_bits()
1106 }
1107
1108 /// TX address. Default value: `0xE7E7E7E7E7`.
1109 pub const fn tx_addr(&self) -> u64 {
1110 self.0.tx_addr()
1111 }
1112
1113 /// TX address. Default value: `0xE7E7E7E7E7`.
1114 pub const fn with_tx_addr(mut self, value: u64) -> Self {
1115 self.0 = self.0.with_tx_addr(value);
1116 self
1117 }
1118
1119 /// Convert into bytes ordered by LSByte first.
1120 pub const fn into_bytes(self) -> [u8; N] {
1121 address_into_bytes(self.0 .0)
1122 }
1123}
1124
1125impl<const N: usize> Default for TxAddr<N> {
1126 fn default() -> Self {
1127 Self::new()
1128 }
1129}
1130
1131/// # RX_PW_P0 register
1132/// RX payload width for data pipe 0.
1133///
1134/// Address = `0x11`
1135///
1136/// ## Fields
1137/// #### `rx_pw_p0` | bits 7:0
1138/// RX payload width for data pipe 0. 1 - 32 bytes.
1139///
1140/// ## Example
1141/// ```rust
1142/// use nrf24l01_commands::registers;
1143///
1144/// // Default value
1145/// let reg = registers::RxPwP0::new();
1146/// assert_eq!(reg.into_bits(), 0);
1147///
1148/// // Write fields
1149/// let reg = registers::RxPwP0::new().with_rx_pw_p0(31);
1150/// assert_eq!(reg.into_bits(), 31);
1151/// ```
1152#[bitfield(u8, order = Msb)]
1153pub struct RxPwP0 {
1154 #[bits(2)]
1155 __: u8,
1156
1157 /// RX payload width for data pipe 0. 1 - 32 bytes.
1158 #[bits(6)]
1159 pub rx_pw_p0: u8,
1160}
1161
1162impl Register for RxPwP0 {
1163 const ADDRESS: u8 = 0x11;
1164}
1165
1166/// # RX_PW_P1 register
1167/// RX payload width for data pipe 1.
1168///
1169/// Address = `0x12`
1170///
1171/// ## Fields
1172/// #### `rx_pw_p1` | bits 7:0
1173/// RX payload width for data pipe 1. 1 - 32 bytes.
1174///
1175/// ## Example
1176/// ```rust
1177/// use nrf24l01_commands::registers;
1178///
1179/// // Default value
1180/// let reg = registers::RxPwP1::new();
1181/// assert_eq!(reg.into_bits(), 0);
1182///
1183/// // Write fields
1184/// let reg = registers::RxPwP1::new().with_rx_pw_p1(31);
1185/// assert_eq!(reg.into_bits(), 31);
1186/// ```
1187#[bitfield(u8, order = Msb)]
1188pub struct RxPwP1 {
1189 #[bits(2)]
1190 __: u8,
1191
1192 /// RX payload width for data pipe 1. 1 - 32 bytes.
1193 #[bits(6)]
1194 pub rx_pw_p1: u8,
1195}
1196
1197impl Register for RxPwP1 {
1198 const ADDRESS: u8 = 0x12;
1199}
1200
1201/// # RX_PW_P2 register
1202/// RX payload width for data pipe 2.
1203///
1204/// Address = `0x13`
1205///
1206/// ## Fields
1207/// #### `rx_pw_p2` | bits 7:0
1208/// RX payload width for data pipe 2. 1 - 32 bytes.
1209///
1210/// ## Example
1211/// ```rust
1212/// use nrf24l01_commands::registers;
1213///
1214/// // Default value
1215/// let reg = registers::RxPwP2::new();
1216/// assert_eq!(reg.into_bits(), 0);
1217///
1218/// // Write fields
1219/// let reg = registers::RxPwP2::new().with_rx_pw_p2(31);
1220/// assert_eq!(reg.into_bits(), 31);
1221/// ```
1222#[bitfield(u8, order = Msb)]
1223pub struct RxPwP2 {
1224 #[bits(2)]
1225 __: u8,
1226
1227 /// RX payload width for data pipe 2. 1 - 32 bytes.
1228 #[bits(6)]
1229 pub rx_pw_p2: u8,
1230}
1231
1232impl Register for RxPwP2 {
1233 const ADDRESS: u8 = 0x13;
1234}
1235
1236/// # RX_PW_P3 register
1237/// RX payload width for data pipe 3.
1238///
1239/// Address = `0x14`
1240///
1241/// ## Fields
1242/// #### `rx_pw_p3` | bits 7:0
1243/// RX payload width for data pipe 3. 1 - 32 bytes.
1244///
1245/// ## Example
1246/// ```rust
1247/// use nrf24l01_commands::registers;
1248///
1249/// // Default value
1250/// let reg = registers::RxPwP3::new();
1251/// assert_eq!(reg.into_bits(), 0);
1252///
1253/// // Write fields
1254/// let reg = registers::RxPwP3::new().with_rx_pw_p3(31);
1255/// assert_eq!(reg.into_bits(), 31);
1256/// ```
1257#[bitfield(u8, order = Msb)]
1258pub struct RxPwP3 {
1259 #[bits(2)]
1260 __: u8,
1261
1262 /// RX payload width for data pipe 3. 1 - 32 bytes.
1263 #[bits(6)]
1264 pub rx_pw_p3: u8,
1265}
1266
1267impl Register for RxPwP3 {
1268 const ADDRESS: u8 = 0x14;
1269}
1270
1271/// # RX_PW_P4 register
1272/// RX payload width for data pipe 4.
1273///
1274/// Address = `0x15`
1275///
1276/// ## Fields
1277/// #### `rx_pw_p4` | bits 7:0
1278/// RX payload width for data pipe 4. 1 - 32 bytes.
1279///
1280/// ## Example
1281/// ```rust
1282/// use nrf24l01_commands::registers;
1283///
1284/// // Default value
1285/// let reg = registers::RxPwP4::new();
1286/// assert_eq!(reg.into_bits(), 0);
1287///
1288/// // Write fields
1289/// let reg = registers::RxPwP4::new().with_rx_pw_p4(31);
1290/// assert_eq!(reg.into_bits(), 31);
1291/// ```
1292#[bitfield(u8, order = Msb)]
1293pub struct RxPwP4 {
1294 #[bits(2)]
1295 __: u8,
1296
1297 /// RX payload width for data pipe 4. 1 - 32 bytes.
1298 #[bits(6)]
1299 pub rx_pw_p4: u8,
1300}
1301
1302impl Register for RxPwP4 {
1303 const ADDRESS: u8 = 0x15;
1304}
1305
1306/// # RX_PW_P5 register
1307/// RX payload width for data pipe 5.
1308///
1309/// Address = `0x16`
1310///
1311/// ## Fields
1312/// #### `rx_pw_p5` | bits 7:0
1313/// RX payload width for data pipe 5. 1 - 32 bytes.
1314///
1315/// ## Example
1316/// ```rust
1317/// use nrf24l01_commands::registers;
1318///
1319/// // Default value
1320/// let reg = registers::RxPwP5::new();
1321/// assert_eq!(reg.into_bits(), 0);
1322///
1323/// // Write fields
1324/// let reg = registers::RxPwP5::new().with_rx_pw_p5(31);
1325/// assert_eq!(reg.into_bits(), 31);
1326/// ```
1327#[bitfield(u8, order = Msb)]
1328pub struct RxPwP5 {
1329 #[bits(2)]
1330 __: u8,
1331
1332 /// RX payload width for data pipe 5. 1 - 32 bytes.
1333 #[bits(6)]
1334 pub rx_pw_p5: u8,
1335}
1336
1337impl Register for RxPwP5 {
1338 const ADDRESS: u8 = 0x16;
1339}
1340
1341/// # FIFO_STATUS register
1342/// Status of TX/RX FIFOs.
1343///
1344/// Address = `0x17`
1345///
1346/// ## Fields
1347/// All fields are read-only.
1348///
1349/// #### `tx_reuse` | bit 6
1350/// Reuse last transmitted data packet if set high.
1351/// The packet is repeatedly retransmitted as long as CE is high.
1352/// TX_REUSE is set by the [`REUSE_TX_PL`][crate::commands::ReuseTxPl] command and reset by
1353/// [`W_TX_PAYLOAD`][crate::commands::WTxPayloadNoack] or [`FLUSH_TX`][crate::commands::FlushTx].
1354///
1355/// #### `tx_full` | bit 5
1356/// TX FIFO full flag.
1357///
1358/// #### `tx_empty` | bit 4
1359/// TX FIFO empty flag.
1360///
1361/// #### `rx_full` | bit 1
1362/// RX FIFO full flag.
1363///
1364/// #### `rx_empty` | bit 0
1365/// RX FIFO empty flag.
1366///
1367/// ## Example
1368/// ```rust
1369/// use nrf24l01_commands::registers;
1370///
1371/// // Default value
1372/// let reg = registers::FifoStatus::new();
1373/// assert_eq!(reg.into_bits(), 0);
1374///
1375/// // Read fields
1376/// let reg = registers::FifoStatus::from_bits(0b0010_0010);
1377/// assert!(!reg.tx_reuse());
1378/// assert!(reg.tx_full());
1379/// assert!(!reg.tx_empty());
1380/// assert!(reg.rx_full());
1381/// assert!(!reg.rx_empty());
1382/// ```
1383#[bitfield(u8, order = Msb)]
1384pub struct FifoStatus {
1385 #[bits(1)]
1386 __: bool,
1387
1388 /// Reuse last transmitted data packet if set high.
1389 /// The packet is repeatedly retransmitted as long as CE is high.
1390 /// TX_REUSE is set by the REUSE_TX_PL command and reset by
1391 /// W_TX_PAYLOAD or FLUSH_TX.
1392 #[bits(1, access = RO)]
1393 pub tx_reuse: bool,
1394
1395 /// TX FIFO full flag.
1396 #[bits(1, access = RO)]
1397 pub tx_full: bool,
1398
1399 /// TX FIFO empty flag.
1400 #[bits(1, access = RO)]
1401 pub tx_empty: bool,
1402
1403 #[bits(2)]
1404 __: u8,
1405
1406 /// RX FIFO full flag.
1407 #[bits(1, access = RO)]
1408 pub rx_full: bool,
1409
1410 /// RX FIFO empty flag.
1411 #[bits(1, access = RO)]
1412 pub rx_empty: bool,
1413}
1414
1415impl Register for FifoStatus {
1416 const ADDRESS: u8 = 0x17;
1417}
1418
1419/// # DYNPD register
1420/// Enable dynamic payload length for data pipes 0-5.
1421///
1422/// Address = `0x1C`
1423///
1424/// ## Fields
1425///
1426/// #### `dpl_pN` | bit `N`
1427/// Enable dynamic payload length on data pipes `N` = 0-5.
1428///
1429/// ## Example
1430/// ```rust
1431/// use nrf24l01_commands::registers;
1432///
1433/// // Default value
1434/// let reg = registers::Dynpd::new();
1435/// assert_eq!(reg.into_bits(), 0);
1436///
1437/// // Write fields
1438/// let reg = registers::Dynpd::new()
1439/// .with_dpl_p5(true)
1440/// .with_dpl_p4(false)
1441/// .with_dpl_p3(false)
1442/// .with_dpl_p2(false)
1443/// .with_dpl_p1(true)
1444/// .with_dpl_p0(false);
1445/// assert_eq!(reg.into_bits(), 0b0010_0010);
1446/// ```
1447#[bitfield(u8, order = Msb)]
1448pub struct Dynpd {
1449 #[bits(2)]
1450 __: u8,
1451
1452 /// Enable dynamic payload length for data pipe 5.
1453 #[bits(1)]
1454 pub dpl_p5: bool,
1455 /// Enable dynamic payload length for data pipe 4.
1456 #[bits(1)]
1457 pub dpl_p4: bool,
1458 /// Enable dynamic payload length for data pipe 3.
1459 #[bits(1)]
1460 pub dpl_p3: bool,
1461 /// Enable dynamic payload length for data pipe 2.
1462 #[bits(1)]
1463 pub dpl_p2: bool,
1464 /// Enable dynamic payload length for data pipe 1.
1465 #[bits(1)]
1466 pub dpl_p1: bool,
1467 /// Enable dynamic payload length for data pipe 0.
1468 #[bits(1)]
1469 pub dpl_p0: bool,
1470}
1471
1472impl Register for Dynpd {
1473 const ADDRESS: u8 = 0x1C;
1474}
1475
1476/// # FEATURE register
1477/// Enable features 'Dynamic Payload Length', 'Payload with ACK' and 'W_TX_PAYLOAD_NO_ACK' command.
1478/// To activate this register, use the ACTIVATE command.
1479/// To deactivate this register, use the ACTIVATE command again.
1480///
1481/// Address = `0x01D`
1482///
1483/// ## Fields
1484/// #### `en_dpl` | bit 2
1485/// Enables _Dynamic Payload Length_.
1486///
1487/// #### `en_ack_pay` | bit 1
1488/// Enables _Payload with ACK_.
1489///
1490/// #### `en_dyn_ack` | bit 0
1491/// Enables 'W_TX_PAYLOAD_NO_ACK' command.
1492///
1493/// ## Example
1494/// ```rust
1495/// use nrf24l01_commands::registers;
1496///
1497/// // Default value
1498/// let reg = registers::Feature::new();
1499/// assert_eq!(reg.into_bits(), 0);
1500///
1501/// // Write fields
1502/// let reg = registers::Feature::new()
1503/// .with_en_dpl(false)
1504/// .with_en_ack_pay(true)
1505/// .with_en_dyn_ack(true);
1506/// assert_eq!(reg.into_bits(), 0b0000_0011);
1507/// ```
1508#[bitfield(u8, order = Msb)]
1509pub struct Feature {
1510 #[bits(5)]
1511 __: u8,
1512
1513 /// Enables _Dynamic Payload Length_.
1514 #[bits(1)]
1515 pub en_dpl: bool,
1516
1517 /// Enables _Payload with ACK_.
1518 #[bits(1)]
1519 pub en_ack_pay: bool,
1520
1521 /// Enables 'W_TX_PAYLOAD_NO_ACK' command.
1522 #[bits(1)]
1523 pub en_dyn_ack: bool,
1524}
1525
1526impl Register for Feature {
1527 const ADDRESS: u8 = 0x1D;
1528}