jeol-t330a/succbone/succd/process_controller.go

60 lines
1.3 KiB
Go

package main
import "k8s.io/klog"
// daemonController is the control/data interface passed on to external system
// controllers, eg. the web interface.
//
// This is a subset of daemon functions limited to a safe, explicit subset.
type daemonController interface {
// snapshot returns an internally consistent copy of the daemon state.
snapshot() *daemonState
// rpSet enables/disables the roughing pump.
rpSet(bool)
// dpSet enables/disables the diffusion pump.
dpSet(bool)
// pumpDownPress simulates a pumpdown button press.
pumpDownPress()
// ventPRess simulates a vent button press.
ventPress()
}
func (d *daemon) snapshot() *daemonState {
d.mu.RLock()
ds := d.daemonState
d.mu.RUnlock()
return &ds
}
func (d *daemon) rpSet(state bool) {
d.mu.Lock()
defer d.mu.Unlock()
if !state && d.dpOn {
klog.Errorf("SAFETY: Refusing to disable roughing pump while diffusion pump is active")
return
}
d.rpOn = state
}
func (d *daemon) dpSet(state bool) {
d.mu.Lock()
defer d.mu.Unlock()
if state && (d.safety.failsafe || d.safety.highPressure) {
klog.Errorf("SAFETY: Refusing to enable diffusion pump with safety alerts present")
return
}
d.dpOn = state
}
func (d *daemon) pumpDownPress() {
d.mu.Lock()
defer d.mu.Unlock()
d.pumpdown.trigger()
}
func (d *daemon) ventPress() {
d.mu.Lock()
defer d.mu.Unlock()
d.vent.trigger()
}