V148

Fork of RadioHead-148 by David Rimer

Revision:
0:ab4e012489ef
diff -r 000000000000 -r ab4e012489ef RHHardwareSPI.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/RHHardwareSPI.h	Thu Oct 15 01:27:00 2015 +0000
@@ -0,0 +1,67 @@
+// RHHardwareSPI.h
+// Author: Mike McCauley (mikem@airspayce.com)
+// Copyright (C) 2011 Mike McCauley
+// Contributed by Joanna Rutkowska
+// $Id: RHHardwareSPI.h,v 1.9 2014/08/12 00:54:52 mikem Exp $
+
+#ifndef RHHardwareSPI_h
+#define RHHardwareSPI_h
+
+#include <RHGenericSPI.h>
+
+/////////////////////////////////////////////////////////////////////
+/// \class RHHardwareSPI RHHardwareSPI.h <RHHardwareSPI.h>
+/// \brief Encapsulate a hardware SPI bus interface
+///
+/// This concrete subclass of GenericSPIClass encapsulates the standard Arduino hardware and other
+/// hardware SPI interfaces.
+class RHHardwareSPI : public RHGenericSPI
+{
+#ifdef RH_HAVE_HARDWARE_SPI
+public:
+    /// Constructor
+    /// Creates an instance of a hardware SPI interface, using whatever SPI hardware is available on
+    /// your processor platform. On Arduino and Uno32, uses SPI. On Maple, uses HardwareSPI.
+    /// \param[in] frequency One of RHGenericSPI::Frequency to select the SPI bus frequency. The frequency
+    /// is mapped to the closest available bus frequency on the platform.
+    /// \param[in] bitOrder Select the SPI bus bit order, one of RHGenericSPI::BitOrderMSBFirst or 
+    /// RHGenericSPI::BitOrderLSBFirst.
+    /// \param[in] dataMode Selects the SPI bus data mode. One of RHGenericSPI::DataMode
+    RHHardwareSPI(Frequency frequency = Frequency1MHz, BitOrder bitOrder = BitOrderMSBFirst, DataMode dataMode = DataMode0);
+
+    /// Transfer a single octet to and from the SPI interface
+    /// \param[in] data The octet to send
+    /// \return The octet read from SPI while the data octet was sent
+    uint8_t transfer(uint8_t data);
+
+    // SPI Configuration methods
+    /// Enable SPI interrupts
+    /// This can be used in an SPI slave to indicate when an SPI message has been received
+    /// It will cause the SPI_STC_vect interrupt vectr to be executed
+    void attachInterrupt();
+
+    /// Disable SPI interrupts
+    /// This can be used to diable the SPI interrupt in slaves where that is supported.
+    void detachInterrupt();
+    
+    /// Initialise the SPI library
+    /// Call this after configuring the SPI interface and before using it to transfer data.
+    /// Initializes the SPI bus by setting SCK, MOSI, and SS to outputs, pulling SCK and MOSI low, and SS high. 
+    void begin();
+
+    /// Disables the SPI bus (leaving pin modes unchanged). 
+    /// Call this after you have finished using the SPI interface.
+    void end();
+#else
+    // not supported on ATTiny etc
+    uint8_t transfer(uint8_t data) {return 0;}
+    void begin(){}
+    void end(){}
+
+#endif
+};
+
+// Built in default instance
+extern RHHardwareSPI hardware_spi;
+
+#endif