blob: 9c856557313c3a4262278a97a29ca9487a80ddf2 [file] [log] [blame]
Matt Spinler7f88fe62017-04-10 14:39:02 -05001#pragma once
William A. Kennington III8fd879f2018-10-30 19:49:29 -07002#include <algorithm>
William A. Kennington III2c8e1982018-11-12 08:37:07 -08003#include <cassert>
Matthew Bartha9561842017-06-29 11:43:45 -05004#include <chrono>
Matt Spinler7f88fe62017-04-10 14:39:02 -05005#include <sdbusplus/bus.hpp>
William A. Kennington III1cfc2f12018-10-19 17:29:46 -07006#include <sdeventplus/event.hpp>
William A. Kennington III8fd879f2018-10-30 19:49:29 -07007#include <vector>
Matt Spinler7f88fe62017-04-10 14:39:02 -05008#include "fan.hpp"
9#include "types.hpp"
10
11namespace phosphor
12{
13namespace fan
14{
15namespace control
16{
17
18/**
Matthew Barth14184132017-05-19 14:37:30 -050019 * The mode fan control will run in:
20 * - init - only do the initialization steps
21 * - control - run normal control algorithms
22 */
23enum class Mode
24{
25 init,
26 control
27};
28
29/**
Matt Spinler7f88fe62017-04-10 14:39:02 -050030 * @class Represents a fan control zone, which is a group of fans
31 * that behave the same.
32 */
33class Zone
34{
35 public:
36
37 Zone() = delete;
38 Zone(const Zone&) = delete;
Matthew Barth0081fdb2017-11-14 14:02:34 -060039 Zone(Zone&&) = delete;
Matt Spinler7f88fe62017-04-10 14:39:02 -050040 Zone& operator=(const Zone&) = delete;
41 Zone& operator=(Zone&&) = delete;
42 ~Zone() = default;
43
44 /**
45 * Constructor
46 * Creates the appropriate fan objects based on
47 * the zone definition data passed in.
48 *
Matthew Barth14184132017-05-19 14:37:30 -050049 * @param[in] mode - mode of fan control
Matt Spinler7f88fe62017-04-10 14:39:02 -050050 * @param[in] bus - the dbus object
William A. Kennington III1cfc2f12018-10-19 17:29:46 -070051 * @param[in] event - Event loop reference
Matt Spinler7f88fe62017-04-10 14:39:02 -050052 * @param[in] def - the fan zone definition data
53 */
Matthew Barth14184132017-05-19 14:37:30 -050054 Zone(Mode mode,
55 sdbusplus::bus::bus& bus,
William A. Kennington III1cfc2f12018-10-19 17:29:46 -070056 const sdeventplus::Event& event,
Matt Spinler7f88fe62017-04-10 14:39:02 -050057 const ZoneDefinition& def);
58
59 /**
60 * Sets all fans in the zone to the speed
Matthew Barth60b00762017-08-15 13:39:06 -050061 * passed in when the zone is active
Matt Spinler7f88fe62017-04-10 14:39:02 -050062 *
63 * @param[in] speed - the fan speed
64 */
65 void setSpeed(uint64_t speed);
66
67 /**
Matthew Barth60b00762017-08-15 13:39:06 -050068 * Sets the zone to full speed regardless of zone's active state
Matt Spinler7f88fe62017-04-10 14:39:02 -050069 */
Matthew Barth60b00762017-08-15 13:39:06 -050070 void setFullSpeed();
Matt Spinler7f88fe62017-04-10 14:39:02 -050071
Matthew Barth38a93a82017-05-11 14:12:27 -050072 /**
Matthew Barth861d77c2017-05-22 14:18:25 -050073 * @brief Sets the automatic fan control allowed active state
74 *
75 * @param[in] group - A group that affects the active state
76 * @param[in] isActiveAllow - Active state according to group
77 */
78 void setActiveAllow(const Group* group, bool isActiveAllow);
79
80 /**
Matthew Barth98726c42017-10-17 10:35:20 -050081 * @brief Sets the floor change allowed state
82 *
83 * @param[in] group - A group that affects floor changes
84 * @param[in] isAllow - Allow state according to group
85 */
86 inline void setFloorChangeAllow(const Group* group, bool isAllow)
87 {
88 _floorChange[*(group)] = isAllow;
89 }
90
91 /**
Matthew Barthe4338cd2017-12-14 11:14:30 -060092 * @brief Sets the decrease allowed state of a group
93 *
94 * @param[in] group - A group that affects speed decreases
95 * @param[in] isAllow - Allow state according to group
96 */
97 inline void setDecreaseAllow(const Group* group, bool isAllow)
98 {
99 _decAllowed[*(group)] = isAllow;
100 }
101
102 /**
Matthew Barth38a93a82017-05-11 14:12:27 -0500103 * @brief Sets a given object's property value
104 *
105 * @param[in] object - Name of the object containing the property
Matthew Barthcec5ab72017-06-02 15:20:56 -0500106 * @param[in] interface - Interface name containing the property
Matthew Barth38a93a82017-05-11 14:12:27 -0500107 * @param[in] property - Property name
108 * @param[in] value - Property value
109 */
Matthew Barth9e741ed2017-06-02 16:29:09 -0500110 template <typename T>
Matthew Barth38a93a82017-05-11 14:12:27 -0500111 void setPropertyValue(const char* object,
Matthew Barthcec5ab72017-06-02 15:20:56 -0500112 const char* interface,
Matthew Barth38a93a82017-05-11 14:12:27 -0500113 const char* property,
Matthew Barth9e741ed2017-06-02 16:29:09 -0500114 T value)
Matthew Barth38a93a82017-05-11 14:12:27 -0500115 {
Matthew Barthcec5ab72017-06-02 15:20:56 -0500116 _properties[object][interface][property] = value;
Matthew Barth38a93a82017-05-11 14:12:27 -0500117 };
118
Matthew Barth17d1fe22017-05-11 15:00:36 -0500119 /**
120 * @brief Get the value of an object's property
121 *
122 * @param[in] object - Name of the object containing the property
Matthew Barthcec5ab72017-06-02 15:20:56 -0500123 * @param[in] interface - Interface name containing the property
Matthew Barth17d1fe22017-05-11 15:00:36 -0500124 * @param[in] property - Property name
125 *
126 * @return - The property value
127 */
Matthew Barth9e741ed2017-06-02 16:29:09 -0500128 template <typename T>
Matthew Barth17d1fe22017-05-11 15:00:36 -0500129 inline auto getPropertyValue(const std::string& object,
Matthew Barthcec5ab72017-06-02 15:20:56 -0500130 const std::string& interface,
Matthew Barth17d1fe22017-05-11 15:00:36 -0500131 const std::string& property)
132 {
Matthew Barth9e741ed2017-06-02 16:29:09 -0500133 return sdbusplus::message::variant_ns::get<T>(
Matthew Barthbc651602017-08-10 16:59:43 -0500134 _properties.at(object).at(interface).at(property));
Matthew Barth17d1fe22017-05-11 15:00:36 -0500135 };
136
Matthew Barth1de66622017-06-12 13:13:02 -0500137 /**
Matthew Barth604329e2017-08-04 11:18:28 -0500138 * @brief Get the object's property variant
139 *
140 * @param[in] object - Name of the object containing the property
141 * @param[in] interface - Interface name containing the property
142 * @param[in] property - Property name
143 *
144 * @return - The property variant
145 */
146 inline auto getPropValueVariant(const std::string& object,
147 const std::string& interface,
148 const std::string& property)
149 {
150 return _properties.at(object).at(interface).at(property);
151 };
152
153 /**
Matthew Barth1499a5c2018-03-20 15:52:33 -0500154 * @brief Remove an object's interface
155 *
156 * @param[in] object - Name of the object with the interface
157 * @param[in] interface - Interface name to remove
158 */
Matthew Barth30abbef2018-04-12 09:40:54 -0500159 inline void removeObjectInterface(const char* object,
160 const char* interface)
Matthew Barth1499a5c2018-03-20 15:52:33 -0500161 {
162 auto it = _properties.find(object);
163 if (it != std::end(_properties))
164 {
165 _properties[object].erase(interface);
166 }
167 }
168
169 /**
Matthew Barth55dea642017-11-06 13:34:32 -0600170 * @brief Remove a service associated to a group
171 *
172 * @param[in] group - Group associated with service
173 * @param[in] name - Service name to remove
174 */
175 void removeService(const Group* group,
176 const std::string& name);
177
178 /**
Matthew Barthe59fdf72017-09-27 09:33:42 -0500179 * @brief Set or update a service name owner in use
180 *
181 * @param[in] group - Group associated with service
182 * @param[in] name - Service name
183 * @param[in] hasOwner - Whether the service is owned or not
184 */
185 void setServiceOwner(const Group* group,
186 const std::string& name,
187 const bool hasOwner);
188
189 /**
Matthew Barth480787c2017-11-06 11:00:00 -0600190 * @brief Set or update all services for a group
191 *
192 * @param[in] group - Group to get service names for
193 */
194 void setServices(const Group* group);
195
196 /**
Matthew Barthbfb1a562017-10-05 17:03:40 -0500197 * @brief Get the group's list of service names
198 *
199 * @param[in] group - Group to get service names for
200 *
201 * @return - The list of service names
202 */
203 inline auto getGroupServices(const Group* group)
204 {
205 return _services.at(*group);
206 }
207
208 /**
Matthew Barth604329e2017-08-04 11:18:28 -0500209 * @brief Initialize a set speed event properties and actions
210 *
211 * @param[in] event - Set speed event
212 */
213 void initEvent(const SetSpeedEvent& event);
214
215 /**
Matthew Barthf6b76d82017-08-04 12:58:02 -0500216 * @brief Removes all the set speed event properties and actions
217 *
218 * @param[in] event - Set speed event
219 */
220 void removeEvent(const SetSpeedEvent& event);
221
222 /**
Matthew Barth1de66622017-06-12 13:13:02 -0500223 * @brief Get the default floor speed
224 *
225 * @return - The defined default floor speed
226 */
227 inline auto getDefFloor()
228 {
229 return _defFloorSpeed;
230 };
231
Matthew Barth4af419c2017-06-12 13:39:31 -0500232 /**
Matthew Barthe0ca13e2017-06-13 16:29:09 -0500233 * @brief Get the ceiling speed
234 *
235 * @return - The current ceiling speed
236 */
237 inline auto& getCeiling() const
238 {
239 return _ceilingSpeed;
240 };
241
242 /**
243 * @brief Set the ceiling speed to the given speed
244 *
245 * @param[in] speed - Speed to set the ceiling to
246 */
247 inline void setCeiling(uint64_t speed)
248 {
249 _ceilingSpeed = speed;
250 };
251
252 /**
253 * @brief Swaps the ceiling key value with what's given and
254 * returns the value that was swapped.
255 *
256 * @param[in] keyValue - New ceiling key value
257 *
258 * @return - Ceiling key value prior to swapping
259 */
260 inline auto swapCeilingKeyValue(int64_t keyValue)
261 {
262 std::swap(_ceilingKeyValue, keyValue);
263 return keyValue;
264 };
265
Matthew Barth24623522017-06-21 14:09:57 -0500266 /**
267 * @brief Get the increase speed delta
268 *
269 * @return - The current increase speed delta
270 */
271 inline auto& getIncSpeedDelta() const
272 {
273 return _incSpeedDelta;
274 };
275
Matthew Barth240397b2017-06-22 11:23:30 -0500276 /**
Matthew Barth0ce99d82017-06-22 15:07:29 -0500277 * @brief Get the decrease speed delta
278 *
279 * @return - The current decrease speed delta
280 */
281 inline auto& getDecSpeedDelta() const
282 {
283 return _decSpeedDelta;
284 };
285
286 /**
Matthew Barthb4a7cb92017-06-28 15:29:50 -0500287 * @brief Set the floor speed to the given speed and increase target
Matthew Barth98726c42017-10-17 10:35:20 -0500288 * speed to the floor when target is below floor where floor changes
289 * are allowed.
Matthew Barthb4a7cb92017-06-28 15:29:50 -0500290 *
291 * @param[in] speed - Speed to set the floor to
292 */
293 void setFloor(uint64_t speed);
294
295 /**
Matthew Barth1bfdc422017-09-14 16:23:28 -0500296 * @brief Set the requested speed base to be used as the speed to
297 * base a new requested speed target from
298 *
299 * @param[in] speedBase - Base speed value to use
300 */
301 inline void setRequestSpeedBase(uint64_t speedBase)
302 {
303 _requestSpeedBase = speedBase;
304 };
305
306 /**
Matthew Barth240397b2017-06-22 11:23:30 -0500307 * @brief Calculate the requested target speed from the given delta
308 * and increase the fan speeds, not going above the ceiling.
309 *
310 * @param[in] targetDelta - The delta to increase the target speed by
311 */
312 void requestSpeedIncrease(uint64_t targetDelta);
313
Matthew Barth0ce99d82017-06-22 15:07:29 -0500314 /**
315 * @brief Calculate the requested target speed from the given delta
316 * and increase the fan speeds, not going above the ceiling.
317 *
318 * @param[in] targetDelta - The delta to increase the target speed by
319 */
320 void requestSpeedDecrease(uint64_t targetDelta);
321
Matthew Barth8600d9a2017-06-23 14:38:05 -0500322 /**
Matthew Barth1ee48f22017-06-27 15:14:48 -0500323 * @brief Callback function for the increase timer that delays
324 * processing of requested speed increases while fans are increasing
325 */
326 void incTimerExpired();
327
328 /**
Matthew Barth8600d9a2017-06-23 14:38:05 -0500329 * @brief Callback function for the decrease timer that processes any
330 * requested speed decreases if allowed
331 */
332 void decTimerExpired();
333
Matthew Barth90149802017-08-15 10:51:37 -0500334 /**
William A. Kennington III1cfc2f12018-10-19 17:29:46 -0700335 * @brief Get the event loop used with this zone's timers
Matthew Barthbfb1a562017-10-05 17:03:40 -0500336 *
William A. Kennington III1cfc2f12018-10-19 17:29:46 -0700337 * @return - The event loop for timers
Matthew Barthbfb1a562017-10-05 17:03:40 -0500338 */
William A. Kennington III1cfc2f12018-10-19 17:29:46 -0700339 inline auto& getEventLoop()
Matthew Barthbfb1a562017-10-05 17:03:40 -0500340 {
William A. Kennington III1cfc2f12018-10-19 17:29:46 -0700341 return _eventLoop;
Matthew Barthbfb1a562017-10-05 17:03:40 -0500342 }
343
344 /**
Matthew Barth33bfe762018-11-05 11:13:25 -0600345 * @brief Get the list of signal events
346 *
347 * @return - List of signal events
348 */
349 inline auto& getSignalEvents()
350 {
351 return _signalEvents;
352 }
353
354 /**
355 * @brief Find the first instance of a signal event
356 *
357 * @param[in] signal - Event signal to find
358 * @param[in] eGroup - Group associated with the signal
359 * @param[in] eActions - List of actions associated with the signal
360 *
361 * @return - Iterator to the stored signal event
362 */
363 std::vector<SignalEvent>::iterator findSignal(
364 const Signal& signal,
365 const Group& eGroup,
366 const std::vector<Action>& eActions);
367
368 /**
369 * @brief Remove the given signal event
370 *
371 * @param[in] seIter - Iterator pointing to the signal event to remove
372 */
373 inline void removeSignal(std::vector<SignalEvent>::iterator& seIter)
374 {
375 assert(seIter != std::end(_signalEvents));
376 std::get<signalEventDataPos>(*seIter).reset();
377 if (std::get<signalMatchPos>(*seIter) != nullptr)
378 {
379 std::get<signalMatchPos>(*seIter).reset();
380 }
381 _signalEvents.erase(seIter);
382 }
383
384 /**
Matthew Barthbfb1a562017-10-05 17:03:40 -0500385 * @brief Get the list of timer events
386 *
387 * @return - List of timer events
388 */
389 inline auto& getTimerEvents()
390 {
391 return _timerEvents;
392 }
393
394 /**
395 * @brief Find the first instance of a timer event
396 *
397 * @param[in] eventGroup - Group associated with a timer
398 * @param[in] eventActions - List of actions associated with a timer
399 *
400 * @return - Iterator to the timer event
401 */
402 std::vector<TimerEvent>::iterator findTimer(
403 const Group& eventGroup,
404 const std::vector<Action>& eventActions);
405
406 /**
407 * @brief Add a timer to the list of timer based events
408 *
William A. Kennington III94fe1a02018-10-30 19:00:27 -0700409 * @param[in] group - Group associated with a timer
410 * @param[in] actions - List of actions associated with a timer
411 * @param[in] tConf - Configuration for the new timer
Matthew Barthbfb1a562017-10-05 17:03:40 -0500412 */
William A. Kennington III94fe1a02018-10-30 19:00:27 -0700413 void addTimer(const Group& group,
414 const std::vector<Action>& actions,
415 const TimerConf& tConf);
Matthew Barthbfb1a562017-10-05 17:03:40 -0500416
417 /**
418 * @brief Remove the given timer event
419 *
420 * @param[in] teIter - Iterator pointing to the timer event to remove
421 */
422 inline void removeTimer(std::vector<TimerEvent>::iterator& teIter)
423 {
Matthew Barthbfb1a562017-10-05 17:03:40 -0500424 _timerEvents.erase(teIter);
425 }
426
427 /**
Matthew Barth90149802017-08-15 10:51:37 -0500428 * @brief Callback function for event timers that processes the given
Matthew Barthf9201ab2017-09-11 16:07:58 -0500429 * actions for a group
Matthew Barth90149802017-08-15 10:51:37 -0500430 *
Matthew Barthf9201ab2017-09-11 16:07:58 -0500431 * @param[in] eventGroup - Group to process actions on
432 * @param[in] eventActions - List of event actions to run
Matthew Barth90149802017-08-15 10:51:37 -0500433 */
William A. Kennington IIIc0c5f072018-10-30 19:11:01 -0700434 void timerExpired(const Group& eventGroup,
435 const std::vector<Action>& eventActions);
Matthew Barth90149802017-08-15 10:51:37 -0500436
Matthew Bartha603ed02018-01-19 16:56:26 -0600437 /**
438 * @brief Get the service for a given path and interface from cached
439 * dataset and add a service that's not found
440 *
441 * @param[in] path - Path to get service for
442 * @param[in] intf - Interface to get service for
443 *
444 * @return - The service name
445 */
446 const std::string& getService(const std::string& path,
447 const std::string& intf);
448
449 /**
450 * @brief Add a set of services for a path and interface
451 * by retrieving all the path subtrees to the given depth
452 * from root for the interface
453 *
454 * @param[in] path - Path to add services for
455 * @param[in] intf - Interface to add services for
456 * @param[in] depth - Depth of tree traversal from root path
457 *
458 * @return - The associated service to the given path and interface
459 * or empty string for no service found
460 */
461 const std::string& addServices(const std::string& path,
462 const std::string& intf,
463 int32_t depth);
464
Matt Spinler7f88fe62017-04-10 14:39:02 -0500465 private:
466
467 /**
468 * The dbus object
469 */
470 sdbusplus::bus::bus& _bus;
471
472 /**
473 * Full speed for the zone
474 */
475 const uint64_t _fullSpeed;
476
477 /**
478 * The zone number
479 */
480 const size_t _zoneNum;
481
482 /**
Matthew Barth1de66622017-06-12 13:13:02 -0500483 * The default floor speed for the zone
484 */
485 const uint64_t _defFloorSpeed;
486
487 /**
Matthew Barthe0ca13e2017-06-13 16:29:09 -0500488 * The default ceiling speed for the zone
489 */
490 const uint64_t _defCeilingSpeed;
491
492 /**
Matthew Barth4af419c2017-06-12 13:39:31 -0500493 * The floor speed to not go below
494 */
495 uint64_t _floorSpeed = _defFloorSpeed;
496
497 /**
Matthew Barthe0ca13e2017-06-13 16:29:09 -0500498 * The ceiling speed to not go above
499 */
500 uint64_t _ceilingSpeed = _defCeilingSpeed;
501
502 /**
503 * The previous sensor value for calculating the ceiling
504 */
505 int64_t _ceilingKeyValue = 0;
506
507 /**
Matthew Barth861d77c2017-05-22 14:18:25 -0500508 * Automatic fan control active state
509 */
510 bool _isActive = true;
511
512 /**
Matthew Barth240397b2017-06-22 11:23:30 -0500513 * Target speed for this zone
514 */
515 uint64_t _targetSpeed = _fullSpeed;
516
517 /**
Matthew Barth24623522017-06-21 14:09:57 -0500518 * Speed increase delta
519 */
520 uint64_t _incSpeedDelta = 0;
521
522 /**
Matthew Barth0ce99d82017-06-22 15:07:29 -0500523 * Speed decrease delta
524 */
525 uint64_t _decSpeedDelta = 0;
526
527 /**
Matthew Barth1bfdc422017-09-14 16:23:28 -0500528 * Requested speed base
529 */
530 uint64_t _requestSpeedBase = 0;
531
532 /**
Matthew Bartha9561842017-06-29 11:43:45 -0500533 * Speed increase delay in seconds
534 */
535 std::chrono::seconds _incDelay;
536
537 /**
538 * Speed decrease interval in seconds
539 */
540 std::chrono::seconds _decInterval;
541
542 /**
Matthew Barth1ee48f22017-06-27 15:14:48 -0500543 * The increase timer object
544 */
William A. Kennington III8fd879f2018-10-30 19:49:29 -0700545 Timer _incTimer;
Matthew Barth1ee48f22017-06-27 15:14:48 -0500546
547 /**
Matthew Barth8600d9a2017-06-23 14:38:05 -0500548 * The decrease timer object
549 */
William A. Kennington III8fd879f2018-10-30 19:49:29 -0700550 Timer _decTimer;
Matthew Barth8600d9a2017-06-23 14:38:05 -0500551
552 /**
William A. Kennington III1cfc2f12018-10-19 17:29:46 -0700553 * Event loop used on set speed event timers
Matthew Barth90149802017-08-15 10:51:37 -0500554 */
William A. Kennington III1cfc2f12018-10-19 17:29:46 -0700555 sdeventplus::Event _eventLoop;
Matthew Barth90149802017-08-15 10:51:37 -0500556
557 /**
Matt Spinler7f88fe62017-04-10 14:39:02 -0500558 * The vector of fans in this zone
559 */
560 std::vector<std::unique_ptr<Fan>> _fans;
Matthew Barth38a93a82017-05-11 14:12:27 -0500561
562 /**
563 * @brief Map of object property values
564 */
Matthew Barthcec5ab72017-06-02 15:20:56 -0500565 std::map<std::string,
566 std::map<std::string,
567 std::map<std::string,
Matthew Barth9e741ed2017-06-02 16:29:09 -0500568 PropertyVariantType>>> _properties;
Matthew Barth38a93a82017-05-11 14:12:27 -0500569
570 /**
Matthew Barth861d77c2017-05-22 14:18:25 -0500571 * @brief Map of active fan control allowed by groups
572 */
Matthew Barth60b00762017-08-15 13:39:06 -0500573 std::map<const Group, bool> _active;
Matthew Barth861d77c2017-05-22 14:18:25 -0500574
575 /**
Matthew Barth98726c42017-10-17 10:35:20 -0500576 * @brief Map of floor change allowed by groups
577 */
578 std::map<const Group, bool> _floorChange;
579
580 /**
Matthew Barthe4338cd2017-12-14 11:14:30 -0600581 * @brief Map of groups controlling decreases allowed
582 */
583 std::map<const Group, bool> _decAllowed;
584
585 /**
Matthew Barthe59fdf72017-09-27 09:33:42 -0500586 * @brief Map of group service names
587 */
588 std::map<const Group, std::vector<Service>> _services;
589
590 /**
Matthew Bartha603ed02018-01-19 16:56:26 -0600591 * @brief Map tree of paths to services of interfaces
592 */
593 std::map<std::string,
594 std::map<std::string,
595 std::vector<std::string>>> _servTree;
596
597 /**
Matthew Barthf6b76d82017-08-04 12:58:02 -0500598 * @brief List of signal event arguments and Dbus matches for callbacks
Matthew Barth38a93a82017-05-11 14:12:27 -0500599 */
Matthew Barthf6b76d82017-08-04 12:58:02 -0500600 std::vector<SignalEvent> _signalEvents;
Matthew Barth38a93a82017-05-11 14:12:27 -0500601
602 /**
Matthew Barth90149802017-08-15 10:51:37 -0500603 * @brief List of timers for events
604 */
Matthew Barthbfb1a562017-10-05 17:03:40 -0500605 std::vector<TimerEvent> _timerEvents;
Matthew Barth90149802017-08-15 10:51:37 -0500606
607 /**
Matthew Barth4e728542017-09-14 16:47:55 -0500608 * @brief Get the request speed base if defined, otherwise the
609 * the current target speed is returned
610 *
611 * @return - The request speed base or current target speed
612 */
613 inline auto getRequestSpeedBase() const
614 {
615 return (_requestSpeedBase != 0) ? _requestSpeedBase : _targetSpeed;
616 };
617
618 /**
Matthew Barth34f1bda2017-05-31 13:45:36 -0500619 * @brief Dbus signal change callback handler
Matthew Barth38a93a82017-05-11 14:12:27 -0500620 *
Matthew Barth34f1bda2017-05-31 13:45:36 -0500621 * @param[in] msg - Expanded sdbusplus message data
622 * @param[in] eventData - The single event's data
Matthew Barth38a93a82017-05-11 14:12:27 -0500623 */
Matthew Barth34f1bda2017-05-31 13:45:36 -0500624 void handleEvent(sdbusplus::message::message& msg,
625 const EventData* eventData);
Matt Spinler7f88fe62017-04-10 14:39:02 -0500626};
627
628}
629}
630}