3 #ifndef DeviceFamily_CC13X0
13 #define CC1101_TIMEOUT 2000
15 #define RX_PACKET_TIMEOUT 20
16 #define TX_PACKET_TIMEOUT 20
23 #define CRYSTAL_FREQUENCY 26000000
24 #define CFG_REGISTER 0x2F
25 #define FIFOBUFFER 0x42
26 #define RSSI_OFFSET_868MHZ 0x4E
27 #define TX_RETRIES_MAX 0x05
28 #define ACK_TIMEOUT 250
29 #define CC1101_COMPARE_REGISTER 0x00
30 #define BROADCAST_ADDRESS 0x00
31 #define CC1101_FREQ_315MHZ 0x01
32 #define CC1101_FREQ_434MHZ 0x02
33 #define CC1101_FREQ_868MHZ 0x03
34 #define CC1101_FREQ_915MHZ 0x04
35 #define CC1101_TEMP_ADC_MV 3.225
36 #define CC1101_TEMP_CELS_CO 2.47
39 #define WRITE_SINGLE_BYTE 0x00
40 #define WRITE_BURST 0x40
41 #define READ_SINGLE_BYTE 0x80
42 #define READ_BURST 0xC0
46 #define TXFIFO_BURST 0x7F
47 #define TXFIFO_SINGLE_BYTE 0x3F
48 #define RXFIFO_BURST 0xFF
49 #define RXFIFO_SINGLE_BYTE 0xBF
50 #define PATABLE_BURST 0x7E
51 #define PATABLE_SINGLE_BYTE 0xFE
127 #define MARCSTATE 0xF5
128 #define WORTIME1 0xF6
129 #define WORTIME0 0xF7
130 #define PKTSTATUS 0xF8
131 #define VCO_VC_DAC 0xF9
134 #define RCCTRL1_STATUS 0xFC
135 #define RCCTRL0_STATUS 0xFD
139 #define MARCSTATE_BITMASK 0x1F
140 #define MARCSTATE_SLEEP 0x00
141 #define MARCSTATE_IDLE 0x01
142 #define MARCSTATE_XOFF 0x02
143 #define MARCSTATE_VCOON_MC 0x03
144 #define MARCSTATE_REGON_MC 0x04
145 #define MARCSTATE_MANCAL 0x05
146 #define MARCSTATE_VCOON 0x06
147 #define MARCSTATE_REGON 0x07
148 #define MARCSTATE_STARTCAL 0x08
149 #define MARCSTATE_BWBOOST 0x09
150 #define MARCSTATE_FS_LOCK 0x0A
151 #define MARCSTATE_IFADCON 0x0B
152 #define MARCSTATE_ENDCAL 0x0C
153 #define MARCSTATE_RX 0x0D
154 #define MARCSTATE_RX_END 0x0E
155 #define MARCSTATE_RX_RST 0x0F
156 #define MARCSTATE_TXRX_SWITCH 0x10
157 #define MARCSTATE_RXFIFO_OVERFLOW 0x11
158 #define MARCSTATE_FSTXON 0x12
159 #define MARCSTATE_TX 0x13
160 #define MARCSTATE_TX_END 0x14
161 #define MARCSTATE_RXTX_SWITCH 0x15
162 #define MARCSTATE_TXFIFO_UNDERFLOW 0x16
166 #define CHIPSTATUS_CHIP_RDYn_BITMASK 0x80
167 #define CHIPSTATUS_STATE_BITMASK 0x70
168 #define CHIPSTATUS_FIFO_BYTES_AVAILABLE_BITMASK 0x0F
170 #define CHIPSTATUS_STATE_IDLE 0x00
171 #define CHIPSTATUS_STATE_RX 0x10
172 #define CHIPSTATUS_STATE_TX 0x20
173 #define CHIPSTATUS_STATE_FSTXON 0x30
174 #define CHIPSTATUS_STATE_CALIBRATE 0x40
175 #define CHIPSTATUS_STATE_SETTLING 0x50
176 #define CHIPSTATUS_STATE_RX_OVERFLOW 0x60
177 #define CHIPSTATUS_STATE_TX_UNDERFLOW 0x70
201 static const uint8_t manchEncodeTab[16];
203 static const uint8_t manchDecodeTab[16];
205 static const uint8_t cc1101_2FSK_32_7_kb[CFG_REGISTER];
206 static const uint8_t paTablePower868[8];
208 void manchEncode(uint8_t* uncodedData, uint8_t* encodedData);
209 bool manchDecode(uint8_t* encodedData, uint8_t* decodedData);
211 void powerDownCC1101();
212 void setOutputPowerLevel(int8_t dBm);
217 void spiWriteRegister(uint8_t spi_instr, uint8_t value);
218 uint8_t spiReadRegister(uint8_t spi_instr);
219 uint8_t spiWriteStrobe(uint8_t spi_instr);
220 void spiReadBurst(uint8_t spi_instr, uint8_t* pArr, uint8_t len);
221 void spiWriteBurst(uint8_t spi_instr,
const uint8_t* pArr, uint8_t len);
223 uint8_t _loopState = RX_START;
225 bool syncStart =
false;
226 bool packetStart =
true;
227 bool fixedLengthMode =
false;
228 uint8_t* sendBuffer {0};
229 uint16_t sendBufferLength {0};
231 uint8_t buffer[
sizeof(packet) * 2];
232 uint8_t* pByteIndex = &buffer[0];
234 uint16_t bytesLeft = {0};
235 uint8_t statusGDO0 {0};
236 uint8_t statusGDO2 {0};
237 uint8_t prevStatusGDO0 {0};
238 uint8_t prevStatusGDO2 {0};
239 uint32_t packetStartTime {0};
RfPhysicalLayerCC1101(RfDataLinkLayer &rfDataLinkLayer, Platform &platform)
void showRegisterSettings()
void delayMicroseconds(unsigned int howLong)