Skip to content
This repository was archived by the owner on May 6, 2021. It is now read-only.

Commit 2de5308

Browse files
committed
Added test script for non inverted ws2812b
1 parent d56d059 commit 2de5308

File tree

2 files changed

+141
-1
lines changed

2 files changed

+141
-1
lines changed

test/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Needed for testing non-public components
1+
# Needed for testing non-public components
22
include_directories(../libsrc)
33

44
if(ENABLE_SPIDEV)
@@ -65,4 +65,6 @@ target_link_libraries(test_rs232highspeed
6565
if(NOT APPLE AND UNIX)
6666
include_directories(/usr/include)
6767
add_executable(test_uartHighSpeed TestUartHighSpeed.cpp)
68+
69+
add_executable(test_nonInvWs2812b TestNonInvWs2812b.cpp)
6870
endif()

test/TestNonInvWs2812b.cpp

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
2+
// STL includes
3+
#include <cstdint>
4+
#include <vector>
5+
#include <iostream>
6+
7+
std::vector<uint8_t> encode(const std::vector<uint8_t> & data);
8+
void split(const uint8_t byte, uint8_t & out1, uint8_t & out2);
9+
uint8_t encode(const bool bit1, const bool bit2, const bool bit3);
10+
11+
void print(uint8_t byte)
12+
{
13+
for (int i=0; i<8; ++i)
14+
{
15+
if (byte & (1 << i))
16+
{
17+
std::cout << '1';
18+
}
19+
else
20+
{
21+
std::cout << '0';
22+
}
23+
}
24+
}
25+
26+
int main()
27+
{
28+
std::vector<uint8_t> data(3, 0x55);
29+
30+
std::vector<uint8_t> encData = encode(data);
31+
32+
for (uint8_t encByte : encData)
33+
{
34+
std::cout << "0 ";
35+
print(encByte);
36+
std::cout << " 1";
37+
}
38+
std::cout << std::endl;
39+
40+
41+
return 0;
42+
}
43+
44+
std::vector<uint8_t> encode(const std::vector<uint8_t> & data)
45+
{
46+
std::vector<uint8_t> result;
47+
48+
uint8_t previousByte = 0x00;
49+
uint8_t nextByte = 0x00;
50+
for (unsigned iData=0; iData<data.size(); iData+=3)
51+
{
52+
const uint8_t byte1 = data[iData];
53+
const uint8_t byte2 = data[iData+1];
54+
const uint8_t byte3 = data[iData+2];
55+
56+
uint8_t encByte;
57+
encByte = encode(byte1 & 0x80, byte1 & 0x40, byte1 & 0x20);
58+
std::cout << "Encoded byte 1: "; print(encByte); std::cout << std::endl;
59+
split(encByte, previousByte, nextByte);
60+
result.push_back(previousByte);
61+
previousByte = nextByte;
62+
63+
encByte = encode(byte1 & 0x10, byte1 & 0x08, byte1 & 0x04);
64+
split(encByte, previousByte, nextByte);
65+
result.push_back(previousByte);
66+
previousByte = nextByte;
67+
68+
encByte = encode(byte1 & 0x02, byte1 & 0x01, byte2 & 0x80);
69+
split(encByte, previousByte, nextByte);
70+
result.push_back(previousByte);
71+
previousByte = nextByte;
72+
73+
encByte = encode(byte2 & 0x40, byte2 & 0x20, byte2 & 0x10);
74+
split(encByte, previousByte, nextByte);
75+
result.push_back(previousByte);
76+
previousByte = nextByte;
77+
78+
encByte = encode(byte2 & 0x08, byte2 & 0x04, byte2 & 0x02);
79+
split(encByte, previousByte, nextByte);
80+
result.push_back(previousByte);
81+
previousByte = nextByte;
82+
83+
encByte = encode(byte2 & 0x01, byte3 & 0x80, byte3 & 0x40);
84+
split(encByte, previousByte, nextByte);
85+
result.push_back(previousByte);
86+
previousByte = nextByte;
87+
88+
encByte = encode(byte3 & 0x20, byte3 & 0x10, byte3 & 0x08);
89+
split(encByte, previousByte, nextByte);
90+
result.push_back(previousByte);
91+
previousByte = nextByte;
92+
93+
encByte = encode(byte3 & 0x04, byte3 & 0x02, byte3 & 0x01);
94+
split(encByte, previousByte, nextByte);
95+
result.push_back(previousByte);
96+
previousByte = nextByte;
97+
}
98+
99+
return result;
100+
}
101+
102+
void split(const uint8_t byte, uint8_t & out1, uint8_t & out2)
103+
{
104+
print(byte); std::cout << " => ";
105+
print(out2); std::cout << " => ";
106+
out1 &= ~0x0F;
107+
out1 |= (byte & 0x0F) << 4;
108+
// out2 &= ~0xF0;
109+
print(out2); std::cout << " => ";
110+
out2 = (byte & 0xF0) >> 4;
111+
print(out2); std::cout << std::endl;
112+
}
113+
114+
uint8_t encode(const bool bit1, const bool bit2, const bool bit3)
115+
{
116+
if (bit2)
117+
{
118+
uint8_t result = 0x19; // 0--1 01 10-1
119+
if (bit1) result |= 0x02;
120+
// else result &= ~0x02;
121+
122+
if (bit3) result |= 0x60;
123+
// else result &= ~0x60;
124+
125+
return result;
126+
}
127+
else
128+
{
129+
uint8_t result = 0x21;// 0x21 (0-10 01 0--1)
130+
if (bit1) result |= 0x06;
131+
// else result &= ~0x06;
132+
133+
if (bit3) result |= 0x40;
134+
// else result &= ~0x40;
135+
136+
return result;
137+
}
138+
}

0 commit comments

Comments
 (0)