<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:times new roman,serif">Hi Patrick</div><div class="gmail_default" style="font-family:times new roman,serif"><br></div><div class="gmail_default" style="font-family:times new roman,serif">Regarding you question about assigning 'event type' to the sensor, this is how we have implemented it:</div><div class="gmail_default" style="font-family:times new roman,serif"><br></div><div class="gmail_default" style="font-family:times new roman,serif">1. You are right about the 'getSensorEventTypeFromPath()' currently being hardcoded to "threshold". The way we have implemented this is that in the getSensorEventTypeFromPath() function, instead of returning 0x01 (or threshold) as it is now, we only return 0x01 for threshold based sensor types (such as 0x01, 0x02, 0x03, 0x04 or other 0x0b). For everything else we return 0x6f. We use 6f as the event type for all discrete events. We don't distinguish the event type on discrete sensors such as "digital discrete" or "generic discrete"</div><div class="gmail_default" style="font-family:times new roman,serif"><br></div><div class="gmail_default" style="font-family:times new roman,serif">2. For the discrete sensors, we create an sdr record for 'Type 3" Event-only sensors in the phosphor-ipmi-host recipe in the sensorhandler.hpp file where the full sdr record is currently defined. We create one for Type 3 events only sensors based on the IPMI spec description in section 43.3.<br></div><div class="gmail_default" style="font-family:times new roman,serif"><br></div><div class="gmail_default" style="font-family:times new roman,serif">3. Now in the sensorcommands.cpp file (in intel-ipmi-oem), in the ipmiStorageGetSDR function we check the getSensorEventTypeFromPath() and if it is of type "discrete" as defined in step 1, we populate the fields based on the type 3 record defined in step 2 and return success. <br></div><div class="gmail_default" style="font-family:times new roman,serif"><br></div><div class="gmail_default" style="font-family:times new roman,serif">For creating a value property, you can register_property for 'Value' when you create the sensor object and interface like I described in step 3 of my previous email. Off the top of my head, I am not sure how to assert and de-assert based on changes to the 'value' of discrete sensors (at least that's my interpretation of what you're trying to do, please correct me if I'm wrong) so I can't be of much help there. In our case we just use the IpmiSelAdd method-call to assert or de-assert directly in our event handler like I described in steps 6 and 7 of my previous email.</div><div class="gmail_default" style="font-family:times new roman,serif"><br></div><div class="gmail_default" style="font-family:times new roman,serif">Hope that helps.</div><div class="gmail_default" style="font-family:times new roman,serif"><br></div><div class="gmail_default" style="font-family:times new roman,serif">-Varun<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jul 20, 2020 at 11:56 AM Patrick Voelker <<a href="mailto:Patrick_Voelker@phoenix.com" target="_blank">Patrick_Voelker@phoenix.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">





<div lang="EN-US">
<div>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">Varun, thanks so much for your response.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">I see that I can add to SensorTypeCodes in intel-ipmi-oem/include/sdrutils.hpp and that it will be used to match against the dbus sensor path.  How though do
 you recommend assigning the sensor event type to the sensor?  getSensorEventTypeFromPath() is currently hardcoded to “threshold” and I don’t see how I could determine it from the sensor path (the way they are currently implemented.)<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">I’d like my new sensors to be readable so I’m planning on adding a "xyz.openbmc_project.Sensor.Value” interface.  Also, I’d like phosphor-sel-logger to be able
 to match on changes to be able to automatically generate events so that I don’t need to embed IPMI specific information into the dbus-sensors module.  I think I need a dbus interface akin to "xyz.openbmc_project.Sensor.Threshold.Warning" that would instead
 be my assertion and deassertion event masks.  Do these interfaces and properties look reasonable?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">xyz.openbmc_project.Sensor.Discrete.Assertion<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">.AssertionAlarmMask<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">xyz.openbmc_project.Sensor.Discrete.Deassertion<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">.DeassertionAlarmMask<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)">As always, if I’m re-inventing the wheel here and there’s an example that already exists that I can follow, please point me in the right direction.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)"><u></u> <u></u></span></p>
<p class="MsoNormal"><a name="m_-6347551391788688739_m_-2237945306229127611__MailEndCompose"><span style="font-size:11pt;font-family:"Calibri","sans-serif";color:rgb(31,73,125)"><u></u> <u></u></span></a></p>
<div style="border-color:currentcolor currentcolor currentcolor blue;border-style:none none none solid;border-width:medium medium medium 1.5pt;padding:0in 0in 0in 4pt">
<div>
<div style="border-color:rgb(181,196,223) currentcolor currentcolor;border-style:solid none none;border-width:1pt medium medium;padding:3pt 0in 0in">
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10pt;font-family:"Tahoma","sans-serif""> Varun Sampat [mailto:<a href="mailto:varunsampat@gmail.com" target="_blank">varunsampat@gmail.com</a>]
<br>
<b>Sent:</b> Friday, July 17, 2020 10:11 AM<br>
<b>To:</b> Patrick Voelker<br>
<b>Cc:</b> OpenBMC (<a href="mailto:openbmc@lists.ozlabs.org" target="_blank">openbmc@lists.ozlabs.org</a>)<br>
<b>Subject:</b> Re: Discrete sensors for host error monitor signals<u></u><u></u></span></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">Hi Patrick<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Though we don't use host-error-monitor at Twitter, we do have a number of discrete sensors implemented. I can provide some details that can hopefully help get you started.
<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">I should mention though, the below steps are only applicable if you're using 'dbus-sensors' for your sensors and the phosphor-sel-logger.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">1. Include the 'intel-ipmi-oem' recipe in your package<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">2. In the 'intel-ipmi-oem' recipe, in the file called sdrutils.hpp, you will find a bunch of enumerated entries for different (threshold based) sensor types such as voltage, current etc. You can add discrete sensor type you want here, for
 example for CATERRs it probably would be of the type "processor" (0x07)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">3. You don't  necessarily need to add the discrete sensor to entity-manager (you can if you like). Instead, under dbu-sensors you need to create a service and add an interface for your sensor. We have implemented by adding code in dbus-sensors
 that has a list of event-only sensors and our code loops through and adds all of them. However to start out, you can just do it for a single discrete sensor by doing the following:<u></u><u></u></p>
</div>
<div style="margin-left:30pt">
<p class="MsoNormal">a. create a file (say processorerror.cpp) along the same lines as one of the existing sensor types<u></u><u></u></p>
</div>
<div style="margin-left:30pt">
<p class="MsoNormal">b. request a service name using "request->name"<u></u><u></u></p>
</div>
<div style="margin-left:30pt">
<p class="MsoNormal">c. register your object path and interface <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">The above file would essentially do nothing other than just create a dbus sensor.<u></u><u></u></p>
</div>
<div style="margin-left:30pt">
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">4. Create entries in the CMakeLists.txt file in dbus-sensors to build your .cpp file and make sure it corresponds with the sensor type you created in intel-ipmi-oem in step 2.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">5. Once the above step is done, if you build an image, you should see the sensor you created (say something like "/xyz/openbmc_project/sensors/processor/Processor_Error" ) if you do "ipmitool sdr elist all". The sensor will be created with
 a dynamically assigned sensor number just like all the threshold based sensors. However, instead of displaying a value like it would for a threshold sensor it will say "Event-Only". At this point your discrete sensor is created but doesn't really do anything<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">6. Now, in order to generate a SEL, we use the IpmiSelAdd method that is present in the sel-logger service:<u></u><u></u></p>
</div>
<div>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%"># busctl introspect  xyz.openbmc_project.Logging.IPMI /xyz/openbmc_project/Logging/IPMI</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">NAME                                TYPE      SIGNATURE RESULT/VALUE FLAGS</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<b><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">org.freedesktop.DBus.Introspectable</span></b><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%"> interface -         -       
     -</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">.Introspect                         method    -         s            -</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<b><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">org.freedesktop.DBus.Peer          </span></b><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%"> interface -         -       
     -</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">.GetMachineId                       method    -         s            -</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">.Ping                               method    -         -            -</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<b><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">org.freedesktop.DBus.Properties    </span></b><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%"> interface -         -       
     -</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">.Get                                method    ss        v            -</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">.GetAll                             method    s         a{sv}        -</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">.Set                                method    ssv       -            -</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">.PropertiesChanged                  signal    sa{sv}as  -            -</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<b><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">xyz.openbmc_project.Logging.IPMI   </span></b><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%"> interface -         -       
     -</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">.IpmiSelAdd                         method    ssaybq    q            -</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">.IpmiSelAddOem                      method    sayy      q            -</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">As you can see above, the IpmiSelAdd method takes 6 arguments, 'ssaybq' as described in
<a href="https://dbus.freedesktop.org/doc/dbus-specification.html#type-system" target="_blank">
https://dbus.freedesktop.org/doc/dbus-specification.html#type-system.<br>
</a><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Looking at the code in phosphor-sel-logger where the IpmiSelAdd method is registered, we can see what the ssaybq arguments correspond to:<u></u><u></u></p>
</div>
<div>
<p style="margin:0in 0in 0.0001pt"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">ifaceAddSel->register_method(</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">       
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:rgb(180,36,25);background:rgb(238,238,238) none repeat scroll 0% 0%">"IpmiSelAdd"</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">, [](</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:rgb(47,180,29);background:rgb(238,238,238) none repeat scroll 0% 0%">const</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">
 std::string &message, </span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:rgb(47,180,29);background:rgb(238,238,238) none repeat scroll 0% 0%">const</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%"> std::string &path,</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">                        
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:rgb(47,180,29);background:rgb(238,238,238) none repeat scroll 0% 0%">const</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%"> std::vector<</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:rgb(47,180,29);background:rgb(238,238,238) none repeat scroll 0% 0%">uint8_t</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">>
 &selData,</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">                         </span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:rgb(47,180,29);background:rgb(238,238,238) none repeat scroll 0% 0%">const</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:rgb(47,180,29);background:rgb(238,238,238) none repeat scroll 0% 0%">bool</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%"> &assert,
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:rgb(47,180,29);background:rgb(238,238,238) none repeat scroll 0% 0%">const</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:rgb(47,180,29);background:rgb(238,238,238) none repeat scroll 0% 0%">uint16_t</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%"> &genId) {</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Based on this, we can directly call the method using busctl to test if a SEL is created for the discrete sensor. For example, for the sensor we created in step 5, we could do the following to generate a SEL:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="background:rgb(238,238,238) none repeat scroll 0% 0%">busctl call xyz.openbmc_project.Logging.IPMI /xyz/openbmc_project/Logging/IPMI xyz.openbmc_project.Logging.IPMI IpmiSelAdd ssaybq <message string> <sensor object path, i.e "/xyz/openbmc_project/sensors/processor/Processor_Error"> 
 <number of bytes in the event data vector, which in this case would be 3>  <event data vector>  < assert/de-assert yes/no>  <generator id, 0x0020 for bmc></span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="background:white none repeat scroll 0% 0%">(the first 4 arguments after 'call' are the service, object, interface and the method)</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">To give you an example, here is what the above command looks like for a discrete sensor for a power button press:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Command:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="background:rgb(238,238,238) none repeat scroll 0% 0%"># busctl call xyz.openbmc_project.Logging.IPMI /xyz/openbmc_project/Logging/IPMI xyz.openbmc_project.Logging.IPMI IpmiSelAdd ssaybq "SEL Entry" "/xyz/openbmc_project/sensors/pwr_button/POWER_BUTTON" 3 {0x00,0x01,0x00}
 yes 0x20</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Sel generated:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><span style="background:rgb(238,238,238) none repeat scroll 0% 0%">f | 07/17/20 | 16:49:01 UTC | Button POWER BUTTON | Power Button pressed | Asserted</span><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">7. If you have a service that triggers on an event, you could directly call the above command to generate a SEL in your service file. For example, we have a gpio service that triggers on certain events and we directly call the above command
 from the service file. In other cases we call a method to generate the SEL in code in the event "handler" function. This might be more relevant for our host-error-monitor case. Here is an example from our code for how we call the IpmiSelAdd method:<u></u><u></u></p>
</div>
<div>
<p style="margin:0in 0in 0.0001pt"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">sdbusplus::message::message writeSEL = conn->new_method_call(</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">            ipmiSelService, ipmiSelPath, ipmiSelAddInterface,
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:rgb(180,36,25);background:rgb(238,238,238) none repeat scroll 0% 0%">"IpmiSelAdd"</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">        writeSEL.append(ipmiSelAddMessage, dbusPath, eventData, assert, genId);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;min-height:13px"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u> <u></u></span></p>
<p style="margin:0in 0in 0.0001pt"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">       
</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:rgb(193,101,28);background:rgb(238,238,238) none repeat scroll 0% 0%">try</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">        {</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt"><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">            conn->call(writeSEL);</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
<p style="margin:0in 0in 0.0001pt;font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal">
<span style="font-size:8.5pt;font-family:"Menlo","serif";color:black;background:rgb(238,238,238) none repeat scroll 0% 0%">        }</span><span style="font-size:8.5pt;font-family:"Menlo","serif";color:black"><u></u><u></u></span></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Here, conn is the "shared_ptr". The other arguments are pretty much the same as described in the busctl command in #6.  Not sure how this would work with host-error-monitor but you can try it with the relevant shared_ptr in host_error_monitor.cpp
 and it might possibly work.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Hope this helps.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">-Varun <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<div>
<p class="MsoNormal">On Tue, Jul 14, 2020 at 3:07 PM Patrick Voelker <<a href="mailto:Patrick_Voelker@phoenix.com" target="_blank">Patrick_Voelker@phoenix.com</a>> wrote:<u></u><u></u></p>
</div>
<blockquote style="border-color:currentcolor currentcolor currentcolor rgb(204,204,204);border-style:none none none solid;border-width:medium medium medium 1pt;padding:0in 0in 0in 6pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal">Hi, I’d like to log IPMI SEL events for changes in the signals monitored by OpenBMC/host-error-monitor.  I don’t have much experience with OpenBMC’s sensors yet so I’m not sure
 what the best approach is and am looking for some guidance.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">I haven’t found a good example yet of a IPMI discrete sensor and I don’t want to put IPMI specific information into host-error-monitor to directly add SEL events via phosphor-sel-logger.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">Here’s my understanding thus far :<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">* A module needs to instantiate dbus sensors representing the signals being monitored.  This could be done in host-error-monitor or duplicate some of the functionality in dbus-sensors. 
 Is there a benefit to extending one over the other?<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">* One or more IPMI SDRs should be created for the IPMI sensors needed to group all the necessary discrete offsets.  If I’m using entity-manager in my build, is that where I would
 define this sensor?  If not, is there some other way to accomplish this?<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">* phosphor-sel-logger then needs to monitor (match) dbus discrete sensor property changes to create appropriate IPMI and redfish logs for the events as they occur.<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">Does that sound about right? Thanks in advance for your help.<u></u><u></u></p>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>

</blockquote></div>
</div>