Expose the command via goTool CLI/REST and dashboard controls so log verbosity can be tuned without reflashing. Co-authored-by: Cursor <cursoragent@cursor.com>
62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
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
|
||
}
|