From cd0e7fb7d719d407dd7a97d199d508eff98282c2 Mon Sep 17 00:00:00 2001 From: Thad House Date: Tue, 22 Jul 2025 17:45:10 -0700 Subject: [PATCH] [hal, wpilib] Fix LED key and byte order (#8110) --- .../native/include/hal/AddressableLEDTypes.h | 4 ++-- .../main/native/systemcore/AddressableLED.cpp | 6 +++--- .../cpp/simulation/AddressableLEDSimTest.cpp | 8 ++++---- .../wpi/first/wpilibj/AddressableLEDBuffer.java | 8 ++++---- .../first/wpilibj/AddressableLEDBufferTest.java | 4 ++-- .../simulation/AddressableLEDSimTest.java | 16 ++++++++-------- 6 files changed, 23 insertions(+), 23 deletions(-) diff --git a/hal/src/main/native/include/hal/AddressableLEDTypes.h b/hal/src/main/native/include/hal/AddressableLEDTypes.h index 86d505fc0e..7498b769e7 100644 --- a/hal/src/main/native/include/hal/AddressableLEDTypes.h +++ b/hal/src/main/native/include/hal/AddressableLEDTypes.h @@ -12,9 +12,9 @@ /** structure for holding one LED's color data. */ struct HAL_AddressableLEDData { - uint8_t b; ///< blue value - uint8_t g; ///< green value uint8_t r; ///< red value + uint8_t g; ///< green value + uint8_t b; ///< blue value }; /** diff --git a/hal/src/main/native/systemcore/AddressableLED.cpp b/hal/src/main/native/systemcore/AddressableLED.cpp index 13c1a1e194..0386192586 100644 --- a/hal/src/main/native/systemcore/AddressableLED.cpp +++ b/hal/src/main/native/systemcore/AddressableLED.cpp @@ -26,15 +26,15 @@ using namespace hal; -#define LEDS_PREFIX "/leds/" +#define IO_PREFIX "/io/" namespace { -constexpr const char* kRawKey = LEDS_PREFIX "raw"; +constexpr const char* kLedsKey = IO_PREFIX "leds"; struct AddressableLEDs { explicit AddressableLEDs(nt::NetworkTableInstance inst) - : rawPub{inst.GetRawTopic(kRawKey).Publish( + : rawPub{inst.GetRawTopic(kLedsKey).Publish( "raw", {.periodic = 0.005, .sendAll = true})} {} nt::RawPublisher rawPub; diff --git a/wpilibc/src/test/native/cpp/simulation/AddressableLEDSimTest.cpp b/wpilibc/src/test/native/cpp/simulation/AddressableLEDSimTest.cpp index 378561d57d..8a56e935a8 100644 --- a/wpilibc/src/test/native/cpp/simulation/AddressableLEDSimTest.cpp +++ b/wpilibc/src/test/native/cpp/simulation/AddressableLEDSimTest.cpp @@ -78,17 +78,17 @@ TEST(AddressableLEDSimTest, SetData) { auto cb = sim.RegisterDataCallback( [&](std::string_view, const unsigned char* buffer, unsigned int count) { ASSERT_EQ(count, 9u); - EXPECT_EQ(0, buffer[0]); + EXPECT_EQ(255u, buffer[0]); EXPECT_EQ(0, buffer[1]); - EXPECT_EQ(255u, buffer[2]); + EXPECT_EQ(0, buffer[2]); EXPECT_EQ(0, buffer[3]); EXPECT_EQ(255u, buffer[4]); EXPECT_EQ(0, buffer[5]); - EXPECT_EQ(255u, buffer[6]); + EXPECT_EQ(0, buffer[6]); EXPECT_EQ(0, buffer[7]); - EXPECT_EQ(0, buffer[8]); + EXPECT_EQ(255u, buffer[8]); callbackHit = true; }, diff --git a/wpilibj/src/main/java/edu/wpi/first/wpilibj/AddressableLEDBuffer.java b/wpilibj/src/main/java/edu/wpi/first/wpilibj/AddressableLEDBuffer.java index a726f46745..a95a74a0c9 100644 --- a/wpilibj/src/main/java/edu/wpi/first/wpilibj/AddressableLEDBuffer.java +++ b/wpilibj/src/main/java/edu/wpi/first/wpilibj/AddressableLEDBuffer.java @@ -27,9 +27,9 @@ public class AddressableLEDBuffer implements LEDReader, LEDWriter { */ @Override 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) + 2] = (byte) r; + m_buffer[(index * 3) + 2] = (byte) b; } /** @@ -50,7 +50,7 @@ public class AddressableLEDBuffer implements LEDReader, LEDWriter { */ @Override 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 public int getBlue(int index) { - return m_buffer[index * 3] & 0xFF; + return m_buffer[index * 3 + 2] & 0xFF; } /** diff --git a/wpilibj/src/test/java/edu/wpi/first/wpilibj/AddressableLEDBufferTest.java b/wpilibj/src/test/java/edu/wpi/first/wpilibj/AddressableLEDBufferTest.java index 267cc293ca..f1d92d5812 100644 --- a/wpilibj/src/test/java/edu/wpi/first/wpilibj/AddressableLEDBufferTest.java +++ b/wpilibj/src/test/java/edu/wpi/first/wpilibj/AddressableLEDBufferTest.java @@ -24,9 +24,9 @@ class AddressableLEDBufferTest { var buffer = new AddressableLEDBuffer(1); buffer.setHSV(0, h, s, v); 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) b, buffer.m_buffer[0], "B value didn't match")); + () -> assertEquals((byte) b, buffer.m_buffer[2], "B value didn't match")); } static Stream hsvToRgbProvider() { diff --git a/wpilibj/src/test/java/edu/wpi/first/wpilibj/simulation/AddressableLEDSimTest.java b/wpilibj/src/test/java/edu/wpi/first/wpilibj/simulation/AddressableLEDSimTest.java index 52a7d70736..d8fcc4c729 100644 --- a/wpilibj/src/test/java/edu/wpi/first/wpilibj/simulation/AddressableLEDSimTest.java +++ b/wpilibj/src/test/java/edu/wpi/first/wpilibj/simulation/AddressableLEDSimTest.java @@ -73,32 +73,32 @@ class AddressableLEDSimTest { System.out.println(Arrays.toString(data)); assertEquals(9, data.length); - assertEquals((byte) 0, data[0]); + assertEquals((byte) 255, data[0]); assertEquals((byte) 0, data[1]); - assertEquals((byte) 255, data[2]); + assertEquals((byte) 0, data[2]); assertEquals((byte) 0, data[3]); assertEquals((byte) 255, data[4]); assertEquals((byte) 0, data[5]); - assertEquals((byte) 255, data[6]); + assertEquals((byte) 0, data[6]); assertEquals((byte) 0, data[7]); - assertEquals((byte) 0, data[8]); + assertEquals((byte) 255, data[8]); assertTrue(callback.wasTriggered()); data = callback.getSetValue(); - assertEquals((byte) 0, data[0]); + assertEquals((byte) 255, data[0]); assertEquals((byte) 0, data[1]); - assertEquals((byte) 255, data[2]); + assertEquals((byte) 0, data[2]); assertEquals((byte) 0, data[3]); assertEquals((byte) 255, data[4]); assertEquals((byte) 0, data[5]); - assertEquals((byte) 255, data[6]); + assertEquals((byte) 0, data[6]); assertEquals((byte) 0, data[7]); - assertEquals((byte) 0, data[8]); + assertEquals((byte) 255, data[8]); } } }