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}