Lumitronix_Iflex_Pro_Workshop
Library to interact with the iFlexPro
P9813BgrFeature.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2 P9813BgrFeature provides feature classes to describe color order and
3 color depth for LumitronixIFlexBus template class when used with P9813s
4 
5 Written by Michael C. Miller.
6 
7 I invest time and resources providing this open source code,
8 please support me by dontating (see https://github.com/Makuna)
9 
10 -------------------------------------------------------------------------
11 This file is part of the LUMITRONIX_iFlex_Workshop library.
12 
13 LumitronixIFlexBus is free software: you can redistribute it and/or modify
14 it under the terms of the GNU Lesser General Public License as
15 published by the Free Software Foundation, either version 3 of
16 the License, or (at your option) any later version.
17 
18 LumitronixIFlexBus is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU Lesser General Public License for more details.
22 
23 You should have received a copy of the GNU Lesser General Public
24 License along with LumitronixIFlex. If not, see
25 <http://www.gnu.org/licenses/>.
26 -------------------------------------------------------------------------*/
27 #pragma once
28 
29 
31  public NeoByteElements<4, RgbColor, uint32_t>,
33 {
34 public:
35  static void applyPixelColor(uint8_t* pPixels, uint16_t indexPixel, ColorObject color)
36  {
37  uint8_t* p = getPixelAddress(pPixels, indexPixel);
38 
39  *p++ = 0xC0 | ((~color.B & 0xC0) >> 2) | ((~color.G & 0xC0) >> 4) | ((~color.R & 0xC0) >> 6);
40  *p++ = color.B;
41  *p++ = color.G;
42  *p = color.R;
43  }
44 
45  static ColorObject retrievePixelColor(const uint8_t* pPixels, uint16_t indexPixel)
46  {
47  ColorObject color;
48  const uint8_t* p = getPixelAddress(pPixels, indexPixel);
49 
50  p++; // ignore the first byte
51  color.B = *p++;
52  color.G = *p++;
53  color.R = *p;
54 
55  return color;
56  }
57 
58  static ColorObject retrievePixelColor_P(PGM_VOID_P pPixels, uint16_t indexPixel)
59  {
60  ColorObject color;
61  const uint8_t* p = getPixelAddress((const uint8_t*)pPixels, indexPixel);
62 
63  pgm_read_byte(p++); // ignore the first byte
64  color.B = pgm_read_byte(p++);
65  color.G = pgm_read_byte(p++);
66  color.R = pgm_read_byte(p);
67 
68  return color;
69  }
70 
71 };
72 
73 
74 
75 
76 
77 
#define PGM_VOID_P
Definition: NeoUtil.h:42
Definition: NeoByteElements.h:101
static uint8_t * getPixelAddress(uint8_t *pPixels, uint16_t indexPixel)
Definition: NeoByteElements.h:43
T_COLOR_OBJECT ColorObject
Definition: NeoByteElements.h:41
Definition: NeoElementsNoSettings.h:30
Definition: P9813BgrFeature.h:33
static void applyPixelColor(uint8_t *pPixels, uint16_t indexPixel, ColorObject color)
Definition: P9813BgrFeature.h:35
static ColorObject retrievePixelColor(const uint8_t *pPixels, uint16_t indexPixel)
Definition: P9813BgrFeature.h:45
static ColorObject retrievePixelColor_P(PGM_VOID_P pPixels, uint16_t indexPixel)
Definition: P9813BgrFeature.h:58