diff --git a/docs/DOCUMENTATION.md b/docs/DOCUMENTATION.md index 7f5a02b..1770b08 100644 --- a/docs/DOCUMENTATION.md +++ b/docs/DOCUMENTATION.md @@ -429,16 +429,18 @@ Spannungen in Millivolt in Registry und `BATTERY_STATUS`-UART. ### Software-UV-Schutz (`battery_uv.c`) -Aktivierbar mit `POWERPOD_BATTERY_UV_ENABLE` in `powerpod.h` (CMake-Override möglich). +Aktivierbar mit `POWERPOD_BATTERY_UV_ENABLE` in `powerpod.h` (CMake-Override möglich). Runtime zusätzlich NVS `uv_en` (Default **aus**) — UART `BATTERY_UV` / Dashboard / ESP-NOW `ESPNOW_SET_BATTERY_UV`. | Zustand | ADC-Schwelle | Logik | |---------|--------------|-------| -| UV | < 2300 mV | Ein gültiger Kanal reicht | -| Geladen | ≥ 3000 mV | Alle gültigen Kanäle | +| Extern / kein Pack | < 100 mV | Alle gültigen Kanäle → normaler Boot | +| UV | 100…2299 mV | Ein gültiger Kanal reicht | +| Geladen | ≥ 3000 mV | Alle nicht-absent gültigen Kanäle | -- NVS-Key `uv_latch` in `pod_settings.c` -- Boot: ADC früh, bei UV nur LED + ADC-Poll (kein ESP-NOW/WiFi/UART/I2C/Button) -- Runtime: `battery_uv_poll()` im LiPo-Monitor (2 Samples Debounce) +- NVS-Keys `uv_latch`, `uv_en` in `pod_settings.c` +- Boot: ADC früh, bei UV nur LED + ADC-Poll (kein ESP-NOW/WiFi/UART/I2C/Button); übersprungen wenn `uv_en=0` +- Runtime: `battery_uv_poll()` im LiPo-Monitor (2 Samples Debounce), gated by `uv_en` +- UART `BATTERY_UV`: `client_id` / `all_clients`; Disable cleart Latch - LED-Anzeige: Mode `6` battery-low (`led_ring_show_battery_low`) --- @@ -452,6 +454,7 @@ Aktivierbar mit `POWERPOD_BATTERY_UV_ENABLE` in `powerpod.h` (CMake-Override mö | `accel_dz` | Accel-Deadzone LSB | | `tap_cfg` | BMA456 Multitap-Config (Blob) | | `uv_latch` | Software-UV-Zustand (`1` = Energiesparmodus) | +| `uv_en` | Runtime-Enable UV-Schutz (`0`/`1`, fehlend = aus) | Gespeichert bei lokalem Set (UART `client_id=0`, ESP-NOW auf Slave). Geladen nach `init_bma456()`. diff --git a/goTool/README.md b/goTool/README.md index cfb0641..0e64069 100644 --- a/goTool/README.md +++ b/goTool/README.md @@ -38,6 +38,7 @@ go run . -port /dev/ttyUSB0 clients | `find-me` | 22 | Locate pod (`-client 0` master, `>0` slave via ESP-NOW) | | `restart` | 23 | Reboot master or slave (`-client 0` / `>0`) | | `log-level` | `0x1f` | Get/set master ESP-IDF log level for tag `"*"` (`-set`, `-level` 0–5); output on UART0 debug, not host UART | +| `battery-uv` | `0x24` | Get/set software LiPo UV protection (`-set -enable`/`-enable=false`, `-client`, `-all`) | | `input-send-mode` | `0x23` | Get/set slave accel/tap ESP-NOW TX path (`-set -mode 0..3`, `-all` or `-client N`): best_effort/fast/wait/reliable | `clients` requires slaves to have responded to master discover broadcasts first. diff --git a/goTool/api_battery_uv.go b/goTool/api_battery_uv.go new file mode 100644 index 0000000..5ddb835 --- /dev/null +++ b/goTool/api_battery_uv.go @@ -0,0 +1,140 @@ +package main + +import ( + "encoding/json" + "fmt" + "net/http" + + "powerpod/gotool/pb" +) + +type batteryUvAPIRequest struct { + Write bool `json:"write"` + Enabled bool `json:"enabled"` + ClientID uint32 `json:"client_id"` + AllClients bool `json:"all_clients"` + // SlavesOnly: with all_clients, push to ESP-NOW slaves only (master NVS unchanged). + SlavesOnly bool `json:"slaves_only"` +} + +type batteryUvAPIResponse struct { + ClientID uint32 `json:"client_id"` + Success bool `json:"success"` + Enabled bool `json:"enabled"` + Latched bool `json:"latched"` + SlavesUpdated uint32 `json:"slaves_updated"` + Error string `json:"error,omitempty"` +} + +func mountBatteryUvAPI(mux *http.ServeMux, link *managedSerial) { + mux.HandleFunc("/api/battery-uv", func(w http.ResponseWriter, r *http.Request) { + switch r.Method { + case http.MethodGet: + serveBatteryUvGet(w, r, link) + case http.MethodPost: + serveBatteryUvPost(w, r, link) + default: + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + } + }) +} + +func serveBatteryUvGet(w http.ResponseWriter, r *http.Request, link *managedSerial) { + clientID, err := parseUintQuery(r, "client_id", 0) + if err != nil { + writeJSON(w, http.StatusBadRequest, batteryUvAPIResponse{Error: err.Error()}) + return + } + resp, err := link.BatteryUv(&pb.BatteryUvRequest{ + Write: false, + ClientId: clientID, + }) + if err != nil { + writeJSON(w, http.StatusServiceUnavailable, batteryUvAPIResponse{ + ClientID: clientID, + Error: err.Error(), + }) + return + } + writeJSON(w, http.StatusOK, batteryUvAPIResponse{ + ClientID: resp.GetClientId(), + Success: resp.GetSuccess(), + Enabled: resp.GetEnabled(), + Latched: resp.GetLatched(), + SlavesUpdated: resp.GetSlavesUpdated(), + }) +} + +func serveBatteryUvPost(w http.ResponseWriter, r *http.Request, link *managedSerial) { + var body batteryUvAPIRequest + if err := json.NewDecoder(r.Body).Decode(&body); err != nil { + writeJSON(w, http.StatusBadRequest, batteryUvAPIResponse{Error: "invalid JSON"}) + return + } + if body.AllClients && body.SlavesOnly { + updated, err := applyBatteryUvToSlaves(link, body.Enabled) + if err != nil { + writeJSON(w, http.StatusServiceUnavailable, batteryUvAPIResponse{ + Enabled: body.Enabled, + Error: err.Error(), + }) + return + } + writeJSON(w, http.StatusOK, batteryUvAPIResponse{ + Success: updated > 0, + Enabled: body.Enabled, + SlavesUpdated: updated, + }) + return + } + + resp, err := link.BatteryUv(&pb.BatteryUvRequest{ + Write: true, + Enabled: body.Enabled, + ClientId: body.ClientID, + AllClients: body.AllClients, + }) + if err != nil { + writeJSON(w, http.StatusServiceUnavailable, batteryUvAPIResponse{ + ClientID: body.ClientID, + Enabled: body.Enabled, + Error: err.Error(), + }) + return + } + writeJSON(w, http.StatusOK, batteryUvAPIResponse{ + ClientID: resp.GetClientId(), + Success: resp.GetSuccess(), + Enabled: resp.GetEnabled(), + Latched: resp.GetLatched(), + SlavesUpdated: resp.GetSlavesUpdated(), + }) +} + +func applyBatteryUvToSlaves(link *managedSerial, enabled bool) (uint32, error) { + clients, err := link.listClients() + if err != nil { + return 0, err + } + var updated uint32 + for _, c := range clients { + resp, err := link.BatteryUv(&pb.BatteryUvRequest{ + Write: true, + Enabled: enabled, + ClientId: c.GetId(), + }) + if err != nil { + continue + } + if resp.GetSuccess() { + updated++ + } + } + if len(clients) == 0 { + return 0, fmt.Errorf("no slaves registered") + } + if updated == 0 { + return 0, fmt.Errorf("UV protection not applied to any slave") + } + return updated, nil +} diff --git a/goTool/api_serve.go b/goTool/api_serve.go index 63f3585..6a0d36f 100644 --- a/goTool/api_serve.go +++ b/goTool/api_serve.go @@ -105,6 +105,7 @@ func mountServeAPI(mux *http.ServeMux, link *managedSerial, hub *wsHub, streamCt mountInputSendModeAPI(mux, link) mountTapAPI(mux, link, hub, tapCtl) mountTapConfigAPI(mux, link) + mountBatteryUvAPI(mux, link) mountLedRingAPI(mux, link) mountBatteryAPI(mux, link) mux.HandleFunc("/api/deadzone", func(w http.ResponseWriter, r *http.Request) { diff --git a/goTool/client_api.go b/goTool/client_api.go index bc24329..57b7ccd 100644 --- a/goTool/client_api.go +++ b/goTool/client_api.go @@ -290,6 +290,44 @@ func (m *managedSerial) tapConfigExchange(poll bool, req *pb.TapConfigRequest) ( return r, nil } +func (m *managedSerial) BatteryUv(req *pb.BatteryUvRequest) (*pb.BatteryUvResponse, error) { + return m.batteryUvExchange(false, req) +} + +func (m *managedSerial) BatteryUvPoll(req *pb.BatteryUvRequest) (*pb.BatteryUvResponse, error) { + return m.batteryUvExchange(true, req) +} + +func (m *managedSerial) batteryUvExchange(poll bool, req *pb.BatteryUvRequest) (*pb.BatteryUvResponse, error) { + msg := &pb.UartMessage{ + Type: pb.MessageType_BATTERY_UV, + Payload: &pb.UartMessage_BatteryUvRequest{BatteryUvRequest: req}, + } + body, err := proto.Marshal(msg) + if err != nil { + return nil, fmt.Errorf("encode: %w", err) + } + payload := append([]byte{byte(pb.MessageType_BATTERY_UV)}, body...) + var respPayload []byte + if poll { + respPayload, err = m.exchangePayloadPoll(payload, "BATTERY_UV") + } else { + respPayload, err = m.exchangePayload(payload, "BATTERY_UV") + } + 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.GetBatteryUvResponse() + if r == nil { + return nil, fmt.Errorf("missing battery_uv_response") + } + return r, nil +} + func (m *managedSerial) accelDeadzoneExchange(poll bool, req *pb.AccelDeadzoneRequest) (*pb.AccelDeadzoneResponse, error) { msg := &pb.UartMessage{ Type: pb.MessageType_ACCEL_DEADZONE, @@ -510,6 +548,33 @@ func (s *serialPort) tapConfig(req *pb.TapConfigRequest) (*pb.TapConfigResponse, return r, nil } +func (s *serialPort) batteryUv(req *pb.BatteryUvRequest) (*pb.BatteryUvResponse, error) { + msg := &pb.UartMessage{ + Type: pb.MessageType_BATTERY_UV, + Payload: &pb.UartMessage_BatteryUvRequest{ + BatteryUvRequest: req, + }, + } + body, err := proto.Marshal(msg) + if err != nil { + return nil, fmt.Errorf("encode: %w", err) + } + payload := append([]byte{byte(pb.MessageType_BATTERY_UV)}, body...) + respPayload, err := s.exchangePayload(payload, "BATTERY_UV") + 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.GetBatteryUvResponse() + if r == nil { + return nil, fmt.Errorf("missing battery_uv_response") + } + return r, nil +} + func (s *serialPort) espnowUnicastTest(clientID, seq uint32) (*pb.EspNowUnicastTestResponse, error) { req := &pb.EspNowUnicastTestRequest{ClientId: clientID, Seq: seq} msg := &pb.UartMessage{ @@ -681,6 +746,10 @@ func (s *serialPort) TapConfig(req *pb.TapConfigRequest) (*pb.TapConfigResponse, return s.tapConfig(req) } +func (s *serialPort) BatteryUv(req *pb.BatteryUvRequest) (*pb.BatteryUvResponse, error) { + return s.batteryUv(req) +} + func (s *serialPort) EspnowUnicastTest(clientID, seq uint32) (*pb.EspNowUnicastTestResponse, error) { return s.espnowUnicastTest(clientID, seq) } diff --git a/goTool/cmd_battery_uv.go b/goTool/cmd_battery_uv.go new file mode 100644 index 0000000..73c7a0f --- /dev/null +++ b/goTool/cmd_battery_uv.go @@ -0,0 +1,34 @@ +package main + +import ( + "flag" + "fmt" + + "powerpod/gotool/pb" +) + +func runBatteryUv(sp *serialPort, args []string) error { + fs := flag.NewFlagSet("battery-uv", flag.ExitOnError) + write := fs.Bool("set", false, "write UV protection enable (default: read)") + enabled := fs.Bool("enable", false, "enable software UV protection") + clientID := fs.Uint("client", 0, "client id (0=local master)") + all := fs.Bool("all", false, "apply to master + all registered slaves") + if err := fs.Parse(args); err != nil { + return err + } + + r, err := sp.batteryUv(&pb.BatteryUvRequest{ + Write: *write, + Enabled: *enabled, + ClientId: uint32(*clientID), + AllClients: *all, + }) + if err != nil { + return err + } + + fmt.Printf("client_id=%d success=%v enabled=%v latched=%v slaves_updated=%d\n", + r.GetClientId(), r.GetSuccess(), r.GetEnabled(), r.GetLatched(), + r.GetSlavesUpdated()) + return nil +} diff --git a/goTool/dashboard.go b/goTool/dashboard.go index 99b5768..57d40a5 100644 --- a/goTool/dashboard.go +++ b/goTool/dashboard.go @@ -20,6 +20,8 @@ type MasterView struct { RunningPartition string `json:"running_partition,omitempty"` Deadzone uint32 `json:"deadzone,omitempty"` TapConfig *TapConfigView `json:"tap_config,omitempty"` + UvProtection *bool `json:"uv_protection,omitempty"` + UvLatched bool `json:"uv_latched,omitempty"` Lipo1 lipoReadingJSON `json:"lipo1"` Lipo2 lipoReadingJSON `json:"lipo2"` BatteryAgeMs uint32 `json:"battery_age_ms,omitempty"` @@ -58,6 +60,7 @@ type ClientView struct { TapNotifySingle bool `json:"tap_notify_single"` TapNotifyDouble bool `json:"tap_notify_double"` TapNotifyTriple bool `json:"tap_notify_triple"` + UvProtection bool `json:"uv_protection"` LastTap string `json:"last_tap,omitempty"` LastTapAt int64 `json:"last_tap_at,omitempty"` Lipo1 lipoReadingJSON `json:"lipo1"` @@ -700,6 +703,11 @@ func pollDashboard(link *managedSerial, portName string, last *DashboardState, s if tc, err := readTapConfigPoll(link, 0); err == nil { st.Master.TapConfig = tc } + if uv, err := readBatteryUvPoll(link, 0); err == nil { + en := uv.GetEnabled() + st.Master.UvProtection = &en + st.Master.UvLatched = uv.GetLatched() + } clients, err := link.listClientsPoll() if err != nil { @@ -726,6 +734,7 @@ func pollDashboard(link *managedSerial, portName string, last *DashboardState, s TapNotifySingle: c.GetTapNotifySingle(), TapNotifyDouble: c.GetTapNotifyDouble(), TapNotifyTriple: c.GetTapNotifyTriple(), + UvProtection: c.GetUvProtectionEnabled(), } st.Clients = append(st.Clients, cv) } @@ -928,6 +937,20 @@ func tapConfigViewFromPB(r *pb.TapConfigResponse) *TapConfigView { } } +func readBatteryUvPoll(link *managedSerial, clientID uint32) (*pb.BatteryUvResponse, error) { + r, err := link.BatteryUvPoll(&pb.BatteryUvRequest{ + Write: false, + ClientId: clientID, + }) + if err != nil { + return nil, err + } + if !r.GetSuccess() { + return nil, fmt.Errorf("battery uv read failed for client %d", clientID) + } + return r, nil +} + func readTapConfigPoll(link *managedSerial, clientID uint32) (*TapConfigView, error) { r, err := link.TapConfigPoll(&pb.TapConfigRequest{ Write: false, diff --git a/goTool/docs/API_REST.md b/goTool/docs/API_REST.md index 3374286..d602746 100644 --- a/goTool/docs/API_REST.md +++ b/goTool/docs/API_REST.md @@ -400,6 +400,31 @@ go run . -port /dev/ttyUSB0 log-level -set -level 3 Dashboard: Master card → dropdown **ESP Log-Level** with **Lesen** / **Setzen**. +### Battery UV protection + +Runtime enable for software LiPo under-voltage protection (NVS `uv_en` per pod). Disable also clears `uv_latch`. `all_clients` applies to master + every registered slave; `slaves_only` with `all_clients` skips the master. + +```http +GET /api/battery-uv?client_id=0 +POST /api/battery-uv +Content-Type: application/json +{"write": true, "enabled": false, "client_id": 0} +{"write": true, "enabled": false, "all_clients": true} +{"write": true, "enabled": false, "all_clients": true, "slaves_only": true} +``` + +```json +{"success": true, "client_id": 0, "enabled": false, "latched": false, "slaves_updated": 0} +``` + +```bash +go run . -port /dev/ttyUSB0 battery-uv +go run . -port /dev/ttyUSB0 battery-uv -set -enable=false -client 0 +go run . -port /dev/ttyUSB0 battery-uv -set -enable=false -all +``` + +Dashboard: Master **UV-Schutz** checkbox + **Alle an/aus**; per-slave **UV** column. + ### Input send mode (slave accel/tap ESP-NOW TX path) Debug A/B for how slaves transmit `ACCEL_SAMPLE` / `TAP_EVENT`. Default on slaves is `best_effort` (0). Master remembers the last mode for GET; write pushes via ESP-NOW. @@ -486,6 +511,7 @@ Same as external API: | Unicast test | `POST /api/unicast-test` | | Echo ping | `POST /api/echo-ping` (per-slave latency; UI shows Host ms + ESP ms) | | Master log level | `GET` / `POST /api/log-level` or CLI `log-level` | +| UV protection | `GET` / `POST /api/battery-uv` or CLI `battery-uv` | | Input-Send mode | `GET` / `PUT /api/input-send-mode` or CLI `input-send-mode` | | Tap notify S/D/T | `PUT /api/clients/{id}/tap-notify` | | Tap receive (UI) | Live stream + tap notify; see WebSocket doc for external API | diff --git a/goTool/main.go b/goTool/main.go index 5d02cf6..9e29a0e 100644 --- a/goTool/main.go +++ b/goTool/main.go @@ -35,6 +35,7 @@ func usage() { fmt.Fprintf(os.Stderr, " find-me blink LED ring red/green/blue (3× each, full brightness)\n") fmt.Fprintf(os.Stderr, " restart reboot master or slave (ESP-NOW)\n") fmt.Fprintf(os.Stderr, " log-level get/set master ESP-IDF log level (global)\n") + fmt.Fprintf(os.Stderr, " battery-uv get/set software LiPo UV protection (per pod / all)\n") fmt.Fprintf(os.Stderr, " input-send-mode get/set slave accel/tap ESP-NOW send path\n\n") flag.PrintDefaults() } @@ -138,6 +139,13 @@ func main() { break } runErr = runTapConfig(sp, flag.Args()[1:]) + case "battery-uv", "battery_uv": + sp, ok := h.(*serialPort) + if !ok { + runErr = fmt.Errorf("%s over BLE not wired yet; use -port", cmd) + break + } + runErr = runBatteryUv(sp, flag.Args()[1:]) case "tap-notify", "tap_notify": sp, ok := h.(*serialPort) if !ok { diff --git a/goTool/pb/uart_messages.pb.go b/goTool/pb/uart_messages.pb.go index 88d9564..e934220 100644 --- a/goTool/pb/uart_messages.pb.go +++ b/goTool/pb/uart_messages.pb.go @@ -62,6 +62,10 @@ const ( // Host → master: get/set slave ESP-NOW send path for accel/tap // (best_effort / fast / wait / reliable). MessageType_INPUT_SEND_MODE MessageType = 35 + // * + // Host → master: get/set software LiPo UV protection enable (NVS per pod). + // client_id 0 = master; >0 = one slave; all_clients = master + every slave. + MessageType_BATTERY_UV MessageType = 36 ) // Enum value maps for MessageType. @@ -94,6 +98,7 @@ var ( 33: "BLE_STREAM_TICK", 34: "CLIENT_ID_MAP_RESET", 35: "INPUT_SEND_MODE", + 36: "BATTERY_UV", } MessageType_value = map[string]int32{ "UNKNOWN": 0, @@ -123,6 +128,7 @@ var ( "BLE_STREAM_TICK": 33, "CLIENT_ID_MAP_RESET": 34, "INPUT_SEND_MODE": 35, + "BATTERY_UV": 36, } ) @@ -305,6 +311,8 @@ type UartMessage struct { // *UartMessage_ClientIdMapResetResponse // *UartMessage_InputSendModeRequest // *UartMessage_InputSendModeResponse + // *UartMessage_BatteryUvRequest + // *UartMessage_BatteryUvResponse Payload isUartMessage_Payload `protobuf_oneof:"payload"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -714,6 +722,24 @@ func (x *UartMessage) GetInputSendModeResponse() *InputSendModeResponse { return nil } +func (x *UartMessage) GetBatteryUvRequest() *BatteryUvRequest { + if x != nil { + if x, ok := x.Payload.(*UartMessage_BatteryUvRequest); ok { + return x.BatteryUvRequest + } + } + return nil +} + +func (x *UartMessage) GetBatteryUvResponse() *BatteryUvResponse { + if x != nil { + if x, ok := x.Payload.(*UartMessage_BatteryUvResponse); ok { + return x.BatteryUvResponse + } + } + return nil +} + type isUartMessage_Payload interface { isUartMessage_Payload() } @@ -878,6 +904,14 @@ type UartMessage_InputSendModeResponse struct { InputSendModeResponse *InputSendModeResponse `protobuf:"bytes,45,opt,name=input_send_mode_response,json=inputSendModeResponse,proto3,oneof"` } +type UartMessage_BatteryUvRequest struct { + BatteryUvRequest *BatteryUvRequest `protobuf:"bytes,46,opt,name=battery_uv_request,json=batteryUvRequest,proto3,oneof"` +} + +type UartMessage_BatteryUvResponse struct { + BatteryUvResponse *BatteryUvResponse `protobuf:"bytes,47,opt,name=battery_uv_response,json=batteryUvResponse,proto3,oneof"` +} + func (*UartMessage_AckPayload) isUartMessage_Payload() {} func (*UartMessage_EchoPayload) isUartMessage_Payload() {} @@ -958,6 +992,10 @@ func (*UartMessage_InputSendModeRequest) isUartMessage_Payload() {} func (*UartMessage_InputSendModeResponse) isUartMessage_Payload() {} +func (*UartMessage_BatteryUvRequest) isUartMessage_Payload() {} + +func (*UartMessage_BatteryUvResponse) isUartMessage_Payload() {} + type Ack struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields @@ -1114,8 +1152,10 @@ type ClientInfo struct { TapNotifySingle bool `protobuf:"varint,9,opt,name=tap_notify_single,json=tapNotifySingle,proto3" json:"tap_notify_single,omitempty"` TapNotifyDouble bool `protobuf:"varint,10,opt,name=tap_notify_double,json=tapNotifyDouble,proto3" json:"tap_notify_double,omitempty"` TapNotifyTriple bool `protobuf:"varint,11,opt,name=tap_notify_triple,json=tapNotifyTriple,proto3" json:"tap_notify_triple,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // * Master cache: software UV protection enabled on this slave (NVS on device). + UvProtectionEnabled bool `protobuf:"varint,12,opt,name=uv_protection_enabled,json=uvProtectionEnabled,proto3" json:"uv_protection_enabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ClientInfo) Reset() { @@ -1225,6 +1265,13 @@ func (x *ClientInfo) GetTapNotifyTriple() bool { return false } +func (x *ClientInfo) GetUvProtectionEnabled() bool { + if x != nil { + return x.UvProtectionEnabled + } + return false +} + type ClientInfoResponse struct { state protoimpl.MessageState `protogen:"open.v1"` Clients []*ClientInfo `protobuf:"bytes,1,rep,name=clients,proto3" json:"clients,omitempty"` @@ -1806,6 +1853,152 @@ func (x *InputSendModeResponse) GetSlavesUpdated() uint32 { return 0 } +// write=false: read UV enable; write=true: persist enable (and clear latch when disabling). +// client_id 0 = local master; >0 = one slave; all_clients = master + every registered slave. +type BatteryUvRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + Write bool `protobuf:"varint,1,opt,name=write,proto3" json:"write,omitempty"` + Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + ClientId uint32 `protobuf:"varint,3,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` + AllClients bool `protobuf:"varint,4,opt,name=all_clients,json=allClients,proto3" json:"all_clients,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BatteryUvRequest) Reset() { + *x = BatteryUvRequest{} + mi := &file_uart_messages_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BatteryUvRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatteryUvRequest) ProtoMessage() {} + +func (x *BatteryUvRequest) ProtoReflect() protoreflect.Message { + mi := &file_uart_messages_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BatteryUvRequest.ProtoReflect.Descriptor instead. +func (*BatteryUvRequest) Descriptor() ([]byte, []int) { + return file_uart_messages_proto_rawDescGZIP(), []int{14} +} + +func (x *BatteryUvRequest) GetWrite() bool { + if x != nil { + return x.Write + } + return false +} + +func (x *BatteryUvRequest) GetEnabled() bool { + if x != nil { + return x.Enabled + } + return false +} + +func (x *BatteryUvRequest) GetClientId() uint32 { + if x != nil { + return x.ClientId + } + return 0 +} + +func (x *BatteryUvRequest) GetAllClients() bool { + if x != nil { + return x.AllClients + } + return false +} + +type BatteryUvResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + ClientId uint32 `protobuf:"varint,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` + Success bool `protobuf:"varint,2,opt,name=success,proto3" json:"success,omitempty"` + Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + Latched bool `protobuf:"varint,4,opt,name=latched,proto3" json:"latched,omitempty"` + SlavesUpdated uint32 `protobuf:"varint,5,opt,name=slaves_updated,json=slavesUpdated,proto3" json:"slaves_updated,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BatteryUvResponse) Reset() { + *x = BatteryUvResponse{} + mi := &file_uart_messages_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BatteryUvResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BatteryUvResponse) ProtoMessage() {} + +func (x *BatteryUvResponse) ProtoReflect() protoreflect.Message { + mi := &file_uart_messages_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BatteryUvResponse.ProtoReflect.Descriptor instead. +func (*BatteryUvResponse) Descriptor() ([]byte, []int) { + return file_uart_messages_proto_rawDescGZIP(), []int{15} +} + +func (x *BatteryUvResponse) GetClientId() uint32 { + if x != nil { + return x.ClientId + } + return 0 +} + +func (x *BatteryUvResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *BatteryUvResponse) GetEnabled() bool { + if x != nil { + return x.Enabled + } + return false +} + +func (x *BatteryUvResponse) GetLatched() bool { + if x != nil { + return x.Latched + } + return false +} + +func (x *BatteryUvResponse) GetSlavesUpdated() uint32 { + if x != nil { + return x.SlavesUpdated + } + return 0 +} + // * Host → master: read LiPo ADC voltages (master local and/or slaves via ESP-NOW). type BatteryStatusRequest struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -1819,7 +2012,7 @@ type BatteryStatusRequest struct { func (x *BatteryStatusRequest) Reset() { *x = BatteryStatusRequest{} - mi := &file_uart_messages_proto_msgTypes[14] + mi := &file_uart_messages_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1831,7 +2024,7 @@ func (x *BatteryStatusRequest) String() string { func (*BatteryStatusRequest) ProtoMessage() {} func (x *BatteryStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[14] + mi := &file_uart_messages_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1844,7 +2037,7 @@ func (x *BatteryStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BatteryStatusRequest.ProtoReflect.Descriptor instead. func (*BatteryStatusRequest) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{14} + return file_uart_messages_proto_rawDescGZIP(), []int{16} } func (x *BatteryStatusRequest) GetClientId() uint32 { @@ -1872,7 +2065,7 @@ type LipoReading struct { func (x *LipoReading) Reset() { *x = LipoReading{} - mi := &file_uart_messages_proto_msgTypes[15] + mi := &file_uart_messages_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1884,7 +2077,7 @@ func (x *LipoReading) String() string { func (*LipoReading) ProtoMessage() {} func (x *LipoReading) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[15] + mi := &file_uart_messages_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1897,7 +2090,7 @@ func (x *LipoReading) ProtoReflect() protoreflect.Message { // Deprecated: Use LipoReading.ProtoReflect.Descriptor instead. func (*LipoReading) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{15} + return file_uart_messages_proto_rawDescGZIP(), []int{17} } func (x *LipoReading) GetValid() bool { @@ -1927,7 +2120,7 @@ type BatterySample struct { func (x *BatterySample) Reset() { *x = BatterySample{} - mi := &file_uart_messages_proto_msgTypes[16] + mi := &file_uart_messages_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1939,7 +2132,7 @@ func (x *BatterySample) String() string { func (*BatterySample) ProtoMessage() {} func (x *BatterySample) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[16] + mi := &file_uart_messages_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1952,7 +2145,7 @@ func (x *BatterySample) ProtoReflect() protoreflect.Message { // Deprecated: Use BatterySample.ProtoReflect.Descriptor instead. func (*BatterySample) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{16} + return file_uart_messages_proto_rawDescGZIP(), []int{18} } func (x *BatterySample) GetClientId() uint32 { @@ -1993,7 +2186,7 @@ type BatteryStatusResponse struct { func (x *BatteryStatusResponse) Reset() { *x = BatteryStatusResponse{} - mi := &file_uart_messages_proto_msgTypes[17] + mi := &file_uart_messages_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2005,7 +2198,7 @@ func (x *BatteryStatusResponse) String() string { func (*BatteryStatusResponse) ProtoMessage() {} func (x *BatteryStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[17] + mi := &file_uart_messages_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2018,7 +2211,7 @@ func (x *BatteryStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BatteryStatusResponse.ProtoReflect.Descriptor instead. func (*BatteryStatusResponse) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{17} + return file_uart_messages_proto_rawDescGZIP(), []int{19} } func (x *BatteryStatusResponse) GetSuccess() bool { @@ -2051,7 +2244,7 @@ type AccelSample struct { func (x *AccelSample) Reset() { *x = AccelSample{} - mi := &file_uart_messages_proto_msgTypes[18] + mi := &file_uart_messages_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2063,7 +2256,7 @@ func (x *AccelSample) String() string { func (*AccelSample) ProtoMessage() {} func (x *AccelSample) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[18] + mi := &file_uart_messages_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2076,7 +2269,7 @@ func (x *AccelSample) ProtoReflect() protoreflect.Message { // Deprecated: Use AccelSample.ProtoReflect.Descriptor instead. func (*AccelSample) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{18} + return file_uart_messages_proto_rawDescGZIP(), []int{20} } func (x *AccelSample) GetClientId() uint32 { @@ -2136,7 +2329,7 @@ type TapNotifyRequest struct { func (x *TapNotifyRequest) Reset() { *x = TapNotifyRequest{} - mi := &file_uart_messages_proto_msgTypes[19] + mi := &file_uart_messages_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2148,7 +2341,7 @@ func (x *TapNotifyRequest) String() string { func (*TapNotifyRequest) ProtoMessage() {} func (x *TapNotifyRequest) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[19] + mi := &file_uart_messages_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2161,7 +2354,7 @@ func (x *TapNotifyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TapNotifyRequest.ProtoReflect.Descriptor instead. func (*TapNotifyRequest) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{19} + return file_uart_messages_proto_rawDescGZIP(), []int{21} } func (x *TapNotifyRequest) GetWrite() bool { @@ -2220,7 +2413,7 @@ type TapNotifyResponse struct { func (x *TapNotifyResponse) Reset() { *x = TapNotifyResponse{} - mi := &file_uart_messages_proto_msgTypes[20] + mi := &file_uart_messages_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2232,7 +2425,7 @@ func (x *TapNotifyResponse) String() string { func (*TapNotifyResponse) ProtoMessage() {} func (x *TapNotifyResponse) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[20] + mi := &file_uart_messages_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2245,7 +2438,7 @@ func (x *TapNotifyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TapNotifyResponse.ProtoReflect.Descriptor instead. func (*TapNotifyResponse) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{20} + return file_uart_messages_proto_rawDescGZIP(), []int{22} } func (x *TapNotifyResponse) GetClientId() uint32 { @@ -2303,7 +2496,7 @@ type TapEvent struct { func (x *TapEvent) Reset() { *x = TapEvent{} - mi := &file_uart_messages_proto_msgTypes[21] + mi := &file_uart_messages_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2315,7 +2508,7 @@ func (x *TapEvent) String() string { func (*TapEvent) ProtoMessage() {} func (x *TapEvent) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[21] + mi := &file_uart_messages_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2328,7 +2521,7 @@ func (x *TapEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use TapEvent.ProtoReflect.Descriptor instead. func (*TapEvent) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{21} + return file_uart_messages_proto_rawDescGZIP(), []int{23} } func (x *TapEvent) GetClientId() uint32 { @@ -2368,7 +2561,7 @@ type CacheStatusRequest struct { func (x *CacheStatusRequest) Reset() { *x = CacheStatusRequest{} - mi := &file_uart_messages_proto_msgTypes[22] + mi := &file_uart_messages_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2380,7 +2573,7 @@ func (x *CacheStatusRequest) String() string { func (*CacheStatusRequest) ProtoMessage() {} func (x *CacheStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[22] + mi := &file_uart_messages_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2393,7 +2586,7 @@ func (x *CacheStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CacheStatusRequest.ProtoReflect.Descriptor instead. func (*CacheStatusRequest) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{22} + return file_uart_messages_proto_rawDescGZIP(), []int{24} } // * Accel slice inside CACHE_STATUS (no client_id — use parent CacheClientStatus). @@ -2410,7 +2603,7 @@ type CacheClientAccel struct { func (x *CacheClientAccel) Reset() { *x = CacheClientAccel{} - mi := &file_uart_messages_proto_msgTypes[23] + mi := &file_uart_messages_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2422,7 +2615,7 @@ func (x *CacheClientAccel) String() string { func (*CacheClientAccel) ProtoMessage() {} func (x *CacheClientAccel) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[23] + mi := &file_uart_messages_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2435,7 +2628,7 @@ func (x *CacheClientAccel) ProtoReflect() protoreflect.Message { // Deprecated: Use CacheClientAccel.ProtoReflect.Descriptor instead. func (*CacheClientAccel) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{23} + return file_uart_messages_proto_rawDescGZIP(), []int{25} } func (x *CacheClientAccel) GetValid() bool { @@ -2484,7 +2677,7 @@ type CacheClientTap struct { func (x *CacheClientTap) Reset() { *x = CacheClientTap{} - mi := &file_uart_messages_proto_msgTypes[24] + mi := &file_uart_messages_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2496,7 +2689,7 @@ func (x *CacheClientTap) String() string { func (*CacheClientTap) ProtoMessage() {} func (x *CacheClientTap) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[24] + mi := &file_uart_messages_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2509,7 +2702,7 @@ func (x *CacheClientTap) ProtoReflect() protoreflect.Message { // Deprecated: Use CacheClientTap.ProtoReflect.Descriptor instead. func (*CacheClientTap) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{24} + return file_uart_messages_proto_rawDescGZIP(), []int{26} } func (x *CacheClientTap) GetKind() TapKind { @@ -2538,7 +2731,7 @@ type CacheClientStatus struct { func (x *CacheClientStatus) Reset() { *x = CacheClientStatus{} - mi := &file_uart_messages_proto_msgTypes[25] + mi := &file_uart_messages_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2550,7 +2743,7 @@ func (x *CacheClientStatus) String() string { func (*CacheClientStatus) ProtoMessage() {} func (x *CacheClientStatus) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[25] + mi := &file_uart_messages_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2563,7 +2756,7 @@ func (x *CacheClientStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use CacheClientStatus.ProtoReflect.Descriptor instead. func (*CacheClientStatus) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{25} + return file_uart_messages_proto_rawDescGZIP(), []int{27} } func (x *CacheClientStatus) GetClientId() uint32 { @@ -2597,7 +2790,7 @@ type CacheStatusResponse struct { func (x *CacheStatusResponse) Reset() { *x = CacheStatusResponse{} - mi := &file_uart_messages_proto_msgTypes[26] + mi := &file_uart_messages_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2609,7 +2802,7 @@ func (x *CacheStatusResponse) String() string { func (*CacheStatusResponse) ProtoMessage() {} func (x *CacheStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[26] + mi := &file_uart_messages_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2622,7 +2815,7 @@ func (x *CacheStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CacheStatusResponse.ProtoReflect.Descriptor instead. func (*CacheStatusResponse) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{26} + return file_uart_messages_proto_rawDescGZIP(), []int{28} } func (x *CacheStatusResponse) GetClients() []*CacheClientStatus { @@ -2644,7 +2837,7 @@ type BleStreamTick struct { func (x *BleStreamTick) Reset() { *x = BleStreamTick{} - mi := &file_uart_messages_proto_msgTypes[27] + mi := &file_uart_messages_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2656,7 +2849,7 @@ func (x *BleStreamTick) String() string { func (*BleStreamTick) ProtoMessage() {} func (x *BleStreamTick) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[27] + mi := &file_uart_messages_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2669,7 +2862,7 @@ func (x *BleStreamTick) ProtoReflect() protoreflect.Message { // Deprecated: Use BleStreamTick.ProtoReflect.Descriptor instead. func (*BleStreamTick) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{27} + return file_uart_messages_proto_rawDescGZIP(), []int{29} } func (x *BleStreamTick) GetEspTimestampUs() uint64 { @@ -2703,7 +2896,7 @@ type EspNowUnicastTestRequest struct { func (x *EspNowUnicastTestRequest) Reset() { *x = EspNowUnicastTestRequest{} - mi := &file_uart_messages_proto_msgTypes[28] + mi := &file_uart_messages_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2715,7 +2908,7 @@ func (x *EspNowUnicastTestRequest) String() string { func (*EspNowUnicastTestRequest) ProtoMessage() {} func (x *EspNowUnicastTestRequest) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[28] + mi := &file_uart_messages_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2728,7 +2921,7 @@ func (x *EspNowUnicastTestRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EspNowUnicastTestRequest.ProtoReflect.Descriptor instead. func (*EspNowUnicastTestRequest) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{28} + return file_uart_messages_proto_rawDescGZIP(), []int{30} } func (x *EspNowUnicastTestRequest) GetClientId() uint32 { @@ -2755,7 +2948,7 @@ type EspNowUnicastTestResponse struct { func (x *EspNowUnicastTestResponse) Reset() { *x = EspNowUnicastTestResponse{} - mi := &file_uart_messages_proto_msgTypes[29] + mi := &file_uart_messages_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2767,7 +2960,7 @@ func (x *EspNowUnicastTestResponse) String() string { func (*EspNowUnicastTestResponse) ProtoMessage() {} func (x *EspNowUnicastTestResponse) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[29] + mi := &file_uart_messages_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2780,7 +2973,7 @@ func (x *EspNowUnicastTestResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EspNowUnicastTestResponse.ProtoReflect.Descriptor instead. func (*EspNowUnicastTestResponse) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{29} + return file_uart_messages_proto_rawDescGZIP(), []int{31} } func (x *EspNowUnicastTestResponse) GetSuccess() bool { @@ -2809,7 +3002,7 @@ type EspNowEchoPingRequest struct { func (x *EspNowEchoPingRequest) Reset() { *x = EspNowEchoPingRequest{} - mi := &file_uart_messages_proto_msgTypes[30] + mi := &file_uart_messages_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2821,7 +3014,7 @@ func (x *EspNowEchoPingRequest) String() string { func (*EspNowEchoPingRequest) ProtoMessage() {} func (x *EspNowEchoPingRequest) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[30] + mi := &file_uart_messages_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2834,7 +3027,7 @@ func (x *EspNowEchoPingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EspNowEchoPingRequest.ProtoReflect.Descriptor instead. func (*EspNowEchoPingRequest) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{30} + return file_uart_messages_proto_rawDescGZIP(), []int{32} } func (x *EspNowEchoPingRequest) GetClientId() uint32 { @@ -2865,7 +3058,7 @@ type EspNowEchoPingResponse struct { func (x *EspNowEchoPingResponse) Reset() { *x = EspNowEchoPingResponse{} - mi := &file_uart_messages_proto_msgTypes[31] + mi := &file_uart_messages_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2877,7 +3070,7 @@ func (x *EspNowEchoPingResponse) String() string { func (*EspNowEchoPingResponse) ProtoMessage() {} func (x *EspNowEchoPingResponse) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[31] + mi := &file_uart_messages_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2890,7 +3083,7 @@ func (x *EspNowEchoPingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EspNowEchoPingResponse.ProtoReflect.Descriptor instead. func (*EspNowEchoPingResponse) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{31} + return file_uart_messages_proto_rawDescGZIP(), []int{33} } func (x *EspNowEchoPingResponse) GetSuccess() bool { @@ -2951,7 +3144,7 @@ type LedRingProgressRequest struct { func (x *LedRingProgressRequest) Reset() { *x = LedRingProgressRequest{} - mi := &file_uart_messages_proto_msgTypes[32] + mi := &file_uart_messages_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2963,7 +3156,7 @@ func (x *LedRingProgressRequest) String() string { func (*LedRingProgressRequest) ProtoMessage() {} func (x *LedRingProgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[32] + mi := &file_uart_messages_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2976,7 +3169,7 @@ func (x *LedRingProgressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LedRingProgressRequest.ProtoReflect.Descriptor instead. func (*LedRingProgressRequest) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{32} + return file_uart_messages_proto_rawDescGZIP(), []int{34} } func (x *LedRingProgressRequest) GetMode() uint32 { @@ -3077,7 +3270,7 @@ type LedRingProgressResponse struct { func (x *LedRingProgressResponse) Reset() { *x = LedRingProgressResponse{} - mi := &file_uart_messages_proto_msgTypes[33] + mi := &file_uart_messages_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3089,7 +3282,7 @@ func (x *LedRingProgressResponse) String() string { func (*LedRingProgressResponse) ProtoMessage() {} func (x *LedRingProgressResponse) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[33] + mi := &file_uart_messages_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3102,7 +3295,7 @@ func (x *LedRingProgressResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LedRingProgressResponse.ProtoReflect.Descriptor instead. func (*LedRingProgressResponse) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{33} + return file_uart_messages_proto_rawDescGZIP(), []int{35} } func (x *LedRingProgressResponse) GetSuccess() bool { @@ -3157,7 +3350,7 @@ type EspNowFindMeRequest struct { func (x *EspNowFindMeRequest) Reset() { *x = EspNowFindMeRequest{} - mi := &file_uart_messages_proto_msgTypes[34] + mi := &file_uart_messages_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3169,7 +3362,7 @@ func (x *EspNowFindMeRequest) String() string { func (*EspNowFindMeRequest) ProtoMessage() {} func (x *EspNowFindMeRequest) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[34] + mi := &file_uart_messages_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3182,7 +3375,7 @@ func (x *EspNowFindMeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EspNowFindMeRequest.ProtoReflect.Descriptor instead. func (*EspNowFindMeRequest) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{34} + return file_uart_messages_proto_rawDescGZIP(), []int{36} } func (x *EspNowFindMeRequest) GetClientId() uint32 { @@ -3202,7 +3395,7 @@ type EspNowFindMeResponse struct { func (x *EspNowFindMeResponse) Reset() { *x = EspNowFindMeResponse{} - mi := &file_uart_messages_proto_msgTypes[35] + mi := &file_uart_messages_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3214,7 +3407,7 @@ func (x *EspNowFindMeResponse) String() string { func (*EspNowFindMeResponse) ProtoMessage() {} func (x *EspNowFindMeResponse) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[35] + mi := &file_uart_messages_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3227,7 +3420,7 @@ func (x *EspNowFindMeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EspNowFindMeResponse.ProtoReflect.Descriptor instead. func (*EspNowFindMeResponse) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{35} + return file_uart_messages_proto_rawDescGZIP(), []int{37} } func (x *EspNowFindMeResponse) GetSuccess() bool { @@ -3254,7 +3447,7 @@ type RestartRequest struct { func (x *RestartRequest) Reset() { *x = RestartRequest{} - mi := &file_uart_messages_proto_msgTypes[36] + mi := &file_uart_messages_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3266,7 +3459,7 @@ func (x *RestartRequest) String() string { func (*RestartRequest) ProtoMessage() {} func (x *RestartRequest) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[36] + mi := &file_uart_messages_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3279,7 +3472,7 @@ func (x *RestartRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RestartRequest.ProtoReflect.Descriptor instead. func (*RestartRequest) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{36} + return file_uart_messages_proto_rawDescGZIP(), []int{38} } func (x *RestartRequest) GetClientId() uint32 { @@ -3299,7 +3492,7 @@ type RestartResponse struct { func (x *RestartResponse) Reset() { *x = RestartResponse{} - mi := &file_uart_messages_proto_msgTypes[37] + mi := &file_uart_messages_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3311,7 +3504,7 @@ func (x *RestartResponse) String() string { func (*RestartResponse) ProtoMessage() {} func (x *RestartResponse) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[37] + mi := &file_uart_messages_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3324,7 +3517,7 @@ func (x *RestartResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RestartResponse.ProtoReflect.Descriptor instead. func (*RestartResponse) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{37} + return file_uart_messages_proto_rawDescGZIP(), []int{39} } func (x *RestartResponse) GetSuccess() bool { @@ -3350,7 +3543,7 @@ type ClientIdMapResetRequest struct { func (x *ClientIdMapResetRequest) Reset() { *x = ClientIdMapResetRequest{} - mi := &file_uart_messages_proto_msgTypes[38] + mi := &file_uart_messages_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3362,7 +3555,7 @@ func (x *ClientIdMapResetRequest) String() string { func (*ClientIdMapResetRequest) ProtoMessage() {} func (x *ClientIdMapResetRequest) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[38] + mi := &file_uart_messages_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3375,7 +3568,7 @@ func (x *ClientIdMapResetRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ClientIdMapResetRequest.ProtoReflect.Descriptor instead. func (*ClientIdMapResetRequest) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{38} + return file_uart_messages_proto_rawDescGZIP(), []int{40} } type ClientIdMapResetResponse struct { @@ -3387,7 +3580,7 @@ type ClientIdMapResetResponse struct { func (x *ClientIdMapResetResponse) Reset() { *x = ClientIdMapResetResponse{} - mi := &file_uart_messages_proto_msgTypes[39] + mi := &file_uart_messages_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3399,7 +3592,7 @@ func (x *ClientIdMapResetResponse) String() string { func (*ClientIdMapResetResponse) ProtoMessage() {} func (x *ClientIdMapResetResponse) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[39] + mi := &file_uart_messages_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3412,7 +3605,7 @@ func (x *ClientIdMapResetResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ClientIdMapResetResponse.ProtoReflect.Descriptor instead. func (*ClientIdMapResetResponse) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{39} + return file_uart_messages_proto_rawDescGZIP(), []int{41} } func (x *ClientIdMapResetResponse) GetSuccess() bool { @@ -3434,7 +3627,7 @@ type SetLogLevelRequest struct { func (x *SetLogLevelRequest) Reset() { *x = SetLogLevelRequest{} - mi := &file_uart_messages_proto_msgTypes[40] + mi := &file_uart_messages_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3446,7 +3639,7 @@ func (x *SetLogLevelRequest) String() string { func (*SetLogLevelRequest) ProtoMessage() {} func (x *SetLogLevelRequest) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[40] + mi := &file_uart_messages_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3459,7 +3652,7 @@ func (x *SetLogLevelRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetLogLevelRequest.ProtoReflect.Descriptor instead. func (*SetLogLevelRequest) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{40} + return file_uart_messages_proto_rawDescGZIP(), []int{42} } func (x *SetLogLevelRequest) GetWrite() bool { @@ -3486,7 +3679,7 @@ type SetLogLevelResponse struct { func (x *SetLogLevelResponse) Reset() { *x = SetLogLevelResponse{} - mi := &file_uart_messages_proto_msgTypes[41] + mi := &file_uart_messages_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3498,7 +3691,7 @@ func (x *SetLogLevelResponse) String() string { func (*SetLogLevelResponse) ProtoMessage() {} func (x *SetLogLevelResponse) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[41] + mi := &file_uart_messages_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3511,7 +3704,7 @@ func (x *SetLogLevelResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetLogLevelResponse.ProtoReflect.Descriptor instead. func (*SetLogLevelResponse) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{41} + return file_uart_messages_proto_rawDescGZIP(), []int{43} } func (x *SetLogLevelResponse) GetSuccess() bool { @@ -3550,7 +3743,7 @@ type TapConfigRequest struct { func (x *TapConfigRequest) Reset() { *x = TapConfigRequest{} - mi := &file_uart_messages_proto_msgTypes[42] + mi := &file_uart_messages_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3562,7 +3755,7 @@ func (x *TapConfigRequest) String() string { func (*TapConfigRequest) ProtoMessage() {} func (x *TapConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[42] + mi := &file_uart_messages_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3575,7 +3768,7 @@ func (x *TapConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TapConfigRequest.ProtoReflect.Descriptor instead. func (*TapConfigRequest) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{42} + return file_uart_messages_proto_rawDescGZIP(), []int{44} } func (x *TapConfigRequest) GetWrite() bool { @@ -3682,7 +3875,7 @@ type TapConfigResponse struct { func (x *TapConfigResponse) Reset() { *x = TapConfigResponse{} - mi := &file_uart_messages_proto_msgTypes[43] + mi := &file_uart_messages_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3694,7 +3887,7 @@ func (x *TapConfigResponse) String() string { func (*TapConfigResponse) ProtoMessage() {} func (x *TapConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[43] + mi := &file_uart_messages_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3707,7 +3900,7 @@ func (x *TapConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TapConfigResponse.ProtoReflect.Descriptor instead. func (*TapConfigResponse) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{43} + return file_uart_messages_proto_rawDescGZIP(), []int{45} } func (x *TapConfigResponse) GetClientId() uint32 { @@ -3804,7 +3997,7 @@ type OtaStartPayload struct { func (x *OtaStartPayload) Reset() { *x = OtaStartPayload{} - mi := &file_uart_messages_proto_msgTypes[44] + mi := &file_uart_messages_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3816,7 +4009,7 @@ func (x *OtaStartPayload) String() string { func (*OtaStartPayload) ProtoMessage() {} func (x *OtaStartPayload) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[44] + mi := &file_uart_messages_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3829,7 +4022,7 @@ func (x *OtaStartPayload) ProtoReflect() protoreflect.Message { // Deprecated: Use OtaStartPayload.ProtoReflect.Descriptor instead. func (*OtaStartPayload) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{44} + return file_uart_messages_proto_rawDescGZIP(), []int{46} } func (x *OtaStartPayload) GetTotalSize() uint32 { @@ -3850,7 +4043,7 @@ type OtaPayload struct { func (x *OtaPayload) Reset() { *x = OtaPayload{} - mi := &file_uart_messages_proto_msgTypes[45] + mi := &file_uart_messages_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3862,7 +4055,7 @@ func (x *OtaPayload) String() string { func (*OtaPayload) ProtoMessage() {} func (x *OtaPayload) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[45] + mi := &file_uart_messages_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3875,7 +4068,7 @@ func (x *OtaPayload) ProtoReflect() protoreflect.Message { // Deprecated: Use OtaPayload.ProtoReflect.Descriptor instead. func (*OtaPayload) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{45} + return file_uart_messages_proto_rawDescGZIP(), []int{47} } func (x *OtaPayload) GetSeq() uint32 { @@ -3901,7 +4094,7 @@ type OtaEndPayload struct { func (x *OtaEndPayload) Reset() { *x = OtaEndPayload{} - mi := &file_uart_messages_proto_msgTypes[46] + mi := &file_uart_messages_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3913,7 +4106,7 @@ func (x *OtaEndPayload) String() string { func (*OtaEndPayload) ProtoMessage() {} func (x *OtaEndPayload) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[46] + mi := &file_uart_messages_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3926,7 +4119,7 @@ func (x *OtaEndPayload) ProtoReflect() protoreflect.Message { // Deprecated: Use OtaEndPayload.ProtoReflect.Descriptor instead. func (*OtaEndPayload) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{46} + return file_uart_messages_proto_rawDescGZIP(), []int{48} } // Device → host status (also used as ACK after each 4 KiB written). @@ -3943,7 +4136,7 @@ type OtaStatusPayload struct { func (x *OtaStatusPayload) Reset() { *x = OtaStatusPayload{} - mi := &file_uart_messages_proto_msgTypes[47] + mi := &file_uart_messages_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3955,7 +4148,7 @@ func (x *OtaStatusPayload) String() string { func (*OtaStatusPayload) ProtoMessage() {} func (x *OtaStatusPayload) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[47] + mi := &file_uart_messages_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3968,7 +4161,7 @@ func (x *OtaStatusPayload) ProtoReflect() protoreflect.Message { // Deprecated: Use OtaStatusPayload.ProtoReflect.Descriptor instead. func (*OtaStatusPayload) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{47} + return file_uart_messages_proto_rawDescGZIP(), []int{49} } func (x *OtaStatusPayload) GetStatus() uint32 { @@ -4009,7 +4202,7 @@ type OtaSlaveProgressRequest struct { func (x *OtaSlaveProgressRequest) Reset() { *x = OtaSlaveProgressRequest{} - mi := &file_uart_messages_proto_msgTypes[48] + mi := &file_uart_messages_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4021,7 +4214,7 @@ func (x *OtaSlaveProgressRequest) String() string { func (*OtaSlaveProgressRequest) ProtoMessage() {} func (x *OtaSlaveProgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[48] + mi := &file_uart_messages_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4034,7 +4227,7 @@ func (x *OtaSlaveProgressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OtaSlaveProgressRequest.ProtoReflect.Descriptor instead. func (*OtaSlaveProgressRequest) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{48} + return file_uart_messages_proto_rawDescGZIP(), []int{50} } func (x *OtaSlaveProgressRequest) GetClientId() uint32 { @@ -4058,7 +4251,7 @@ type OtaSlaveProgressEntry struct { func (x *OtaSlaveProgressEntry) Reset() { *x = OtaSlaveProgressEntry{} - mi := &file_uart_messages_proto_msgTypes[49] + mi := &file_uart_messages_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4070,7 +4263,7 @@ func (x *OtaSlaveProgressEntry) String() string { func (*OtaSlaveProgressEntry) ProtoMessage() {} func (x *OtaSlaveProgressEntry) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[49] + mi := &file_uart_messages_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4083,7 +4276,7 @@ func (x *OtaSlaveProgressEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use OtaSlaveProgressEntry.ProtoReflect.Descriptor instead. func (*OtaSlaveProgressEntry) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{49} + return file_uart_messages_proto_rawDescGZIP(), []int{51} } func (x *OtaSlaveProgressEntry) GetClientId() uint32 { @@ -4134,7 +4327,7 @@ type OtaSlaveProgressResponse struct { func (x *OtaSlaveProgressResponse) Reset() { *x = OtaSlaveProgressResponse{} - mi := &file_uart_messages_proto_msgTypes[50] + mi := &file_uart_messages_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4146,7 +4339,7 @@ func (x *OtaSlaveProgressResponse) String() string { func (*OtaSlaveProgressResponse) ProtoMessage() {} func (x *OtaSlaveProgressResponse) ProtoReflect() protoreflect.Message { - mi := &file_uart_messages_proto_msgTypes[50] + mi := &file_uart_messages_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4159,7 +4352,7 @@ func (x *OtaSlaveProgressResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use OtaSlaveProgressResponse.ProtoReflect.Descriptor instead. func (*OtaSlaveProgressResponse) Descriptor() ([]byte, []int) { - return file_uart_messages_proto_rawDescGZIP(), []int{50} + return file_uart_messages_proto_rawDescGZIP(), []int{52} } func (x *OtaSlaveProgressResponse) GetActive() bool { @@ -4201,7 +4394,7 @@ var File_uart_messages_proto protoreflect.FileDescriptor const file_uart_messages_proto_rawDesc = "" + "\n" + - "\x13uart_messages.proto\x12\x04alox\x1a\fnanopb.proto\"\x80\x19\n" + + "\x13uart_messages.proto\x12\x04alox\x1a\fnanopb.proto\"\x93\x1a\n" + "\vUartMessage\x12%\n" + "\x04type\x18\x01 \x01(\x0e2\x11.alox.MessageTypeR\x04type\x12,\n" + "\vack_payload\x18\x02 \x01(\v2\t.alox.AckH\x00R\n" + @@ -4247,7 +4440,9 @@ const file_uart_messages_proto_rawDesc = "" + "\x1bclient_id_map_reset_request\x18* \x01(\v2\x1d.alox.ClientIdMapResetRequestH\x00R\x17clientIdMapResetRequest\x12`\n" + "\x1cclient_id_map_reset_response\x18+ \x01(\v2\x1e.alox.ClientIdMapResetResponseH\x00R\x18clientIdMapResetResponse\x12S\n" + "\x17input_send_mode_request\x18, \x01(\v2\x1a.alox.InputSendModeRequestH\x00R\x14inputSendModeRequest\x12V\n" + - "\x18input_send_mode_response\x18- \x01(\v2\x1b.alox.InputSendModeResponseH\x00R\x15inputSendModeResponseB\t\n" + + "\x18input_send_mode_response\x18- \x01(\v2\x1b.alox.InputSendModeResponseH\x00R\x15inputSendModeResponse\x12F\n" + + "\x12battery_uv_request\x18. \x01(\v2\x16.alox.BatteryUvRequestH\x00R\x10batteryUvRequest\x12I\n" + + "\x13battery_uv_response\x18/ \x01(\v2\x17.alox.BatteryUvResponseH\x00R\x11batteryUvResponseB\t\n" + "\apayload\"\x05\n" + "\x03Ack\"!\n" + "\vEchoPayload\x12\x12\n" + @@ -4255,7 +4450,7 @@ const file_uart_messages_proto_rawDesc = "" + "\x0fVersionResponse\x12\x18\n" + "\aversion\x18\x01 \x01(\rR\aversion\x12\x19\n" + "\bgit_hash\x18\x02 \x01(\tR\agitHash\x12+\n" + - "\x11running_partition\x18\x03 \x01(\tR\x10runningPartition\"\xf9\x02\n" + + "\x11running_partition\x18\x03 \x01(\tR\x10runningPartition\"\xad\x03\n" + "\n" + "ClientInfo\x12\x0e\n" + "\x02id\x18\x01 \x01(\rR\x02id\x12\x1c\n" + @@ -4269,7 +4464,8 @@ const file_uart_messages_proto_rawDesc = "" + "\x11tap_notify_single\x18\t \x01(\bR\x0ftapNotifySingle\x12*\n" + "\x11tap_notify_double\x18\n" + " \x01(\bR\x0ftapNotifyDouble\x12*\n" + - "\x11tap_notify_triple\x18\v \x01(\bR\x0ftapNotifyTriple\"@\n" + + "\x11tap_notify_triple\x18\v \x01(\bR\x0ftapNotifyTriple\x122\n" + + "\x15uv_protection_enabled\x18\f \x01(\bR\x13uvProtectionEnabled\"@\n" + "\x12ClientInfoResponse\x12*\n" + "\aclients\x18\x01 \x03(\v2\x10.alox.ClientInfoR\aclients\"e\n" + "\vClientInput\x12\x0e\n" + @@ -4312,7 +4508,19 @@ const file_uart_messages_proto_rawDesc = "" + "\asuccess\x18\x01 \x01(\bR\asuccess\x12'\n" + "\x04mode\x18\x02 \x01(\x0e2\x13.alox.InputSendModeR\x04mode\x12\x1b\n" + "\tclient_id\x18\x03 \x01(\rR\bclientId\x12%\n" + - "\x0eslaves_updated\x18\x04 \x01(\rR\rslavesUpdated\"T\n" + + "\x0eslaves_updated\x18\x04 \x01(\rR\rslavesUpdated\"\x80\x01\n" + + "\x10BatteryUvRequest\x12\x14\n" + + "\x05write\x18\x01 \x01(\bR\x05write\x12\x18\n" + + "\aenabled\x18\x02 \x01(\bR\aenabled\x12\x1b\n" + + "\tclient_id\x18\x03 \x01(\rR\bclientId\x12\x1f\n" + + "\vall_clients\x18\x04 \x01(\bR\n" + + "allClients\"\xa5\x01\n" + + "\x11BatteryUvResponse\x12\x1b\n" + + "\tclient_id\x18\x01 \x01(\rR\bclientId\x12\x18\n" + + "\asuccess\x18\x02 \x01(\bR\asuccess\x12\x18\n" + + "\aenabled\x18\x03 \x01(\bR\aenabled\x12\x18\n" + + "\alatched\x18\x04 \x01(\bR\alatched\x12%\n" + + "\x0eslaves_updated\x18\x05 \x01(\rR\rslavesUpdated\"T\n" + "\x14BatteryStatusRequest\x12\x1b\n" + "\tclient_id\x18\x01 \x01(\rR\bclientId\x12\x1f\n" + "\vall_clients\x18\x02 \x01(\bR\n" + @@ -4497,7 +4705,7 @@ const file_uart_messages_proto_rawDesc = "" + "\x0faggregate_bytes\x18\x03 \x01(\rR\x0eaggregateBytes\x12\x1f\n" + "\vslave_count\x18\x04 \x01(\rR\n" + "slaveCount\x12:\n" + - "\x06slaves\x18\x05 \x03(\v2\x1b.alox.OtaSlaveProgressEntryB\x05\x92?\x02\x10\x10R\x06slaves*\xed\x03\n" + + "\x06slaves\x18\x05 \x03(\v2\x1b.alox.OtaSlaveProgressEntryB\x05\x92?\x02\x10\x10R\x06slaves*\xfd\x03\n" + "\vMessageType\x12\v\n" + "\aUNKNOWN\x10\x00\x12\a\n" + "\x03ACK\x10\x01\x12\b\n" + @@ -4528,7 +4736,9 @@ const file_uart_messages_proto_rawDesc = "" + "TAP_CONFIG\x10 \x12\x13\n" + "\x0fBLE_STREAM_TICK\x10!\x12\x17\n" + "\x13CLIENT_ID_MAP_RESET\x10\"\x12\x13\n" + - "\x0fINPUT_SEND_MODE\x10#\"\x04\b\x18\x10\x18\"\x04\b\x1c\x10\x1c*n\n" + + "\x0fINPUT_SEND_MODE\x10#\x12\x0e\n" + + "\n" + + "BATTERY_UV\x10$\"\x04\b\x18\x10\x18\"\x04\b\x1c\x10\x1c*n\n" + "\rInputSendMode\x12\x1a\n" + "\x16INPUT_SEND_BEST_EFFORT\x10\x00\x12\x13\n" + "\x0fINPUT_SEND_FAST\x10\x01\x12\x13\n" + @@ -4556,7 +4766,7 @@ func file_uart_messages_proto_rawDescGZIP() []byte { } var file_uart_messages_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_uart_messages_proto_msgTypes = make([]protoimpl.MessageInfo, 51) +var file_uart_messages_proto_msgTypes = make([]protoimpl.MessageInfo, 53) var file_uart_messages_proto_goTypes = []any{ (MessageType)(0), // 0: alox.MessageType (InputSendMode)(0), // 1: alox.InputSendMode @@ -4575,43 +4785,45 @@ var file_uart_messages_proto_goTypes = []any{ (*AccelStreamResponse)(nil), // 14: alox.AccelStreamResponse (*InputSendModeRequest)(nil), // 15: alox.InputSendModeRequest (*InputSendModeResponse)(nil), // 16: alox.InputSendModeResponse - (*BatteryStatusRequest)(nil), // 17: alox.BatteryStatusRequest - (*LipoReading)(nil), // 18: alox.LipoReading - (*BatterySample)(nil), // 19: alox.BatterySample - (*BatteryStatusResponse)(nil), // 20: alox.BatteryStatusResponse - (*AccelSample)(nil), // 21: alox.AccelSample - (*TapNotifyRequest)(nil), // 22: alox.TapNotifyRequest - (*TapNotifyResponse)(nil), // 23: alox.TapNotifyResponse - (*TapEvent)(nil), // 24: alox.TapEvent - (*CacheStatusRequest)(nil), // 25: alox.CacheStatusRequest - (*CacheClientAccel)(nil), // 26: alox.CacheClientAccel - (*CacheClientTap)(nil), // 27: alox.CacheClientTap - (*CacheClientStatus)(nil), // 28: alox.CacheClientStatus - (*CacheStatusResponse)(nil), // 29: alox.CacheStatusResponse - (*BleStreamTick)(nil), // 30: alox.BleStreamTick - (*EspNowUnicastTestRequest)(nil), // 31: alox.EspNowUnicastTestRequest - (*EspNowUnicastTestResponse)(nil), // 32: alox.EspNowUnicastTestResponse - (*EspNowEchoPingRequest)(nil), // 33: alox.EspNowEchoPingRequest - (*EspNowEchoPingResponse)(nil), // 34: alox.EspNowEchoPingResponse - (*LedRingProgressRequest)(nil), // 35: alox.LedRingProgressRequest - (*LedRingProgressResponse)(nil), // 36: alox.LedRingProgressResponse - (*EspNowFindMeRequest)(nil), // 37: alox.EspNowFindMeRequest - (*EspNowFindMeResponse)(nil), // 38: alox.EspNowFindMeResponse - (*RestartRequest)(nil), // 39: alox.RestartRequest - (*RestartResponse)(nil), // 40: alox.RestartResponse - (*ClientIdMapResetRequest)(nil), // 41: alox.ClientIdMapResetRequest - (*ClientIdMapResetResponse)(nil), // 42: alox.ClientIdMapResetResponse - (*SetLogLevelRequest)(nil), // 43: alox.SetLogLevelRequest - (*SetLogLevelResponse)(nil), // 44: alox.SetLogLevelResponse - (*TapConfigRequest)(nil), // 45: alox.TapConfigRequest - (*TapConfigResponse)(nil), // 46: alox.TapConfigResponse - (*OtaStartPayload)(nil), // 47: alox.OtaStartPayload - (*OtaPayload)(nil), // 48: alox.OtaPayload - (*OtaEndPayload)(nil), // 49: alox.OtaEndPayload - (*OtaStatusPayload)(nil), // 50: alox.OtaStatusPayload - (*OtaSlaveProgressRequest)(nil), // 51: alox.OtaSlaveProgressRequest - (*OtaSlaveProgressEntry)(nil), // 52: alox.OtaSlaveProgressEntry - (*OtaSlaveProgressResponse)(nil), // 53: alox.OtaSlaveProgressResponse + (*BatteryUvRequest)(nil), // 17: alox.BatteryUvRequest + (*BatteryUvResponse)(nil), // 18: alox.BatteryUvResponse + (*BatteryStatusRequest)(nil), // 19: alox.BatteryStatusRequest + (*LipoReading)(nil), // 20: alox.LipoReading + (*BatterySample)(nil), // 21: alox.BatterySample + (*BatteryStatusResponse)(nil), // 22: alox.BatteryStatusResponse + (*AccelSample)(nil), // 23: alox.AccelSample + (*TapNotifyRequest)(nil), // 24: alox.TapNotifyRequest + (*TapNotifyResponse)(nil), // 25: alox.TapNotifyResponse + (*TapEvent)(nil), // 26: alox.TapEvent + (*CacheStatusRequest)(nil), // 27: alox.CacheStatusRequest + (*CacheClientAccel)(nil), // 28: alox.CacheClientAccel + (*CacheClientTap)(nil), // 29: alox.CacheClientTap + (*CacheClientStatus)(nil), // 30: alox.CacheClientStatus + (*CacheStatusResponse)(nil), // 31: alox.CacheStatusResponse + (*BleStreamTick)(nil), // 32: alox.BleStreamTick + (*EspNowUnicastTestRequest)(nil), // 33: alox.EspNowUnicastTestRequest + (*EspNowUnicastTestResponse)(nil), // 34: alox.EspNowUnicastTestResponse + (*EspNowEchoPingRequest)(nil), // 35: alox.EspNowEchoPingRequest + (*EspNowEchoPingResponse)(nil), // 36: alox.EspNowEchoPingResponse + (*LedRingProgressRequest)(nil), // 37: alox.LedRingProgressRequest + (*LedRingProgressResponse)(nil), // 38: alox.LedRingProgressResponse + (*EspNowFindMeRequest)(nil), // 39: alox.EspNowFindMeRequest + (*EspNowFindMeResponse)(nil), // 40: alox.EspNowFindMeResponse + (*RestartRequest)(nil), // 41: alox.RestartRequest + (*RestartResponse)(nil), // 42: alox.RestartResponse + (*ClientIdMapResetRequest)(nil), // 43: alox.ClientIdMapResetRequest + (*ClientIdMapResetResponse)(nil), // 44: alox.ClientIdMapResetResponse + (*SetLogLevelRequest)(nil), // 45: alox.SetLogLevelRequest + (*SetLogLevelResponse)(nil), // 46: alox.SetLogLevelResponse + (*TapConfigRequest)(nil), // 47: alox.TapConfigRequest + (*TapConfigResponse)(nil), // 48: alox.TapConfigResponse + (*OtaStartPayload)(nil), // 49: alox.OtaStartPayload + (*OtaPayload)(nil), // 50: alox.OtaPayload + (*OtaEndPayload)(nil), // 51: alox.OtaEndPayload + (*OtaStatusPayload)(nil), // 52: alox.OtaStatusPayload + (*OtaSlaveProgressRequest)(nil), // 53: alox.OtaSlaveProgressRequest + (*OtaSlaveProgressEntry)(nil), // 54: alox.OtaSlaveProgressEntry + (*OtaSlaveProgressResponse)(nil), // 55: alox.OtaSlaveProgressResponse } var file_uart_messages_proto_depIdxs = []int32{ 0, // 0: alox.UartMessage.type:type_name -> alox.MessageType @@ -4620,60 +4832,62 @@ var file_uart_messages_proto_depIdxs = []int32{ 6, // 3: alox.UartMessage.version_response:type_name -> alox.VersionResponse 8, // 4: alox.UartMessage.client_info_response:type_name -> alox.ClientInfoResponse 10, // 5: alox.UartMessage.client_input_response:type_name -> alox.ClientInputResponse - 47, // 6: alox.UartMessage.ota_start:type_name -> alox.OtaStartPayload - 48, // 7: alox.UartMessage.ota_payload:type_name -> alox.OtaPayload - 49, // 8: alox.UartMessage.ota_end:type_name -> alox.OtaEndPayload - 50, // 9: alox.UartMessage.ota_status:type_name -> alox.OtaStatusPayload + 49, // 6: alox.UartMessage.ota_start:type_name -> alox.OtaStartPayload + 50, // 7: alox.UartMessage.ota_payload:type_name -> alox.OtaPayload + 51, // 8: alox.UartMessage.ota_end:type_name -> alox.OtaEndPayload + 52, // 9: alox.UartMessage.ota_status:type_name -> alox.OtaStatusPayload 11, // 10: alox.UartMessage.accel_deadzone_request:type_name -> alox.AccelDeadzoneRequest 12, // 11: alox.UartMessage.accel_deadzone_response:type_name -> alox.AccelDeadzoneResponse - 31, // 12: alox.UartMessage.espnow_unicast_test_request:type_name -> alox.EspNowUnicastTestRequest - 32, // 13: alox.UartMessage.espnow_unicast_test_response:type_name -> alox.EspNowUnicastTestResponse - 51, // 14: alox.UartMessage.ota_slave_progress_request:type_name -> alox.OtaSlaveProgressRequest - 53, // 15: alox.UartMessage.ota_slave_progress_response:type_name -> alox.OtaSlaveProgressResponse - 35, // 16: alox.UartMessage.led_ring_progress_request:type_name -> alox.LedRingProgressRequest - 36, // 17: alox.UartMessage.led_ring_progress_response:type_name -> alox.LedRingProgressResponse - 37, // 18: alox.UartMessage.espnow_find_me_request:type_name -> alox.EspNowFindMeRequest - 38, // 19: alox.UartMessage.espnow_find_me_response:type_name -> alox.EspNowFindMeResponse - 39, // 20: alox.UartMessage.restart_request:type_name -> alox.RestartRequest - 40, // 21: alox.UartMessage.restart_response:type_name -> alox.RestartResponse + 33, // 12: alox.UartMessage.espnow_unicast_test_request:type_name -> alox.EspNowUnicastTestRequest + 34, // 13: alox.UartMessage.espnow_unicast_test_response:type_name -> alox.EspNowUnicastTestResponse + 53, // 14: alox.UartMessage.ota_slave_progress_request:type_name -> alox.OtaSlaveProgressRequest + 55, // 15: alox.UartMessage.ota_slave_progress_response:type_name -> alox.OtaSlaveProgressResponse + 37, // 16: alox.UartMessage.led_ring_progress_request:type_name -> alox.LedRingProgressRequest + 38, // 17: alox.UartMessage.led_ring_progress_response:type_name -> alox.LedRingProgressResponse + 39, // 18: alox.UartMessage.espnow_find_me_request:type_name -> alox.EspNowFindMeRequest + 40, // 19: alox.UartMessage.espnow_find_me_response:type_name -> alox.EspNowFindMeResponse + 41, // 20: alox.UartMessage.restart_request:type_name -> alox.RestartRequest + 42, // 21: alox.UartMessage.restart_response:type_name -> alox.RestartResponse 13, // 22: alox.UartMessage.accel_stream_request:type_name -> alox.AccelStreamRequest 14, // 23: alox.UartMessage.accel_stream_response:type_name -> alox.AccelStreamResponse - 17, // 24: alox.UartMessage.battery_status_request:type_name -> alox.BatteryStatusRequest - 20, // 25: alox.UartMessage.battery_status_response:type_name -> alox.BatteryStatusResponse - 22, // 26: alox.UartMessage.tap_notify_request:type_name -> alox.TapNotifyRequest - 23, // 27: alox.UartMessage.tap_notify_response:type_name -> alox.TapNotifyResponse - 25, // 28: alox.UartMessage.cache_status_request:type_name -> alox.CacheStatusRequest - 29, // 29: alox.UartMessage.cache_status_response:type_name -> alox.CacheStatusResponse - 33, // 30: alox.UartMessage.espnow_echo_ping_request:type_name -> alox.EspNowEchoPingRequest - 34, // 31: alox.UartMessage.espnow_echo_ping_response:type_name -> alox.EspNowEchoPingResponse - 43, // 32: alox.UartMessage.set_log_level_request:type_name -> alox.SetLogLevelRequest - 44, // 33: alox.UartMessage.set_log_level_response:type_name -> alox.SetLogLevelResponse - 45, // 34: alox.UartMessage.tap_config_request:type_name -> alox.TapConfigRequest - 46, // 35: alox.UartMessage.tap_config_response:type_name -> alox.TapConfigResponse - 30, // 36: alox.UartMessage.ble_stream_tick:type_name -> alox.BleStreamTick - 41, // 37: alox.UartMessage.client_id_map_reset_request:type_name -> alox.ClientIdMapResetRequest - 42, // 38: alox.UartMessage.client_id_map_reset_response:type_name -> alox.ClientIdMapResetResponse + 19, // 24: alox.UartMessage.battery_status_request:type_name -> alox.BatteryStatusRequest + 22, // 25: alox.UartMessage.battery_status_response:type_name -> alox.BatteryStatusResponse + 24, // 26: alox.UartMessage.tap_notify_request:type_name -> alox.TapNotifyRequest + 25, // 27: alox.UartMessage.tap_notify_response:type_name -> alox.TapNotifyResponse + 27, // 28: alox.UartMessage.cache_status_request:type_name -> alox.CacheStatusRequest + 31, // 29: alox.UartMessage.cache_status_response:type_name -> alox.CacheStatusResponse + 35, // 30: alox.UartMessage.espnow_echo_ping_request:type_name -> alox.EspNowEchoPingRequest + 36, // 31: alox.UartMessage.espnow_echo_ping_response:type_name -> alox.EspNowEchoPingResponse + 45, // 32: alox.UartMessage.set_log_level_request:type_name -> alox.SetLogLevelRequest + 46, // 33: alox.UartMessage.set_log_level_response:type_name -> alox.SetLogLevelResponse + 47, // 34: alox.UartMessage.tap_config_request:type_name -> alox.TapConfigRequest + 48, // 35: alox.UartMessage.tap_config_response:type_name -> alox.TapConfigResponse + 32, // 36: alox.UartMessage.ble_stream_tick:type_name -> alox.BleStreamTick + 43, // 37: alox.UartMessage.client_id_map_reset_request:type_name -> alox.ClientIdMapResetRequest + 44, // 38: alox.UartMessage.client_id_map_reset_response:type_name -> alox.ClientIdMapResetResponse 15, // 39: alox.UartMessage.input_send_mode_request:type_name -> alox.InputSendModeRequest 16, // 40: alox.UartMessage.input_send_mode_response:type_name -> alox.InputSendModeResponse - 7, // 41: alox.ClientInfoResponse.clients:type_name -> alox.ClientInfo - 9, // 42: alox.ClientInputResponse.clients:type_name -> alox.ClientInput - 1, // 43: alox.InputSendModeRequest.mode:type_name -> alox.InputSendMode - 1, // 44: alox.InputSendModeResponse.mode:type_name -> alox.InputSendMode - 18, // 45: alox.BatterySample.lipo1:type_name -> alox.LipoReading - 18, // 46: alox.BatterySample.lipo2:type_name -> alox.LipoReading - 19, // 47: alox.BatteryStatusResponse.samples:type_name -> alox.BatterySample - 2, // 48: alox.TapEvent.kind:type_name -> alox.TapKind - 2, // 49: alox.CacheClientTap.kind:type_name -> alox.TapKind - 26, // 50: alox.CacheClientStatus.accel:type_name -> alox.CacheClientAccel - 27, // 51: alox.CacheClientStatus.tap:type_name -> alox.CacheClientTap - 28, // 52: alox.CacheStatusResponse.clients:type_name -> alox.CacheClientStatus - 28, // 53: alox.BleStreamTick.clients:type_name -> alox.CacheClientStatus - 52, // 54: alox.OtaSlaveProgressResponse.slaves:type_name -> alox.OtaSlaveProgressEntry - 55, // [55:55] is the sub-list for method output_type - 55, // [55:55] is the sub-list for method input_type - 55, // [55:55] is the sub-list for extension type_name - 55, // [55:55] is the sub-list for extension extendee - 0, // [0:55] is the sub-list for field type_name + 17, // 41: alox.UartMessage.battery_uv_request:type_name -> alox.BatteryUvRequest + 18, // 42: alox.UartMessage.battery_uv_response:type_name -> alox.BatteryUvResponse + 7, // 43: alox.ClientInfoResponse.clients:type_name -> alox.ClientInfo + 9, // 44: alox.ClientInputResponse.clients:type_name -> alox.ClientInput + 1, // 45: alox.InputSendModeRequest.mode:type_name -> alox.InputSendMode + 1, // 46: alox.InputSendModeResponse.mode:type_name -> alox.InputSendMode + 20, // 47: alox.BatterySample.lipo1:type_name -> alox.LipoReading + 20, // 48: alox.BatterySample.lipo2:type_name -> alox.LipoReading + 21, // 49: alox.BatteryStatusResponse.samples:type_name -> alox.BatterySample + 2, // 50: alox.TapEvent.kind:type_name -> alox.TapKind + 2, // 51: alox.CacheClientTap.kind:type_name -> alox.TapKind + 28, // 52: alox.CacheClientStatus.accel:type_name -> alox.CacheClientAccel + 29, // 53: alox.CacheClientStatus.tap:type_name -> alox.CacheClientTap + 30, // 54: alox.CacheStatusResponse.clients:type_name -> alox.CacheClientStatus + 30, // 55: alox.BleStreamTick.clients:type_name -> alox.CacheClientStatus + 54, // 56: alox.OtaSlaveProgressResponse.slaves:type_name -> alox.OtaSlaveProgressEntry + 57, // [57:57] is the sub-list for method output_type + 57, // [57:57] is the sub-list for method input_type + 57, // [57:57] is the sub-list for extension type_name + 57, // [57:57] is the sub-list for extension extendee + 0, // [0:57] is the sub-list for field type_name } func init() { file_uart_messages_proto_init() } @@ -4722,6 +4936,8 @@ func file_uart_messages_proto_init() { (*UartMessage_ClientIdMapResetResponse)(nil), (*UartMessage_InputSendModeRequest)(nil), (*UartMessage_InputSendModeResponse)(nil), + (*UartMessage_BatteryUvRequest)(nil), + (*UartMessage_BatteryUvResponse)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -4729,7 +4945,7 @@ func file_uart_messages_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_uart_messages_proto_rawDesc), len(file_uart_messages_proto_rawDesc)), NumEnums: 3, - NumMessages: 51, + NumMessages: 53, NumExtensions: 0, NumServices: 0, }, diff --git a/goTool/webui/index.html b/goTool/webui/index.html index 891efd7..c4f62ec 100644 --- a/goTool/webui/index.html +++ b/goTool/webui/index.html @@ -383,6 +383,11 @@
+ Runtime-NVS pro Pod. Im Energiesparmodus (gelatcht) kein Host-Zugriff. +
Host nicht verbunden — Eingabe gesperrt.
@@ -540,6 +570,12 @@ title="Master-Tap-Config an alle Slaves (ESP-NOW)"> Tap-Cfg alle +