173 lines
4.0 KiB
C++
Executable File
173 lines
4.0 KiB
C++
Executable File
|
|
/*
|
|
Copyright (C) 2011 J. Coliz <maniacbug@ymail.com>
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
version 2 as published by the Free Software Foundation.
|
|
|
|
Added Arduino Due support from https://github.com/mcrosson/
|
|
*/
|
|
|
|
#ifndef __RF24_CONFIG_H__
|
|
#define __RF24_CONFIG_H__
|
|
|
|
#if ARDUINO < 100
|
|
#include <WProgram.h>
|
|
#else
|
|
#include <Arduino.h>
|
|
#endif
|
|
|
|
#include <stddef.h>
|
|
|
|
/*** USER DEFINES: ***/
|
|
//#define FAILURE_HANDLING
|
|
//#define SERIAL_DEBUG
|
|
#define MINIMAL
|
|
//#define SPI_UART // Requires library from https://github.com/TMRh20/Sketches/tree/master/SPI_UART
|
|
//#define SOFTSPI // Requires library from https://github.com/greiman/DigitalIO
|
|
/**********************/
|
|
|
|
// Define _BV for non-Arduino platforms and for Arduino DUE
|
|
#if defined (ARDUINO) && !defined (__arm__)
|
|
#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
|
|
#define RF24_TINY
|
|
#define _SPI SPI
|
|
#else
|
|
#if defined SPI_UART
|
|
#include <SPI_UART.h>
|
|
#define _SPI uspi
|
|
#elif defined SOFTSPI
|
|
// change these pins to your liking
|
|
//
|
|
const uint8_t SOFT_SPI_MISO_PIN = 16;
|
|
const uint8_t SOFT_SPI_MOSI_PIN = 15;
|
|
const uint8_t SOFT_SPI_SCK_PIN = 14;
|
|
const uint8_t SPI_MODE = 0;
|
|
#define _SPI spi
|
|
|
|
#else
|
|
#include <SPI.h>
|
|
#define _SPI SPI
|
|
#endif
|
|
#endif
|
|
#else
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
|
|
#if defined(__arm__) || defined (CORE_TEENSY)
|
|
#include <SPI.h>
|
|
#endif
|
|
|
|
#if !defined(CORE_TEENSY)
|
|
#define _BV(x) (1<<(x))
|
|
#if !defined(__arm__)
|
|
extern HardwareSPI SPI;
|
|
#endif
|
|
#else
|
|
#define printf Serial.printf
|
|
#endif
|
|
|
|
#define _SPI SPI
|
|
#endif
|
|
|
|
|
|
#ifdef SERIAL_DEBUG
|
|
#define IF_SERIAL_DEBUG(x) ({x;})
|
|
#else
|
|
#define IF_SERIAL_DEBUG(x)
|
|
#if defined(RF24_TINY)
|
|
#define printf_P(...)
|
|
#endif
|
|
#endif
|
|
|
|
// Avoid spurious warnings
|
|
// Arduino DUE is arm and uses traditional PROGMEM constructs
|
|
#if 1
|
|
#if ! defined( NATIVE ) && defined( ARDUINO ) && ! defined(__arm__) && ! defined( CORE_TEENSY3 )
|
|
#undef PROGMEM
|
|
#define PROGMEM __attribute__(( section(".progmem.data") ))
|
|
#undef PSTR
|
|
#define PSTR(s) (__extension__({static const char __c[] PROGMEM = (s); &__c[0];}))
|
|
#endif
|
|
#endif
|
|
|
|
// Progmem is Arduino-specific
|
|
// Arduino DUE is arm and does not include avr/pgmspace
|
|
#if defined(ARDUINO) && ! defined(__arm__)
|
|
#include <avr/pgmspace.h>
|
|
#define PRIPSTR "%S"
|
|
#else
|
|
#if ! defined(ARDUINO) // This doesn't work on Arduino DUE
|
|
typedef char const char;
|
|
#else // Fill in pgm_read_byte that is used, but missing from DUE
|
|
#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
|
|
#endif
|
|
|
|
|
|
#if !defined ( CORE_TEENSY )
|
|
typedef uint16_t prog_uint16_t;
|
|
#define PSTR(x) (x)
|
|
#define printf_P printf
|
|
#define strlen_P strlen
|
|
#define PROGMEM
|
|
#define pgm_read_word(p) (*(p))
|
|
#endif
|
|
|
|
#define PRIPSTR "%s"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// ATTiny support code is from https://github.com/jscrane/RF24
|
|
|
|
#if defined(RF24_TINY)
|
|
#include <stdio.h>
|
|
#include <Arduino.h>
|
|
#include <avr/pgmspace.h>
|
|
|
|
#define SPI_CLOCK_DIV4 0x00
|
|
#define SPI_CLOCK_DIV16 0x01
|
|
#define SPI_CLOCK_DIV64 0x02
|
|
#define SPI_CLOCK_DIV128 0x03
|
|
#define SPI_CLOCK_DIV2 0x04
|
|
#define SPI_CLOCK_DIV8 0x05
|
|
#define SPI_CLOCK_DIV32 0x06
|
|
//#define SPI_CLOCK_DIV64 0x07
|
|
|
|
#define SPI_MODE0 0x00
|
|
#define SPI_MODE1 0x04
|
|
#define SPI_MODE2 0x08
|
|
#define SPI_MODE3 0x0C
|
|
|
|
#define SPI_MODE_MASK 0x0C // CPOL = bit 3, CPHA = bit 2 on SPCR
|
|
#define SPI_CLOCK_MASK 0x03 // SPR1 = bit 1, SPR0 = bit 0 on SPCR
|
|
#define SPI_2XCLOCK_MASK 0x01 // SPI2X = bit 0 on SPSR
|
|
|
|
|
|
|
|
class SPIClass {
|
|
public:
|
|
static byte transfer(byte _data);
|
|
|
|
// SPI Configuration methods
|
|
|
|
inline static void attachInterrupt();
|
|
inline static void detachInterrupt(); // Default
|
|
|
|
static void begin(); // Default
|
|
static void end();
|
|
|
|
static void setBitOrder(uint8_t);
|
|
static void setDataMode(uint8_t);
|
|
static void setClockDivider(uint8_t);
|
|
};
|
|
extern SPIClass SPI;
|
|
|
|
#endif //ATTiny
|
|
#endif // __RF24_CONFIG_H__
|
|
|