Skip to content

Commit

Permalink
Working on ping check
Browse files Browse the repository at this point in the history
- Added constants (PingUp, PingDown, PingUnknown)
- Added fastping lib
- Added ping check function every minute
- Added pause and resume glow functions
- Refactored glow code to one function (setGlow(power int))
- Main loop moved sleep to top and added pause skip
  • Loading branch information
kevinvalk committed Sep 23, 2014
1 parent 32dcf14 commit 45e98c9
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 16 deletions.
6 changes: 6 additions & 0 deletions common.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ type Config struct {
}
}

const (
PingUnknown = iota
PingUp
PingDown
)

func getTransitionSpeed(str string) (int, error) {
if len(str) <= 0 {
return -1, errors.New("No transition time given")
Expand Down
104 changes: 88 additions & 16 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package main
import (
"github.com/cpucycle/astrotime"
"github.com/wjessop/go-piglow"
"github.com/tatsushid/go-fastping"
"code.google.com/p/gcfg"
"time"
"strconv"
Expand All @@ -12,11 +13,15 @@ import (
"os"
"os/signal"
"syscall"
"net"
"fmt"
"flag"
)

const VERSION = "0.2.1"

var glow *piglow.Piglow
var isPaused bool
var isRunning bool
var isTesting bool
var pidPath string
Expand Down Expand Up @@ -63,12 +68,83 @@ func initSignal() {
}()
}

func initPing() {
lastState := PingUnknown
p := fastping.NewPinger()
ra, err := net.ResolveIPAddr("ip4:icmp", cfg.Settings.PingIp)
if err != nil {
log.Fatalf("error resolving IP address: %v", err)
}
p.AddIPAddr(ra)
err = p.AddHandler("receive", func(addr *net.IPAddr, rtt time.Duration) {
if lastState == PingDown {
log.Printf("Remote %s came up, RTT: %v", addr.String(), rtt)
resume()
}
lastState = PingUp
})
if err != nil {
log.Fatalf("error adding receive handler: %v", err)
}
err = p.AddHandler("idle", func() {
if lastState == PingUp {
log.Printf("Remote %s went down", cfg.Settings.PingIp)
pause()
}
lastState = PingDown
})
if err != nil {
log.Fatalf("error adding idle handler: %v", err)
}

// Ping loop
go func(){
for isRunning {
err = p.Run()
if err != nil {
log.Fatalf("error while pinging: %v", err)
}
time.Sleep(time.Minute) // Check every minute for host
}
}()
}

func pause() {
isPaused = true

// Do quick fade out
time.Sleep(time.Second)
for i := 255; i >= 0; i-- {
setGlow(i)
time.Sleep(time.Millisecond * 35) // 9 seconds
}
}

func resume() {
isPaused = false

// Do quick fade out
time.Sleep(time.Second)
for i := 0; i <= 255; i++ {
setGlow(i)
time.Sleep(time.Millisecond * 35) // 9 seconds
}
}

func setGlow(power int) {
glow.SetAll(uint8(power))
if err := glow.Apply(); err != nil {
log.Fatal("Could not set PiGlow: ", err)
}
}

func main() {
// Do initializing
isRunning = true
isPaused = false
initFlags()
initSignal()
initPing()

// Setup logging
if logPath != "-" {
Expand Down Expand Up @@ -118,14 +194,11 @@ func main() {
fadeOutTime := astrotime.NextSunrise(time.Now(), cfg.Settings.Latitude, -cfg.Settings.Longitude).Add(-transitionDuration/2)

// Setup PiGlow
p, err := piglow.NewPiglow()
glow, err = piglow.NewPiglow()
if err != nil {
log.Fatal("Could not create a PiGlow object: ", err)
}
p.SetAll(0)
if err = p.Apply(); err != nil {
log.Fatal("Could not set PiGlow: ", err)
}
setGlow(0)

// Announce some basic information
log.Printf("Transition time in seconds: %d, Sleep duration: %.04f", transitionTime, sleepDuration.Seconds())
Expand All @@ -141,16 +214,21 @@ func main() {
// Main loop
var power int
for isRunning {
// Sleep
time.Sleep(sleepDuration)

// Check if we are sleeping
if isPaused {
continue
}

// FadeIn
if elapsed := time.Now().Sub(fadeInTime); elapsed > 0 {
// Calculate brightness with maximum of 255
power = int(math.Ceil((MAX_POWER/float64(transitionTime))*elapsed.Seconds())) % 256

// Set the new brightness
p.SetAll(uint8(power))
if err = p.Apply(); err != nil {
log.Fatal("Could not set PiGlow: ", err)
}
setGlow(power)

// If we have complete our fadeIn calculate next fadeIn
if power >= 255 {
Expand All @@ -168,19 +246,13 @@ func main() {
}

// Set the new brightness
p.SetAll(uint8(power))
if err = p.Apply(); err != nil {
log.Fatal("Could not set PiGlow: ", err)
}
setGlow(power)

// If we have complete our fadeIn calculate next fadeIn
if power <= 0 {
fadeOutTime = astrotime.NextSunrise(time.Now(), cfg.Settings.Latitude, -cfg.Settings.Longitude).Add(-transitionDuration/2)
log.Printf("The next fadeOut is %02d:%02d:%02d on %d/%d/%d", fadeOutTime.Hour(), fadeOutTime.Minute(), fadeOutTime.Second(), fadeOutTime.Month(), fadeOutTime.Day(), fadeOutTime.Year())
}
}

// Sleep
time.Sleep(sleepDuration)
}
}

0 comments on commit 45e98c9

Please sign in to comment.