[hal, wpilib] Update Addressable LED support (#8100)

This commit is contained in:
Peter Johnson
2025-07-21 21:52:10 -07:00
committed by GitHub
parent 8aa312fb6f
commit f3af50fc8e
40 changed files with 857 additions and 1104 deletions

View File

@@ -18,7 +18,7 @@ TEST(AddressableLEDSimTest, InitializationCallback) {
HAL_Initialize(500, 0);
BooleanCallback callback;
AddressableLEDSim sim;
AddressableLEDSim sim{0};
auto cb = sim.RegisterInitializedCallback(callback.GetCallback(), false);
EXPECT_FALSE(callback.WasTriggered());
@@ -29,6 +29,26 @@ TEST(AddressableLEDSimTest, InitializationCallback) {
EXPECT_TRUE(callback.GetLastValue());
}
TEST(AddressableLEDSimTest, SetStart) {
HAL_Initialize(500, 0);
AddressableLED led{0};
AddressableLEDSim sim{led};
IntCallback callback;
auto cb = sim.RegisterStartCallback(callback.GetCallback(), false);
EXPECT_EQ(0, sim.GetStart()); // Defaults to 0
std::array<AddressableLED::LEDData, 50> ledData;
led.SetStart(1);
led.SetData(ledData);
EXPECT_EQ(1, sim.GetStart());
EXPECT_TRUE(callback.WasTriggered());
EXPECT_EQ(1, callback.GetLastValue());
}
TEST(AddressableLEDSimTest, SetLength) {
HAL_Initialize(500, 0);
@@ -38,7 +58,7 @@ TEST(AddressableLEDSimTest, SetLength) {
auto cb = sim.RegisterLengthCallback(callback.GetCallback(), false);
EXPECT_EQ(1, sim.GetLength()); // Defaults to 1 led
EXPECT_EQ(0, sim.GetLength()); // Defaults to 0 leds
std::array<AddressableLED::LEDData, 50> ledData;
led.SetLength(ledData.max_size());
@@ -49,51 +69,26 @@ TEST(AddressableLEDSimTest, SetLength) {
EXPECT_EQ(50, callback.GetLastValue());
}
TEST(AddressableLEDSimTest, SetRunning) {
HAL_Initialize(500, 0);
AddressableLEDSim sim = AddressableLEDSim::CreateForIndex(0);
BooleanCallback callback;
auto cb = sim.RegisterRunningCallback(callback.GetCallback(), false);
AddressableLED led{0};
EXPECT_FALSE(sim.GetRunning());
led.Start();
EXPECT_TRUE(sim.GetRunning());
EXPECT_TRUE(callback.WasTriggered());
EXPECT_TRUE(callback.GetLastValue());
callback.Reset();
led.Stop();
EXPECT_FALSE(sim.GetRunning());
EXPECT_TRUE(callback.WasTriggered());
EXPECT_FALSE(callback.GetLastValue());
}
TEST(AddressableLEDSimTest, SetData) {
AddressableLED led{0};
AddressableLEDSim sim = AddressableLEDSim::CreateForChannel(0);
AddressableLEDSim sim{0};
bool callbackHit = false;
std::array<AddressableLED::LEDData, 3> setData;
auto cb = sim.RegisterDataCallback(
[&](std::string_view, const unsigned char* buffer, unsigned int count) {
ASSERT_EQ(count, 12u);
ASSERT_EQ(count, 9u);
EXPECT_EQ(0, buffer[0]);
EXPECT_EQ(0, buffer[1]);
EXPECT_EQ(255u, buffer[2]);
EXPECT_EQ(0, buffer[3]);
EXPECT_EQ(255u, buffer[4]);
EXPECT_EQ(0, buffer[5]);
EXPECT_EQ(0, buffer[4]);
EXPECT_EQ(255u, buffer[5]);
EXPECT_EQ(0, buffer[6]);
EXPECT_EQ(255u, buffer[6]);
EXPECT_EQ(0, buffer[7]);
EXPECT_EQ(255u, buffer[8]);
EXPECT_EQ(0, buffer[9]);
EXPECT_EQ(0, buffer[10]);
EXPECT_EQ(0, buffer[11]);
EXPECT_EQ(0, buffer[8]);
callbackHit = true;
},
@@ -115,17 +110,14 @@ TEST(AddressableLEDSimTest, SetData) {
EXPECT_EQ(0xFF, simData[0].r);
EXPECT_EQ(0x00, simData[0].g);
EXPECT_EQ(0x00, simData[0].b);
EXPECT_EQ(0x00, simData[0].padding);
EXPECT_EQ(0x00, simData[1].r);
EXPECT_EQ(0xFF, simData[1].g);
EXPECT_EQ(0x00, simData[1].b);
EXPECT_EQ(0x00, simData[1].padding);
EXPECT_EQ(0x00, simData[2].r);
EXPECT_EQ(0x00, simData[2].g);
EXPECT_EQ(0xFF, simData[2].b);
EXPECT_EQ(0x00, simData[2].padding);
}
} // namespace frc::sim

View File

@@ -37,5 +37,5 @@ TEST(SimInitializationTest, AllInitialize) {
(void)rrsim;
DutyCycleSim dcsim = DutyCycleSim::CreateForChannel(0);
(void)dcsim;
AddressableLEDSim adLED;
AddressableLEDSim adLED{0};
}