Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix pwm config overrides not beeing applied correctly #162

Merged
merged 3 commits into from
Oct 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion internal/configuration/fans.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ type FanConfig struct {
NeverStop bool `json:"neverStop"`
// MinPwm defines the lowest PWM value where the fans are still spinning, when spinning previously
MinPwm *int `json:"minPwm,omitempty"`
// MinPwm defines the lowest PWM value where the fans are able to start spinning from a standstill
// StartPwm defines the lowest PWM value where the fans are able to start spinning from a standstill
StartPwm *int `json:"startPwm,omitempty"`
// MaxPwm defines the highest PWM value that yields an RPM increase
MaxPwm *int `json:"maxPwm,omitempty"`
Expand Down
6 changes: 5 additions & 1 deletion internal/controller/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,10 @@ func (f *fanController) Run(ctx context.Context) error {
ui.Info("PWM settings of fan '%s': Min %d, Start %d, Max %d", fan.GetId(), fan.GetMinPwm(), fan.GetStartPwm(), fan.GetMaxPwm())
ui.Info("Starting controller loop for fan '%s'", fan.GetId())

if fan.GetMinPwm() > fan.GetStartPwm() {
ui.Warning("Suspicious pwm config of fan '%s': MinPwm (%d) > StartPwm (%d)", fan.GetId(), fan.GetMinPwm(), fan.GetStartPwm())
}

var g run.Group

if fan.Supports(fans.FeatureRpmSensor) {
Expand Down Expand Up @@ -413,7 +417,7 @@ func (f *fanController) calculateTargetPwm() int {
}
ui.Warning("WARNING: Increasing minPWM of %s from %d to %d, which is supposed to never stop, but RPM is %d",
fan.GetId(), fan.GetMinPwm(), fan.GetMinPwm()+1, int(avgRpm))
fan.SetMinPwm(fan.GetMinPwm() + 1)
fan.SetMinPwm(fan.GetMinPwm()+1, true)
target++

// set the moving avg to a value > 0 to prevent
Expand Down
6 changes: 3 additions & 3 deletions internal/controller/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,23 +69,23 @@ func (fan MockFan) GetStartPwm() int {
return 0
}

func (fan *MockFan) SetStartPwm(pwm int) {
func (fan *MockFan) SetStartPwm(pwm int, force bool) {
panic("not supported")
}

func (fan MockFan) GetMinPwm() int {
return fan.MinPWM
}

func (fan *MockFan) SetMinPwm(pwm int) {
func (fan *MockFan) SetMinPwm(pwm int, force bool) {
fan.MinPWM = pwm
}

func (fan MockFan) GetMaxPwm() int {
return fans.MaxPwmValue
}

func (fan *MockFan) SetMaxPwm(pwm int) {
func (fan *MockFan) SetMaxPwm(pwm int, force bool) {
panic("not supported")
}

Expand Down
6 changes: 3 additions & 3 deletions internal/fans/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,15 @@ func (fan CmdFan) GetStartPwm() int {
return 1
}

func (fan *CmdFan) SetStartPwm(pwm int) {
func (fan *CmdFan) SetStartPwm(pwm int, force bool) {
return
}

func (fan CmdFan) GetMinPwm() int {
return MinPwmValue
}

func (fan *CmdFan) SetMinPwm(pwm int) {
func (fan *CmdFan) SetMinPwm(pwm int, force bool) {
// not supported
return
}
Expand All @@ -44,7 +44,7 @@ func (fan CmdFan) GetMaxPwm() int {
return MaxPwmValue
}

func (fan *CmdFan) SetMaxPwm(pwm int) {
func (fan *CmdFan) SetMaxPwm(pwm int, force bool) {
// not supported
return
}
Expand Down
14 changes: 8 additions & 6 deletions internal/fans/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,17 @@ var (
type Fan interface {
GetId() string

// GetStartPwm returns the min PWM at which the fan starts to rotate from a stand still
GetStartPwm() int
SetStartPwm(pwm int)

// GetMinPwm returns the lowest PWM value where the fans are still spinning, when spinning previously
GetMinPwm() int
SetMinPwm(pwm int)
SetMinPwm(pwm int, force bool)

// GetStartPwm returns the min PWM at which the fan starts to rotate from a stand still
GetStartPwm() int
SetStartPwm(pwm int, force bool)

// GetMaxPwm returns the highest PWM value that yields an RPM increase
GetMaxPwm() int
SetMaxPwm(pwm int)
SetMaxPwm(pwm int, force bool)

// GetRpm returns the current RPM value of this fan
GetRpm() (int, error)
Expand Down Expand Up @@ -81,7 +81,9 @@ func NewFan(config configuration.FanConfig) (Fan, error) {
return &HwMonFan{
Label: config.ID,
Index: config.HwMon.Index,
MinPwm: config.MinPwm,
StartPwm: config.StartPwm,
MaxPwm: config.MaxPwm,
Config: config,
}, nil
}
Expand Down
6 changes: 3 additions & 3 deletions internal/fans/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,15 +24,15 @@ func (fan FileFan) GetStartPwm() int {
return 1
}

func (fan *FileFan) SetStartPwm(pwm int) {
func (fan *FileFan) SetStartPwm(pwm int, force bool) {
return
}

func (fan FileFan) GetMinPwm() int {
return MinPwmValue
}

func (fan *FileFan) SetMinPwm(pwm int) {
func (fan *FileFan) SetMinPwm(pwm int, force bool) {
// not supported
return
}
Expand All @@ -41,7 +41,7 @@ func (fan FileFan) GetMaxPwm() int {
return MaxPwmValue
}

func (fan *FileFan) SetMaxPwm(pwm int) {
func (fan *FileFan) SetMaxPwm(pwm int, force bool) {
// not supported
return
}
Expand Down
64 changes: 34 additions & 30 deletions internal/fans/hwmon.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ type HwMonFan struct {
Index int `json:"index"`
RpmMovingAvg float64 `json:"rpmMovingAvg"`
Config configuration.FanConfig `json:"config"`
StartPwm *int `json:"startPwm"` // the min PWM at which the fan starts to rotate from a stand still
MinPwm *int `json:"minPwm"`
StartPwm *int `json:"startPwm"`
MaxPwm *int `json:"maxPwm"`
FanCurveData *map[int]float64 `json:"fanCurveData"`
Rpm int `json:"rpm"`
Pwm int `json:"pwm"`
Expand All @@ -26,50 +28,52 @@ func (fan HwMonFan) GetId() string {
return fan.Config.ID
}

func (fan HwMonFan) GetStartPwm() int {
if fan.StartPwm != nil {
return *fan.StartPwm
} else {
return MaxPwmValue
}
}

func (fan *HwMonFan) SetStartPwm(pwm int) {
fan.StartPwm = &pwm
}

func (fan HwMonFan) GetMinPwm() int {
// if the fan is never supposed to stop,
// use the lowest pwm value where the fan is still spinning
if fan.ShouldNeverStop() {
var minPwm int
if fan.Config.MinPwm != nil {
minPwm = *fan.Config.MinPwm
if fan.MinPwm != nil {
return *fan.MinPwm
} else {
minPwm = MinPwmValue
return MinPwmValue
}
return minPwm
}

return MinPwmValue
}

func (fan *HwMonFan) SetMinPwm(pwm int) {
fan.Config.MinPwm = &pwm
func (fan *HwMonFan) SetMinPwm(pwm int, force bool) {
if fan.Config.MinPwm == nil || force {
fan.MinPwm = &pwm
}
}

func (fan HwMonFan) GetStartPwm() int {
if fan.StartPwm != nil {
return *fan.StartPwm
} else {
return MaxPwmValue
}
}

func (fan *HwMonFan) SetStartPwm(pwm int, force bool) {
if fan.Config.StartPwm == nil || force {
fan.StartPwm = &pwm
}
}

func (fan HwMonFan) GetMaxPwm() int {
var maxPwm int
if fan.Config.MaxPwm != nil {
maxPwm = *fan.Config.MaxPwm
if fan.MaxPwm != nil {
return *fan.MaxPwm
} else {
maxPwm = MaxPwmValue
return MaxPwmValue
}
return maxPwm
}

func (fan *HwMonFan) SetMaxPwm(pwm int) {
fan.Config.MaxPwm = &pwm
func (fan *HwMonFan) SetMaxPwm(pwm int, force bool) {
if fan.Config.MaxPwm == nil || force {
fan.MaxPwm = &pwm
}
}

func (fan *HwMonFan) GetRpm() (int, error) {
Expand Down Expand Up @@ -121,11 +125,11 @@ func (fan *HwMonFan) AttachFanCurveData(curveData *map[int]float64) (err error)
fan.FanCurveData = curveData

startPwm, maxPwm := ComputePwmBoundaries(fan)
fan.SetStartPwm(startPwm)
fan.SetMaxPwm(maxPwm)
fan.SetStartPwm(startPwm, false)
fan.SetMaxPwm(maxPwm, false)

// TODO: we don't have a way to determine this yet
fan.SetMinPwm(startPwm)
fan.SetMinPwm(startPwm, false)

return err
}
Expand Down
6 changes: 4 additions & 2 deletions internal/fans/hwmon_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func TestHwMonFan_SetStartPwm(t *testing.T) {
fan := HwMonFan{}

// WHEN
fan.SetStartPwm(expected)
fan.SetStartPwm(expected, false)
startPwm := fan.GetStartPwm()

// THEN
Expand All @@ -37,6 +37,7 @@ func TestHwMonFan_ShouldNeverStop_GetMinPwm(t *testing.T) {
// GIVEN
expected := 30
fan := HwMonFan{
MinPwm: &expected,
Config: configuration.FanConfig{
NeverStop: true,
MinPwm: &expected,
Expand Down Expand Up @@ -73,6 +74,7 @@ func TestHwMonFan_GetMaxPwm(t *testing.T) {
// GIVEN
expected := 240
fan := HwMonFan{
MaxPwm: &expected,
Config: configuration.FanConfig{
MaxPwm: &expected,
},
Expand All @@ -91,7 +93,7 @@ func TestHwMonFan_SetMaxPwm(t *testing.T) {
fan := HwMonFan{}

// WHEN
fan.SetMaxPwm(expected)
fan.SetMaxPwm(expected, false)
maxPwm := fan.GetMaxPwm()

// THEN
Expand Down