1 // (c) Bernhard Tittelbach, 2013
9 zmq "github.com/vaughan0/go-zmq"
12 // ---------- Main Code -------------
22 const exponential_backof_activation_threshold int64 = 4
25 flag.StringVar(&pub_addr, "brokeraddr", "tcp://torwaechter.realraum.at:4243", "zmq address to send stuff to")
26 flag.StringVar(&tty_dev_, "ttydev", "/dev/ttyACM0", "path do tty uc device")
27 flag.UintVar(&serial_speed_, "serspeed", 0, "tty baudrate (0 to disable setting a baudrate e.g. in case of ttyACM)")
28 flag.BoolVar(&use_syslog_, "syslog", false, "log to syslog local1 facility")
29 flag.BoolVar(&enable_debug_, "debug", false, "debugging messages on")
33 func ConnectSerialToZMQ(pub_sock *zmq.Socket, timeout time.Duration) {
35 if x := recover(); x != nil {
40 serial_wr, serial_rd, err := OpenAndHandleSerial(tty_dev_, serial_speed_)
44 defer close(serial_wr)
46 t := time.NewTimer(timeout)
49 case incoming_ser_line, seropen := <-serial_rd:
54 Syslog_.Printf("%s", incoming_ser_line)
55 if err := pub_sock.Send(incoming_ser_line); err != nil {
56 Syslog_.Println(err.Error())
60 Syslog_.Print("Timeout, no message for 120 seconds")
66 zmqctx, pub_sock := ZmqsInit(pub_addr)
68 panic("zmq socket creation failed")
71 defer pub_sock.Close()
75 } else if use_syslog_ {
77 Syslog_.Print("started")
80 var backoff_exp uint32 = 0
82 start_time := time.Now().Unix()
83 ConnectSerialToZMQ(pub_sock, time.Second*120)
84 run_time := time.Now().Unix() - start_time
85 if run_time > exponential_backof_activation_threshold {
88 time.Sleep(150 * (1 << backoff_exp) * time.Millisecond)