1 // (c) Bernhard Tittelbach, 2013
8 zmq "github.com/vaughan0/go-zmq"
12 // ---------- Main Code -------------
21 const exponential_backof_activation_threshold int64 = 4
24 flag.StringVar(&pub_addr, "brokeraddr", "tcp://torwaechter.realraum.at:4243", "zmq address to send stuff to")
25 flag.StringVar(&tty_dev_, "ttydev", "/dev/ttyACM0", "path do tty uc device")
26 flag.BoolVar(&use_syslog_, "syslog", false, "log to syslog local1 facility")
27 flag.BoolVar(&enable_debug_, "debug", false, "debugging messages on")
31 func ConnectSerialToZMQ(pub_sock *zmq.Socket) {
33 if x:= recover(); x != nil { Syslog_.Println(x) }
36 serial_wr, serial_rd, err := OpenAndHandleSerial(tty_dev_)
37 if err != nil { panic(err) }
38 defer close(serial_wr)
40 for incoming_ser_line := range(serial_rd) {
41 Syslog_.Printf("%s",incoming_ser_line)
42 if err := pub_sock.Send(incoming_ser_line); err != nil { Syslog_.Println(err.Error()) }
47 zmqctx, pub_sock := ZmqsInit(pub_addr)
48 if pub_sock == nil { panic("zmq socket creation failed") }
50 defer pub_sock.Close()
54 } else if use_syslog_ {
56 Syslog_.Print("started")
59 var backoff_exp uint32 = 0
61 start_time := time.Now().Unix()
62 ConnectSerialToZMQ(pub_sock)
63 run_time := time.Now().Unix() - start_time
64 if run_time > exponential_backof_activation_threshold {
67 time.Sleep(150*(1 << backoff_exp) * time.Millisecond)
68 if backoff_exp < 12 { backoff_exp++ }