doxygen: Added documentation to nrf24l01 module

Signed-off-by: Kiveisha Yevgeniy <yevgeniy.kiveisha@intel.com>
This commit is contained in:
Kiveisha Yevgeniy 2014-06-06 15:40:24 +00:00
parent 7d898e3274
commit 451d0390b6
4 changed files with 195 additions and 24 deletions

View File

@ -41,20 +41,23 @@ sig_handler(int signo)
} }
} }
//! [Interesting]
void nrf_handler () { void nrf_handler () {
std::cout << "devi1 :: " << *((uint32_t *)&(comm->m_rxBuffer[0])) << std::endl; std::cout << "devi1 :: " << *((uint32_t *)&(comm->m_rxBuffer[0])) << std::endl;
} }
//! [Interesting]
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
//! [Interesting]
comm = new upm::NRF24l01(7); comm = new upm::NRF24l01(7);
comm->nrfSetRXaddr ((uint8_t *) "devi1"); comm->nrfSetRXaddr ((uint8_t *) "devi1");
comm->nrfSetTXaddr ((uint8_t *) "devi2"); comm->nrfSetTXaddr ((uint8_t *) "devi2");
comm->nrfSetPayload (MAX_BUFFER); comm->nrfSetPayload (MAX_BUFFER);
comm->nrfConfigModule (); comm->nrfConfigModule ();
comm->dataRecievedHandler = nrf_handler; comm->dataRecievedHandler = nrf_handler;
signal(SIGINT, sig_handler); signal(SIGINT, sig_handler);
while (!running) { while (!running) {
@ -64,6 +67,6 @@ main(int argc, char **argv)
std::cout << "exiting application" << std::endl; std::cout << "exiting application" << std::endl;
delete comm; delete comm;
//! [Interesting]
return 0; return 0;
} }

View File

@ -47,6 +47,7 @@ void nrf_handler () {
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
//! [Interesting]
uint32_t dummyData = 0; uint32_t dummyData = 0;
comm = new upm::NRF24l01(7); comm = new upm::NRF24l01(7);
comm->nrfSetRXaddr ((uint8_t *) "devi2"); comm->nrfSetRXaddr ((uint8_t *) "devi2");
@ -54,7 +55,7 @@ main(int argc, char **argv)
comm->nrfSetPayload (MAX_BUFFER); comm->nrfSetPayload (MAX_BUFFER);
comm->nrfConfigModule (); comm->nrfConfigModule ();
comm->dataRecievedHandler = nrf_handler; comm->dataRecievedHandler = nrf_handler;
signal(SIGINT, sig_handler); signal(SIGINT, sig_handler);
while (!running) { while (!running) {
@ -68,6 +69,6 @@ main(int argc, char **argv)
std::cout << "exiting application" << std::endl; std::cout << "exiting application" << std::endl;
delete comm; delete comm;
//! [Interesting]
return 0; return 0;
} }

View File

@ -64,13 +64,13 @@ NRF24l01::nrfInitModule (uint8_t chip_select, uint8_t chip_enable) {
fprintf (stderr, "Are you sure that pin%d you requested is valid on your platform?", m_csn); fprintf (stderr, "Are you sure that pin%d you requested is valid on your platform?", m_csn);
exit (1); exit (1);
} }
m_cePinCtx = maa_gpio_init (m_ce); m_cePinCtx = maa_gpio_init (m_ce);
if (m_cePinCtx == NULL) { if (m_cePinCtx == NULL) {
fprintf (stderr, "Are you sure that pin%d you requested is valid on your platform?", m_ce); fprintf (stderr, "Are you sure that pin%d you requested is valid on your platform?", m_ce);
exit (1); exit (1);
} }
error = maa_gpio_dir (m_csnPinCtx, MAA_GPIO_OUT); error = maa_gpio_dir (m_csnPinCtx, MAA_GPIO_OUT);
if (error != MAA_SUCCESS) { if (error != MAA_SUCCESS) {
maa_result_print (error); maa_result_print (error);
@ -80,7 +80,7 @@ NRF24l01::nrfInitModule (uint8_t chip_select, uint8_t chip_enable) {
if (error != MAA_SUCCESS) { if (error != MAA_SUCCESS) {
maa_result_print (error); maa_result_print (error);
} }
nrfCELow (); nrfCELow ();
m_spi = maa_spi_init (0); m_spi = maa_spi_init (0);
} }
@ -95,7 +95,7 @@ NRF24l01::nrfConfigModule() {
nrfConfigRegister (RX_PW_P1, m_payload); nrfConfigRegister (RX_PW_P1, m_payload);
/* Set length of incoming payload for broadcast */ /* Set length of incoming payload for broadcast */
nrfConfigRegister (RX_PW_P2, m_payload); nrfConfigRegister (RX_PW_P2, m_payload);
/* Start receiver */ /* Start receiver */
nrfPowerUpRX (); nrfPowerUpRX ();
nrfFlushRX (); nrfFlushRX ();
@ -114,7 +114,7 @@ void
NRF24l01::nrfPowerUpRX() { NRF24l01::nrfPowerUpRX() {
m_ptx = 0; m_ptx = 0;
nrfCELow(); nrfCELow();
nrfConfigRegister(CONFIG, mirf_CONFIG | ( (1<<PWR_UP) | (1<<PRIM_RX) ) ); nrfConfigRegister(CONFIG, NRF_CONFIG | ( (1<<PWR_UP) | (1<<PRIM_RX) ) );
nrfCEHigh(); nrfCEHigh();
nrfConfigRegister(STATUS,(1 << TX_DS) | (1 << MAX_RT)); nrfConfigRegister(STATUS,(1 << TX_DS) | (1 << MAX_RT));
} }
@ -130,7 +130,7 @@ NRF24l01::nrfFlushRX() {
void void
NRF24l01::nrfSetRXaddr(uint8_t * addr) { NRF24l01::nrfSetRXaddr(uint8_t * addr) {
nrfCELow(); nrfCELow();
nrfWriteRegister(RX_ADDR_P1, addr, mirf_ADDR_LEN); nrfWriteRegister(RX_ADDR_P1, addr, ADDR_LEN);
nrfCEHigh(); nrfCEHigh();
} }
@ -139,15 +139,15 @@ void
NRF24l01::nrfSetTXaddr(uint8_t * addr) NRF24l01::nrfSetTXaddr(uint8_t * addr)
{ {
/* RX_ADDR_P0 must be set to the sending addr for auto ack to work. */ /* RX_ADDR_P0 must be set to the sending addr for auto ack to work. */
nrfWriteRegister (RX_ADDR_P0, addr, mirf_ADDR_LEN); nrfWriteRegister (RX_ADDR_P0, addr, ADDR_LEN);
nrfWriteRegister (TX_ADDR, addr, mirf_ADDR_LEN); nrfWriteRegister (TX_ADDR, addr, ADDR_LEN);
} }
/* The broadcast address should be 0xFFFFF */ /* The broadcast address should be 0xFFFFF */
void void
NRF24l01::nrfSetBroadcastAddr (uint8_t * addr) { NRF24l01::nrfSetBroadcastAddr (uint8_t * addr) {
nrfCELow (); nrfCELow ();
nrfWriteRegister (RX_ADDR_P2, addr, mirf_ADDR_LEN); nrfWriteRegister (RX_ADDR_P2, addr, ADDR_LEN);
nrfCEHigh (); nrfCEHigh ();
} }
@ -180,7 +180,7 @@ NRF24l01::nrfDataReady() {
if ( status & (1 << RX_DR) ) { if ( status & (1 << RX_DR) ) {
return 1; return 1;
} }
return !nrfRXFifoEmpty(); return !nrfRXFifoEmpty();
} }
@ -250,7 +250,7 @@ NRF24l01::nrfSend(uint8_t * value) {
nrfCSOn (); nrfCSOn ();
maa_spi_write (m_spi, FLUSH_TX); // Write cmd to flush tx fifo maa_spi_write (m_spi, FLUSH_TX); // Write cmd to flush tx fifo
nrfCSOff (); nrfCSOff ();
nrfCSOn (); nrfCSOn ();
maa_spi_write (m_spi, W_TX_PAYLOAD); // Write cmd to write payload maa_spi_write (m_spi, W_TX_PAYLOAD); // Write cmd to write payload
nrfTransmitSync(value, m_payload); // Write payload nrfTransmitSync(value, m_payload); // Write payload
@ -281,13 +281,13 @@ NRF24l01::nrfIsSending () {
void void
NRF24l01::nrfPowerUpTX () { NRF24l01::nrfPowerUpTX () {
m_ptx = 1; m_ptx = 1;
nrfConfigRegister (CONFIG, mirf_CONFIG | ( (1<<PWR_UP) | (0<<PRIM_RX) ) ); nrfConfigRegister (CONFIG, NRF_CONFIG | ( (1<<PWR_UP) | (0<<PRIM_RX) ) );
} }
void void
NRF24l01::nrfPowerDown () { NRF24l01::nrfPowerDown () {
nrfCELow (); nrfCELow ();
nrfConfigRegister (CONFIG, mirf_CONFIG); nrfConfigRegister (CONFIG, NRF_CONFIG);
} }
maa_result_t maa_result_t

View File

@ -106,8 +106,8 @@
#define NOP 0xFF #define NOP 0xFF
/* Nrf24l settings */ /* Nrf24l settings */
#define mirf_ADDR_LEN 5 #define ADDR_LEN 5
#define mirf_CONFIG ((1<<EN_CRC) | (0<<CRCO) ) #define NRF_CONFIG ((1<<EN_CRC) | (0<<CRCO) )
#define MAX_BUFFER 32 #define MAX_BUFFER 32
@ -118,50 +118,217 @@ namespace upm {
typedef void (* funcPtrVoidVoid) (); typedef void (* funcPtrVoidVoid) ();
/**
* @brief C++ API for NRF24l01 transceiver module
*
* This file defines the NRF24l01 C++ interface for libnrf24l01
*
* @snippet nrf_receiver.cxx Interesting
* @snippet nrf_transmitter.cxx Interesting
*/
class NRF24l01 { class NRF24l01 {
public: public:
/**
* Instanciates a NRF24l01 object
*
* @param cs chip select pin
*/
NRF24l01 (uint8_t cs); NRF24l01 (uint8_t cs);
/**
* NRF24l01 object destructor
*/
~NRF24l01 (); ~NRF24l01 ();
/**
* Return name of the component
*/
std::string name() std::string name()
{ {
return m_name; return m_name;
} }
/**
* Initialize needed Gpio pins and SPI interface
*
* @param chipSelect setting up the chip select pin
* @param chipEnable setting up the chip enable pin
*/
void nrfInitModule (uint8_t chipSelect, uint8_t chipEnable); void nrfInitModule (uint8_t chipSelect, uint8_t chipEnable);
/**
* Configure NRF24l01 chip
*/
void nrfConfigModule (); void nrfConfigModule ();
/**
* Send the buffer data
*
* @param *value pointer to the buffer
*/
void nrfSend (uint8_t *value); void nrfSend (uint8_t *value);
/**
* Send the data located in inner bufer, user must fill the
* m_txBuffer buffer
*/
void nrfSend (); void nrfSend ();
/**
* Set recieving address of the device
*
* @param addr 5 bytes addres
*/
void nrfSetRXaddr (uint8_t * addr); void nrfSetRXaddr (uint8_t * addr);
/**
* Set recipient address. nrfSend method will send the data buffer
* to this address
*
* @param addr 5 bytes addres
*/
void nrfSetTXaddr (uint8_t * addr); void nrfSetTXaddr (uint8_t * addr);
/**
* Set broadcasting address.
*
* @param addr 5 bytes addres
*/
void nrfSetBroadcastAddr (uint8_t * addr); void nrfSetBroadcastAddr (uint8_t * addr);
/**
* Set payload size.
*
* @param load size of the payload (MAX 32)
*/
void nrfSetPayload (uint8_t load); void nrfSetPayload (uint8_t load);
/**
* Check if data arrived
*/
bool nrfDataReady (); bool nrfDataReady ();
/**
* Check if chip in sending mode
*/
bool nrfIsSending (); bool nrfIsSending ();
/**
* Check if recieving stack is empty
*/
bool nrfRXFifoEmpty (); bool nrfRXFifoEmpty ();
/**
* Check if transmitting stack is empty
*/
bool nrfTXFifoEmpty (); bool nrfTXFifoEmpty ();
/**
* Sink all arrived data into the provided buffer
*
* @param load size of the payload (MAX 32)
*/
void nrfGetData (uint8_t * data); void nrfGetData (uint8_t * data);
/**
* Check the chip state
*/
uint8_t nrfGetStatus (); uint8_t nrfGetStatus ();
/**
* Transmit provided data to the chip
*
* @param *dataout pointer to the buffer with data
* @param len length of the buffer
*/
void nrfTransmitSync (uint8_t *dataout, uint8_t len); void nrfTransmitSync (uint8_t *dataout, uint8_t len);
/**
* Recieve data from the chip
*
* @param *dataout pointer to the buffer with data
* @param *datain pointer to the buffer where the arrived data
* will be sinked
* @param len length of the buffer
*/
void nrfTransferSync (uint8_t *dataout ,uint8_t *datain, uint8_t len); void nrfTransferSync (uint8_t *dataout ,uint8_t *datain, uint8_t len);
/**
* Write byte value into a register
*
* @param reg register address
* @param value the value to write
*/
void nrfConfigRegister (uint8_t reg, uint8_t value); void nrfConfigRegister (uint8_t reg, uint8_t value);
/**
* Read continues data from register
*
* @param reg register address
* @param *value pointer to the buffer
* @param len length of the buffer
*/
void nrfReadRegister (uint8_t reg, uint8_t * value, uint8_t len); void nrfReadRegister (uint8_t reg, uint8_t * value, uint8_t len);
/**
* Write continues data to register
*
* @param reg register address
* @param *value pointer to the buffer
* @param len length of the buffer
*/
void nrfWriteRegister (uint8_t reg, uint8_t * value, uint8_t len); void nrfWriteRegister (uint8_t reg, uint8_t * value, uint8_t len);
/**
* Power up reciever
*/
void nrfPowerUpRX (); void nrfPowerUpRX ();
/**
* Power up transmitter
*/
void nrfPowerUpTX (); void nrfPowerUpTX ();
/**
* Power down all
*/
void nrfPowerDown (); void nrfPowerDown ();
/**
* Set chip enable pin HIGH
*/
maa_result_t nrfCEHigh (); maa_result_t nrfCEHigh ();
/**
* Set chip enable LOW
*/
maa_result_t nrfCELow (); maa_result_t nrfCELow ();
/**
* Set chip select pin LOW
*/
maa_result_t nrfCSOn (); maa_result_t nrfCSOn ();
/**
* Set chip select pin HIGH
*/
maa_result_t nrfCSOff (); maa_result_t nrfCSOff ();
/**
* Flush reciver stack
*/
void nrfFlushRX (); void nrfFlushRX ();
/**
* Pulling method which listenning for arrived data, if data
* arrived dataRecievedHandler will be triggered
*/
void nrfListenForChannel(); void nrfListenForChannel();
uint8_t m_rxBuffer[MAX_BUFFER]; uint8_t m_rxBuffer[MAX_BUFFER]; /**< Reciver buffer */
uint8_t m_txBuffer[MAX_BUFFER]; uint8_t m_txBuffer[MAX_BUFFER]; /**< Transmit buffer */
funcPtrVoidVoid dataRecievedHandler; funcPtrVoidVoid dataRecievedHandler; /**< Data arrived handler */
private: private:
maa_spi_context m_spi; maa_spi_context m_spi;
uint8_t m_ce; uint8_t m_ce;
@ -170,7 +337,7 @@ class NRF24l01 {
uint8_t m_ptx; uint8_t m_ptx;
uint8_t m_payload; uint8_t m_payload;
uint8_t m_localAddress[5]; uint8_t m_localAddress[5];
maa_gpio_context m_csnPinCtx; maa_gpio_context m_csnPinCtx;
maa_gpio_context m_cePinCtx; maa_gpio_context m_cePinCtx;