package main import ( "flag" "fmt" _ "image/jpeg" "log" "os" "os/signal" "syscall" rgbmatrix "gitea.wagshome.duckdns.org/publicWagsHome/go-rpi-rgb-led-matrix" mqtt "github.com/eclipse/paho.mqtt.golang" ) // flags from cmd line var ( rows = flag.Int("led-rows", 64, "number of rows supported") cols = flag.Int("led-cols", 64, "number of columns supported") parallel = flag.Int("led-parallel", 1, "number of daisy-chained panels") chain = flag.Int("led-chain", 2, "number of displays daisy-chained") brightness = flag.Int("brightness", 100, "brightness (0-100)") hardware_mapping = flag.String("led-gpio-mapping", "regular", "Name of GPIO mapping used.") show_refresh = flag.Bool("led-show-refresh", false, "Show refresh rate.") inverse_colors = flag.Bool("led-inverse", false, "Switch if your matrix has inverse colors on.") disable_hardware_pulsing = flag.Bool("led-no-hardware-pulse", false, "Don't use hardware pin-pulse generation.") led_slowdown_gpio = flag.Int("led-slowdown-gpio", 1, "GPIO pin slowdown") ) // runs before main, parses flags func init() { flag.Parse() } // small function for handling fatal errors func fatal(err error) { if err != nil { panic(err) } } func main() { config := &rgbmatrix.DefaultConfig config.Rows = *rows config.Cols = *cols config.Parallel = *parallel config.ChainLength = *chain config.Brightness = *brightness config.HardwareMapping = *hardware_mapping config.ShowRefreshRate = *show_refresh config.InverseColors = *inverse_colors config.DisableHardwarePulsing = *disable_hardware_pulsing var rt rgbmatrix.RunTimeConfig rt.Gpio_slowdown = *led_slowdown_gpio setupMQTT() m, err := rgbmatrix.NewRGBLedMatrix(config, &rt) fatal(err) mqMessages := make(chan mqtt.Message) log.Println("making listener") go listener(mqMessages) tk := rgbmatrix.NewToolKit(m) defer tk.Close() log.Println("making animator") go animator(tk, mqMessages) log.Println("I guess I'm at the end") sigs := make(chan os.Signal, 1) signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) done := make(chan bool, 1) go func() { sig := <-sigs fmt.Println() fmt.Println(sig) done <- true }() fmt.Println("awaiting signal") <-done fmt.Println("exiting") }