package main import ( "flag" "fmt" "google.golang.org/protobuf/proto" "powerpod/gotool/pb" ) func runDeadzone(sp *serialPort, args []string) error { fs := flag.NewFlagSet("deadzone", flag.ExitOnError) write := fs.Bool("set", false, "write deadzone (default: read)") deadzone := fs.Uint("value", 100, "deadzone in raw accel LSB (with -set)") clientID := fs.Uint("client", 0, "client id (0=local master BMA456)") all := fs.Bool("all", false, "apply to all registered slaves (master only)") if err := fs.Parse(args); err != nil { return err } req := &pb.AccelDeadzoneRequest{ Write: *write, Deadzone: uint32(*deadzone), ClientId: uint32(*clientID), AllClients: *all, } msg := &pb.UartMessage{ Type: pb.MessageType_ACCEL_DEADZONE, Payload: &pb.UartMessage_AccelDeadzoneRequest{ AccelDeadzoneRequest: req, }, } body, err := proto.Marshal(msg) if err != nil { return fmt.Errorf("encode request: %w", err) } payload := append([]byte{byte(pb.MessageType_ACCEL_DEADZONE)}, body...) respPayload, err := sp.exchangePayload(payload, "ACCEL_DEADZONE") if err != nil { return err } var respMsg pb.UartMessage if err := proto.Unmarshal(respPayload[1:], &respMsg); err != nil { return fmt.Errorf("decode response: %w", err) } r := respMsg.GetAccelDeadzoneResponse() if r == nil { return fmt.Errorf("response missing accel_deadzone_response") } fmt.Printf("deadzone=%d client_id=%d success=%v slaves_updated=%d\n", r.GetDeadzone(), r.GetClientId(), r.GetSuccess(), r.GetSlavesUpdated()) return nil }