forked from Makuna/NeoPixelBus
Ucs890x (#517)
This commit is contained in:
1 parent
0913134003
commit
2040a4837d
10 files changed
+737
-53
No files matched your search
+273
-26
@@ -26,7 +26,7 @@ License along with NeoPixel. If not, see
|
||||
-------------------------------------------------------------------------*/
|
||||
#pragma once
|
||||
|
||||
class Neo3Elements
|
||||
class Neo3ByteElements
|
||||
{
|
||||
public:
|
||||
static const size_t PixelSize = 3;
|
||||
@@ -64,7 +64,7 @@ public:
|
||||
static void movePixelsInc_P(uint8_t* pPixelDest, PGM_VOID_P pPixelSrc, uint16_t count)
|
||||
{
|
||||
uint8_t* pEnd = pPixelDest + (count * PixelSize);
|
||||
const uint8_t* pSrc = (const uint8_t*)pPixelSrc;
|
||||
const uint8_t* pSrc = reinterpret_cast<const uint8_t*>(pPixelSrc);
|
||||
while (pPixelDest < pEnd)
|
||||
{
|
||||
*pPixelDest++ = pgm_read_byte(pSrc++);
|
||||
@@ -84,7 +84,7 @@ public:
|
||||
typedef RgbColor ColorObject;
|
||||
};
|
||||
|
||||
class Neo4Elements
|
||||
class Neo4ByteElements
|
||||
{
|
||||
public:
|
||||
static const size_t PixelSize = 4;
|
||||
@@ -100,8 +100,8 @@ public:
|
||||
|
||||
static void replicatePixel(uint8_t* pPixelDest, const uint8_t* pPixelSrc, uint16_t count)
|
||||
{
|
||||
uint32_t* pDest = (uint32_t*)pPixelDest;
|
||||
const uint32_t* pSrc = (const uint32_t*)pPixelSrc;
|
||||
uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest);
|
||||
const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc);
|
||||
|
||||
uint32_t* pEnd = pDest + count;
|
||||
while (pDest < pEnd)
|
||||
@@ -112,8 +112,8 @@ public:
|
||||
|
||||
static void movePixelsInc(uint8_t* pPixelDest, const uint8_t* pPixelSrc, uint16_t count)
|
||||
{
|
||||
uint32_t* pDest = (uint32_t*)pPixelDest;
|
||||
const uint32_t* pSrc = (uint32_t*)pPixelSrc;
|
||||
uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest);
|
||||
const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc);
|
||||
uint32_t* pEnd = pDest + count;
|
||||
while (pDest < pEnd)
|
||||
{
|
||||
@@ -123,8 +123,8 @@ public:
|
||||
|
||||
static void movePixelsInc_P(uint8_t* pPixelDest, PGM_VOID_P pPixelSrc, uint16_t count)
|
||||
{
|
||||
uint32_t* pDest = (uint32_t*)pPixelDest;
|
||||
const uint32_t* pSrc = (const uint32_t*)pPixelSrc;
|
||||
uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest);
|
||||
const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc);
|
||||
uint32_t* pEnd = pDest + count;
|
||||
while (pDest < pEnd)
|
||||
{
|
||||
@@ -134,8 +134,8 @@ public:
|
||||
|
||||
static void movePixelsDec(uint8_t* pPixelDest, const uint8_t* pPixelSrc, uint16_t count)
|
||||
{
|
||||
uint32_t* pDest = (uint32_t*)pPixelDest;
|
||||
const uint32_t* pSrc = (uint32_t*)pPixelSrc;
|
||||
uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest);
|
||||
const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc);
|
||||
uint32_t* pDestBack = pDest + count;
|
||||
const uint32_t* pSrcBack = pSrc + count;
|
||||
while (pDestBack > pDest)
|
||||
@@ -147,8 +147,133 @@ public:
|
||||
typedef RgbwColor ColorObject;
|
||||
};
|
||||
|
||||
|
||||
class Neo3ElementsNoSettings : public Neo3Elements
|
||||
class Neo6ByteElements
|
||||
{
|
||||
public:
|
||||
static const size_t PixelSize = 6;
|
||||
|
||||
static uint8_t* getPixelAddress(uint8_t* pPixels, uint16_t indexPixel)
|
||||
{
|
||||
return pPixels + indexPixel * PixelSize;
|
||||
}
|
||||
static const uint8_t* getPixelAddress(const uint8_t* pPixels, uint16_t indexPixel)
|
||||
{
|
||||
return pPixels + indexPixel * PixelSize;
|
||||
}
|
||||
|
||||
static void replicatePixel(uint8_t* pPixelDest, const uint8_t* pPixelSrc, uint16_t count)
|
||||
{
|
||||
uint16_t* pDest = reinterpret_cast<uint16_t*>(pPixelDest);
|
||||
const uint16_t* pSrc = reinterpret_cast<const uint16_t*>(pPixelSrc);
|
||||
|
||||
uint16_t* pEnd = pDest + (count * PixelSize / 2);
|
||||
while (pDest < pEnd)
|
||||
{
|
||||
*pDest++ = *pSrc;
|
||||
}
|
||||
}
|
||||
|
||||
static void movePixelsInc(uint8_t* pPixelDest, const uint8_t* pPixelSrc, uint16_t count)
|
||||
{
|
||||
uint16_t* pDest = reinterpret_cast<uint16_t*>(pPixelDest);
|
||||
const uint16_t* pSrc = reinterpret_cast<const uint16_t*>(pPixelSrc);
|
||||
uint16_t* pEnd = pDest + (count * PixelSize / 2);
|
||||
while (pDest < pEnd)
|
||||
{
|
||||
*pDest++ = *pSrc++;
|
||||
}
|
||||
}
|
||||
|
||||
static void movePixelsInc_P(uint8_t* pPixelDest, PGM_VOID_P pPixelSrc, uint16_t count)
|
||||
{
|
||||
uint16_t* pDest = reinterpret_cast<uint16_t*>(pPixelDest);
|
||||
const uint16_t* pSrc = reinterpret_cast<const uint16_t*>(pPixelSrc);
|
||||
uint16_t* pEnd = pDest + (count * PixelSize / 2);
|
||||
while (pDest < pEnd)
|
||||
{
|
||||
*pDest++ = pgm_read_word(pSrc++);
|
||||
}
|
||||
}
|
||||
|
||||
static void movePixelsDec(uint8_t* pPixelDest, const uint8_t* pPixelSrc, uint16_t count)
|
||||
{
|
||||
uint16_t* pDest = reinterpret_cast<uint16_t*>(pPixelDest);
|
||||
const uint16_t* pSrc = reinterpret_cast<const uint16_t*>(pPixelSrc);
|
||||
uint16_t* pDestBack = pDest + (count * PixelSize / 2);
|
||||
const uint16_t* pSrcBack = pSrc + (count * PixelSize / 2);
|
||||
while (pDestBack > pDest)
|
||||
{
|
||||
*--pDestBack = *--pSrcBack;
|
||||
}
|
||||
}
|
||||
|
||||
typedef Rgb48Color ColorObject;
|
||||
};
|
||||
|
||||
class Neo8ByteElements
|
||||
{
|
||||
public:
|
||||
static const size_t PixelSize = 8;
|
||||
|
||||
static uint8_t* getPixelAddress(uint8_t* pPixels, uint16_t indexPixel)
|
||||
{
|
||||
return pPixels + indexPixel * PixelSize;
|
||||
}
|
||||
static const uint8_t* getPixelAddress(const uint8_t* pPixels, uint16_t indexPixel)
|
||||
{
|
||||
return pPixels + indexPixel * PixelSize;
|
||||
}
|
||||
|
||||
static void replicatePixel(uint8_t* pPixelDest, const uint8_t* pPixelSrc, uint16_t count)
|
||||
{
|
||||
uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest);
|
||||
const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc);
|
||||
|
||||
uint32_t* pEnd = pDest + (count * PixelSize);
|
||||
while (pDest < pEnd)
|
||||
{
|
||||
*pDest++ = *pSrc;
|
||||
}
|
||||
}
|
||||
|
||||
static void movePixelsInc(uint8_t* pPixelDest, const uint8_t* pPixelSrc, uint16_t count)
|
||||
{
|
||||
uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest);
|
||||
const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc);
|
||||
uint32_t* pEnd = pDest + (count * PixelSize);
|
||||
while (pDest < pEnd)
|
||||
{
|
||||
*pDest++ = *pSrc++;
|
||||
}
|
||||
}
|
||||
|
||||
static void movePixelsInc_P(uint8_t* pPixelDest, PGM_VOID_P pPixelSrc, uint16_t count)
|
||||
{
|
||||
uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest);
|
||||
const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc);
|
||||
uint32_t* pEnd = pDest + (count * PixelSize);
|
||||
while (pDest < pEnd)
|
||||
{
|
||||
*pDest++ = pgm_read_dword(pSrc++);
|
||||
}
|
||||
}
|
||||
|
||||
static void movePixelsDec(uint8_t* pPixelDest, const uint8_t* pPixelSrc, uint16_t count)
|
||||
{
|
||||
uint32_t* pDest = reinterpret_cast<uint32_t*>(pPixelDest);
|
||||
const uint32_t* pSrc = reinterpret_cast<const uint32_t*>(pPixelSrc);
|
||||
uint32_t* pDestBack = pDest + (count * PixelSize);
|
||||
const uint32_t* pSrcBack = pSrc + (count * PixelSize);
|
||||
while (pDestBack > pDest)
|
||||
{
|
||||
*--pDestBack = *--pSrcBack;
|
||||
}
|
||||
}
|
||||
|
||||
typedef Rgbw64Color ColorObject;
|
||||
};
|
||||
|
||||
class Neo3ByteElementsNoSettings : public Neo3ByteElements
|
||||
{
|
||||
public:
|
||||
typedef NeoNoSettings SettingsObject;
|
||||
@@ -169,7 +294,7 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class Neo4ElementsNoSettings : public Neo4Elements
|
||||
class Neo4ByteElementsNoSettings : public Neo4ByteElements
|
||||
{
|
||||
public:
|
||||
typedef NeoNoSettings SettingsObject;
|
||||
@@ -190,7 +315,49 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class NeoGrbFeature : public Neo3ElementsNoSettings
|
||||
class Neo6ByteElementsNoSettings : public Neo6ByteElements
|
||||
{
|
||||
public:
|
||||
typedef NeoNoSettings SettingsObject;
|
||||
static const size_t SettingsSize = 0;
|
||||
|
||||
static void applySettings(uint8_t*, const SettingsObject&)
|
||||
{
|
||||
}
|
||||
|
||||
static uint8_t* pixels(uint8_t* pData)
|
||||
{
|
||||
return pData;
|
||||
}
|
||||
|
||||
static const uint8_t* pixels(const uint8_t* pData)
|
||||
{
|
||||
return pData;
|
||||
}
|
||||
};
|
||||
|
||||
class Neo8ByteElementsNoSettings : public Neo8ByteElements
|
||||
{
|
||||
public:
|
||||
typedef NeoNoSettings SettingsObject;
|
||||
static const size_t SettingsSize = 0;
|
||||
|
||||
static void applySettings(uint8_t*, const SettingsObject&)
|
||||
{
|
||||
}
|
||||
|
||||
static uint8_t* pixels(uint8_t* pData)
|
||||
{
|
||||
return pData;
|
||||
}
|
||||
|
||||
static const uint8_t* pixels(const uint8_t* pData)
|
||||
{
|
||||
return pData;
|
||||
}
|
||||
};
|
||||
|
||||
class NeoGrbFeature : public Neo3ByteElementsNoSettings
|
||||
{
|
||||
public:
|
||||
static void applyPixelColor(uint8_t* pPixels, uint16_t indexPixel, ColorObject color)
|
||||
@@ -217,7 +384,7 @@ public:
|
||||
static ColorObject retrievePixelColor_P(PGM_VOID_P pPixels, uint16_t indexPixel)
|
||||
{
|
||||
ColorObject color;
|
||||
const uint8_t* p = getPixelAddress((const uint8_t*)pPixels, indexPixel);
|
||||
const uint8_t* p = getPixelAddress(reinterpret_cast<const uint8_t*>(pPixels), indexPixel);
|
||||
|
||||
color.G = pgm_read_byte(p++);
|
||||
color.R = pgm_read_byte(p++);
|
||||
@@ -228,7 +395,7 @@ public:
|
||||
|
||||
};
|
||||
|
||||
class NeoGrbwFeature : public Neo4ElementsNoSettings
|
||||
class NeoGrbwFeature : public Neo4ByteElementsNoSettings
|
||||
{
|
||||
public:
|
||||
static void applyPixelColor(uint8_t* pPixels, uint16_t indexPixel, ColorObject color)
|
||||
@@ -258,7 +425,7 @@ public:
|
||||
static ColorObject retrievePixelColor_P(PGM_VOID_P pPixels, uint16_t indexPixel)
|
||||
{
|
||||
ColorObject color;
|
||||
const uint8_t* p = getPixelAddress((const uint8_t*)pPixels, indexPixel);
|
||||
const uint8_t* p = getPixelAddress(reinterpret_cast<const uint8_t*>(pPixels), indexPixel);
|
||||
|
||||
color.G = pgm_read_byte(p++);
|
||||
color.R = pgm_read_byte(p++);
|
||||
@@ -270,7 +437,7 @@ public:
|
||||
|
||||
};
|
||||
|
||||
class NeoRgbwFeature : public Neo4ElementsNoSettings
|
||||
class NeoRgbwFeature : public Neo4ByteElementsNoSettings
|
||||
{
|
||||
public:
|
||||
static void applyPixelColor(uint8_t* pPixels, uint16_t indexPixel, ColorObject color)
|
||||
@@ -299,7 +466,7 @@ public:
|
||||
static ColorObject retrievePixelColor_P(PGM_VOID_P pPixels, uint16_t indexPixel)
|
||||
{
|
||||
ColorObject color;
|
||||
const uint8_t* p = getPixelAddress((const uint8_t*)pPixels, indexPixel);
|
||||
const uint8_t* p = getPixelAddress(reinterpret_cast<const uint8_t*>(pPixels), indexPixel);
|
||||
|
||||
color.R = pgm_read_byte(p++);
|
||||
color.G = pgm_read_byte(p++);
|
||||
@@ -311,7 +478,7 @@ public:
|
||||
|
||||
};
|
||||
|
||||
class NeoRgbFeature : public Neo3ElementsNoSettings
|
||||
class NeoRgbFeature : public Neo3ByteElementsNoSettings
|
||||
{
|
||||
public:
|
||||
static void applyPixelColor(uint8_t* pPixels, uint16_t indexPixel, ColorObject color)
|
||||
@@ -338,7 +505,7 @@ public:
|
||||
static ColorObject retrievePixelColor_P(PGM_VOID_P pPixels, uint16_t indexPixel)
|
||||
{
|
||||
ColorObject color;
|
||||
const uint8_t* p = getPixelAddress((const uint8_t*)pPixels, indexPixel);
|
||||
const uint8_t* p = getPixelAddress(reinterpret_cast<const uint8_t*>(pPixels), indexPixel);
|
||||
|
||||
color.R = pgm_read_byte(p++);
|
||||
color.G = pgm_read_byte(p++);
|
||||
@@ -349,7 +516,7 @@ public:
|
||||
|
||||
};
|
||||
|
||||
class NeoBrgFeature : public Neo3ElementsNoSettings
|
||||
class NeoBrgFeature : public Neo3ByteElementsNoSettings
|
||||
{
|
||||
public:
|
||||
static void applyPixelColor(uint8_t* pPixels, uint16_t indexPixel, ColorObject color)
|
||||
@@ -376,7 +543,7 @@ public:
|
||||
static ColorObject retrievePixelColor_P(PGM_VOID_P pPixels, uint16_t indexPixel)
|
||||
{
|
||||
ColorObject color;
|
||||
const uint8_t* p = getPixelAddress((const uint8_t*)pPixels, indexPixel);
|
||||
const uint8_t* p = getPixelAddress(reinterpret_cast<const uint8_t*>(pPixels), indexPixel);
|
||||
|
||||
color.B = pgm_read_byte(p++);
|
||||
color.R = pgm_read_byte(p++);
|
||||
@@ -387,7 +554,7 @@ public:
|
||||
|
||||
};
|
||||
|
||||
class NeoRbgFeature : public Neo3ElementsNoSettings
|
||||
class NeoRbgFeature : public Neo3ByteElementsNoSettings
|
||||
{
|
||||
public:
|
||||
static void applyPixelColor(uint8_t* pPixels, uint16_t indexPixel, ColorObject color)
|
||||
@@ -415,7 +582,7 @@ public:
|
||||
static ColorObject retrievePixelColor_P(PGM_VOID_P pPixels, uint16_t indexPixel)
|
||||
{
|
||||
ColorObject color;
|
||||
const uint8_t* p = getPixelAddress((const uint8_t*)pPixels, indexPixel);
|
||||
const uint8_t* p = getPixelAddress(reinterpret_cast<const uint8_t*>(pPixels), indexPixel);
|
||||
|
||||
color.R = pgm_read_byte(p++);
|
||||
color.B = pgm_read_byte(p++);
|
||||
@@ -425,3 +592,83 @@ public:
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
class NeoRgbw64Feature : public Neo8ByteElementsNoSettings
|
||||
{
|
||||
public:
|
||||
static void applyPixelColor(uint8_t* pPixels, uint16_t indexPixel, ColorObject color)
|
||||
{
|
||||
uint16_t* p = reinterpret_cast<uint16_t *>(getPixelAddress(pPixels, indexPixel));
|
||||
|
||||
*p++ = color.R;
|
||||
*p++ = color.G;
|
||||
*p++ = color.B;
|
||||
*p = color.W;
|
||||
}
|
||||
|
||||
static ColorObject retrievePixelColor(const uint8_t* pPixels, uint16_t indexPixel)
|
||||
{
|
||||
ColorObject color;
|
||||
const uint16_t* p = reinterpret_cast<const uint16_t*>(getPixelAddress(pPixels, indexPixel));
|
||||
|
||||
color.R = *p++;
|
||||
color.G = *p++;
|
||||
color.B = *p++;
|
||||
color.W = *p;
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
static ColorObject retrievePixelColor_P(PGM_VOID_P pPixels, uint16_t indexPixel)
|
||||
{
|
||||
ColorObject color;
|
||||
const uint16_t* p = reinterpret_cast<const uint16_t*>(getPixelAddress(reinterpret_cast<const uint8_t*>(pPixels), indexPixel));
|
||||
|
||||
color.R = pgm_read_word(p++);
|
||||
color.G = pgm_read_word(p++);
|
||||
color.B = pgm_read_word(p++);
|
||||
color.W = pgm_read_word(p);
|
||||
|
||||
return color;
|
||||
}
|
||||
};
|
||||
|
||||
class NeoRgb48Feature : public Neo6ByteElementsNoSettings
|
||||
{
|
||||
public:
|
||||
static void applyPixelColor(uint8_t* pPixels, uint16_t indexPixel, ColorObject color)
|
||||
{
|
||||
uint16_t* p = reinterpret_cast<uint16_t*>(getPixelAddress(pPixels, indexPixel));
|
||||
|
||||
*p++ = color.R;
|
||||
*p++ = color.G;
|
||||
*p = color.B;
|
||||
}
|
||||
|
||||
static ColorObject retrievePixelColor(const uint8_t* pPixels, uint16_t indexPixel)
|
||||
{
|
||||
ColorObject color;
|
||||
const uint16_t* p = reinterpret_cast<const uint16_t*>(getPixelAddress(pPixels, indexPixel));
|
||||
|
||||
color.R = *p++;
|
||||
color.G = *p++;
|
||||
color.B = *p;
|
||||
|
||||
return color;
|
||||
}
|
||||
|
||||
static ColorObject retrievePixelColor_P(PGM_VOID_P pPixels, uint16_t indexPixel)
|
||||
{
|
||||
ColorObject color;
|
||||
const uint16_t* p = reinterpret_cast<const uint16_t*>(getPixelAddress(reinterpret_cast<const uint8_t*>(pPixels), indexPixel));
|
||||
|
||||
color.R = pgm_read_word(p++);
|
||||
color.G = pgm_read_word(p++);
|
||||
color.B = pgm_read_word(p);
|
||||
|
||||
return color;
|
||||
}
|
||||
};
|
||||
|
||||
typedef NeoRgb48Feature NeoRgbUcs8903Feature;
|
||||
typedef NeoRgbw64Feature NeoRgbwUcs8904Feature;
|
||||
Reference in new issue
Block a user