package main import ( "flag" "fmt" "powerpod/gotool/pb" ) const ( ledRingModeClear = 0 ledRingModeProgress = 1 ledRingModeDigit = 2 ledRingModeBlink = 3 ledRingModeFindMe = 4 ) func runLedRing(sp *serialPort, args []string) error { fs := flag.NewFlagSet("led-ring", flag.ExitOnError) mode := fs.String("mode", "progress", "clear, progress, digit, blink, or find-me") progress := fs.Uint("progress", 0, "fill level 0–100 (mode=progress)") digit := fs.Uint("digit", 0, "digit 0–10 (mode=digit)") r := fs.Uint("r", 0, "red 0–255") g := fs.Uint("g", 255, "green 0–255") b := fs.Uint("b", 0, "blue 0–255") intensity := fs.Uint("intensity", 0, "brightness 0–255 (0 = device default ~5%)") blinkMs := fs.Uint("blink-ms", 350, "pulse length in ms (mode=blink)") blinkCount := fs.Uint("blink-count", 1, "number of pulses (mode=blink)") if err := fs.Parse(args); err != nil { return err } var modeVal uint32 switch *mode { case "clear": modeVal = ledRingModeClear case "progress": modeVal = ledRingModeProgress case "digit": modeVal = ledRingModeDigit case "blink": modeVal = ledRingModeBlink case "find-me", "find_me", "findme": modeVal = ledRingModeFindMe default: return fmt.Errorf("unknown -mode %q (clear, progress, digit, blink, find-me)", *mode) } resp, err := sp.ledRingProgress(&pb.LedRingProgressRequest{ Mode: modeVal, Progress: uint32(*progress), Digit: uint32(*digit), R: uint32(*r), G: uint32(*g), B: uint32(*b), Intensity: uint32(*intensity), BlinkMs: uint32(*blinkMs), BlinkCount: uint32(*blinkCount), }) if err != nil { return err } fmt.Printf("success=%v mode=%d progress=%d digit=%d\n", resp.GetSuccess(), resp.GetMode(), resp.GetProgress(), resp.GetDigit()) return nil }