[hal, wpilib] Fix LED key and byte order (#8110)

This commit is contained in:
Thad House
2025-07-22 17:45:10 -07:00
committed by GitHub
parent 60098b0685
commit cd0e7fb7d7
6 changed files with 23 additions and 23 deletions

View File

@@ -12,9 +12,9 @@
/** structure for holding one LED's color data. */ /** structure for holding one LED's color data. */
struct HAL_AddressableLEDData { struct HAL_AddressableLEDData {
uint8_t b; ///< blue value
uint8_t g; ///< green value
uint8_t r; ///< red value uint8_t r; ///< red value
uint8_t g; ///< green value
uint8_t b; ///< blue value
}; };
/** /**

View File

@@ -26,15 +26,15 @@
using namespace hal; using namespace hal;
#define LEDS_PREFIX "/leds/" #define IO_PREFIX "/io/"
namespace { namespace {
constexpr const char* kRawKey = LEDS_PREFIX "raw"; constexpr const char* kLedsKey = IO_PREFIX "leds";
struct AddressableLEDs { struct AddressableLEDs {
explicit AddressableLEDs(nt::NetworkTableInstance inst) explicit AddressableLEDs(nt::NetworkTableInstance inst)
: rawPub{inst.GetRawTopic(kRawKey).Publish( : rawPub{inst.GetRawTopic(kLedsKey).Publish(
"raw", {.periodic = 0.005, .sendAll = true})} {} "raw", {.periodic = 0.005, .sendAll = true})} {}
nt::RawPublisher rawPub; nt::RawPublisher rawPub;

View File

@@ -78,17 +78,17 @@ TEST(AddressableLEDSimTest, SetData) {
auto cb = sim.RegisterDataCallback( auto cb = sim.RegisterDataCallback(
[&](std::string_view, const unsigned char* buffer, unsigned int count) { [&](std::string_view, const unsigned char* buffer, unsigned int count) {
ASSERT_EQ(count, 9u); ASSERT_EQ(count, 9u);
EXPECT_EQ(0, buffer[0]); EXPECT_EQ(255u, buffer[0]);
EXPECT_EQ(0, buffer[1]); EXPECT_EQ(0, buffer[1]);
EXPECT_EQ(255u, buffer[2]); EXPECT_EQ(0, buffer[2]);
EXPECT_EQ(0, buffer[3]); EXPECT_EQ(0, buffer[3]);
EXPECT_EQ(255u, buffer[4]); EXPECT_EQ(255u, buffer[4]);
EXPECT_EQ(0, buffer[5]); EXPECT_EQ(0, buffer[5]);
EXPECT_EQ(255u, buffer[6]); EXPECT_EQ(0, buffer[6]);
EXPECT_EQ(0, buffer[7]); EXPECT_EQ(0, buffer[7]);
EXPECT_EQ(0, buffer[8]); EXPECT_EQ(255u, buffer[8]);
callbackHit = true; callbackHit = true;
}, },

View File

@@ -27,9 +27,9 @@ public class AddressableLEDBuffer implements LEDReader, LEDWriter {
*/ */
@Override @Override
public void setRGB(int index, int r, int g, int b) { public void setRGB(int index, int r, int g, int b) {
m_buffer[index * 3] = (byte) b; m_buffer[index * 3] = (byte) r;
m_buffer[(index * 3) + 1] = (byte) g; m_buffer[(index * 3) + 1] = (byte) g;
m_buffer[(index * 3) + 2] = (byte) r; m_buffer[(index * 3) + 2] = (byte) b;
} }
/** /**
@@ -50,7 +50,7 @@ public class AddressableLEDBuffer implements LEDReader, LEDWriter {
*/ */
@Override @Override
public int getRed(int index) { public int getRed(int index) {
return m_buffer[index * 3 + 2] & 0xFF; return m_buffer[index * 3] & 0xFF;
} }
/** /**
@@ -72,7 +72,7 @@ public class AddressableLEDBuffer implements LEDReader, LEDWriter {
*/ */
@Override @Override
public int getBlue(int index) { public int getBlue(int index) {
return m_buffer[index * 3] & 0xFF; return m_buffer[index * 3 + 2] & 0xFF;
} }
/** /**

View File

@@ -24,9 +24,9 @@ class AddressableLEDBufferTest {
var buffer = new AddressableLEDBuffer(1); var buffer = new AddressableLEDBuffer(1);
buffer.setHSV(0, h, s, v); buffer.setHSV(0, h, s, v);
assertAll( assertAll(
() -> assertEquals((byte) r, buffer.m_buffer[2], "R value didn't match"), () -> assertEquals((byte) r, buffer.m_buffer[0], "R value didn't match"),
() -> assertEquals((byte) g, buffer.m_buffer[1], "G value didn't match"), () -> assertEquals((byte) g, buffer.m_buffer[1], "G value didn't match"),
() -> assertEquals((byte) b, buffer.m_buffer[0], "B value didn't match")); () -> assertEquals((byte) b, buffer.m_buffer[2], "B value didn't match"));
} }
static Stream<Arguments> hsvToRgbProvider() { static Stream<Arguments> hsvToRgbProvider() {

View File

@@ -73,32 +73,32 @@ class AddressableLEDSimTest {
System.out.println(Arrays.toString(data)); System.out.println(Arrays.toString(data));
assertEquals(9, data.length); assertEquals(9, data.length);
assertEquals((byte) 0, data[0]); assertEquals((byte) 255, data[0]);
assertEquals((byte) 0, data[1]); assertEquals((byte) 0, data[1]);
assertEquals((byte) 255, data[2]); assertEquals((byte) 0, data[2]);
assertEquals((byte) 0, data[3]); assertEquals((byte) 0, data[3]);
assertEquals((byte) 255, data[4]); assertEquals((byte) 255, data[4]);
assertEquals((byte) 0, data[5]); assertEquals((byte) 0, data[5]);
assertEquals((byte) 255, data[6]); assertEquals((byte) 0, data[6]);
assertEquals((byte) 0, data[7]); assertEquals((byte) 0, data[7]);
assertEquals((byte) 0, data[8]); assertEquals((byte) 255, data[8]);
assertTrue(callback.wasTriggered()); assertTrue(callback.wasTriggered());
data = callback.getSetValue(); data = callback.getSetValue();
assertEquals((byte) 0, data[0]); assertEquals((byte) 255, data[0]);
assertEquals((byte) 0, data[1]); assertEquals((byte) 0, data[1]);
assertEquals((byte) 255, data[2]); assertEquals((byte) 0, data[2]);
assertEquals((byte) 0, data[3]); assertEquals((byte) 0, data[3]);
assertEquals((byte) 255, data[4]); assertEquals((byte) 255, data[4]);
assertEquals((byte) 0, data[5]); assertEquals((byte) 0, data[5]);
assertEquals((byte) 255, data[6]); assertEquals((byte) 0, data[6]);
assertEquals((byte) 0, data[7]); assertEquals((byte) 0, data[7]);
assertEquals((byte) 0, data[8]); assertEquals((byte) 255, data[8]);
} }
} }
} }