blob: 968e06dac4cdfbc35a02c05f79c11ba454fcc5f0 [file] [log] [blame]
# Introduction
Swampd's primary function is to drive the fans of a system given various inputs.
# Layout
The code is broken out into modules as follows:
* `dbus` - Any read or write interface that uses dbus primarily.
* `experiments` - Small execution paths that allow for fan examination
including how quickly fans respond to changes.
* `ipmi` - Manual control for any zone is handled by receiving an IPMI message.
This holds the ipmid provider for receiving those messages and sending them
onto swampd.
* `notimpl` - These are read-only and write-only interface implementations that
can be dropped into a pluggable sensor to make it complete.
* `pid` - This contains all the PID associated code, including the zone
defintion, controller definition, and the PID computational code.
* `scripts` - This contains the scripts that convert YAML into C++.
* `sensors` - This contains a couple of sensor types including the pluggable
sensor's definition. It also holds the sensor manager.
* `sysfs` - This contains code that reads from or writes to sysfs.
* `threads` - Most of swampd's threads run in this method where there's just a
dbus bus that we manage.
# Design
One defines a series of sensors and a series of PIDs that utilize those sensors
as inputs (and outputs).
The thermal PID
set-point -------->|---|---> RPM
current value ---->|___|
The fan PID
set-point -------->|---|---> pwm%
current value ---->|___|
How to get set-point for fan PIDs
thermal-out ----->|-----|
thermal-out ----->| |-----> RPM
thermal-out ----->| MAX |
thermal-out ----->|_____|