Proof of concept implementation of various ROTS features/requirements
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

109 lines
2.2 KiB

package main
import (
"flag"
"fmt"
"log"
)
type CommandFunc func(tbm *TBM, args []string) error
var (
serial_device = flag.String("serial-device", "/dev/ttyUSB0", "Serial device to use")
serial_baudrate = flag.Int("serial-baud", 9600, "Serial baud rate")
commands = map[string]CommandFunc{
"hi": cmd_hi,
"buzzer": cmd_buzzer,
"led": cmd_led,
"reset": cmd_reset,
"ls": cmd_ls,
"cat": cmd_cat,
"date": cmd_date,
"time": cmd_time,
"boot_version": cmd_bootversion,
"boot_ok": cmd_bootok,
}
)
func cmd_generic(tbm *TBM, command string, args []string, payload []byte) error {
cmd := &Command{command, args, payload}
tbm.Commands <- cmd
res := <-tbm.Results
if res.errcode[0] != '0' {
return fmt.Errorf("Error: %s", res.errcode)
}
fmt.Printf("%s", res.output)
return nil
}
func cmd_hi(tbm *TBM, args []string) error {
return cmd_generic(tbm, "hi", []string{"v20170802 testing"}, nil)
}
func cmd_buzzer(tbm *TBM, args []string) error {
return cmd_generic(tbm, "buzzer", args, nil)
}
func cmd_led(tbm *TBM, args []string) error {
return cmd_generic(tbm, "led", args, nil)
}
func cmd_reset(tbm *TBM, args []string) error {
return cmd_generic(tbm, "reset", args, nil)
}
func cmd_ls(tbm *TBM, args []string) error {
return cmd_generic(tbm, "ls", args, nil)
}
func cmd_cat(tbm *TBM, args []string) error {
return cmd_generic(tbm, "cat", args, nil)
}
func cmd_date(tbm *TBM, args []string) error {
return cmd_generic(tbm, "time", args, nil)
}
func cmd_time(tbm *TBM, args []string) error {
return cmd_generic(tbm, "time", args, nil)
}
func cmd_bootversion(tbm *TBM, args []string) error {
return cmd_generic(tbm, "booting", args, nil)
}
func cmd_bootok(tbm *TBM, args []string) error {
return cmd_generic(tbm, "booting", []string{"ok"}, nil)
}
func main() {
flag.Parse()
args := flag.Args()
if len(args) == 0 {
log.Fatalf("Please specify at least one command")
}
command := args[0]
command_function, ok := commands[command]
if !ok {
log.Fatalf("Unknown command: %s", command)
}
t := &TBM{}
err := t.Connect(*serial_device, *serial_baudrate)
if err != nil {
log.Fatal(err)
}
t.Handle()
defer t.Close()
err = command_function(t, args[1:])
if err != nil {
log.Fatal(err)
}
}