mirror of
https://github.com/RoganDawes/P4wnP1_aloa.git
synced 2025-03-26 17:41:44 +01:00
92 lines
1.9 KiB
Go
92 lines
1.9 KiB
Go
package service
|
|
|
|
import (
|
|
pb "github.com/mame82/P4wnP1_go/proto"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"sync/atomic"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
pLED_TRIGGER_PATH = "/sys/class/leds/led0/trigger"
|
|
pLED_BRIGHTNESS_PATH = "/sys/class/leds/led0/brightness"
|
|
pLED_TRIGGER_MANUAL = "none"
|
|
pLED_ON = "0"
|
|
pLED_OFF = "1"
|
|
pLED_DELAY_ON = 200 * time.Millisecond
|
|
pLED_DELAY_OFF = 200 * time.Millisecond
|
|
pLED_DELAY_PAUSE = 500 * time.Millisecond
|
|
)
|
|
|
|
type LedState1 struct {
|
|
Available bool
|
|
IsRunning bool
|
|
BlinkCount *uint32
|
|
}
|
|
|
|
type LedService struct {
|
|
state *LedState1
|
|
}
|
|
|
|
func NewLedService() (res *LedService) {
|
|
res = &LedService{
|
|
state: &LedState1{},
|
|
}
|
|
bc := uint32(0)
|
|
res.state.BlinkCount = &bc
|
|
|
|
return res
|
|
}
|
|
|
|
func (l *LedService) led_loop() {
|
|
ioutil.WriteFile(pLED_BRIGHTNESS_PATH, []byte(pLED_ON), os.ModePerm)
|
|
|
|
for l.state.IsRunning{
|
|
for i := uint32(0); i < atomic.LoadUint32(l.state.BlinkCount) && l.state.IsRunning; i++ {
|
|
ioutil.WriteFile(pLED_BRIGHTNESS_PATH, []byte(pLED_ON), os.ModePerm)
|
|
time.Sleep(pLED_DELAY_ON)
|
|
|
|
//Don't turn off led if blink_count >= 255 (solid)
|
|
if 255 > atomic.LoadUint32(l.state.BlinkCount) {
|
|
ioutil.WriteFile(pLED_BRIGHTNESS_PATH, []byte(pLED_OFF), os.ModePerm)
|
|
time.Sleep(pLED_DELAY_OFF)
|
|
}
|
|
}
|
|
time.Sleep(pLED_DELAY_PAUSE)
|
|
}
|
|
|
|
ioutil.WriteFile(pLED_BRIGHTNESS_PATH, []byte(pLED_ON), os.ModePerm)
|
|
}
|
|
|
|
func (l *LedService) Start() error {
|
|
//set trigger of LED to manual
|
|
log.Println("Setting LED to manual trigger ...")
|
|
ioutil.WriteFile(pLED_TRIGGER_PATH, []byte(pLED_TRIGGER_MANUAL), os.ModePerm)
|
|
l.state.IsRunning = true
|
|
go l.led_loop()
|
|
|
|
return nil
|
|
}
|
|
|
|
func (l *LedService) Stop() {
|
|
l.state.IsRunning = false
|
|
}
|
|
|
|
func (l *LedService) GetState() *LedState1 {
|
|
return l.state
|
|
}
|
|
|
|
func (l *LedService) DeploySettings(sets *pb.LEDSettings) {
|
|
atomic.StoreUint32(l.state.BlinkCount, sets.BlinkCount)
|
|
}
|
|
|
|
func (LedService) LoadSettings() {
|
|
panic("implement me")
|
|
}
|
|
|
|
func (LedService) StoreSettings() {
|
|
panic("implement me")
|
|
}
|