forked from Makuna/NeoPixelBus
Spi dynamic speed (#432)
This commit is contained in:
@@ -379,6 +379,12 @@ public:
|
|||||||
Dirty();
|
Dirty();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void SetMethodSettings(const typename T_METHOD::SettingsObject& settings)
|
||||||
|
{
|
||||||
|
_method.applySettings(settings);
|
||||||
|
Dirty();
|
||||||
|
};
|
||||||
|
|
||||||
uint32_t CalcTotalMilliAmpere(const typename T_COLOR_FEATURE::ColorObject::SettingsObject& settings)
|
uint32_t CalcTotalMilliAmpere(const typename T_COLOR_FEATURE::ColorObject::SettingsObject& settings)
|
||||||
{
|
{
|
||||||
uint32_t total = 0; // in 1/10th milliamps
|
uint32_t total = 0; // in 1/10th milliamps
|
||||||
|
@@ -37,6 +37,8 @@ License along with NeoPixel. If not, see
|
|||||||
template<typename T_TWOWIRE> class DotStarMethodBase
|
template<typename T_TWOWIRE> class DotStarMethodBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef typename T_TWOWIRE::SettingsObject SettingsObject;
|
||||||
|
|
||||||
DotStarMethodBase(uint8_t pinClock, uint8_t pinData, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
DotStarMethodBase(uint8_t pinClock, uint8_t pinData, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
||||||
_sizeData(pixelCount * elementSize + settingsSize),
|
_sizeData(pixelCount * elementSize + settingsSize),
|
||||||
_sizeEndFrame((pixelCount + 15) / 16), // 16 = div 2 (bit for every two pixels) div 8 (bits to bytes)
|
_sizeEndFrame((pixelCount + 15) / 16), // 16 = div 2 (bit for every two pixels) div 8 (bits to bytes)
|
||||||
@@ -112,6 +114,11 @@ public:
|
|||||||
return _sizeData;
|
return _sizeData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
_wire.applySettings(settings);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const size_t _sizeData; // Size of '_data' buffer below
|
const size_t _sizeData; // Size of '_data' buffer below
|
||||||
const size_t _sizeEndFrame;
|
const size_t _sizeEndFrame;
|
||||||
@@ -131,6 +138,8 @@ typedef DotStarMethodBase<TwoWireSpiImple<SpiSpeed2Mhz>> DotStarSpi2MhzMethod;
|
|||||||
typedef DotStarMethodBase<TwoWireSpiImple<SpiSpeed1Mhz>> DotStarSpi1MhzMethod;
|
typedef DotStarMethodBase<TwoWireSpiImple<SpiSpeed1Mhz>> DotStarSpi1MhzMethod;
|
||||||
typedef DotStarMethodBase<TwoWireSpiImple<SpiSpeed500Khz>> DotStarSpi500KhzMethod;
|
typedef DotStarMethodBase<TwoWireSpiImple<SpiSpeed500Khz>> DotStarSpi500KhzMethod;
|
||||||
|
|
||||||
|
typedef DotStarMethodBase<TwoWireSpiImple<SpiSpeedHz>> DotStarSpiHzMethod;
|
||||||
|
|
||||||
typedef DotStarSpi10MhzMethod DotStarSpiMethod;
|
typedef DotStarSpi10MhzMethod DotStarSpiMethod;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -37,6 +37,8 @@ License along with NeoPixel. If not, see
|
|||||||
template<typename T_TWOWIRE> class Lpd6803MethodBase
|
template<typename T_TWOWIRE> class Lpd6803MethodBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef typename T_TWOWIRE::SettingsObject SettingsObject;
|
||||||
|
|
||||||
Lpd6803MethodBase(uint8_t pinClock, uint8_t pinData, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
Lpd6803MethodBase(uint8_t pinClock, uint8_t pinData, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
||||||
_sizeData(pixelCount * elementSize + settingsSize),
|
_sizeData(pixelCount * elementSize + settingsSize),
|
||||||
_sizeFrame((pixelCount + 7) / 8), // bit for every pixel at least
|
_sizeFrame((pixelCount + 7) / 8), // bit for every pixel at least
|
||||||
@@ -108,6 +110,11 @@ public:
|
|||||||
return _sizeData;
|
return _sizeData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
_wire.applySettings(settings);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const size_t _sizeData; // Size of '_data' buffer below
|
const size_t _sizeData; // Size of '_data' buffer below
|
||||||
const size_t _sizeFrame;
|
const size_t _sizeFrame;
|
||||||
|
@@ -37,6 +37,8 @@ License along with NeoPixel. If not, see
|
|||||||
template<typename T_TWOWIRE> class Lpd8806MethodBase
|
template<typename T_TWOWIRE> class Lpd8806MethodBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef typename T_TWOWIRE::SettingsObject SettingsObject;
|
||||||
|
|
||||||
Lpd8806MethodBase(uint8_t pinClock, uint8_t pinData, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
Lpd8806MethodBase(uint8_t pinClock, uint8_t pinData, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
||||||
_sizeData(pixelCount * elementSize + settingsSize),
|
_sizeData(pixelCount * elementSize + settingsSize),
|
||||||
_sizeFrame((pixelCount + 31) / 32),
|
_sizeFrame((pixelCount + 31) / 32),
|
||||||
@@ -108,6 +110,11 @@ public:
|
|||||||
return _sizeData;
|
return _sizeData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
_wire.applySettings(settings);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const size_t _sizeData; // Size of '_data' buffer below
|
const size_t _sizeData; // Size of '_data' buffer below
|
||||||
const size_t _sizeFrame;
|
const size_t _sizeFrame;
|
||||||
|
@@ -35,6 +35,8 @@ License along with NeoPixel. If not, see
|
|||||||
template<typename T_SPEED> class NeoArmMethodBase
|
template<typename T_SPEED> class NeoArmMethodBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
|
||||||
NeoArmMethodBase(uint8_t pin, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
NeoArmMethodBase(uint8_t pin, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
||||||
_sizeData(pixelCount * elementSize + settingsSize),
|
_sizeData(pixelCount * elementSize + settingsSize),
|
||||||
_pin(pin)
|
_pin(pin)
|
||||||
@@ -99,6 +101,10 @@ public:
|
|||||||
return _sizeData;
|
return _sizeData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const size_t _sizeData; // Size of '_data' buffer below
|
const size_t _sizeData; // Size of '_data' buffer below
|
||||||
|
|
||||||
|
@@ -118,6 +118,8 @@ public:
|
|||||||
template<typename T_SPEED> class NeoAvrMethodBase
|
template<typename T_SPEED> class NeoAvrMethodBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
|
||||||
NeoAvrMethodBase(uint8_t pin, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
NeoAvrMethodBase(uint8_t pin, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
||||||
_sizeData(pixelCount * elementSize + settingsSize),
|
_sizeData(pixelCount * elementSize + settingsSize),
|
||||||
_pin(pin),
|
_pin(pin),
|
||||||
@@ -189,6 +191,10 @@ public:
|
|||||||
return _sizeData;
|
return _sizeData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const size_t _sizeData; // size of _data below
|
const size_t _sizeData; // size of _data below
|
||||||
const uint8_t _pin; // output pin number
|
const uint8_t _pin; // output pin number
|
||||||
|
@@ -128,6 +128,8 @@ public:
|
|||||||
template<typename T_SPEED, typename T_BUS, typename T_INVERT> class NeoEsp32I2sMethodBase
|
template<typename T_SPEED, typename T_BUS, typename T_INVERT> class NeoEsp32I2sMethodBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
|
||||||
NeoEsp32I2sMethodBase(uint8_t pin, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
NeoEsp32I2sMethodBase(uint8_t pin, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
||||||
_sizeData(pixelCount * elementSize + settingsSize),
|
_sizeData(pixelCount * elementSize + settingsSize),
|
||||||
_pin(pin)
|
_pin(pin)
|
||||||
@@ -198,6 +200,10 @@ public:
|
|||||||
return _sizeData;
|
return _sizeData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const size_t _sizeData; // Size of '_data' buffer
|
const size_t _sizeData; // Size of '_data' buffer
|
||||||
const uint8_t _pin; // output pin number
|
const uint8_t _pin; // output pin number
|
||||||
|
@@ -27,6 +27,8 @@ License along with NeoPixel. If not, see
|
|||||||
<http://www.gnu.org/licenses/>.
|
<http://www.gnu.org/licenses/>.
|
||||||
-------------------------------------------------------------------------*/
|
-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include "NeoSettings.h"
|
||||||
#include "NeoBusChannel.h"
|
#include "NeoBusChannel.h"
|
||||||
#include "NeoEsp32RmtMethod.h"
|
#include "NeoEsp32RmtMethod.h"
|
||||||
|
|
||||||
|
@@ -403,6 +403,8 @@ public:
|
|||||||
template<typename T_SPEED, typename T_CHANNEL> class NeoEsp32RmtMethodBase
|
template<typename T_SPEED, typename T_CHANNEL> class NeoEsp32RmtMethodBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
|
||||||
NeoEsp32RmtMethodBase(uint8_t pin, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
NeoEsp32RmtMethodBase(uint8_t pin, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
||||||
_sizeData(pixelCount * elementSize + settingsSize),
|
_sizeData(pixelCount * elementSize + settingsSize),
|
||||||
_pin(pin)
|
_pin(pin)
|
||||||
@@ -492,6 +494,10 @@ public:
|
|||||||
return _sizeData;
|
return _sizeData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const size_t _sizeData; // Size of '_data*' buffers
|
const size_t _sizeData; // Size of '_data*' buffers
|
||||||
const uint8_t _pin; // output pin number
|
const uint8_t _pin; // output pin number
|
||||||
|
@@ -217,6 +217,8 @@ const uint8_t c_I2sPin = 3; // due to I2S hardware, the pin used is restricted t
|
|||||||
template<typename T_SPEED> class NeoEsp8266DmaMethodBase
|
template<typename T_SPEED> class NeoEsp8266DmaMethodBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
|
||||||
NeoEsp8266DmaMethodBase(uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
NeoEsp8266DmaMethodBase(uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
||||||
_sizeData(pixelCount * elementSize + settingsSize)
|
_sizeData(pixelCount * elementSize + settingsSize)
|
||||||
{
|
{
|
||||||
@@ -413,6 +415,10 @@ public:
|
|||||||
return _sizeData;
|
return _sizeData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static NeoEsp8266DmaMethodBase* s_this; // for the ISR
|
static NeoEsp8266DmaMethodBase* s_this; // for the ISR
|
||||||
|
|
||||||
|
@@ -25,6 +25,9 @@ License along with NeoPixel. If not, see
|
|||||||
-------------------------------------------------------------------------*/
|
-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifdef ARDUINO_ARCH_ESP8266
|
#ifdef ARDUINO_ARCH_ESP8266
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include "NeoSettings.h"
|
||||||
#include "NeoEsp8266UartMethod.h"
|
#include "NeoEsp8266UartMethod.h"
|
||||||
#include <utility>
|
#include <utility>
|
||||||
extern "C"
|
extern "C"
|
||||||
|
@@ -347,6 +347,8 @@ template<typename T_SPEED, typename T_BASE, typename T_INVERT>
|
|||||||
class NeoEsp8266UartMethodBase: public T_BASE
|
class NeoEsp8266UartMethodBase: public T_BASE
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
|
||||||
NeoEsp8266UartMethodBase(uint16_t pixelCount, size_t elementSize, size_t settingsSize)
|
NeoEsp8266UartMethodBase(uint16_t pixelCount, size_t elementSize, size_t settingsSize)
|
||||||
: T_BASE(pixelCount, elementSize, settingsSize)
|
: T_BASE(pixelCount, elementSize, settingsSize)
|
||||||
{
|
{
|
||||||
@@ -398,6 +400,10 @@ public:
|
|||||||
return this->_sizeData;
|
return this->_sizeData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint32_t getPixelTime() const
|
uint32_t getPixelTime() const
|
||||||
{
|
{
|
||||||
|
@@ -278,6 +278,8 @@ public:
|
|||||||
template<typename T_SPEED, typename T_PINSET> class NeoEspBitBangMethodBase
|
template<typename T_SPEED, typename T_PINSET> class NeoEspBitBangMethodBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
|
||||||
NeoEspBitBangMethodBase(uint8_t pin, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
NeoEspBitBangMethodBase(uint8_t pin, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
||||||
_sizeData(pixelCount * elementSize + settingsSize),
|
_sizeData(pixelCount * elementSize + settingsSize),
|
||||||
_pin(pin)
|
_pin(pin)
|
||||||
@@ -354,6 +356,10 @@ public:
|
|||||||
return _sizeData;
|
return _sizeData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const size_t _sizeData; // Size of '_data' buffer below
|
const size_t _sizeData; // Size of '_data' buffer below
|
||||||
const uint8_t _pin; // output pin number
|
const uint8_t _pin; // output pin number
|
||||||
|
@@ -260,6 +260,8 @@ protected:
|
|||||||
template<typename T_SPEED, typename T_BUS> class NeoNrf52xMethodBase
|
template<typename T_SPEED, typename T_BUS> class NeoNrf52xMethodBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
|
||||||
NeoNrf52xMethodBase(uint8_t pin, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
NeoNrf52xMethodBase(uint8_t pin, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
||||||
_sizeData(pixelCount * elementSize + settingsSize),
|
_sizeData(pixelCount * elementSize + settingsSize),
|
||||||
_pin(pin)
|
_pin(pin)
|
||||||
@@ -334,6 +336,10 @@ public:
|
|||||||
return _sizeData;
|
return _sizeData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const size_t _sizeData; // Size of '_data' buffer below
|
const size_t _sizeData; // Size of '_data' buffer below
|
||||||
const uint8_t _pin; // output pin number
|
const uint8_t _pin; // output pin number
|
||||||
|
@@ -37,6 +37,8 @@ License along with NeoPixel. If not, see
|
|||||||
template<typename T_TWOWIRE> class P9813MethodBase
|
template<typename T_TWOWIRE> class P9813MethodBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef typename T_TWOWIRE::SettingsObject SettingsObject;
|
||||||
|
|
||||||
P9813MethodBase(uint8_t pinClock, uint8_t pinData, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
P9813MethodBase(uint8_t pinClock, uint8_t pinData, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
||||||
_sizeData(pixelCount * elementSize + settingsSize),
|
_sizeData(pixelCount * elementSize + settingsSize),
|
||||||
_sizeEndFrame((pixelCount + 15) / 16), // 16 = div 2 (bit for every two pixels) div 8 (bits to bytes)
|
_sizeEndFrame((pixelCount + 15) / 16), // 16 = div 2 (bit for every two pixels) div 8 (bits to bytes)
|
||||||
@@ -104,6 +106,11 @@ public:
|
|||||||
return _sizeData;
|
return _sizeData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
_wire.applySettings(settings);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const size_t _sizeData; // Size of '_data' buffer below
|
const size_t _sizeData; // Size of '_data' buffer below
|
||||||
const size_t _sizeEndFrame;
|
const size_t _sizeEndFrame;
|
||||||
|
@@ -30,6 +30,8 @@ License along with NeoPixel. If not, see
|
|||||||
class TwoWireBitBangImple
|
class TwoWireBitBangImple
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
|
||||||
TwoWireBitBangImple(uint8_t pinClock, uint8_t pinData) :
|
TwoWireBitBangImple(uint8_t pinClock, uint8_t pinData) :
|
||||||
_pinClock(pinClock),
|
_pinClock(pinClock),
|
||||||
_pinData(pinData)
|
_pinData(pinData)
|
||||||
@@ -86,6 +88,10 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const uint8_t _pinClock; // output pin number for clock line
|
const uint8_t _pinClock; // output pin number for clock line
|
||||||
const uint8_t _pinData; // output pin number for data line
|
const uint8_t _pinData; // output pin number for data line
|
||||||
|
@@ -30,6 +30,8 @@ License along with NeoPixel. If not, see
|
|||||||
class TwoWireBitBangImple
|
class TwoWireBitBangImple
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
|
||||||
TwoWireBitBangImple(uint8_t pinClock, uint8_t pinData) :
|
TwoWireBitBangImple(uint8_t pinClock, uint8_t pinData) :
|
||||||
_pinClock(pinClock),
|
_pinClock(pinClock),
|
||||||
_pinData(pinData)
|
_pinData(pinData)
|
||||||
@@ -101,6 +103,10 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const uint8_t _pinClock; // output pin number for clock line
|
const uint8_t _pinClock; // output pin number for clock line
|
||||||
const uint8_t _pinData; // output pin number for data line
|
const uint8_t _pinData; // output pin number for data line
|
||||||
|
@@ -31,42 +31,101 @@ License along with NeoPixel. If not, see
|
|||||||
class SpiSpeed40Mhz
|
class SpiSpeed40Mhz
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
SpiSpeed40Mhz() {};
|
||||||
|
|
||||||
|
static void applySettings(const SettingsObject& settings) {}
|
||||||
|
|
||||||
static const uint32_t Clock = 40000000L;
|
static const uint32_t Clock = 40000000L;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SpiSpeed20Mhz
|
class SpiSpeed20Mhz
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
SpiSpeed20Mhz() {};
|
||||||
|
|
||||||
|
static void applySettings(const SettingsObject& settings) {}
|
||||||
|
|
||||||
static const uint32_t Clock = 20000000L;
|
static const uint32_t Clock = 20000000L;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SpiSpeed10Mhz
|
class SpiSpeed10Mhz
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
SpiSpeed10Mhz() {};
|
||||||
|
|
||||||
|
static void applySettings(const SettingsObject& settings) {}
|
||||||
|
|
||||||
static const uint32_t Clock = 10000000L;
|
static const uint32_t Clock = 10000000L;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SpiSpeed2Mhz
|
class SpiSpeed2Mhz
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
SpiSpeed2Mhz() {};
|
||||||
|
|
||||||
|
static void applySettings(const SettingsObject& settings) {}
|
||||||
|
|
||||||
static const uint32_t Clock = 2000000L;
|
static const uint32_t Clock = 2000000L;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SpiSpeed1Mhz
|
class SpiSpeed1Mhz
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
SpiSpeed1Mhz() {};
|
||||||
|
|
||||||
|
static void applySettings(const SettingsObject& settings) {}
|
||||||
|
|
||||||
static const uint32_t Clock = 1000000L;
|
static const uint32_t Clock = 1000000L;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SpiSpeed500Khz
|
class SpiSpeed500Khz
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef NeoNoSettings SettingsObject;
|
||||||
|
SpiSpeed500Khz() {};
|
||||||
|
|
||||||
|
static void applySettings(const SettingsObject& settings) {}
|
||||||
|
|
||||||
static const uint32_t Clock = 500000L;
|
static const uint32_t Clock = 500000L;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class NeoSpiSettings
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NeoSpiSettings(uint32_t clock) :
|
||||||
|
Clock(clock)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
uint32_t Clock;
|
||||||
|
};
|
||||||
|
|
||||||
|
class SpiSpeedHz
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef NeoSpiSettings SettingsObject;
|
||||||
|
|
||||||
|
SpiSpeedHz() :
|
||||||
|
Clock(10000000)
|
||||||
|
{};
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
Clock = settings.Clock;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t Clock;
|
||||||
|
};
|
||||||
|
|
||||||
template<typename T_SPISPEED> class TwoWireSpiImple
|
template<typename T_SPISPEED> class TwoWireSpiImple
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef typename T_SPISPEED::SettingsObject SettingsObject;
|
||||||
|
|
||||||
TwoWireSpiImple(uint8_t, uint8_t) // clock and data pins ignored for hardware SPI
|
TwoWireSpiImple(uint8_t, uint8_t) // clock and data pins ignored for hardware SPI
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -91,7 +150,7 @@ public:
|
|||||||
|
|
||||||
void beginTransaction()
|
void beginTransaction()
|
||||||
{
|
{
|
||||||
SPI.beginTransaction(SPISettings(T_SPISPEED::Clock, MSBFIRST, SPI_MODE0));
|
SPI.beginTransaction(SPISettings(_speed.Clock, MSBFIRST, SPI_MODE0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void endTransaction()
|
void endTransaction()
|
||||||
@@ -123,5 +182,11 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
_speed.applySettings(settings);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
T_SPISPEED _speed;
|
||||||
};
|
};
|
@@ -37,6 +37,8 @@ License along with NeoPixel. If not, see
|
|||||||
template<typename T_TWOWIRE> class Ws2801MethodBase
|
template<typename T_TWOWIRE> class Ws2801MethodBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef typename T_TWOWIRE::SettingsObject SettingsObject;
|
||||||
|
|
||||||
Ws2801MethodBase(uint8_t pinClock, uint8_t pinData, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
Ws2801MethodBase(uint8_t pinClock, uint8_t pinData, uint16_t pixelCount, size_t elementSize, size_t settingsSize) :
|
||||||
_sizeData(pixelCount * elementSize + settingsSize),
|
_sizeData(pixelCount * elementSize + settingsSize),
|
||||||
_wire(pinClock, pinData)
|
_wire(pinClock, pinData)
|
||||||
@@ -110,6 +112,11 @@ public:
|
|||||||
return _sizeData;
|
return _sizeData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void applySettings(const SettingsObject& settings)
|
||||||
|
{
|
||||||
|
_wire.applySettings(settings);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const size_t _sizeData; // Size of '_data' buffer below
|
const size_t _sizeData; // Size of '_data' buffer below
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user