| // Copyright 2021 The Pigweed Authors |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| // use this file except in compliance with the License. You may obtain a copy of |
| // the License at |
| // |
| // https://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| // License for the specific language governing permissions and limitations under |
| // the License. |
| syntax = "proto3"; |
| |
| package pw.snapshot; |
| |
| option java_package = "pw.snapshot.proto"; |
| option java_outer_classname = "Snapshot"; |
| |
| import "pw_chrono_protos/chrono.proto"; |
| import "pw_cpu_exception_cortex_m_protos/cpu_state.proto"; |
| import "pw_log/proto/log.proto"; |
| import "pw_thread_protos/thread.proto"; |
| import "pw_snapshot_metadata_proto/snapshot_metadata.proto"; |
| |
| // The Snapshot proto is a list that dictates field numbers that should |
| // be used when serializing proto messages into a "Snapshot" that can be |
| // ingested by Pigweed's upstream tooling. |
| // |
| // There are various field number ranges that are marked for "upstream" use, |
| // and others that are marked for "pigweed users". This allows a user to |
| // define a parallel proto that defines product-specific messages using mutually |
| // exclusive field numbers: |
| // |
| // MySnapshot { |
| // // Use a project-specific logging proto format. |
| // repeated MyLogFormat = 8; |
| // |
| // // Pigweed's snapshot doesn't support my custom RTOS, so write that to |
| // // a field number reserved for downstream projects. |
| // MyCustomRtosInfo = 22; |
| // } |
| // |
| // Writing both proto messages to the same proto encoder is valid because the |
| // field nubmers are mutually exclusive. This prevents collisions that would |
| // break a proto decode. The final message will have to be decoded twice; once |
| // as a pw.snapshot.Snapshot and once as the project-specific message. |
| message Snapshot { |
| repeated pw.log.LogEntry logs = 1; |
| |
| // RESERVED FOR PIGWEED. These field numbers are reserved strictly for things |
| // that are very generally useful and high in count. Downstream projects may |
| // NOT write to these fields. |
| // Encodes to a single byte of tag overhead. |
| reserved 2 to 7; |
| |
| // RESERVED FOR USERS. These field numbers should be used for writing |
| // project-specific proto messages that repeat in high quantity to reduce |
| // proto encoding overhead. Pigweed must not write to these fields. |
| // Encodes to a single byte of tag overhead. |
| reserved 8 to 15; |
| |
| // Note: Proto tags 16-2047 encode with two bytes of overhead. |
| Metadata metadata = 16; |
| |
| // Other data that should be highlighted in this crash. This field may have |
| // entries added to it during a decode. |
| map<string, string> tags = 17; |
| |
| repeated pw.thread.proto.Thread threads = 18; |
| |
| // If a device has multiple cores, it may be useful to collect an associated |
| // snapshot for attached cores when a snapshot collection is triggered on one |
| // core. By embedding one or more snapshots into a snapshot, the snapshots are |
| // considered associated. |
| repeated Snapshot related_snapshots = 19; |
| |
| pw.cpu_exception.cortex_m.ArmV7mCpuState armv7m_cpu_state = 20; |
| |
| // Platform-specific binary trace data region. Binary trace data is using |
| // pw_trace_tokenized buffer format for stored data. |
| bytes trace_data = 21; |
| |
| // Timestamps that mark when this snapshot occurred. This field is repeated |
| // to accommodate wall-clock time, time since boot, and/or the raw system |
| // clock value. |
| repeated pw.chrono.TimePoint timestamps = 22; |
| |
| // RESERVED FOR PIGWEED. Downstream projects may NOT write to these fields. |
| // Encodes to two bytes of tag overhead. |
| reserved 23 to 1031; |
| |
| // RESERVED FOR USERS. Encodes to two or more bytes of tag overhead. |
| reserved 1032 to max; |
| } |