139 lines
3.1 KiB
C++
139 lines
3.1 KiB
C++
// RasPiRH.cpp
|
|
//
|
|
// Example program showing how to use RH_NRF24 on Raspberry Pi
|
|
// Uses the bcm2835 library to access the GPIO pins to drive the NRF24L01
|
|
// Requires bcm2835 library to be already installed
|
|
// http://www.airspayce.com/mikem/bcm2835/
|
|
// Use the Makefile in this directory:
|
|
// cd example/raspi
|
|
// make
|
|
// sudo ./RasPiRH
|
|
//
|
|
// Creates a RHReliableDatagram manager and listens and prints for reliable datagrams
|
|
// sent to it on the default Channel 2.
|
|
//
|
|
// Contributed by Mike Poublon
|
|
|
|
#include <bcm2835.h>
|
|
#include <stdio.h>
|
|
#include <signal.h>
|
|
#include <unistd.h>
|
|
|
|
#include <RHReliableDatagram.h>
|
|
#include <RH_NRF24.h>
|
|
|
|
//Function Definitions
|
|
void sig_handler(int sig);
|
|
void printbuffer(uint8_t buff[], int len);
|
|
|
|
#define CLIENT_ADDRESS 1
|
|
#define SERVER_ADDRESS 2
|
|
|
|
// Create an instance of a driver
|
|
// Chip enable is pin 22
|
|
// Slave Select is pin 24
|
|
RH_NRF24 nrf24(RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24);
|
|
RHReliableDatagram manager(nrf24, SERVER_ADDRESS);
|
|
|
|
//Flag for Ctrl-C
|
|
volatile sig_atomic_t flag = 0;
|
|
|
|
//Main Function
|
|
int main (int argc, const char* argv[] )
|
|
{
|
|
signal(SIGINT, sig_handler);
|
|
|
|
if (!bcm2835_init())
|
|
{
|
|
printf( "\n\nRasPiRH Tester Startup Failed\n\n" );
|
|
return 1;
|
|
}
|
|
|
|
printf( "\nRasPiRH Tester Startup\n\n" );
|
|
|
|
/* Begin Driver Only Init Code
|
|
if (!nrf24.init())
|
|
Serial.println("init failed");
|
|
// Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm
|
|
if (!nrf24.setChannel(1))
|
|
Serial.println("setChannel failed");
|
|
if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm))
|
|
Serial.println("setRF failed");
|
|
End Driver Only Init Code */
|
|
|
|
/* Begin Reliable Datagram Init Code */
|
|
if (!manager.init())
|
|
{
|
|
printf( "Init failed\n" );
|
|
}
|
|
/* End Reliable Datagram Init Code */
|
|
|
|
uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN];
|
|
|
|
//Begin the main body of code
|
|
while (true)
|
|
{
|
|
uint8_t len = sizeof(buf);
|
|
uint8_t from, to, id, flags;
|
|
|
|
/* Begin Driver Only code
|
|
if (nrf24.available())
|
|
{
|
|
// Should be a message for us now
|
|
//uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN];
|
|
uint8_t len = sizeof(buf);
|
|
if (nrf24.recv(buf, &len))
|
|
{
|
|
Serial.print("got request: ");
|
|
Serial.println((char*)buf);
|
|
Serial.println("");
|
|
}
|
|
else
|
|
{
|
|
Serial.println("recv failed");
|
|
}
|
|
}
|
|
End Driver Only Code*/
|
|
|
|
/* Begin Reliable Datagram Code */
|
|
if (manager.available())
|
|
{
|
|
// Wait for a message addressed to us from the client
|
|
uint8_t len = sizeof(buf);
|
|
uint8_t from;
|
|
if (manager.recvfromAck(buf, &len, &from))
|
|
{
|
|
Serial.print("got request from : 0x");
|
|
Serial.print(from, HEX);
|
|
Serial.print(": ");
|
|
Serial.println((char*)buf);
|
|
}
|
|
}
|
|
/* End Reliable Datagram Code */
|
|
|
|
if (flag)
|
|
{
|
|
printf("\n---CTRL-C Caught - Exiting---\n");
|
|
break;
|
|
}
|
|
//sleep(1);
|
|
delay(25);
|
|
}
|
|
printf( "\nRasPiRH Tester Ending\n" );
|
|
bcm2835_close();
|
|
return 0;
|
|
}
|
|
|
|
void sig_handler(int sig)
|
|
{
|
|
flag=1;
|
|
}
|
|
|
|
void printbuffer(uint8_t buff[], int len)
|
|
{
|
|
for (int i = 0; i< len; i++)
|
|
{
|
|
printf(" %2X", buff[i]);
|
|
}
|
|
}
|