physical: Conform to LED class kernel ABI

The kernel says the following about the LED sysfs interface:

> LED handling under Linux
> ========================
>
> In its simplest form, the LED class just allows control of LEDs from
> userspace. LEDs appear in /sys/class/leds/. The maximum brightness of the
> LED is defined in max_brightness file. The brightness file will set the brightness
> of the LED (taking a value 0-max_brightness). Most LEDs don't have hardware
> brightness support so will just be turned on for non-zero brightness settings.

The existing code assumed that max_brightness always held a value of
255 and defined a constant for it. Instead, use a class variable to
cache the max brightness for the associated LED.

Change-Id: I2d8f46de0cddac5f9d8ff5444449518bb4056130
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
diff --git a/physical.cpp b/physical.cpp
index ae9ff1c..e614b99 100644
--- a/physical.cpp
+++ b/physical.cpp
@@ -27,6 +27,7 @@
 /** @brief Populates key parameters */
 void Physical::setInitialState()
 {
+    assert = led.getMaxBrightness();
     auto trigger = led.getTrigger();
     if (trigger == "timer")
     {
@@ -44,7 +45,7 @@
 
         // Cache current LED state
         auto brightness = led.getBrightness();
-        if (brightness == ASSERT)
+        if (brightness == assert)
         {
             sdbusplus::xyz::openbmc_project::Led::server::Physical::state(
                 Action::On);
@@ -89,7 +90,7 @@
 
 void Physical::stableStateOperation(Action action)
 {
-    auto value = (action == Action::On) ? ASSERT : DEASSERT;
+    auto value = (action == Action::On) ? assert : DEASSERT;
 
     led.setTrigger("none");
     led.setBrightness(value);
diff --git a/physical.hpp b/physical.hpp
index e588de2..67a900b 100644
--- a/physical.hpp
+++ b/physical.hpp
@@ -12,10 +12,7 @@
 {
 namespace led
 {
-/** @brief Assert LED by writing 255 */
-constexpr unsigned long ASSERT = 255;
-
-/** @brief De-assert by writing "0" */
+/** @brief De-assert value */
 constexpr unsigned long DEASSERT = 0;
 
 /** @class Physical
@@ -69,6 +66,9 @@
      */
     SysfsLed& led;
 
+    /** @brief The value that will assert the LED */
+    unsigned long assert;
+
     /** @brief The period that the LED will operate on, in milliseconds
      *  Will be removed when periodicity is put into interface
      */
diff --git a/test/physical.cpp b/test/physical.cpp
index f3c3187..f05d882 100644
--- a/test/physical.cpp
+++ b/test/physical.cpp
@@ -104,11 +104,14 @@
 
 TEST(Physical, on)
 {
+    constexpr unsigned long asserted = 127;
+
     sdbusplus::bus::bus bus = sdbusplus::bus::new_default();
     NiceMock<MockLed> led;
+    ON_CALL(led, getMaxBrightness()).WillByDefault(Return(asserted));
     EXPECT_CALL(led, getTrigger()).WillOnce(Return("none"));
     EXPECT_CALL(led, setTrigger("none"));
-    EXPECT_CALL(led, setBrightness(phosphor::led::ASSERT));
+    EXPECT_CALL(led, setBrightness(asserted));
     phosphor::led::Physical phy(bus, LED_OBJ, led);
     phy.state(Action::On);
 }
@@ -130,21 +133,21 @@
     sdbusplus::bus::bus bus = sdbusplus::bus::new_default();
     NiceMock<MockLed> led;
     EXPECT_CALL(led, getTrigger()).WillRepeatedly(Return("none"));
-    constexpr auto val = phosphor::led::ASSERT;
-    EXPECT_CALL(led, getBrightness()).WillRepeatedly(Return(val));
+    EXPECT_CALL(led, getBrightness()).WillRepeatedly(Return(127));
     phosphor::led::Physical phy(bus, LED_OBJ, led);
 }
 
 TEST(Physical, on_to_off)
 {
     InSequence s;
+    constexpr unsigned long asserted = 127;
 
     auto bus = sdbusplus::bus::new_default();
     NiceMock<MockLed> led;
+    ON_CALL(led, getMaxBrightness()).WillByDefault(Return(asserted));
     EXPECT_CALL(led, getTrigger()).Times(1).WillOnce(Return("none"));
     constexpr auto deasserted = phosphor::led::DEASSERT;
     EXPECT_CALL(led, getBrightness()).WillOnce(Return(deasserted));
-    constexpr auto asserted = phosphor::led::ASSERT;
     EXPECT_CALL(led, setBrightness(asserted));
     EXPECT_CALL(led, setBrightness(deasserted));
     phosphor::led::Physical phy(bus, LED_OBJ, led);