Hmm.go
The snippet can be accessed without any authentication.
Authored by
arn2
hmm.go 2.54 KiB
package main
import (
"bufio"
"flag"
"fmt"
"github.com/joshuaferrara/go-satellite"
"net"
"strconv"
"time"
)
const (
// Server port
Port = ":55555"
// Server IP
IP = "127.0.0.1"
)
var DebugFlag *bool
func main() {
DebugFlag = flag.Bool("d", false, "run program with local config and with all the prints")
flag.Parse()
fmt.Println(*DebugFlag)
rotctldBuf := openAddr(IP + Port)
// Read response
//response, err := rw.ReadString('\n')
//if err != nil {
// dPrintln("Failed to read the reply: '"+response+"'")
//}
year, month, day, hour, min, sec := getUTC()
sat := satellite.TLEToSat("1 25544U 98067A 18088.93511921 .00004874 00000-0 80700-4 0 9998",
"2 25544 51.6414 53.8028 0001446 273.2833 187.1736 15.54165179106196", "wgs84")
jdate := satellite.JDay(year, month, day, hour, min, sec)
satPos, _ := satellite.Propagate(sat, year, month, day, hour, min, sec)
dPrintln(jdate)
angles := satellite.ECIToLookAngles(satPos, satellite.LatLong{40.110588, -88.207270}, 0.220, jdate)
writeToRotator(rotctldBuf, angles.Az, angles.El)
dPrintln(angles.Az*satellite.RAD2DEG, angles.El*satellite.RAD2DEG, angles.Rg)
}
// Opens tcp connection on given address
// Returns r/w buffer that sits on top of the connection
func openAddr(addr string) *bufio.ReadWriter {
dPrintln(addr)
conn, err := net.Dial("tcp", addr)
if err != nil {
dPrintln("Dialing " + addr + " failed")
//TODO exit code here
}
return bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
}
// Takes angles in radians and sends them over tcp to the rotator controller
func writeToRotator(rotctldBuf *bufio.ReadWriter, az float64, el float64) {
az = az * satellite.RAD2DEG
el = el * satellite.RAD2DEG
_, err := rotctldBuf.WriteString("P " + f64ToString(az) + " " + f64ToString(el) + "\n")
if err != nil {
dPrintln("Couldn't write to buffer")
//TODO exit code here
}
err = rotctldBuf.Flush()
if err != nil {
dPrintln("Couldn't flush bufferd tcp port")
//TODO exit code here
}
}
// getUTC returns the the current utc time
// returns year, month, day, hour, min, sec as ints
func getUTC() (year, month, day, hour, min, sec int) {
now := time.Now().UTC()
year, month_t, day := now.UTC().Date()
month = int(month_t)
hour = now.Hour()
min = now.Minute()
sec = now.Second()
return
}
// dPrintln prints to stdout only if debug flag is passed to program
func dPrintln(i ...interface{}) {
if *DebugFlag {
fmt.Println(i)
}
}
func f64ToString(input_num float64) string {
// to convert a float number to a string
return strconv.FormatFloat(input_num, 'f', 2, 64)
}
Please register or sign in to comment