package main import ( "flag" "fmt" "google.golang.org/protobuf/proto" "powerpod/gotool/pb" ) func runLogLevel(sp *serialPort, args []string) error { fs := flag.NewFlagSet("log-level", flag.ExitOnError) write := fs.Bool("set", false, "write log level (default: read)") level := fs.Uint("level", 0, "esp_log_level_t 0–5 (with -set)") if err := fs.Parse(args); err != nil { return err } resp, err := sp.setLogLevel(*write, uint32(*level)) if err != nil { return err } if !resp.GetSuccess() { return fmt.Errorf("set_log_level rejected (level=%d)", resp.GetLevel()) } fmt.Printf("log_level=%d success=%v\n", resp.GetLevel(), resp.GetSuccess()) return nil } func runSetLogLevelClient(sp *serialPort, write bool, level uint32) (*pb.SetLogLevelResponse, error) { return sp.setLogLevel(write, level) } func (s *serialPort) setLogLevel(write bool, level uint32) (*pb.SetLogLevelResponse, error) { msg := &pb.UartMessage{ Type: pb.MessageType_SET_LOG_LEVEL, Payload: &pb.UartMessage_SetLogLevelRequest{ SetLogLevelRequest: &pb.SetLogLevelRequest{ Write: write, Level: level, }, }, } body, err := proto.Marshal(msg) if err != nil { return nil, fmt.Errorf("encode: %w", err) } payload := append([]byte{byte(pb.MessageType_SET_LOG_LEVEL)}, body...) respPayload, err := s.exchangePayload(payload, "SET_LOG_LEVEL") if err != nil { return nil, err } var respMsg pb.UartMessage if err := proto.Unmarshal(respPayload[1:], &respMsg); err != nil { return nil, fmt.Errorf("decode: %w", err) } r := respMsg.GetSetLogLevelResponse() if r == nil { return nil, fmt.Errorf("missing set_log_level_response") } return r, nil }