package main import ( "fmt" "log" "time" "alox.tool/api" "alox.tool/eventbus" "alox.tool/frontend" "alox.tool/uart" ) func main() { config := Config{ Port: 8000, Host: "0.0.0.0", UartPort: "/dev/ttyUSB0", Baudrate: 115200, } StartApp(config) } func StartApp(config Config) { bus := eventbus.New() com, err := uart.Connect(bus, config.UartPort, config.Baudrate) if err != nil { log.Printf("Could not Connect with Uart Device %v", err) } defer com.Close() go func() { for { select { case msg := <-bus.Subscribe(api.TopicUARTTx): log.Printf("MSG[TX]: % X", msg) case msg := <-bus.Subscribe(api.TopicUARTRx): log.Printf("MSG[RX]: % X", msg) val, ok := msg.(api.Frame) if !ok { log.Printf("val is not type api.Frame its %T", val) continue } log.Printf("[%d] Frame: %X, % X", val.Time, val.ID, val.Data) switch val.ID { case api.CmdEcho: case api.CmdVersion: v, err := uart.ParseFrameVersion(val) if err != nil { log.Printf("Could not Parse Version %v", err) continue } log.Printf("Version Info %d %X", v.Version, v.Buildhash) case api.CmdClientInfo: v, err := uart.ParseFrameClientInfo(val) if err != nil { log.Printf("Could not Parse Client Info %v", err) continue } for _, c := range v { log.Printf("Client ID %d", c.ClientID) log.Printf("\tIsAvailable %d", c.IsAvailable) log.Printf("\tLastPing %d", c.LastPing) log.Printf("\tLastSuccessfulPing %d", c.LastSuccessfulPing) log.Printf("\tSlotIsUsed %d", c.SlotIsUsed) log.Printf("\tVersion %d", c.Version) log.Printf("\tMACAddr % X", c.MACAddr) } case api.CmdClientInput: v, err := uart.ParseFrameClientInput(val) if err != nil { log.Printf("Could not Parse Client Input %v", err) continue } for _, c := range v { log.Printf("Client ID %d", c.ClientID) log.Printf("\tX %f", c.X) log.Printf("\tY %f", c.Y) log.Printf("\tBitmask %08b", c.InputMask) } } } } }() time.Sleep(time.Millisecond * 5) com.Send(api.CmdEcho, make([]byte, 0)) com.Send(api.CmdVersion, make([]byte, 0)) com.Send(api.CmdClientInfo, make([]byte, 0)) com.Send(api.CmdClientInput, make([]byte, 0)) url := fmt.Sprintf("%s:%d", config.Host, config.Port) fserver := frontend.New(bus) fserver.Start(url) }