nrf5x/
constants.rs

1// Licensed under the Apache License, Version 2.0 or the MIT License.
2// SPDX-License-Identifier: Apache-2.0 OR MIT
3// Copyright Tock Contributors 2022.
4
5// PCNF0
6pub const RADIO_PCNF0_LFLEN_POS: u32 = 0;
7pub const RADIO_PCNF0_S0LEN_POS: u32 = 8;
8pub const RADIO_PCNF0_S1LEN_POS: u32 = 16;
9pub const RADIO_PCNF0_LFLEN_1BYTE: u32 = 8;
10pub const RADIO_PCNF0_S0_LEN_1BYTE: u32 = 1;
11pub const RADIO_PCNF0_S1_ZERO: u32 = 0;
12
13// PCNF1
14pub const RADIO_PCNF1_WHITEEN_DISABLED: u32 = 0;
15pub const RADIO_PCNF1_WHITEEN_ENABLED: u32 = 1;
16pub const RADIO_PCNF1_WHITEEN_POS: u32 = 25;
17pub const RADIO_PCNF1_BALEN_POS: u32 = 16;
18pub const RADIO_PCNF1_STATLEN_POS: u32 = 8;
19pub const RADIO_PCNF1_MAXLEN_POS: u32 = 0;
20pub const RADIO_PCNF1_ENDIAN_POS: u32 = 24;
21pub const RADIO_PCNF1_ENDIAN_BIG: u32 = 1;
22pub const RADIO_PCNF1_ENDIAN_LITTLE: u32 = 0;
23pub const RADIO_PCNF1_MAXLEN_37BYTES: u32 = 37;
24pub const RADIO_PCNF1_MAXLEN_255BYTES: u32 = 255;
25pub const RADIO_PCNF1_STATLEN_DONT_EXTEND: u32 = 0;
26pub const RADIO_PCNF1_BALEN_3BYTES: u32 = 3;
27
28// CRC
29pub const RADIO_CRCCNF_SKIPADDR_POS: u32 = 8;
30pub const RADIO_CRCCNF_SKIPADDR: u32 = 1;
31pub const RADIO_CRCCNF_LEN_3BYTES: u32 = 3;
32pub const RADIO_CRCINIT_BLE: u32 = 0x555555;
33pub const RADIO_CRCPOLY_BLE: u32 = 0x00065B;
34pub const RADIO_CRCINIT_IEEE802154: u32 = 0x0;
35pub const RADIO_CRCPOLY_IEEE802154: u32 = 0x11021;
36
37//CCA
38pub const IEEE802154_CCA_MODE: u32 = 0;
39pub const IEEE802154_CCA_ED_THRESH: u32 = 0x14;
40pub const IEEE802154_CCA_CORR_THRESH: u32 = 0x14;
41pub const IEEE802154_CCA_CORR_CNT: u32 = 0x02;
42
43// MODE
44pub const RADIO_MODE_BLE_1MBIT: u32 = 3;
45
46// FREQUENCY
47pub const RADIO_FREQ_CH_37: u32 = 2;
48pub const RADIO_FREQ_CH_39: u32 = 80;
49pub const RADIO_FREQ_CH_38: u32 = 26;
50
51// INTENSET
52// There are more INTENSET flags but they differ between nRF51 & nRF51
53pub const RADIO_INTENSET_READY: u32 = 1;
54pub const RADIO_INTENSET_ADDRESS: u32 = 1 << 1;
55pub const RADIO_INTENSET_PAYLOAD: u32 = 1 << 2;
56pub const RADIO_INTENSET_END: u32 = 1 << 3;
57pub const RADIO_INTENSET_DISABLED: u32 = 1 << 4;
58
59// STATE
60pub const RADIO_STATE_DISABLE: u32 = 0;
61pub const RADIO_STATE_RXRU: u32 = 1;
62pub const RADIO_STATE_RXIDLE: u32 = 2;
63pub const RADIO_STATE_RX: u32 = 3;
64pub const RADIO_STATE_RXDISABLE: u32 = 4;
65pub const RADIO_STATE_TXRU: u32 = 9;
66pub const RADIO_STATE_TXIDLE: u32 = 10;
67pub const RADIO_STATE_TX: u32 = 11;
68pub const RADIO_STATE_TXDISABLE: u32 = 12;
69
70// BUFFER SIZE
71pub const RADIO_PAYLOAD_LENGTH: usize = 255;
72
73pub enum RadioMode {
74    Nrf1Mbit = 0,
75    Nrf2Mbit = 1,
76    Nrt250Kbit = 2,
77    Ble1Mbit = 3,
78}
79
80#[derive(Debug, Copy, Clone)]
81pub enum TxPower {
82    Positive4dBM = 0x04,
83    Positive3dBM = 0x03,
84    ZerodBm = 0x00,
85    Negative4dBm = 0xFC,
86    Negative8dBm = 0xF8,
87    Negative12dBm = 0xF4,
88    Negative16dBm = 0xF0,
89    Negative20dBm = 0xEC,
90    Negative40dBm = 0xD8,
91}
92
93//FIXME: use enum-tryfrom-derive, https://docs.rs/crate/enum-tryfrom-derive/0.1.2
94impl TryFrom<u8> for TxPower {
95    type Error = ();
96
97    fn try_from(val: u8) -> Result<TxPower, ()> {
98        match val {
99            4 => Ok(TxPower::Positive4dBM),
100            3 => Ok(TxPower::Positive3dBM),
101            0 => Ok(TxPower::ZerodBm),
102            0xFC => Ok(TxPower::Negative4dBm),
103            0xF8 => Ok(TxPower::Negative8dBm),
104            0xF4 => Ok(TxPower::Negative12dBm),
105            0xF0 => Ok(TxPower::Negative16dBm),
106            0xEC => Ok(TxPower::Negative20dBm),
107            0xD8 => Ok(TxPower::Negative40dBm),
108            _ => Err(()),
109        }
110    }
111}