59 lines
1 KiB
Go
59 lines
1 KiB
Go
package fan
|
|
|
|
// Code originally developed by sungo (https://sungo.io)
|
|
// Distributed under the terms of the 0BSD license https://opensource.org/licenses/0BSD
|
|
|
|
import (
|
|
"github.com/d2r2/go-i2c"
|
|
"github.com/d2r2/go-logger"
|
|
)
|
|
|
|
type Fan struct {
|
|
conn *i2c.I2C
|
|
}
|
|
|
|
func init() {
|
|
logger.ChangePackageLogLevel("i2c", logger.PanicLevel)
|
|
}
|
|
|
|
// From the argon python script:
|
|
// On an rpi4, the bus should be 1
|
|
// On any other rpi, the bus should 0
|
|
// On all platforms, the address should be 0x1a
|
|
func New(address uint8, bus int) (*Fan, error) {
|
|
f := &Fan{}
|
|
|
|
i, err := i2c.NewI2C(address, bus)
|
|
f.conn = i
|
|
|
|
return f, err
|
|
}
|
|
|
|
func (f *Fan) Bus() int {
|
|
return f.conn.GetBus()
|
|
}
|
|
|
|
func (f *Fan) Addr() uint8 {
|
|
return f.conn.GetAddr()
|
|
}
|
|
|
|
func (f *Fan) SafeClose() error {
|
|
f.SetSpeed(50)
|
|
return f.Close()
|
|
}
|
|
|
|
func (f *Fan) Close() error {
|
|
return f.conn.Close()
|
|
}
|
|
|
|
func (f *Fan) SetSpeed(percent int) error {
|
|
if percent > 100 {
|
|
percent = 100
|
|
} else if percent < 0 {
|
|
percent = 0
|
|
}
|
|
|
|
_, err := f.conn.WriteBytes([]byte(string(percent)))
|
|
return err
|
|
}
|