/* ################################################################### ** This component module is generated by Processor Expert. Do not modify it. ** Filename : McuNRF24L01.h ** Component : nRF24L01 ** Version : Component 01.103, Driver 01.00, CPU db: 3.00.000 ** Compiler : GNU C Compiler ** Date/Time : 2021-07-06, 16:35, # CodeGen: 0 ** Abstract : ** This component implements a driver for the Nordic Semiconductor nRF24L01 2.4 GHz transceiver. ** Settings : ** Contents : ** ConfigureSPI - void McuNRF24L01_ConfigureSPI(void); ** WriteRegister - void McuNRF24L01_WriteRegister(uint8_t reg, uint8_t val); ** ReadRegister - uint8_t McuNRF24L01_ReadRegister(uint8_t reg); ** ReadRegisterData - void McuNRF24L01_ReadRegisterData(uint8_t reg, uint8_t *buf, uint8_t bufSize); ** WriteRegisterData - void McuNRF24L01_WriteRegisterData(uint8_t reg, uint8_t *buf, uint8_t bufSize); ** WriteRead - uint8_t McuNRF24L01_WriteRead(uint8_t val); ** Write - void McuNRF24L01_Write(uint8_t val); ** GetStatus - uint8_t McuNRF24L01_GetStatus(void); ** GetStatusClrIRQ - uint8_t McuNRF24L01_GetStatusClrIRQ(void); ** ResetStatusIRQ - void McuNRF24L01_ResetStatusIRQ(uint8_t flags); ** TxPayload - void McuNRF24L01_TxPayload(uint8_t *payload, uint8_t payloadSize); ** RxPayload - void McuNRF24L01_RxPayload(uint8_t *payload, uint8_t payloadSize); ** StopRxTx - void McuNRF24L01_StopRxTx(void); ** StartRxTx - void McuNRF24L01_StartRxTx(void); ** EnableAutoAck - uint8_t McuNRF24L01_EnableAutoAck(uint8_t pipes); ** SetStaticPipePayload - uint8_t McuNRF24L01_SetStaticPipePayload(uint8_t pipe, uint8_t payloadBytes); ** EnableDynamicPayloadLength - uint8_t McuNRF24L01_EnableDynamicPayloadLength(uint8_t pipeMask); ** WriteFeature - uint8_t McuNRF24L01_WriteFeature(uint8_t featureMask); ** ReadFeature - uint8_t McuNRF24L01_ReadFeature(uint8_t *featureMask); ** ReadNofRxPayload - uint8_t McuNRF24L01_ReadNofRxPayload(uint8_t *nof); ** ReadObserveTxRegister - uint8_t McuNRF24L01_ReadObserveTxRegister(uint8_t *nofLoss, uint8_t *nofRetransmitted); ** ReadReceivedPowerDetector - uint8_t McuNRF24L01_ReadReceivedPowerDetector(uint8_t *rpd); ** SetChannel - uint8_t McuNRF24L01_SetChannel(uint8_t channel); ** GetChannel - uint8_t McuNRF24L01_GetChannel(uint8_t *channel); ** ConstantCarrierWave - uint8_t McuNRF24L01_ConstantCarrierWave(bool turnOn); ** SetOutputPower - uint8_t McuNRF24L01_SetOutputPower(int8_t power); ** GetOutputPower - uint8_t McuNRF24L01_GetOutputPower(int8_t *power); ** SetDataRate - uint8_t McuNRF24L01_SetDataRate(uint16_t rate); ** GetDataRate - uint8_t McuNRF24L01_GetDataRate(uint16_t *rate); ** SetAddressWidth - uint8_t McuNRF24L01_SetAddressWidth(uint8_t width); ** GetAddressWidth - uint8_t McuNRF24L01_GetAddressWidth(uint8_t *pAddrWidth); ** SetTxAddress - uint8_t McuNRF24L01_SetTxAddress(uint8_t *address, uint8_t nofAddressBytes); ** GetTxAddress - uint8_t McuNRF24L01_GetTxAddress(uint8_t *address, uint8_t nofAddressBytes); ** SetRxAddress - uint8_t McuNRF24L01_SetRxAddress(uint8_t pipe, uint8_t *address, uint8_t... ** GetRxAddress - uint8_t McuNRF24L01_GetRxAddress(uint8_t pipe, uint8_t *address, uint8_t... ** GetFifoStatus - uint8_t McuNRF24L01_GetFifoStatus(uint8_t *status); ** PollInterrupt - bool McuNRF24L01_PollInterrupt(void); ** Deinit - void McuNRF24L01_Deinit(void); ** Init - void McuNRF24L01_Init(void); ** ** * Copyright (c) 2013-2018, Erich Styger ** * Web: https://mcuoneclipse.com ** * SourceForge: https://sourceforge.net/projects/mcuoneclipse ** * Git: https://github.com/ErichStyger/McuOnEclipse_PEx ** * All rights reserved. ** * ** * Redistribution and use in source and binary forms, with or without modification, ** * are permitted provided that the following conditions are met: ** * ** * - Redistributions of source code must retain the above copyright notice, this list ** * of conditions and the following disclaimer. ** * ** * - Redistributions in binary form must reproduce the above copyright notice, this ** * list of conditions and the following disclaimer in the documentation and/or ** * other materials provided with the distribution. ** * ** * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ** * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ** * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ** * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ** * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ** * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ** * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ** * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ###################################################################*/ /*! ** @file McuNRF24L01.h ** @version 01.00 ** @brief ** This component implements a driver for the Nordic Semiconductor nRF24L01 2.4 GHz transceiver. */ /*! ** @addtogroup McuNRF24L01_module module documentation ** @{ */ #ifndef __McuNRF24L01_H #define __McuNRF24L01_H /* MODULE McuNRF24L01. */ #include "McuLib.h" /* SDK and API used */ #include "McuNRF24L01config.h" /* configuration */ /* Include inherited beans */ #include "McuWait.h" #include "McuGPIO.h" #include "McuSPI.h" /* event handler prototypes */ void McuNRF24L01_OnInterrupt(void); void McuNRF24L01_OnActivate(void); void McuNRF24L01_OnDeactivate(void); /* if having multiple users on the SPI bus, enable bus sharing/switching */ #ifndef McuNRF24L01_SWITCH_BUS #define McuNRF24L01_SWITCH_BUS (0) #endif //#define McuNRF24L01_BAUD_RATE_MODE 2 /* Index of baud rate mode */ /* Memory Map - register address defines */ #define McuNRF24L01_CONFIG 0x00 /* CONFIG register */ #define McuNRF24L01_EN_AA 0x01 /* EN_AA register: configures auto-acknowledge per pipe */ /* EN_AA register bitwise definitions */ /* masks for auto acknowledge per pipe */ #define McuNRF24L01_EN_AA_RESERVED 0xC0 #define McuNRF24L01_EN_AA_ENAA_ALL 0x3F #define McuNRF24L01_EN_AA_ENAA_P5 0x20 #define McuNRF24L01_EN_AA_ENAA_P4 0x10 #define McuNRF24L01_EN_AA_ENAA_P3 0x08 #define McuNRF24L01_EN_AA_ENAA_P2 0x04 #define McuNRF24L01_EN_AA_ENAA_P1 0x02 #define McuNRF24L01_EN_AA_ENAA_P0 0x01 #define McuNRF24L01_EN_AA_ENAA_NONE 0x00 #define McuNRF24L01_EN_RXADDR 0x02 /* EN_RXADDR register */ #define McuNRF24L01_SETUP_AW 0x03 /* SETUP_AW register */ #define McuNRF24L01_SETUP_RETR 0x04 #define McuNRF24L01_RF_CH 0x05 /* Channel register, valid channels from 0x0 to 0x7F */ /* RF_CH register bitwise definitions */ #define McuNRF24L01_RF_CH_RESERVED 0x80 #define McuNRF24L01_RF_SETUP 0x06 /* RF_SETUP register */ /* RF_SETUP register bits: */ #define McuNRF24L01_RF_SETUP_CONT_WAVE (1<<7) /* Enables continuous carrier transmit when high. */ #define McuNRF24L01_RF_SETUP_PLL_LOCK (1<<4) /* Force PLL lock signal. Only used in test */ #define McuNRF24L01_RF_SETUP_RF_DR_MASK (McuNRF24L01_RF_SETUP_RF_DR_LOW|McuNRF24L01_RF_SETUP_RF_DR_HIGH) /* xx: mask bits */ #define McuNRF24L01_RF_SETUP_RF_DR_LOW (1<<5) /* Set RF Data Rate to 250kbps. See RF_DR_HIGH for encoding. */ #define McuNRF24L01_RF_SETUP_RF_DR_HIGH (1<<3) /* Select between the high speed data rates. */ #define McuNRF24L01_RF_SETUP_RF_DR_1000 (0) /* RF_DR_LOW|RF_DR_HIGH: 00 */ #define McuNRF24L01_RF_SETUP_RF_DR_2000 (McuNRF24L01_RF_SETUP_RF_DR_HIGH) /* RF_DR_LOW|RF_DR_HIGH: 01 */ #define McuNRF24L01_RF_SETUP_RF_DR_250 (McuNRF24L01_RF_SETUP_RF_DR_LOW) /* RF_DR_LOW|RF_DR_HIGH: 10 */ #define McuNRF24L01_RF_SETUP_RF_PWR_MASK (3<<1) /* xx: mask bits */ #define McuNRF24L01_RF_SETUP_RF_PWR_18 (0<<1) /* 00: -18dBm */ #define McuNRF24L01_RF_SETUP_RF_PWR_12 (1<<1) /* 01: -12dBm */ #define McuNRF24L01_RF_SETUP_RF_PWR_10 (2<<1) /* 10: -10dBm */ #define McuNRF24L01_RF_SETUP_RF_PWR_0 (3<<1) /* 11: 0dBm, default */ #define McuNRF24L01_STATUS 0x07 /* STATUS register bits */ #define McuNRF24L01_STATUS_RESERVED 0x80 /* bit 1xxx xxxx: This bit is reserved */ #define McuNRF24L01_STATUS_RX_DR 0x40 /* bit x1xx xxxx: Data ready RX FIFO interrupt. Asserted when new data arrives RX FIFO */ #define McuNRF24L01_STATUS_TX_DS 0x20 /* bit xx1x xxxx: Data sent TX FIFO interrupt. Asserted when packet transmitted on TX. */ #define McuNRF24L01_STATUS_MAX_RT 0x10 /* bit xxx1 xxxx: maximum number of TX retransmit interrupts */ #define McuNRF24L01_STATUS_RX_P_NO 0x0E #define McuNRF24L01_STATUS_RX_P_NO_RX_FIFO_EMPTY 0x0E #define McuNRF24L01_STATUS_RX_P_NO_UNUSED 0x0C #define McuNRF24L01_STATUS_RX_P_NO_5 0x0A #define McuNRF24L01_STATUS_RX_P_NO_4 0x08 #define McuNRF24L01_STATUS_RX_P_NO_3 0x06 #define McuNRF24L01_STATUS_RX_P_NO_2 0x04 #define McuNRF24L01_STATUS_RX_P_NO_1 0x02 #define McuNRF24L01_STATUS_RX_P_NO_0 0x00 /* bit xxxx 111x: pipe number for payload */ #define McuNRF24L01_STATUS_TX_FULL 0x01 /* bit xxxx xxx1: if bit set, then TX FIFO is full */ #define McuNRF24L01_OBSERVE_TX 0x08 #define McuNRF24L01_RPD 0x09 /* Received Power Detector */ #define McuNRF24L01_RX_ADDR_P0 0x0A #define McuNRF24L01_RX_ADDR_P1 0x0B #define McuNRF24L01_RX_ADDR_P2 0x0C #define McuNRF24L01_RX_ADDR_P3 0x0D #define McuNRF24L01_RX_ADDR_P4 0x0E #define McuNRF24L01_RX_ADDR_P5 0x0F #define McuNRF24L01_TX_ADDR 0x10 #define McuNRF24L01_RX_PW_P0 0x11 /* register to set static RX payload on pipe 0, 0 to 32 bytes */ #define McuNRF24L01_RX_PW_P1 0x12 /* register to set static RX payload on pipe 1, 0 to 32 bytes */ #define McuNRF24L01_RX_PW_P2 0x13 /* register to set static RX payload on pipe 2, 0 to 32 bytes */ #define McuNRF24L01_RX_PW_P3 0x14 /* register to set static RX payload on pipe 3, 0 to 32 bytes */ #define McuNRF24L01_RX_PW_P4 0x15 /* register to set static RX payload on pipe 4, 0 to 32 bytes */ #define McuNRF24L01_RX_PW_P5 0x16 /* register to set static RX payload on pipe 5, 0 to 32 bytes */ #define McuNRF24L01_FIFO_STATUS 0x17 /* FIFO status register */ /* FIFO_STATUS register bits */ #define McuNRF24L01_FIFO_STATUS_RESERVED (0x8C) /* reserved bits */ #define McuNRF24L01_FIFO_STATUS_TX_REUSE (1<<6) #define McuNRF24L01_FIFO_STATUS_TX_FULL (1<<5) #define McuNRF24L01_FIFO_STATUS_TX_EMPTY (1<<4) #define McuNRF24L01_FIFO_STATUS_RX_FULL (1<<1) #define McuNRF24L01_FIFO_STATUS_RX_EMPTY (1<<0) #define McuNRF24L01_DYNPD 0x1C /* enable dynamic payload length */ /* DYNPD register bits: */ #define McuNRF24L01_DYNPD_DPL_ALL (0x3F) /* enable DPL for all pipes */ #define McuNRF24L01_DYNPD_DPL_P0 (1<<0) /* enable DPL for pipe 0 */ #define McuNRF24L01_DYNPD_DPL_P1 (1<<1) /* enable DPL for pipe 1 */ #define McuNRF24L01_DYNPD_DPL_P2 (1<<2) /* enable DPL for pipe 2 */ #define McuNRF24L01_DYNPD_DPL_P3 (1<<3) /* enable DPL for pipe 3 */ #define McuNRF24L01_DYNPD_DPL_P4 (1<<4) /* enable DPL for pipe 4 */ #define McuNRF24L01_DYNPD_DPL_P5 (1<<5) /* enable DPL for pipe 5 */ #define McuNRF24L01_FEATURE 0x1D /* feature register */ /* FEATURE register bits: */ #define McuNRF24L01_FEATURE_EN_DPL (1<<2) /* enables dynamic payload length */ #define McuNRF24L01_FEATURE_EN_ACK_PAY (1<<1) /* enables payload with ACK */ #define McuNRF24L01_FEATURE_EN_DYN_PAY (1<<0) /* enables the W_TX_PAYLOAD_NOACK command */ /* Bit Mnemonics */ /* CONFIG Register Bits */ #define McuNRF24L01_MASK_RX_DR (1<<6) /* Mask interrupt caused by RX_DR: 1: interrupt masked. 0: interrupt enabled */ #define McuNRF24L01_MASK_TX_DS (1<<5) /* Mask interrupt caused by TX_DS: 1: interrupt masked. 0: interrupt enabled */ #define McuNRF24L01_MASK_MAX_RT (1<<4) /* Mask interrupt caused by MAX_RT. 1: interrupt not reflected on IRQ pin. 0: reflect MAX_RT as active low interrupt on IRQ pin */ #define McuNRF24L01_EN_CRC (1<<3) /* Enable CRC. Forced high if on of the bits in EN_AA is high */ #define McuNRF24L01_CRCO (1<<2) /* CRC encoding scheme, 0: 1 byte, 1: 2 bytes */ #define McuNRF24L01_PWR_UP (1<<1) /* 1: Power up, 0: Power down */ #define McuNRF24L01_PRIM_RX (1<<0) /* 1: PRX, 0: PTX */ #define McuNRF24L01_PRIM_TX (0) /* 0: PTX */ #define McuNRF24L01_ERX_P5 5 #define McuNRF24L01_ERX_P4 4 #define McuNRF24L01_ERX_P3 3 #define McuNRF24L01_ERX_P2 2 #define McuNRF24L01_ERX_P1 1 #define McuNRF24L01_ERX_P0 0 #define McuNRF24L01_AW 0 #define McuNRF24L01_ARD 4 #define McuNRF24L01_ARC 0 #define McuNRF24L01_PLL_LOCK 4 #define McuNRF24L01_RF_DR_HIGH 3 #define McuNRF24L01_RF_DR_LOW 5 #define McuNRF24L01_RF_PWR 1 #define McuNRF24L01_LNA_HCURR 0 #define McuNRF24L01_RX_DR 6 #define McuNRF24L01_TX_DS 5 #define McuNRF24L01_MAX_RT 4 #define McuNRF24L01_RX_P_NO 1 #define McuNRF24L01_TX_FULL 0 #define McuNRF24L01_PLOS_CNT 4 #define McuNRF24L01_ARC_CNT 0 #define McuNRF24L01_TX_REUSE 6 #define McuNRF24L01_FIFO_FULL 5 #define McuNRF24L01_TX_EMPTY 4 #define McuNRF24L01_RX_FULL 1 #define McuNRF24L01_RX_EMPTY 0 /* Command Name Mnemonics (Instructions) */ #define McuNRF24L01_R_REGISTER 0x00 /* read register command, the address is encoded into the command (000A AAAA) */ #define McuNRF24L01_W_REGISTER 0x20 /* write register command, the address is encoded into the command (001A AAAA) */ #define McuNRF24L01_REGISTER_MASK 0x1F /* mask used for R_REGISTER and W_REGISTER commands */ #define McuNRF24L01_R_RX_PAYLOAD 0x61 /* read RX payload command */ #define McuNRF24L01_W_TX_PAYLOAD 0xA0 /* write TX payload command */ #define McuNRF24L01_FLUSH_TX 0xE1 /* flush TX FIFO command */ #define McuNRF24L01_FLUSH_RX 0xE2 /* flush RX FIFO command */ #define McuNRF24L01_REUSE_TX_PL 0xE3 /* reuse last transmitted payload command */ #define McuNRF24L01_R_RX_PL_WID 0x60 /* read RX payload width for the top R_RX_PAYLOAD in the RX FIFO */ #define McuNRF24L01_W_ACK_PAYLOAD 0xA8 /* used in RX mode. Write payload to be transmitted with ACK packet to pipe (1010 1PPP) */ #define McuNRF24L01_W_TX_PAYLOAD_NO_ACK 0xB0 /* used in TX mode. Disable AUTOACK on this specific packet */ #define McuNRF24L01_NOP 0xFF /* no operation command, used for reading STATUS register */ #define McuNRF24L01_CONFIG_DEFAULT_VAL 0x08 #define McuNRF24L01_EN_AA_DEFAULT_VAL 0x3F #define McuNRF24L01_EN_RXADDR_DEFAULT_VAL 0x03 #define McuNRF24L01_SETUP_AW_DEFAULT_VAL 0x03 #define McuNRF24L01_SETUP_RETR_DEFAULT_VAL 0x03 #define McuNRF24L01_RF_CH_DEFAULT_VAL 0x02 #define McuNRF24L01_RF_SETUP_DEFAULT_VAL 0x0F #define McuNRF24L01_STATUS_DEFAULT_VAL 0x0E #define McuNRF24L01_OBSERVE_TX_DEFAULT_VAL 0x00 #define McuNRF24L01_CD_DEFAULT_VAL 0x00 #define McuNRF24L01_RX_ADDR_P0_B0_DEFAULT_VAL 0xE7 #define McuNRF24L01_RX_ADDR_P0_B1_DEFAULT_VAL 0xE7 #define McuNRF24L01_RX_ADDR_P0_B2_DEFAULT_VAL 0xE7 #define McuNRF24L01_RX_ADDR_P0_B3_DEFAULT_VAL 0xE7 #define McuNRF24L01_RX_ADDR_P0_B4_DEFAULT_VAL 0xE7 #define McuNRF24L01_RX_ADDR_P1_B0_DEFAULT_VAL 0xC2 #define McuNRF24L01_RX_ADDR_P1_B1_DEFAULT_VAL 0xC2 #define McuNRF24L01_RX_ADDR_P1_B2_DEFAULT_VAL 0xC2 #define McuNRF24L01_RX_ADDR_P1_B3_DEFAULT_VAL 0xC2 #define McuNRF24L01_RX_ADDR_P1_B4_DEFAULT_VAL 0xC2 #define McuNRF24L01_RX_ADDR_P2_DEFAULT_VAL 0xC3 #define McuNRF24L01_RX_ADDR_P3_DEFAULT_VAL 0xC4 #define McuNRF24L01_RX_ADDR_P4_DEFAULT_VAL 0xC5 #define McuNRF24L01_RX_ADDR_P5_DEFAULT_VAL 0xC6 #define McuNRF24L01_TX_ADDR_B0_DEFAULT_VAL 0xE7 #define McuNRF24L01_TX_ADDR_B1_DEFAULT_VAL 0xE7 #define McuNRF24L01_TX_ADDR_B2_DEFAULT_VAL 0xE7 #define McuNRF24L01_TX_ADDR_B3_DEFAULT_VAL 0xE7 #define McuNRF24L01_TX_ADDR_B4_DEFAULT_VAL 0xE7 #define McuNRF24L01_RX_PW_P0_DEFAULT_VAL 0x00 #define McuNRF24L01_RX_PW_P1_DEFAULT_VAL 0x00 #define McuNRF24L01_RX_PW_P2_DEFAULT_VAL 0x00 #define McuNRF24L01_RX_PW_P3_DEFAULT_VAL 0x00 #define McuNRF24L01_RX_PW_P4_DEFAULT_VAL 0x00 #define McuNRF24L01_RX_PW_P5_DEFAULT_VAL 0x00 #define McuNRF24L01_FIFO_STATUS_DEFAULT_VAL 0x11 /* CONFIG register bitwise definitions */ #define McuNRF24L01_CONFIG_RESERVED 0x80 #define McuNRF24L01_CONFIG_MASK_RX_DR 0x40 #define McuNRF24L01_CONFIG_MASK_TX_DS 0x20 #define McuNRF24L01_CONFIG_MASK_MAX_RT 0x10 #define McuNRF24L01_CONFIG_EN_CRC 0x08 #define McuNRF24L01_CONFIG_CRCO 0x04 #define McuNRF24L01_CONFIG_PWR_UP 0x02 #define McuNRF24L01_CONFIG_PRIM_RX 0x01 /* EN_RXADDR register bitwise definitions */ #define McuNRF24L01_EN_RXADDR_RESERVED 0xC0 #define McuNRF24L01_EN_RXADDR_ERX_ALL 0x3F #define McuNRF24L01_EN_RXADDR_ERX_P5 0x20 #define McuNRF24L01_EN_RXADDR_ERX_P4 0x10 #define McuNRF24L01_EN_RXADDR_ERX_P3 0x08 #define McuNRF24L01_EN_RXADDR_ERX_P2 0x04 #define McuNRF24L01_EN_RXADDR_ERX_P1 0x02 #define McuNRF24L01_EN_RXADDR_ERX_P0 0x01 #define McuNRF24L01_EN_RXADDR_ERX_NONE 0x00 /* SETUP_AW register bitwise definitions */ #define McuNRF24L01_SETUP_AW_RESERVED 0xFC #define McuNRF24L01_SETUP_AW 0x03 #define McuNRF24L01_SETUP_AW_5BYTES 0x03 #define McuNRF24L01_SETUP_AW_4BYTES 0x02 #define McuNRF24L01_SETUP_AW_3BYTES 0x01 #define McuNRF24L01_SETUP_AW_ILLEGAL 0x00 /* SETUP_RETR register bitwise definitions */ #define McuNRF24L01_SETUP_RETR_ARD 0xF0 #define McuNRF24L01_SETUP_RETR_ARD_4000 0xF0 /* 4400 us retry delay */ #define McuNRF24L01_SETUP_RETR_ARD_3750 0xE0 /* 3750 us retry delay */ #define McuNRF24L01_SETUP_RETR_ARD_3500 0xD0 /* 3500 us retry delay */ #define McuNRF24L01_SETUP_RETR_ARD_3250 0xC0 /* 3250 us retry delay */ #define McuNRF24L01_SETUP_RETR_ARD_3000 0xB0 /* 3000 us retry delay */ #define McuNRF24L01_SETUP_RETR_ARD_2750 0xA0 /* 2750 us retry delay */ #define McuNRF24L01_SETUP_RETR_ARD_2500 0x90 /* 2500 us retry delay */ #define McuNRF24L01_SETUP_RETR_ARD_2250 0x80 /* 2250 us retry delay */ #define McuNRF24L01_SETUP_RETR_ARD_2000 0x70 /* 2000 us retry delay */ #define McuNRF24L01_SETUP_RETR_ARD_1750 0x60 /* 1750 us retry delay */ #define McuNRF24L01_SETUP_RETR_ARD_1500 0x50 /* 1500 us retry delay */ #define McuNRF24L01_SETUP_RETR_ARD_1250 0x40 /* 1250 us retry delay */ #define McuNRF24L01_SETUP_RETR_ARD_1000 0x30 /* 1000 us retry delay */ #define McuNRF24L01_SETUP_RETR_ARD_750 0x20 /* 750 us retry delay */ #define McuNRF24L01_SETUP_RETR_ARD_500 0x10 /* 500 us retry delay */ #define McuNRF24L01_SETUP_RETR_ARD_250 0x00 /* 250 us retry delay */ #define McuNRF24L01_SETUP_RETR_ARC 0x0F #define McuNRF24L01_SETUP_RETR_ARC_15 0x0F /* 15 retry count */ #define McuNRF24L01_SETUP_RETR_ARC_14 0x0E /* 14 retry count */ #define McuNRF24L01_SETUP_RETR_ARC_13 0x0D /* 13 retry count */ #define McuNRF24L01_SETUP_RETR_ARC_12 0x0C /* 12 retry count */ #define McuNRF24L01_SETUP_RETR_ARC_11 0x0B /* 11 retry count */ #define McuNRF24L01_SETUP_RETR_ARC_10 0x0A /* 10 retry count */ #define McuNRF24L01_SETUP_RETR_ARC_9 0x09 /* 9 retry count */ #define McuNRF24L01_SETUP_RETR_ARC_8 0x08 /* 8 retry count */ #define McuNRF24L01_SETUP_RETR_ARC_7 0x07 /* 7 retry count */ #define McuNRF24L01_SETUP_RETR_ARC_6 0x06 /* 6 retry count */ #define McuNRF24L01_SETUP_RETR_ARC_5 0x05 /* 5 retry count */ #define McuNRF24L01_SETUP_RETR_ARC_4 0x04 /* 4 retry count */ #define McuNRF24L01_SETUP_RETR_ARC_3 0x03 /* 3 retry count */ #define McuNRF24L01_SETUP_RETR_ARC_2 0x02 /* 2 retry count */ #define McuNRF24L01_SETUP_RETR_ARC_1 0x01 /* 1 retry count */ #define McuNRF24L01_SETUP_RETR_ARC_0 0x00 /* 0 retry count, retry disabled */ /* OBSERVE_TX register bitwise definitions */ #define McuNRF24L01_OBSERVE_TX_PLOS_CNT 0xF0 #define McuNRF24L01_OBSERVE_TX_ARC_CNT 0x0F /* CD register bitwise definitions for nRF24L01 */ //#define McuNRF24L01_CD_RESERVED 0xFE //#define McuNRF24L01_CD_CD 0x01 /* RPD register bitwise definitions for nRF24L01+ */ #define McuNRF24L01_RPD_RESERVED 0xFE #define McuNRF24L01_RPD_RPD 0x01 /* RX_PW_P0 register bitwise definitions */ #define McuNRF24L01_RX_PW_P0_RESERVED 0xC0 /* RX_PW_P0 register bitwise definitions */ #define McuNRF24L01_RX_PW_P0_RESERVED 0xC0 /* RX_PW_P1 register bitwise definitions */ #define McuNRF24L01_RX_PW_P1_RESERVED 0xC0 /* RX_PW_P2 register bitwise definitions */ #define McuNRF24L01_RX_PW_P2_RESERVED 0xC0 /* RX_PW_P3 register bitwise definitions */ #define McuNRF24L01_RX_PW_P3_RESERVED 0xC0 /* RX_PW_P4 register bitwise definitions */ #define McuNRF24L01_RX_PW_P4_RESERVED 0xC0 /* RX_PW_P5 register bitwise definitions */ #define McuNRF24L01_RX_PW_P5_RESERVED 0xC0 void McuNRF24L01_Init(void); /* ** =================================================================== ** Method : Init (component nRF24L01) ** ** Description : ** Initialization method ** Parameters : None ** Returns : Nothing ** =================================================================== */ void McuNRF24L01_WriteRegister(uint8_t reg, uint8_t val); /* ** =================================================================== ** Method : WriteRegister (component nRF24L01) ** ** Description : ** Write a register value to the transceiver ** Parameters : ** NAME - DESCRIPTION ** reg - Register address to write ** val - Value to write ** Returns : Nothing ** =================================================================== */ uint8_t McuNRF24L01_ReadRegister(uint8_t reg); /* ** =================================================================== ** Method : ReadRegister (component nRF24L01) ** ** Description : ** Reads a register from the transceiver ** Parameters : ** NAME - DESCRIPTION ** reg - Register address ** Returns : ** --- - value read ** =================================================================== */ void McuNRF24L01_ReadRegisterData(uint8_t reg, uint8_t *buf, uint8_t bufSize); /* ** =================================================================== ** Method : ReadRegisterData (component nRF24L01) ** ** Description : ** Read multiple bytes from the bus. ** Parameters : ** NAME - DESCRIPTION ** reg - Register address ** * buf - Pointer to buffer where to store the values ** bufSize - Size of the destination buffer ** Returns : Nothing ** =================================================================== */ void McuNRF24L01_WriteRegisterData(uint8_t reg, uint8_t *buf, uint8_t bufSize); /* ** =================================================================== ** Method : WriteRegisterData (component nRF24L01) ** ** Description : ** Write multiple bytes to the bus. ** Parameters : ** NAME - DESCRIPTION ** reg - Register address ** * buf - Pointer to data buffer to write ** bufSize - Size of buffer in bytes ** Returns : Nothing ** =================================================================== */ uint8_t McuNRF24L01_WriteRead(uint8_t val); /* ** =================================================================== ** Method : WriteRead (component nRF24L01) ** ** Description : ** Writes a byte and reads back one byte ** Parameters : ** NAME - DESCRIPTION ** val - Value to write to the bus ** Returns : ** --- - Value read from the bus ** =================================================================== */ void McuNRF24L01_Write(uint8_t val); /* ** =================================================================== ** Method : Write (component nRF24L01) ** ** Description : ** Writes a byte to the bus, without returning the byte read. ** Parameters : ** NAME - DESCRIPTION ** val - Value to write ** Returns : Nothing ** =================================================================== */ uint8_t McuNRF24L01_GetStatus(void); /* ** =================================================================== ** Method : GetStatus (component nRF24L01) ** ** Description : ** Returns the device status byte ** Parameters : None ** Returns : ** --- - status byte ** =================================================================== */ void McuNRF24L01_ResetStatusIRQ(uint8_t flags); /* ** =================================================================== ** Method : ResetStatusIRQ (component nRF24L01) ** ** Description : ** Reset the given flags mask of status bits ** Parameters : ** NAME - DESCRIPTION ** flags - Flags, one or more of ** RF24_STATUS_RX_DR, RF24_STATUS_TX_DS, ** RF24_STATUS_MAX_RT ** Returns : Nothing ** =================================================================== */ void McuNRF24L01_TxPayload(uint8_t *payload, uint8_t payloadSize); /* ** =================================================================== ** Method : TxPayload (component nRF24L01) ** ** Description : ** Send the payload to the Tx FIFO and send it ** Parameters : ** NAME - DESCRIPTION ** * payload - Pointer to buffer with payload to ** send ** payloadSize - Size of payload buffer ** Returns : Nothing ** =================================================================== */ void McuNRF24L01_TxPayloadNoAck(uint8_t *payload, uint8_t payloadSize); /* ** =================================================================== ** Method : McuNRF24L01_TxPayloadNoAck (component nRF24L01) ** ** Description : ** Send the payload to the Tx FIFO and send it, ** but does not request an acknowledge. ** Parameters : ** NAME - DESCRIPTION ** * payload - Pointer to buffer with payload to ** send ** payloadSize - Size of payload buffer ** Returns : Nothing ** =================================================================== */ void McuNRF24L01_RxPayload(uint8_t *payload, uint8_t payloadSize); /* ** =================================================================== ** Method : RxPayload (component nRF24L01) ** ** Description : ** Receive the Rx payload from the FIFO and stores it in a ** buffer. ** Parameters : ** NAME - DESCRIPTION ** * payload - Pointer to the payload buffer ** payloadSize - Size of the payload buffer ** Returns : Nothing ** =================================================================== */ void McuNRF24L01_StopRxTx(void); /* ** =================================================================== ** Method : StopRxTx (component nRF24L01) ** ** Description : ** Stops sending or receiving (sets CE pin to LOW). ** Parameters : None ** Returns : Nothing ** =================================================================== */ void McuNRF24L01_StartRxTx(void); /* ** =================================================================== ** Method : StartRxTx (component nRF24L01) ** ** Description : ** Starts sending or receiving (sets CE pin to HIGH). ** Parameters : None ** Returns : Nothing ** =================================================================== */ uint8_t McuNRF24L01_SetChannel(uint8_t channel); /* ** =================================================================== ** Method : SetChannel (component nRF24L01) ** ** Description : ** Sets the radio channel (RF_CH register). ** Parameters : ** NAME - DESCRIPTION ** channel - Channel number, valid channel ** numbers are 0x0 to 0x7F ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_EnableAutoAck(uint8_t pipes); /* ** =================================================================== ** Method : EnableAutoAck (component nRF24L01) ** ** Description : ** Enables Auto-Acknowledgment for the given pipe(s) (RF_EN_AA ** register). ** Parameters : ** NAME - DESCRIPTION ** pipes - mask of pipes to be enabled (ENAA_P0 ** to ENAA_P5) ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_ReadNofRxPayload(uint8_t *nof); /* ** =================================================================== ** Method : ReadNofRxPayload (component nRF24L01) ** ** Description : ** Returns the number of received payload bytes for the top ** R_RX_PAYLOAD in the RX FIFO ** Parameters : ** NAME - DESCRIPTION ** * nof - Pointer to where to store the number of ** bytes. A return value of 0 means that the ** pipe is not used, and if the value is >32 ** then the data is not valid. ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_SetStaticPipePayload(uint8_t pipe, uint8_t payloadBytes); /* ** =================================================================== ** Method : SetStaticPipePayload (component nRF24L01) ** ** Description : ** Specifies the static payload for a pipe. ** Parameters : ** NAME - DESCRIPTION ** pipe - Pipe number, 0 to 5 ** payloadBytes - Number of payload pipes ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_EnableDynamicPayloadLength(uint8_t pipeMask); /* ** =================================================================== ** Method : EnableDynamicPayloadLength (component nRF24L01) ** ** Description : ** Enables dynamic payload length for the give pipes ** Parameters : ** NAME - DESCRIPTION ** pipeMask - Mask of pipes, with 1 for pipe 0, ** 2 for pipe 1, 4 for pipe 2 and so on. ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_WriteFeature(uint8_t featureMask); /* ** =================================================================== ** Method : WriteFeature (component nRF24L01) ** ** Description : ** Writes the FEATURE register ** Parameters : ** NAME - DESCRIPTION ** featureMask - Mask of FEATURE, e.g. ** FEATURE_EN_DPL ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_ReadFeature(uint8_t *featureMask); /* ** =================================================================== ** Method : ReadFeature (component nRF24L01) ** ** Description : ** Reads the FEATURE register ** Parameters : ** NAME - DESCRIPTION ** * featureMask - Pointer to value of ** FEATURE register ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_ReadObserveTxRegister(uint8_t *nofLoss, uint8_t *nofRetransmitted); /* ** =================================================================== ** Method : ReadObserveTxRegister (component nRF24L01) ** ** Description : ** Reads the OBSERVE_TX register to return the count of loss ** packets and count of retransmitted packets. ** Parameters : ** NAME - DESCRIPTION ** * nofLoss - Pointer to number of lost packets ** * nofRetransmitted - Pointer to ** number of retransmitted packets ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_ReadReceivedPowerDetector(uint8_t *rpd); /* ** =================================================================== ** Method : ReadReceivedPowerDetector (component nRF24L01) ** ** Description : ** Reads the RPD (Received Power Detector) register. ** Parameters : ** NAME - DESCRIPTION ** * rpd - Pointer to RPD bit. Bit is one for ** received power levels above -64 dBm, zero ** for less than -64 dBm. ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_GetChannel(uint8_t *channel); /* ** =================================================================== ** Method : GetChannel (component nRF24L01) ** ** Description : ** Returns the radio channel (RF_CH register). ** Parameters : ** NAME - DESCRIPTION ** * channel - Pointer to where to store the ** channel number. ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_ConstantCarrierWave(bool turnOn); /* ** =================================================================== ** Method : ConstantCarrierWave (component nRF24L01) ** ** Description : ** Put the transceiver into contant carrier wave output for ** testing. The output power of a radio is a critical factor ** for achieving wanted range. Output power is also the first ** test ** Parameters : ** NAME - DESCRIPTION ** turnOn - Set to true to start constant ** carrier wave, false to stop it. ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_SetOutputPower(int8_t power); /* ** =================================================================== ** Method : SetOutputPower (component nRF24L01) ** ** Description : ** Sets the output power ** Parameters : ** NAME - DESCRIPTION ** power - Ouput power in dBm, either 0, -10, -12 ** or -18 ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_GetOutputPower(int8_t *power); /* ** =================================================================== ** Method : GetOutputPower (component nRF24L01) ** ** Description : ** Returns the current output power ** Parameters : ** NAME - DESCRIPTION ** * power - Pointer to where to store the value. ** Returns the output power in dBm ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_GetStatusClrIRQ(void); /* ** =================================================================== ** Method : GetStatusClrIRQ (component nRF24L01) ** ** Description : ** Returns the device status byte and clears any IRQ bits in ** the status register. ** Parameters : None ** Returns : ** --- - status byte ** =================================================================== */ bool McuNRF24L01_PollInterrupt(void); /* ** =================================================================== ** Method : PollInterrupt (component nRF24L01) ** ** Description : ** If there is no interrupt line available, this method polls ** the device to check if there is an interrupt. If ** Parameters : None ** Returns : Nothing ** =================================================================== */ void McuNRF24L01_Deinit(void); /* ** =================================================================== ** Method : Deinit (component nRF24L01) ** ** Description : ** Driver deinitialization ** Parameters : None ** Returns : Nothing ** =================================================================== */ uint8_t McuNRF24L01_SetDataRate(uint16_t rate); /* ** =================================================================== ** Method : SetDataRate (component nRF24L01) ** ** Description : ** Sets the data rate ** Parameters : ** NAME - DESCRIPTION ** rate - Data rate, either 250, 1000 or 2000 ** (kbps) ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_GetDataRate(uint16_t *rate); /* ** =================================================================== ** Method : GetDataRate (component nRF24L01) ** ** Description : ** Returns the current data rate ** Parameters : ** NAME - DESCRIPTION ** * rate - Pointer to where to store the value. ** Returns the data rate, either 250, 1000 or ** 2000 (kbps) ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_GetFifoStatus(uint8_t *status); /* ** =================================================================== ** Method : GetFifoStatus (component nRF24L01) ** ** Description : ** Returns the FIFO_STATUS register value ** Parameters : ** NAME - DESCRIPTION ** * status - Pointer to where to store the FIFO ** status value. ** Returns : ** --- - Error code ** =================================================================== */ void McuNRF24L01_ConfigureSPI(void); /* ** =================================================================== ** Method : ConfigureSPI (component nRF24L01) ** ** Description : ** Configures the SPI bus ** Parameters : None ** Returns : Nothing ** =================================================================== */ uint8_t McuNRF24L01_SetAddressWidth(uint8_t width); /* ** =================================================================== ** Method : SetAddressWidth (component nRF24L01) ** ** Description : ** Sets the address width using the SETUP_AW register ** Parameters : ** NAME - DESCRIPTION ** width - only 3, 4 or 5 is allowed ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_GetAddressWidth(uint8_t *pAddrWidth); /* ** =================================================================== ** Method : GetAddressWidth (component nRF24L01) ** ** Description : ** Returns the address width stored in the SETUP_AW register ** Parameters : ** NAME - DESCRIPTION ** * pAddrWidth - Pointer to where to store ** the value. ** Returns : ** --- - number of address bytes (3, 4 or 5) ** =================================================================== */ uint8_t McuNRF24L01_SetTxAddress(uint8_t *address, uint8_t nofAddressBytes); /* ** =================================================================== ** Method : SetTxAddress (component nRF24L01) ** ** Description : ** Sets the TX address using the RF_TX_ADDR register. ** Parameters : ** NAME - DESCRIPTION ** * address - Pointer to the buffer with the ** address bytes. ** nofAddressBytes - Number of address ** bytes and size of buffer, typically 5. ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_GetTxAddress(uint8_t *address, uint8_t nofAddressBytes); /* ** =================================================================== ** Method : GetTxAddress (component nRF24L01) ** ** Description : ** Returns the TX address using the RF_TX_ADDR register. ** Parameters : ** NAME - DESCRIPTION ** * address - Pointer to array where the return ** the address bytes. ** nofAddressBytes - Number of address ** bytes and size of buffer, typically 5. ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_SetRxAddress(uint8_t pipe, uint8_t *address, uint8_t nofAddressBytes); /* ** =================================================================== ** Method : SetRxAddress (component nRF24L01) ** ** Description : ** Set the TX address using the RF_RX_ADDR_Px register. ** Parameters : ** NAME - DESCRIPTION ** pipe - pipe number (0-5) ** * address - Pointer to array where the return ** the address bytes. ** nofAddressBytes - Number of address ** bytes and size of buffer, typically 5. ** Returns : ** --- - Error code ** =================================================================== */ uint8_t McuNRF24L01_GetRxAddress(uint8_t pipe, uint8_t *address, uint8_t nofAddressBytes); /* ** =================================================================== ** Method : GetRxAddress (component nRF24L01) ** ** Description : ** Returns the RX address using the RF_RX_ADDR_Px register. ** Parameters : ** NAME - DESCRIPTION ** pipe - pipe number (0-5) ** * address - Pointer to array where the return ** the address bytes. ** nofAddressBytes - Number of address ** bytes and size of buffer, typically 5. ** Returns : ** --- - Error code ** =================================================================== */ #include "McuShell.h" /*! * \brief Parses a command * \param cmd Command string to be parsed * \param handled Sets this variable to TRUE if command was handled * \param io I/O stream to be used for input/output * \return Error code, ERR_OK if everything was fine */ uint8_t McuNRF24L01_ParseCommand(const unsigned char *cmd, bool *handled, const McuShell_StdIOType *io); /* END McuNRF24L01. */ #endif /* ifndef __McuNRF24L01_H */ /*! ** @} */