Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FastLED/FastLED.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordanielgarcia@gmail.com <danielgarcia@gmail.com@4ad4ec5c-605d-bd5c-5796-512c9b60011b>2013-02-09 09:05:45 +0400
committerdanielgarcia@gmail.com <danielgarcia@gmail.com@4ad4ec5c-605d-bd5c-5796-512c9b60011b>2013-02-09 09:05:45 +0400
commit9e0f1e14b78b9ce9e7d79de74a67b54dbdb22dbf (patch)
tree0da3fbbf7fbf3c361a77a1e02040430c357b93a7
parenta36585c82589478cff2749b4b331480bfaed6112 (diff)
Tweak some class names. Add compile time messaging for missing information for accelerated pin access or hardware SPI access
-rw-r--r--FastSPI_LED2.h4
-rw-r--r--fastpin.h6
-rw-r--r--fastspi.h41
3 files changed, 28 insertions, 23 deletions
diff --git a/FastSPI_LED2.h b/FastSPI_LED2.h
index bb574a58..1ede0f47 100644
--- a/FastSPI_LED2.h
+++ b/FastSPI_LED2.h
@@ -21,7 +21,7 @@ public:
template <uint8_t DATA_PIN, uint8_t CLOCK_PIN, uint8_t LATCH_PIN>
class LPD8806Controller : public CLEDController {
- typedef ArduinoSPIOutput<DATA_PIN, CLOCK_PIN, LATCH_PIN, 0> SPI;
+ typedef AVRSPIOutput<DATA_PIN, CLOCK_PIN, LATCH_PIN, 0> SPI;
void clearLine(int nLeds) {
int n = ((nLeds + 63) >> 6);
@@ -53,7 +53,7 @@ public:
template <uint8_t DATA_PIN, uint8_t CLOCK_PIN, uint8_t LATCH_PIN>
class WS2801Controller : public CLEDController {
- typedef ArduinoSPIOutput<DATA_PIN, CLOCK_PIN, LATCH_PIN, 0> SPI;
+ typedef AVRSPIOutput<DATA_PIN, CLOCK_PIN, LATCH_PIN, 0> SPI;
public:
virtual void init() {
diff --git a/fastpin.h b/fastpin.h
index 9fd84e39..04fd08a9 100644
--- a/fastpin.h
+++ b/fastpin.h
@@ -74,7 +74,7 @@ typedef volatile uint8_t & reg8_t;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//
-// Pin definitions for AVR
+// Pin definitions for AVR. If there are pin definitions supplied below for the platform being built on
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -99,6 +99,10 @@ _DEFPIN(8, 8, D); _DEFPIN(9, 64, C); _DEFPIN(10, 128, C); _DEFPIN(11, 64, D);
_DEFPIN(12, 128, D); _DEFPIN(13, 16, B); _DEFPIN(14, 32, B); _DEFPIN(15, 64, B);
_DEFPIN(16, 128, F); _DEFPIN(17, 64, F); _DEFPIN(18, 32, F); _DEFPIN(19, 16, F);
_DEFPIN(20, 2, F); _DEFPIN(21, 1, F); _DEFPIN(22, 16, D); _DEFPIN(23, 32, D);
+#else
+
+#pragma message "No pin/port mappings found, pin access will be slightly slower. See fastpin.h for info."
+
#endif
diff --git a/fastspi.h b/fastspi.h
index d5d9b6f1..60c70a96 100644
--- a/fastspi.h
+++ b/fastspi.h
@@ -61,7 +61,7 @@ public:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
template <uint8_t DATA_PIN, uint8_t CLOCK_PIN, uint8_t LATCH_PIN, uint8_t SPI_SPEED>
-class ArduinoSoftwareSPIOutput {
+class AVRSoftwareSPIOutput {
public:
static void init() {
// set the pins to output
@@ -287,16 +287,16 @@ public:
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-template <uint8_t DATA_PIN, uint8_t CLOCK_PIN, uint8_t LATCH_PIN, uint8_t SPI_SPEED>
-class ArduinoHardwareSPIOutput {
+template <uint8_t _DATA_PIN, uint8_t _CLOCK_PIN, uint8_t _LATCH_PIN, uint8_t _SPI_SPEED>
+class AVRHardwareSPIOutput {
public:
static void init() {
uint8_t clr;
// set the pins to output
- Pin<DATA_PIN>::setOutput();
- Pin<LATCH_PIN>::setOutput();
- Pin<CLOCK_PIN>::setOutput();
+ Pin<_DATA_PIN>::setOutput();
+ Pin<_LATCH_PIN>::setOutput();
+ Pin<_CLOCK_PIN>::setOutput();
SPCR |= ((1<<SPE) | (1<<MSTR) ); // enable SPI as master
SPCR &= ~ ( (1<<SPR1) | (1<<SPR0) ); // clear out the prescalar bits
@@ -305,7 +305,7 @@ public:
clr = SPDR; // clear SPI data register
bool b2x = false;
- switch(SPI_SPEED) {
+ switch(_SPI_SPEED) {
/* fosc/2 */ case 0: b2x=true; break;
/* fosc/4 */ case 1: break;
/* fosc/8 */ case 2: SPCR |= (1<<SPR0); b2x=true; break;
@@ -340,24 +340,24 @@ public:
template <uint8_t BIT> inline static void writeBit(uint8_t b, volatile uint8_t *clockpin, volatile uint8_t *datapin) {
SPCR &= ~(1 << SPE);
if(b & (1 << BIT)) {
- Pin<DATA_PIN>::hi(datapin);
+ Pin<_DATA_PIN>::hi(datapin);
} else {
- Pin<DATA_PIN>::lo(datapin);
+ Pin<_DATA_PIN>::lo(datapin);
}
- Pin<CLOCK_PIN>::hi(clockpin);
- Pin<CLOCK_PIN>::lo(clockpin);
+ Pin<_CLOCK_PIN>::hi(clockpin);
+ Pin<_CLOCK_PIN>::lo(clockpin);
SPCR |= 1 << SPE;
}
template <uint8_t BIT> inline static void writeBit(uint8_t b) {
- register volatile uint8_t *clockpin = Pin<CLOCK_PIN>::port();
- register volatile uint8_t *datapin = Pin<CLOCK_PIN>::port();
+ register volatile uint8_t *clockpin = Pin<_CLOCK_PIN>::port();
+ register volatile uint8_t *datapin = Pin<_CLOCK_PIN>::port();
writeBit<BIT>(b, clockpin, datapin);
}
- static void latch() { Pin<LATCH_PIN>::hi(); }
- static void release() { Pin<LATCH_PIN>::lo(); }
+ static void latch() { Pin<_LATCH_PIN>::hi(); }
+ static void release() { Pin<_LATCH_PIN>::lo(); }
static void writeBytesValue(uint8_t value, int len) {
latch();
@@ -407,8 +407,8 @@ public:
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-template<uint8_t DATA_PIN, uint8_t CLOCK_PIN, uint8_t LATCH_PIN, uint8_t SPI_SPEED>
-class ArduinoSPIOutput : public ArduinoSoftwareSPIOutput<DATA_PIN, CLOCK_PIN, LATCH_PIN, SPI_SPEED> {};
+template<uint8_t _DATA_PIN, uint8_t _CLOCK_PIN, uint8_t _LATCH_PIN, uint8_t _SPI_SPEED>
+class AVRSPIOutput : public AVRSoftwareSPIOutput<_DATA_PIN, _CLOCK_PIN, _LATCH_PIN, _SPI_SPEED> {};
// uno/mini/duemilanove
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
@@ -416,7 +416,7 @@ class ArduinoSPIOutput : public ArduinoSoftwareSPIOutput<DATA_PIN, CLOCK_PIN, LA
#define SPI_CLOCK 13
#define SPI_LATCH 10
template<uint8_t SPI_SPEED>
-class ArduinoSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> : public ArduinoHardwareSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> {};
+class AVRSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> : public AVRHardwareSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> {};
// Leonardo, teensy, blinkm
#elif defined(__AVR_ATmega32U4__)
@@ -424,10 +424,11 @@ class ArduinoSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> : public Ardui
#define SPI_CLOCK 1
#define SPI_LATCH 0
template<uint8_t SPI_SPEED>
-class ArduinoSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> : public ArduinoHardwareSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> {};
+class AVRSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> : public AVRHardwareSPIOutput<SPI_DATA, SPI_CLOCK, SPI_LATCH, SPI_SPEED> {};
+#else
+#pragma message "No hardware SPI pins defined. All SPI access will default to bitbanged output"
#endif
-
#endif