diff --git a/.github/workflows/rocket_telem_proxy_build.yml b/.github/workflows/rocket_telem_proxy_build.yml new file mode 100644 index 0000000..e307141 --- /dev/null +++ b/.github/workflows/rocket_telem_proxy_build.yml @@ -0,0 +1,118 @@ +name: Create and publish the Telemetry Proxy Docker image + +# Configures this workflow to run every time a change is pushed to the branch called `main` or a pull request to `main` is created +on: + push: + branches: ['main'] + pull_request: + +# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds. +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository_owner }}/rocket-telem-proxy + +jobs: + build: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + platform: + - linux/amd64 + - linux/arm64 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Prepare + run: | + platform=${{ matrix.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=latest,enable={{is_default_branch}} + type=ref,event=branch,enable=${{ github.ref != 'refs/heads/main' }} + type=ref,event=pr + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push by digest + id: build + uses: docker/build-push-action@v6 + with: + context: . + file: go-proxies/rocket-telem-proxy/Dockerfile + platforms: ${{ matrix.platform }} + labels: ${{ steps.meta.outputs.labels }} + outputs: type=image,name=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true + cache-from: type=gha + cache-to: type=gha,mode=max + + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + + - name: Upload digest + uses: actions/upload-artifact@v4 + with: + name: digests-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + merge: + runs-on: ubuntu-latest + needs: + - build + steps: + - name: Download digests + uses: actions/download-artifact@v4 + with: + path: /tmp/digests + pattern: digests-* + merge-multiple: true + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=latest,enable={{is_default_branch}} + type=ref,event=branch,enable=${{ github.ref != 'refs/heads/main' }} + type=ref,event=pr + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}@sha256:%s ' *) + + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.version }} diff --git a/fill/BUILD b/fill/BUILD index f148578..16b0752 100644 --- a/fill/BUILD +++ b/fill/BUILD @@ -5,6 +5,7 @@ cc_binary( "//protos:command_cc_grpc", "//fill/actuators:qd", "//fill/actuators:ball_valve", + "//fill/umbilical:rocket_proto_builder", "//fill/actuators:sol_valve", "//fill/sensors:pt", "@abseil-cpp//absl/flags:flag", @@ -13,4 +14,4 @@ cc_binary( "@com_github_grpc_grpc//:grpc++", "@com_github_grpc_grpc//:grpc++_reflection", ], -) +) \ No newline at end of file diff --git a/fill/actuators/sol_valve.cc b/fill/actuators/sol_valve.cc index 7bea0a5..ec36cb6 100644 --- a/fill/actuators/sol_valve.cc +++ b/fill/actuators/sol_valve.cc @@ -11,8 +11,6 @@ SolValve::SolValve(){ SolValve::~SolValve(){} - - void SolValve::open(){ pinMode(SV_SIGNAL, OUTPUT); digitalWrite(SV_SIGNAL, HIGH); @@ -37,6 +35,4 @@ void SolValve::close(){ pinMode(SV_SIGNAL, OUTPUT); digitalWrite(SV_SIGNAL, LOW); isOpen=false; -} - - +} \ No newline at end of file diff --git a/fill/fill_station.cc b/fill/fill_station.cc index de11106..d760de7 100644 --- a/fill/fill_station.cc +++ b/fill/fill_station.cc @@ -12,6 +12,7 @@ #include "actuators/sol_valve.h" #include "sensors/pt.h" +#include "umbilical/proto_build.h" #include "wiringPi.h" @@ -31,7 +32,10 @@ using command::Commander; using command::FillStationTelemeter; using command::CommandReply; using command::FillStationTelemetry; -using command::TelemetryRequest; +using command::FillStationTelemetryRequest; +using command::RocketTelemetryRequest; +using command::RocketTelemetry; +using command::RocketTelemeter; using grpc::Channel; using grpc::ClientContext; using grpc::Server; @@ -48,6 +52,8 @@ SolValve sv1; /* Sensors */ PT pt1 = PT(0x48, 3); PT pt2 = PT(0x48, 2); +/* Umblical Tools */ +RocketTelemetryProtoBuilder protoBuild; ABSL_FLAG(uint16_t, server_port, 50051, "Server port for the service"); @@ -115,15 +121,9 @@ class CommanderServiceImpl final : public Commander::Service sv1.close(); } } - if (request->sv2_close()){ - // send TCP command to rocket_controller - } - if (request->mav_open()){ - // send TCP command to rocket_controller - } - if (request->fire()){ - // send TCP command to rocket_controller - } + + protoBuild.sendCommand(request); + return Status::OK; } }; @@ -131,7 +131,7 @@ class CommanderServiceImpl final : public Commander::Service // Fill Station service to stream telemetry. class TelemeterServiceImpl final : public FillStationTelemeter::Service { - Status StreamTelemetry(ServerContext *context, const TelemetryRequest *request, + Status StreamTelemetry(ServerContext *context, const FillStationTelemetryRequest *request, ServerWriter *writer) override { while (true) { @@ -147,12 +147,29 @@ class TelemeterServiceImpl final : public FillStationTelemeter::Service } }; +class RocketTelemeterServiceImpl final : public RocketTelemeter::Service +{ + Status StreamTelemetry(ServerContext *context, const RocketTelemetryRequest *request, + ServerWriter *writer) override + { + while (true) { + auto now = std::chrono::high_resolution_clock::now(); + RocketTelemetry t = protoBuild.buildProto(); + if (!writer->Write(t)) { + // Broken stream + return Status::CANCELLED; + } + } + } +}; + // Server startup function void RunServer(uint16_t port, std::shared_ptr server) { std::string server_address = absl::StrFormat("0.0.0.0:%d", port); CommanderServiceImpl commander_service; TelemeterServiceImpl telemeter_service; + RocketTelemeterServiceImpl rocket_telemeter_service; grpc::EnableDefaultHealthCheckService(true); grpc::reflection::InitProtoReflectionServerBuilderPlugin(); @@ -162,6 +179,7 @@ void RunServer(uint16_t port, std::shared_ptr server) // Register services. builder.RegisterService(&commander_service); builder.RegisterService(&telemeter_service); + builder.RegisterService(&rocket_telemeter_service); // Finally assemble the server. server = builder.BuildAndStart(); // std::unique_ptr server(builder.BuildAndStart()); diff --git a/fill/umbilical/BUILD b/fill/umbilical/BUILD new file mode 100644 index 0000000..264c657 --- /dev/null +++ b/fill/umbilical/BUILD @@ -0,0 +1,13 @@ +cc_library( + name = "rocket_proto_builder", + srcs = ["proto_build.cc"], + hdrs = ["proto_build.h"], + deps = [ + "//protos:command_cc_grpc", + "@com_github_grpc_grpc//:grpc++", + "@com_github_grpc_grpc//:grpc++_reflection", + ], + visibility = [ + "//fill:__subpackages__", + ], +) \ No newline at end of file diff --git a/fill/umbilical/proto_build.cc b/fill/umbilical/proto_build.cc new file mode 100644 index 0000000..bd04f15 --- /dev/null +++ b/fill/umbilical/proto_build.cc @@ -0,0 +1,172 @@ +#include "proto_build.h" +#include + +RocketTelemetryProtoBuilder::RocketTelemetryProtoBuilder(){ + serial_data = open(usb_port, O_RDWR | O_NOCTTY | O_NDELAY); + + struct termios options; + memset(&options, 0, sizeof(options)); // Clear the struct for safety + tcgetattr(serial_data, &options); // Get current port settings + + // Set baud rate + cfsetispeed(&options, B9600); // Input baud rate + cfsetospeed(&options, B9600); // Output baud rate + + // Configure other settings + options.c_cflag = (options.c_cflag & ~CSIZE) | CS8; // 8 data bits + options.c_cflag |= (CLOCAL | CREAD); // Enable receiver + options.c_cflag &= ~(PARENB | PARODD); // No parity + options.c_cflag &= ~CSTOPB; // 1 stop bit + options.c_cflag &= ~CRTSCTS; // Disable hardware flow control + + options.c_iflag = IGNPAR; // Ignore framing and parity errors + options.c_oflag = 0; // Raw output + options.c_lflag = 0; // Raw input + + tcsetattr(serial_data, TCSANOW, &options); // Apply settings + +} + +RocketTelemetryProtoBuilder::~RocketTelemetryProtoBuilder(){ + //serial_data.close(); +} + +void RocketTelemetryProtoBuilder::sendCommand(const Command* com) { + if (com->has_sv2_close()){ + if (com->sv2_close()) { + //serial_data << (uint8_t)CLOSE_SV << std::flush; + char temp = CLOSE_SV; + write(serial_data, &temp, 1); + } else { + //serial_data << (uint8_t)OPEN_SV << std::flush; + } + } + + if (com->has_mav_open()){ + if (com->mav_open()){ + //serial_data << (uint8_t)OPEN_MAV << std::flush; + } else { + //serial_data << (uint8_t)CLOSE_MAV << std::flush; + } + } + + if (com->launch()){ + //serial_data << (uint8_t)LAUNCH << std::flush; + char temp = LAUNCH; + std::cout << "Launch command received. Character printed: " << temp << "\n"; + write(serial_data, &temp, 1); + } + // if (com->clear_sd()){ + // serial_data << (uint8_t)CLEAR_SD << std::flush; + // } +} + +RocketTelemetry RocketTelemetryProtoBuilder::buildProto(){ + RocketTelemetry rocketTelemetry; + //if (serial_data.is_open()){ + RocketUmbTelemetry* rocketUmbTelemetry = rocketTelemetry.mutable_umb_telem(); + RocketMetadata* rocketMetadata = rocketUmbTelemetry->mutable_metadata(); + Events* events = rocketUmbTelemetry->mutable_events(); + + uint16_t metadata; + uint32_t ms_since_boot; + uint64_t events_val; + + bool radio_state; + bool transmit_state; + + float voltage; + float pt3; + float pt4; + float temp; + + char packet[28]; + //serial_data.getline(packet, UMB_PACKET_SIZE); + read(serial_data, &packet, 28); + + memcpy(&metadata, packet, sizeof(metadata)); + memcpy(&ms_since_boot, packet + 2, sizeof(ms_since_boot)); + memcpy(&events_val, packet + 6, sizeof(events_val)); + + memcpy(&radio_state, packet + 10, sizeof(radio_state)); + memcpy(&transmit_state, packet + 11, sizeof(transmit_state)); + + memcpy(&voltage, packet + 12, sizeof(voltage)); + memcpy(&pt3, packet + 16, sizeof(pt3)); + memcpy(&pt4, packet + 20, sizeof(pt4)); + memcpy(&temp, packet + 24, sizeof(temp)); + + rocketMetadata->set_alt_armed(static_cast(metadata & 0x1)); + rocketMetadata->set_alt_valid(static_cast((metadata & 0x2) >> 1)); + rocketMetadata->set_gps_valid(static_cast((metadata & 0x4) >> 2)); + rocketMetadata->set_imu_valid(static_cast((metadata & 0x8) >> 3)); + rocketMetadata->set_acc_valid(static_cast((metadata & 0x10) >> 4)); + rocketMetadata->set_therm_valid(static_cast((metadata & 0x20) >> 5)); + rocketMetadata->set_voltage_valid(static_cast((metadata & 0x40) >> 6)); + rocketMetadata->set_adc_valid(static_cast((metadata & 0x80) >> 7)); + rocketMetadata->set_fram_valid(static_cast((metadata & 0x100) >> 8)); + rocketMetadata->set_sd_valid(static_cast((metadata & 0x200) >> 9)); + rocketMetadata->set_gps_msg_valid(static_cast((metadata & 0x400) >> 10)); + rocketMetadata->set_mav_state(static_cast((metadata & 0x800) >> 11)); + rocketMetadata->set_sv_state(static_cast((metadata & 0x1000) >> 12)); + + switch((metadata & 0xE000) >> 13) { + case 0b000: + rocketMetadata->set_flight_mode(command::STARTUP); + break; + case 0b001: + rocketMetadata->set_flight_mode(command::STANDBY); + break; + case 0b010: + rocketMetadata->set_flight_mode(command::ASCENT); + break; + case 0b011: + rocketMetadata->set_flight_mode(command::DROGUE_DEPLOYED); + break; + case 0b100: + rocketMetadata->set_flight_mode(command::MAIN_DEPLOYED); + break; + case 0b101: + rocketMetadata->set_flight_mode(command::FAULT); + break; + } + + events->set_altitude_armed(static_cast(events_val & 0x1)); + events->set_altimeter_init_failed(static_cast((events_val & 0x2) >> 1)); + events->set_altimeter_reading_failed(static_cast((events_val & 0x4) >> 2)); + events->set_gps_init_failed(static_cast((events_val & 0x8) >> 3)); + events->set_gps_reading_failed(static_cast((events_val & 0x10) >> 4)); + events->set_imu_init_failed(static_cast((events_val & 0x20) >> 5)); + events->set_imu_reading_failed(static_cast((events_val & 0x40) >> 6)); + events->set_accelerometer_init_failed(static_cast((events_val & 0x80) >> 7)); + events->set_accelerometer_reading_failed(static_cast((events_val & 0x100) >> 8)); + events->set_thermometer_init_failed(static_cast((events_val & 0x200) >> 9)); + events->set_thermometer_reading_failed(static_cast((events_val & 0x400) >> 10)); + events->set_voltage_init_failed(static_cast((events_val & 0x800) >> 11)); + events->set_voltage_reading_failed(static_cast((events_val & 0x1000) >> 12)); + events->set_adc_init_failed(static_cast((events_val & 0x2000) >> 13)); + events->set_adc_reading_failed(static_cast((events_val & 0x4000) >> 14)); + events->set_fram_init_failed(static_cast((events_val & 0x8000) >> 15)); + events->set_fram_write_failed(static_cast((events_val & 0x10000) >> 16)); + events->set_sd_init_failed(static_cast((events_val & 0x20000) >> 17)); + events->set_sd_write_failed(static_cast((events_val & 0x40000) >> 18)); + events->set_mav_was_actuated(static_cast((events_val & 0x80000) >> 19)); + events->set_sv_was_actuated(static_cast((events_val & 0x100000) >> 20)); + events->set_main_deploy_wait_end(static_cast((events_val & 0x200000) >> 21)); + events->set_main_log_shutoff(static_cast((events_val & 0x400000) >> 22)); + events->set_cycle_overflow(static_cast((events_val & 0x800000) >> 23)); + events->set_invalid_command(static_cast((events_val & 0x1000000) >> 24)); + + rocketUmbTelemetry->set_ms_since_boot(ms_since_boot); + rocketUmbTelemetry->set_radio_state(radio_state); + rocketUmbTelemetry->set_transmit_state(transmit_state); + rocketUmbTelemetry->set_voltage(voltage); + rocketUmbTelemetry->set_pt3(pt3); + rocketUmbTelemetry->set_pt4(pt4); + rocketUmbTelemetry->set_rtd_temp(temp); + + // } else { + // std::cout << "Serial port is not open.\n"; + // } + return rocketTelemetry; +} \ No newline at end of file diff --git a/fill/umbilical/proto_build.h b/fill/umbilical/proto_build.h new file mode 100644 index 0000000..3fc18cf --- /dev/null +++ b/fill/umbilical/proto_build.h @@ -0,0 +1,41 @@ +#ifndef PROTO_BUILD_H +#define PROTO_BUILD_H + +#define LAUNCH '0' +#define OPEN_MAV '1' +#define CLOSE_MAV '2' +#define OPEN_SV '3' +#define CLOSE_SV '4' +#define CLEAR_SD '5' + +#define UMB_PACKET_SIZE 28 + +#include "protos/command.grpc.pb.h" +#include +#include // POSIX terminal control definitions +#include // UNIX standard function definitions +#include // For memset +#include // File control definitions +using command::RocketTelemetry; +using command::RocketMetadata; +using command::Events; +using command::FlightMode; +using command::RocketUmbTelemetry; +using command::Command; + +class RocketTelemetryProtoBuilder { + private: + const char* usb_port = "/dev/rocket"; + + int serial_data; + public: + // Establish serial connection + RocketTelemetryProtoBuilder(); + ~RocketTelemetryProtoBuilder(); + + void sendCommand(const Command* com); + + RocketTelemetry buildProto(); +}; + +#endif \ No newline at end of file diff --git a/go-proxies/fill-telem-proxy/main.go b/go-proxies/fill-telem-proxy/main.go index 815d296..88977f6 100644 --- a/go-proxies/fill-telem-proxy/main.go +++ b/go-proxies/fill-telem-proxy/main.go @@ -37,7 +37,7 @@ func main() { go func(ctx context.Context, grpcClient pb.FillStationTelemeterClient) { for { - stream, err := grpcClient.StreamTelemetry(ctx, &pb.TelemetryRequest{}) + stream, err := grpcClient.StreamTelemetry(ctx, &pb.FillStationTelemetryRequest{}) if err != nil { log.Printf("could not receive stream: %v, retrying in 5 seconds...", err) time.Sleep(5 * time.Second) @@ -52,7 +52,7 @@ func main() { } // Store packet - datastore.Store(packet) + datastore.FillStationTelemetryStore(packet) } } }(ctx, grpcClient) diff --git a/go-proxies/pkg/types/types.go b/go-proxies/pkg/types/types.go index a0f3c7a..d1c9c0e 100644 --- a/go-proxies/pkg/types/types.go +++ b/go-proxies/pkg/types/types.go @@ -78,7 +78,7 @@ func (d *Datastore) Init(ctx context.Context) { } // Store parses a packet and writes it to InfluxDB -func (d *Datastore) Store(packet *pb.FillStationTelemetry) { +func (d *Datastore) FillStationTelemetryStore(packet *pb.FillStationTelemetry) { // Create tags map tags := map[string]string{} @@ -99,6 +99,85 @@ func (d *Datastore) Store(packet *pb.FillStationTelemetry) { log.Println(err) } } +// Stores RocketTelemetry to InfluxDB +func (d *Datastore) RocketTelemetryStore(packet *pb.RocketTelemetry) { + // Create tags map + tags := map[string]string{} + + // Create fields map + fields := map[string]interface{}{} + + // Access Umb telemetry data if available + if packet.UmbTelem != nil { + umbTelem := packet.UmbTelem + fields["ms_since_boot"] = umbTelem.MsSinceBoot + fields["radio_state"] = umbTelem.RadioState + fields["transmit_state"] = umbTelem.TransmitState + fields["voltage"] = umbTelem.Voltage + fields["pt3"] = umbTelem.Pt3 + fields["pt4"] = umbTelem.Pt4 + fields["rtd_temp"] = umbTelem.RtdTemp + + if umbTelem.Metadata != nil { + metaData := umbTelem.Metadata + + // Tags have to be of type [string][string] + tags["alt_armed"] = fmt.Sprintf("%v", metaData.AltArmed) + tags["alt_valid"] = fmt.Sprintf("%v", metaData.AltValid) + tags["gps_valid"] = fmt.Sprintf("%v", metaData.GpsValid) + tags["imu_valid"] = fmt.Sprintf("%v", metaData.ImuValid) + tags["acc_valid"] = fmt.Sprintf("%v", metaData.AccValid) + tags["therm_valid"] = fmt.Sprintf("%v", metaData.ThermValid) + tags["voltage_valid"] = fmt.Sprintf("%v", metaData.VoltageValid) + tags["adc_valid"] = fmt.Sprintf("%v", metaData.AdcValid) + tags["fram_valid"] = fmt.Sprintf("%v", metaData.FramValid) + tags["sd_valid"] = fmt.Sprintf("%v", metaData.SdValid) + tags["gps_msg_valid"] = fmt.Sprintf("%v", metaData.GpsMsgValid) + tags["mav_state"] = fmt.Sprintf("%v", metaData.MavState) + tags["sv_state"] = fmt.Sprintf("%v", metaData.SvState) + tags["flight_mode"] = metaData.FlightMode.String() + } + + if umbTelem.Events != nil { + events := umbTelem.Events + fields["altitude_armed"] = events.AltitudeArmed + fields["altimeter_init_failed"] = events.AltimeterInitFailed + fields["altimeter_reading_failed"] = events.AltimeterReadingFailed + fields["gps_init_failed"] = events.GpsInitFailed + fields["gps_reading_failed"] = events.GpsReadingFailed + fields["imu_init_failed"] = events.ImuInitFailed + fields["imu_reading_failed"] = events.ImuReadingFailed + fields["accelerometer_init_failed"] = events.AccelerometerInitFailed + fields["accelerometer_reading_failed"] = events.AccelerometerReadingFailed + fields["thermometer_init_failed"] = events.ThermometerInitFailed + fields["thermometer_reading_failed"] = events.ThermometerReadingFailed + fields["voltage_init_failed"] = events.VoltageInitFailed + fields["voltage_reading_failed"] = events.VoltageReadingFailed + fields["adc_init_failed"] = events.AdcInitFailed + fields["adc_reading_failed"] = events.AdcReadingFailed + fields["fram_init_failed"] = events.FramInitFailed + fields["fram_write_failed"] = events.FramWriteFailed + fields["sd_init_failed"] = events.SdInitFailed + fields["sd_write_failed"] = events.SdWriteFailed + fields["mav_was_actuated"] = events.MavWasActuated + fields["sv_was_actuated"] = events.SvWasActuated + fields["main_deploy_wait_end"] = events.MainDeployWaitEnd + fields["main_log_shutoff"] = events.MainLogShutoff + fields["cycle_overflow"] = events.CycleOverflow + fields["invalid_command"] = events.InvalidCommand + } + } + + if msSinceBoot, ok := fields["ms_since_boot"].(uint64); ok { + point := write.NewPoint("telemetry", tags, fields, time.Unix(int64(msSinceBoot), 0)) + writeCtx, writeCancel := context.WithTimeout(d.ctx, time.Second) + defer writeCancel() + + if err := d.writeAPI.WritePoint(writeCtx, point); err != nil { + log.Println(err) + } + } +} // Query parses and executes a json request for historical data func (d *Datastore) Query(req HistoricalDataRequest) HistoricalDataResponse { diff --git a/go-proxies/proto-out/command.pb.go b/go-proxies/proto-out/command.pb.go index 374e940..4b80ad1 100644 --- a/go-proxies/proto-out/command.pb.go +++ b/go-proxies/proto-out/command.pb.go @@ -5,8 +5,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.1 -// protoc v3.12.4 +// protoc-gen-go v1.35.2 +// protoc v3.20.3 // source: command.proto package command_proto @@ -225,26 +225,26 @@ func (*CommandReply) Descriptor() ([]byte, []int) { } // The telemetry request message -type TelemetryRequest struct { +type FillStationTelemetryRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } -func (x *TelemetryRequest) Reset() { - *x = TelemetryRequest{} +func (x *FillStationTelemetryRequest) Reset() { + *x = FillStationTelemetryRequest{} mi := &file_command_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *TelemetryRequest) String() string { +func (x *FillStationTelemetryRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TelemetryRequest) ProtoMessage() {} +func (*FillStationTelemetryRequest) ProtoMessage() {} -func (x *TelemetryRequest) ProtoReflect() protoreflect.Message { +func (x *FillStationTelemetryRequest) ProtoReflect() protoreflect.Message { mi := &file_command_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -256,42 +256,92 @@ func (x *TelemetryRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TelemetryRequest.ProtoReflect.Descriptor instead. -func (*TelemetryRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use FillStationTelemetryRequest.ProtoReflect.Descriptor instead. +func (*FillStationTelemetryRequest) Descriptor() ([]byte, []int) { return file_command_proto_rawDescGZIP(), []int{2} } +// Rocket Telemetry Request +type RocketTelemetryRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IsRocketTelemetryRequest bool `protobuf:"varint,1,opt,name=isRocketTelemetryRequest,proto3" json:"isRocketTelemetryRequest,omitempty"` +} + +func (x *RocketTelemetryRequest) Reset() { + *x = RocketTelemetryRequest{} + mi := &file_command_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RocketTelemetryRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RocketTelemetryRequest) ProtoMessage() {} + +func (x *RocketTelemetryRequest) ProtoReflect() protoreflect.Message { + mi := &file_command_proto_msgTypes[3] + 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 RocketTelemetryRequest.ProtoReflect.Descriptor instead. +func (*RocketTelemetryRequest) Descriptor() ([]byte, []int) { + return file_command_proto_rawDescGZIP(), []int{3} +} + +func (x *RocketTelemetryRequest) GetIsRocketTelemetryRequest() bool { + if x != nil { + return x.IsRocketTelemetryRequest + } + return false +} + type Events struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - KeyArmed bool `protobuf:"varint,1,opt,name=key_armed,json=keyArmed,proto3" json:"key_armed,omitempty"` - AltitudeArmed bool `protobuf:"varint,2,opt,name=altitude_armed,json=altitudeArmed,proto3" json:"altitude_armed,omitempty"` - AltimeterInitFailed bool `protobuf:"varint,3,opt,name=altimeter_init_failed,json=altimeterInitFailed,proto3" json:"altimeter_init_failed,omitempty"` - AltimeterReadingFailed bool `protobuf:"varint,4,opt,name=altimeter_reading_failed,json=altimeterReadingFailed,proto3" json:"altimeter_reading_failed,omitempty"` - AltimeterWasTurnedOff bool `protobuf:"varint,5,opt,name=altimeter_was_turned_off,json=altimeterWasTurnedOff,proto3" json:"altimeter_was_turned_off,omitempty"` - GpsInitFailed bool `protobuf:"varint,6,opt,name=gps_init_failed,json=gpsInitFailed,proto3" json:"gps_init_failed,omitempty"` - GpsReadingFailed bool `protobuf:"varint,7,opt,name=gps_reading_failed,json=gpsReadingFailed,proto3" json:"gps_reading_failed,omitempty"` - GpsWasTurnedOff bool `protobuf:"varint,8,opt,name=gps_was_turned_off,json=gpsWasTurnedOff,proto3" json:"gps_was_turned_off,omitempty"` - ImuInitFailed bool `protobuf:"varint,9,opt,name=imu_init_failed,json=imuInitFailed,proto3" json:"imu_init_failed,omitempty"` - ImuReadingFailed bool `protobuf:"varint,10,opt,name=imu_reading_failed,json=imuReadingFailed,proto3" json:"imu_reading_failed,omitempty"` - ImuWasTurnedOff bool `protobuf:"varint,11,opt,name=imu_was_turned_off,json=imuWasTurnedOff,proto3" json:"imu_was_turned_off,omitempty"` - AccelerometerInitFailed bool `protobuf:"varint,12,opt,name=accelerometer_init_failed,json=accelerometerInitFailed,proto3" json:"accelerometer_init_failed,omitempty"` - AccelerometerReadingFailed bool `protobuf:"varint,13,opt,name=accelerometer_reading_failed,json=accelerometerReadingFailed,proto3" json:"accelerometer_reading_failed,omitempty"` - AccelerometerWasTurnedOff bool `protobuf:"varint,14,opt,name=accelerometer_was_turned_off,json=accelerometerWasTurnedOff,proto3" json:"accelerometer_was_turned_off,omitempty"` - ThermometerInitFailed bool `protobuf:"varint,15,opt,name=thermometer_init_failed,json=thermometerInitFailed,proto3" json:"thermometer_init_failed,omitempty"` - ThermometerReadingFailed bool `protobuf:"varint,16,opt,name=thermometer_reading_failed,json=thermometerReadingFailed,proto3" json:"thermometer_reading_failed,omitempty"` - ThermometerWasTurnedOff bool `protobuf:"varint,17,opt,name=thermometer_was_turned_off,json=thermometerWasTurnedOff,proto3" json:"thermometer_was_turned_off,omitempty"` + AltitudeArmed bool `protobuf:"varint,1,opt,name=altitude_armed,json=altitudeArmed,proto3" json:"altitude_armed,omitempty"` + AltimeterInitFailed bool `protobuf:"varint,2,opt,name=altimeter_init_failed,json=altimeterInitFailed,proto3" json:"altimeter_init_failed,omitempty"` + AltimeterReadingFailed bool `protobuf:"varint,3,opt,name=altimeter_reading_failed,json=altimeterReadingFailed,proto3" json:"altimeter_reading_failed,omitempty"` + GpsInitFailed bool `protobuf:"varint,4,opt,name=gps_init_failed,json=gpsInitFailed,proto3" json:"gps_init_failed,omitempty"` + GpsReadingFailed bool `protobuf:"varint,5,opt,name=gps_reading_failed,json=gpsReadingFailed,proto3" json:"gps_reading_failed,omitempty"` + ImuInitFailed bool `protobuf:"varint,6,opt,name=imu_init_failed,json=imuInitFailed,proto3" json:"imu_init_failed,omitempty"` + ImuReadingFailed bool `protobuf:"varint,7,opt,name=imu_reading_failed,json=imuReadingFailed,proto3" json:"imu_reading_failed,omitempty"` + AccelerometerInitFailed bool `protobuf:"varint,8,opt,name=accelerometer_init_failed,json=accelerometerInitFailed,proto3" json:"accelerometer_init_failed,omitempty"` + AccelerometerReadingFailed bool `protobuf:"varint,9,opt,name=accelerometer_reading_failed,json=accelerometerReadingFailed,proto3" json:"accelerometer_reading_failed,omitempty"` + ThermometerInitFailed bool `protobuf:"varint,10,opt,name=thermometer_init_failed,json=thermometerInitFailed,proto3" json:"thermometer_init_failed,omitempty"` + ThermometerReadingFailed bool `protobuf:"varint,11,opt,name=thermometer_reading_failed,json=thermometerReadingFailed,proto3" json:"thermometer_reading_failed,omitempty"` + VoltageInitFailed bool `protobuf:"varint,12,opt,name=voltage_init_failed,json=voltageInitFailed,proto3" json:"voltage_init_failed,omitempty"` + VoltageReadingFailed bool `protobuf:"varint,13,opt,name=voltage_reading_failed,json=voltageReadingFailed,proto3" json:"voltage_reading_failed,omitempty"` + AdcInitFailed bool `protobuf:"varint,14,opt,name=adc_init_failed,json=adcInitFailed,proto3" json:"adc_init_failed,omitempty"` + AdcReadingFailed bool `protobuf:"varint,15,opt,name=adc_reading_failed,json=adcReadingFailed,proto3" json:"adc_reading_failed,omitempty"` + FramInitFailed bool `protobuf:"varint,16,opt,name=fram_init_failed,json=framInitFailed,proto3" json:"fram_init_failed,omitempty"` + FramWriteFailed bool `protobuf:"varint,17,opt,name=fram_write_failed,json=framWriteFailed,proto3" json:"fram_write_failed,omitempty"` SdInitFailed bool `protobuf:"varint,18,opt,name=sd_init_failed,json=sdInitFailed,proto3" json:"sd_init_failed,omitempty"` SdWriteFailed bool `protobuf:"varint,19,opt,name=sd_write_failed,json=sdWriteFailed,proto3" json:"sd_write_failed,omitempty"` - RfmInitFailed bool `protobuf:"varint,20,opt,name=rfm_init_failed,json=rfmInitFailed,proto3" json:"rfm_init_failed,omitempty"` - RfmTransmitFailed bool `protobuf:"varint,21,opt,name=rfm_transmit_failed,json=rfmTransmitFailed,proto3" json:"rfm_transmit_failed,omitempty"` + MavWasActuated bool `protobuf:"varint,20,opt,name=mav_was_actuated,json=mavWasActuated,proto3" json:"mav_was_actuated,omitempty"` + SvWasActuated bool `protobuf:"varint,21,opt,name=sv_was_actuated,json=svWasActuated,proto3" json:"sv_was_actuated,omitempty"` + MainDeployWaitEnd bool `protobuf:"varint,22,opt,name=main_deploy_wait_end,json=mainDeployWaitEnd,proto3" json:"main_deploy_wait_end,omitempty"` + MainLogShutoff bool `protobuf:"varint,23,opt,name=main_log_shutoff,json=mainLogShutoff,proto3" json:"main_log_shutoff,omitempty"` + CycleOverflow bool `protobuf:"varint,24,opt,name=cycle_overflow,json=cycleOverflow,proto3" json:"cycle_overflow,omitempty"` + InvalidCommand bool `protobuf:"varint,25,opt,name=invalid_command,json=invalidCommand,proto3" json:"invalid_command,omitempty"` } func (x *Events) Reset() { *x = Events{} - mi := &file_command_proto_msgTypes[3] + mi := &file_command_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -303,7 +353,7 @@ func (x *Events) String() string { func (*Events) ProtoMessage() {} func (x *Events) ProtoReflect() protoreflect.Message { - mi := &file_command_proto_msgTypes[3] + mi := &file_command_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -316,14 +366,7 @@ func (x *Events) ProtoReflect() protoreflect.Message { // Deprecated: Use Events.ProtoReflect.Descriptor instead. func (*Events) Descriptor() ([]byte, []int) { - return file_command_proto_rawDescGZIP(), []int{3} -} - -func (x *Events) GetKeyArmed() bool { - if x != nil { - return x.KeyArmed - } - return false + return file_command_proto_rawDescGZIP(), []int{4} } func (x *Events) GetAltitudeArmed() bool { @@ -347,93 +390,100 @@ func (x *Events) GetAltimeterReadingFailed() bool { return false } -func (x *Events) GetAltimeterWasTurnedOff() bool { +func (x *Events) GetGpsInitFailed() bool { if x != nil { - return x.AltimeterWasTurnedOff + return x.GpsInitFailed } return false } -func (x *Events) GetGpsInitFailed() bool { +func (x *Events) GetGpsReadingFailed() bool { if x != nil { - return x.GpsInitFailed + return x.GpsReadingFailed } return false } -func (x *Events) GetGpsReadingFailed() bool { +func (x *Events) GetImuInitFailed() bool { if x != nil { - return x.GpsReadingFailed + return x.ImuInitFailed } return false } -func (x *Events) GetGpsWasTurnedOff() bool { +func (x *Events) GetImuReadingFailed() bool { if x != nil { - return x.GpsWasTurnedOff + return x.ImuReadingFailed } return false } -func (x *Events) GetImuInitFailed() bool { +func (x *Events) GetAccelerometerInitFailed() bool { if x != nil { - return x.ImuInitFailed + return x.AccelerometerInitFailed } return false } -func (x *Events) GetImuReadingFailed() bool { +func (x *Events) GetAccelerometerReadingFailed() bool { if x != nil { - return x.ImuReadingFailed + return x.AccelerometerReadingFailed } return false } -func (x *Events) GetImuWasTurnedOff() bool { +func (x *Events) GetThermometerInitFailed() bool { if x != nil { - return x.ImuWasTurnedOff + return x.ThermometerInitFailed } return false } -func (x *Events) GetAccelerometerInitFailed() bool { +func (x *Events) GetThermometerReadingFailed() bool { if x != nil { - return x.AccelerometerInitFailed + return x.ThermometerReadingFailed } return false } -func (x *Events) GetAccelerometerReadingFailed() bool { +func (x *Events) GetVoltageInitFailed() bool { if x != nil { - return x.AccelerometerReadingFailed + return x.VoltageInitFailed } return false } -func (x *Events) GetAccelerometerWasTurnedOff() bool { +func (x *Events) GetVoltageReadingFailed() bool { if x != nil { - return x.AccelerometerWasTurnedOff + return x.VoltageReadingFailed } return false } -func (x *Events) GetThermometerInitFailed() bool { +func (x *Events) GetAdcInitFailed() bool { if x != nil { - return x.ThermometerInitFailed + return x.AdcInitFailed } return false } -func (x *Events) GetThermometerReadingFailed() bool { +func (x *Events) GetAdcReadingFailed() bool { if x != nil { - return x.ThermometerReadingFailed + return x.AdcReadingFailed + } + return false +} + +func (x *Events) GetFramInitFailed() bool { + if x != nil { + return x.FramInitFailed } return false } -func (x *Events) GetThermometerWasTurnedOff() bool { +func (x *Events) GetFramWriteFailed() bool { if x != nil { - return x.ThermometerWasTurnedOff + return x.FramWriteFailed } return false } @@ -452,16 +502,44 @@ func (x *Events) GetSdWriteFailed() bool { return false } -func (x *Events) GetRfmInitFailed() bool { +func (x *Events) GetMavWasActuated() bool { if x != nil { - return x.RfmInitFailed + return x.MavWasActuated } return false } -func (x *Events) GetRfmTransmitFailed() bool { +func (x *Events) GetSvWasActuated() bool { if x != nil { - return x.RfmTransmitFailed + return x.SvWasActuated + } + return false +} + +func (x *Events) GetMainDeployWaitEnd() bool { + if x != nil { + return x.MainDeployWaitEnd + } + return false +} + +func (x *Events) GetMainLogShutoff() bool { + if x != nil { + return x.MainLogShutoff + } + return false +} + +func (x *Events) GetCycleOverflow() bool { + if x != nil { + return x.CycleOverflow + } + return false +} + +func (x *Events) GetInvalidCommand() bool { + if x != nil { + return x.InvalidCommand } return false } @@ -489,7 +567,7 @@ type RocketMetadata struct { func (x *RocketMetadata) Reset() { *x = RocketMetadata{} - mi := &file_command_proto_msgTypes[4] + mi := &file_command_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -501,7 +579,7 @@ func (x *RocketMetadata) String() string { func (*RocketMetadata) ProtoMessage() {} func (x *RocketMetadata) ProtoReflect() protoreflect.Message { - mi := &file_command_proto_msgTypes[4] + mi := &file_command_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -514,7 +592,7 @@ func (x *RocketMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use RocketMetadata.ProtoReflect.Descriptor instead. func (*RocketMetadata) Descriptor() ([]byte, []int) { - return file_command_proto_rawDescGZIP(), []int{4} + return file_command_proto_rawDescGZIP(), []int{5} } func (x *RocketMetadata) GetAltArmed() bool { @@ -628,7 +706,7 @@ type GPSTelemetry struct { func (x *GPSTelemetry) Reset() { *x = GPSTelemetry{} - mi := &file_command_proto_msgTypes[5] + mi := &file_command_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -640,7 +718,7 @@ func (x *GPSTelemetry) String() string { func (*GPSTelemetry) ProtoMessage() {} func (x *GPSTelemetry) ProtoReflect() protoreflect.Message { - mi := &file_command_proto_msgTypes[5] + mi := &file_command_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -653,7 +731,7 @@ func (x *GPSTelemetry) ProtoReflect() protoreflect.Message { // Deprecated: Use GPSTelemetry.ProtoReflect.Descriptor instead. func (*GPSTelemetry) Descriptor() ([]byte, []int) { - return file_command_proto_rawDescGZIP(), []int{5} + return file_command_proto_rawDescGZIP(), []int{6} } func (x *GPSTelemetry) GetLatitude() int32 { @@ -696,7 +774,7 @@ type AccelerometerTelemetry struct { func (x *AccelerometerTelemetry) Reset() { *x = AccelerometerTelemetry{} - mi := &file_command_proto_msgTypes[6] + mi := &file_command_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -708,7 +786,7 @@ func (x *AccelerometerTelemetry) String() string { func (*AccelerometerTelemetry) ProtoMessage() {} func (x *AccelerometerTelemetry) ProtoReflect() protoreflect.Message { - mi := &file_command_proto_msgTypes[6] + mi := &file_command_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -721,7 +799,7 @@ func (x *AccelerometerTelemetry) ProtoReflect() protoreflect.Message { // Deprecated: Use AccelerometerTelemetry.ProtoReflect.Descriptor instead. func (*AccelerometerTelemetry) Descriptor() ([]byte, []int) { - return file_command_proto_rawDescGZIP(), []int{6} + return file_command_proto_rawDescGZIP(), []int{7} } func (x *AccelerometerTelemetry) GetAccelX() float32 { @@ -766,7 +844,7 @@ type IMUTelemetry struct { func (x *IMUTelemetry) Reset() { *x = IMUTelemetry{} - mi := &file_command_proto_msgTypes[7] + mi := &file_command_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -778,7 +856,7 @@ func (x *IMUTelemetry) String() string { func (*IMUTelemetry) ProtoMessage() {} func (x *IMUTelemetry) ProtoReflect() protoreflect.Message { - mi := &file_command_proto_msgTypes[7] + mi := &file_command_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -791,7 +869,7 @@ func (x *IMUTelemetry) ProtoReflect() protoreflect.Message { // Deprecated: Use IMUTelemetry.ProtoReflect.Descriptor instead. func (*IMUTelemetry) Descriptor() ([]byte, []int) { - return file_command_proto_rawDescGZIP(), []int{7} + return file_command_proto_rawDescGZIP(), []int{8} } func (x *IMUTelemetry) GetGyroX() float32 { @@ -899,7 +977,7 @@ type RocketLoRaTelemetry struct { func (x *RocketLoRaTelemetry) Reset() { *x = RocketLoRaTelemetry{} - mi := &file_command_proto_msgTypes[8] + mi := &file_command_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -911,7 +989,7 @@ func (x *RocketLoRaTelemetry) String() string { func (*RocketLoRaTelemetry) ProtoMessage() {} func (x *RocketLoRaTelemetry) ProtoReflect() protoreflect.Message { - mi := &file_command_proto_msgTypes[8] + mi := &file_command_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -924,7 +1002,7 @@ func (x *RocketLoRaTelemetry) ProtoReflect() protoreflect.Message { // Deprecated: Use RocketLoRaTelemetry.ProtoReflect.Descriptor instead. func (*RocketLoRaTelemetry) Descriptor() ([]byte, []int) { - return file_command_proto_rawDescGZIP(), []int{8} + return file_command_proto_rawDescGZIP(), []int{9} } func (x *RocketLoRaTelemetry) GetMetadata() *RocketMetadata { @@ -1029,7 +1107,7 @@ type RocketUmbTelemetry struct { func (x *RocketUmbTelemetry) Reset() { *x = RocketUmbTelemetry{} - mi := &file_command_proto_msgTypes[9] + mi := &file_command_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1041,7 +1119,7 @@ func (x *RocketUmbTelemetry) String() string { func (*RocketUmbTelemetry) ProtoMessage() {} func (x *RocketUmbTelemetry) ProtoReflect() protoreflect.Message { - mi := &file_command_proto_msgTypes[9] + mi := &file_command_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1054,7 +1132,7 @@ func (x *RocketUmbTelemetry) ProtoReflect() protoreflect.Message { // Deprecated: Use RocketUmbTelemetry.ProtoReflect.Descriptor instead. func (*RocketUmbTelemetry) Descriptor() ([]byte, []int) { - return file_command_proto_rawDescGZIP(), []int{9} + return file_command_proto_rawDescGZIP(), []int{10} } func (x *RocketUmbTelemetry) GetMetadata() *RocketMetadata { @@ -1131,7 +1209,7 @@ type RocketTelemetry struct { func (x *RocketTelemetry) Reset() { *x = RocketTelemetry{} - mi := &file_command_proto_msgTypes[10] + mi := &file_command_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1143,7 +1221,7 @@ func (x *RocketTelemetry) String() string { func (*RocketTelemetry) ProtoMessage() {} func (x *RocketTelemetry) ProtoReflect() protoreflect.Message { - mi := &file_command_proto_msgTypes[10] + mi := &file_command_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1156,7 +1234,7 @@ func (x *RocketTelemetry) ProtoReflect() protoreflect.Message { // Deprecated: Use RocketTelemetry.ProtoReflect.Descriptor instead. func (*RocketTelemetry) Descriptor() ([]byte, []int) { - return file_command_proto_rawDescGZIP(), []int{10} + return file_command_proto_rawDescGZIP(), []int{11} } func (x *RocketTelemetry) GetLoraTelem() *RocketLoRaTelemetry { @@ -1190,7 +1268,7 @@ type FillStationTelemetry struct { func (x *FillStationTelemetry) Reset() { *x = FillStationTelemetry{} - mi := &file_command_proto_msgTypes[11] + mi := &file_command_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1202,7 +1280,7 @@ func (x *FillStationTelemetry) String() string { func (*FillStationTelemetry) ProtoMessage() {} func (x *FillStationTelemetry) ProtoReflect() protoreflect.Message { - mi := &file_command_proto_msgTypes[11] + mi := &file_command_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1215,7 +1293,7 @@ func (x *FillStationTelemetry) ProtoReflect() protoreflect.Message { // Deprecated: Use FillStationTelemetry.ProtoReflect.Descriptor instead. func (*FillStationTelemetry) Descriptor() ([]byte, []int) { - return file_command_proto_rawDescGZIP(), []int{11} + return file_command_proto_rawDescGZIP(), []int{12} } func (x *FillStationTelemetry) GetTimestamp() uint32 { @@ -1295,233 +1373,249 @@ var file_command_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x5f, 0x73, 0x76, 0x32, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x61, 0x76, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x66, 0x69, 0x72, 0x65, 0x22, 0x0e, 0x0a, 0x0c, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x70, - 0x6c, 0x79, 0x22, 0x12, 0x0a, 0x10, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x91, 0x08, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x41, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x25, - 0x0a, 0x0e, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x5f, 0x61, 0x72, 0x6d, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, - 0x41, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, - 0x6e, 0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x38, 0x0a, 0x18, 0x61, 0x6c, 0x74, - 0x69, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x66, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x61, 0x6c, 0x74, - 0x69, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x69, - 0x6c, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x18, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x5f, 0x77, 0x61, 0x73, 0x5f, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x57, 0x61, 0x73, 0x54, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x4f, 0x66, 0x66, 0x12, 0x26, 0x0a, 0x0f, - 0x67, 0x70, 0x73, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x67, 0x70, 0x73, 0x49, 0x6e, 0x69, 0x74, 0x46, 0x61, - 0x69, 0x6c, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x67, 0x70, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, - 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x10, 0x67, 0x70, 0x73, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x69, 0x6c, - 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x67, 0x70, 0x73, 0x5f, 0x77, 0x61, 0x73, 0x5f, 0x74, 0x75, - 0x72, 0x6e, 0x65, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, - 0x67, 0x70, 0x73, 0x57, 0x61, 0x73, 0x54, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x4f, 0x66, 0x66, 0x12, - 0x26, 0x0a, 0x0f, 0x69, 0x6d, 0x75, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, - 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6d, 0x75, 0x49, 0x6e, 0x69, - 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x6d, 0x75, 0x5f, 0x72, - 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x10, 0x69, 0x6d, 0x75, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x46, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x12, 0x69, 0x6d, 0x75, 0x5f, 0x77, 0x61, 0x73, - 0x5f, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0f, 0x69, 0x6d, 0x75, 0x57, 0x61, 0x73, 0x54, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x4f, - 0x66, 0x66, 0x12, 0x3a, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x6f, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x6f, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x40, - 0x0a, 0x1c, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, - 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x6f, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, - 0x12, 0x3f, 0x0a, 0x1c, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x65, - 0x72, 0x5f, 0x77, 0x61, 0x73, 0x5f, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x5f, 0x6f, 0x66, 0x66, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x6f, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x57, 0x61, 0x73, 0x54, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x4f, 0x66, - 0x66, 0x12, 0x36, 0x0a, 0x17, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, + 0x6c, 0x79, 0x22, 0x1d, 0x0a, 0x1b, 0x46, 0x69, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0x54, 0x0a, 0x16, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6d, + 0x65, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x18, 0x69, + 0x73, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x69, + 0x73, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x9a, 0x09, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x5f, 0x61, + 0x72, 0x6d, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x6c, 0x74, 0x69, + 0x74, 0x75, 0x64, 0x65, 0x41, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x61, 0x6c, 0x74, + 0x69, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x49, 0x6e, 0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x38, 0x0a, + 0x18, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x69, + 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x16, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, + 0x67, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x67, 0x70, 0x73, 0x5f, 0x69, + 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0d, 0x67, 0x70, 0x73, 0x49, 0x6e, 0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, + 0x2c, 0x0a, 0x12, 0x67, 0x70, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x66, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x67, 0x70, 0x73, + 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x26, 0x0a, + 0x0f, 0x69, 0x6d, 0x75, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x6d, 0x75, 0x49, 0x6e, 0x69, 0x74, 0x46, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x6d, 0x75, 0x5f, 0x72, 0x65, 0x61, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x10, 0x69, 0x6d, 0x75, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x6f, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x6f, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, + 0x40, 0x0a, 0x1c, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x5f, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x6f, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x69, 0x6c, 0x65, + 0x64, 0x12, 0x36, 0x0a, 0x17, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, + 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x1a, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, - 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x74, + 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, - 0x67, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x3b, 0x0a, 0x1a, 0x74, 0x68, 0x65, 0x72, 0x6d, - 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x77, 0x61, 0x73, 0x5f, 0x74, 0x75, 0x72, 0x6e, 0x65, - 0x64, 0x5f, 0x6f, 0x66, 0x66, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x74, 0x68, 0x65, - 0x72, 0x6d, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x57, 0x61, 0x73, 0x54, 0x75, 0x72, 0x6e, 0x65, - 0x64, 0x4f, 0x66, 0x66, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x64, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, - 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x64, - 0x49, 0x6e, 0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x64, - 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x46, 0x61, 0x69, 0x6c, - 0x65, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x66, 0x6d, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x72, 0x66, 0x6d, - 0x49, 0x6e, 0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x66, - 0x6d, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x72, 0x66, 0x6d, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x6d, 0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x22, 0xd0, 0x03, 0x0a, 0x0e, 0x52, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, - 0x09, 0x61, 0x6c, 0x74, 0x5f, 0x61, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x61, 0x6c, 0x74, 0x41, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x6c, - 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, - 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x70, 0x73, 0x5f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x67, 0x70, 0x73, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6d, 0x75, 0x5f, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x6d, 0x75, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x63, 0x63, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x74, 0x68, 0x65, 0x72, 0x6d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, - 0x23, 0x0a, 0x0d, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x64, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x64, 0x63, 0x56, 0x61, 0x6c, 0x69, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x72, 0x61, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x72, 0x61, 0x6d, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x73, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x73, 0x64, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x67, - 0x70, 0x73, 0x5f, 0x6d, 0x73, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0b, 0x67, 0x70, 0x73, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, - 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x76, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x6d, 0x61, 0x76, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, - 0x73, 0x76, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x73, 0x76, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x66, 0x6c, 0x69, 0x67, 0x68, - 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4d, 0x6f, 0x64, - 0x65, 0x52, 0x0a, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x8a, 0x01, - 0x0a, 0x0c, 0x47, 0x50, 0x53, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x1a, - 0x0a, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x08, 0x6c, 0x61, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, - 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6c, - 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x5f, - 0x73, 0x61, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x53, 0x61, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x73, 0x12, - 0x19, 0x0a, 0x08, 0x75, 0x74, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x07, 0x75, 0x74, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x63, 0x0a, 0x16, 0x41, 0x63, - 0x63, 0x65, 0x6c, 0x65, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x6d, - 0x65, 0x74, 0x72, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x5f, 0x78, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x58, 0x12, 0x17, 0x0a, - 0x07, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x5f, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, - 0x61, 0x63, 0x63, 0x65, 0x6c, 0x59, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x5f, - 0x7a, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x5a, 0x22, - 0xa2, 0x02, 0x0a, 0x0c, 0x49, 0x4d, 0x55, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, - 0x12, 0x15, 0x0a, 0x06, 0x67, 0x79, 0x72, 0x6f, 0x5f, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, - 0x52, 0x05, 0x67, 0x79, 0x72, 0x6f, 0x58, 0x12, 0x15, 0x0a, 0x06, 0x67, 0x79, 0x72, 0x6f, 0x5f, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x67, 0x79, 0x72, 0x6f, 0x59, 0x12, 0x15, - 0x0a, 0x06, 0x67, 0x79, 0x72, 0x6f, 0x5f, 0x7a, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, - 0x67, 0x79, 0x72, 0x6f, 0x5a, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x5f, 0x78, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x58, 0x12, 0x17, - 0x0a, 0x07, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x5f, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x06, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x59, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x65, 0x6c, - 0x5f, 0x7a, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x5a, - 0x12, 0x13, 0x0a, 0x05, 0x6f, 0x72, 0x69, 0x5f, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x04, 0x6f, 0x72, 0x69, 0x58, 0x12, 0x13, 0x0a, 0x05, 0x6f, 0x72, 0x69, 0x5f, 0x79, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, 0x6f, 0x72, 0x69, 0x59, 0x12, 0x13, 0x0a, 0x05, 0x6f, 0x72, - 0x69, 0x5f, 0x7a, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, 0x6f, 0x72, 0x69, 0x5a, 0x12, - 0x15, 0x0a, 0x06, 0x67, 0x72, 0x61, 0x76, 0x5f, 0x78, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x05, 0x67, 0x72, 0x61, 0x76, 0x58, 0x12, 0x15, 0x0a, 0x06, 0x67, 0x72, 0x61, 0x76, 0x5f, 0x79, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x67, 0x72, 0x61, 0x76, 0x59, 0x12, 0x15, 0x0a, - 0x06, 0x67, 0x72, 0x61, 0x76, 0x5f, 0x7a, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x67, - 0x72, 0x61, 0x76, 0x5a, 0x22, 0xd0, 0x03, 0x0a, 0x13, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4c, - 0x6f, 0x52, 0x61, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x33, 0x0a, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x62, 0x6f, - 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x73, 0x53, 0x69, 0x6e, 0x63, - 0x65, 0x42, 0x6f, 0x6f, 0x74, 0x12, 0x27, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, - 0x52, 0x08, 0x61, 0x6c, 0x74, 0x69, 0x74, 0x75, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x67, 0x70, - 0x73, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x47, 0x50, 0x53, 0x54, 0x65, 0x6c, 0x65, 0x6d, - 0x65, 0x74, 0x72, 0x79, 0x52, 0x08, 0x67, 0x70, 0x73, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x12, 0x32, - 0x0a, 0x09, 0x69, 0x6d, 0x75, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x49, 0x4d, 0x55, 0x54, - 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x52, 0x08, 0x69, 0x6d, 0x75, 0x54, 0x65, 0x6c, - 0x65, 0x6d, 0x12, 0x40, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x5f, 0x74, 0x65, 0x6c, 0x65, - 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x54, - 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x54, - 0x65, 0x6c, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x6d, 0x70, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x04, 0x74, 0x65, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x74, - 0x61, 0x67, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x74, 0x61, - 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x74, 0x33, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x03, 0x70, 0x74, 0x33, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x74, 0x34, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x03, 0x70, 0x74, 0x34, 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x6c, 0x69, 0x6d, 0x73, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x62, 0x6c, 0x69, - 0x6d, 0x73, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0xb7, 0x02, 0x0a, 0x12, 0x52, 0x6f, 0x63, 0x6b, - 0x65, 0x74, 0x55, 0x6d, 0x62, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x33, - 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x52, 0x6f, 0x63, 0x6b, 0x65, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, - 0x62, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x73, 0x53, 0x69, - 0x6e, 0x63, 0x65, 0x42, 0x6f, 0x6f, 0x74, 0x12, 0x27, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x74, - 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x74, 0x61, - 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x74, 0x33, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x03, 0x70, 0x74, 0x33, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x74, 0x34, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x03, 0x70, 0x74, 0x34, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x74, 0x64, 0x5f, 0x74, 0x65, - 0x6d, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x72, 0x74, 0x64, 0x54, 0x65, 0x6d, - 0x70, 0x22, 0xaf, 0x01, 0x0a, 0x0f, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x54, 0x65, 0x6c, 0x65, - 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x40, 0x0a, 0x0a, 0x6c, 0x6f, 0x72, 0x61, 0x5f, 0x74, 0x65, - 0x6c, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x2e, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x6f, 0x52, 0x61, 0x54, 0x65, - 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x72, 0x61, 0x54, - 0x65, 0x6c, 0x65, 0x6d, 0x88, 0x01, 0x01, 0x12, 0x3d, 0x0a, 0x09, 0x75, 0x6d, 0x62, 0x5f, 0x74, - 0x65, 0x6c, 0x65, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x55, 0x6d, 0x62, 0x54, 0x65, - 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x48, 0x01, 0x52, 0x08, 0x75, 0x6d, 0x62, 0x54, 0x65, - 0x6c, 0x65, 0x6d, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6c, 0x6f, 0x72, 0x61, 0x5f, - 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x75, 0x6d, 0x62, 0x5f, 0x74, 0x65, - 0x6c, 0x65, 0x6d, 0x22, 0xbf, 0x01, 0x0a, 0x14, 0x46, 0x69, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x74, - 0x31, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x70, 0x74, 0x31, 0x12, 0x10, 0x0a, 0x03, - 0x70, 0x74, 0x32, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x70, 0x74, 0x32, 0x12, 0x10, - 0x0a, 0x03, 0x6c, 0x63, 0x31, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x6c, 0x63, 0x31, - 0x12, 0x19, 0x0a, 0x08, 0x73, 0x76, 0x31, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x07, 0x73, 0x76, 0x31, 0x43, 0x6f, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, - 0x67, 0x6e, 0x31, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, - 0x69, 0x67, 0x6e, 0x31, 0x43, 0x6f, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x67, 0x6e, 0x32, - 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x69, 0x67, 0x6e, - 0x32, 0x43, 0x6f, 0x6e, 0x74, 0x2a, 0x65, 0x0a, 0x0a, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4d, - 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x41, 0x52, 0x54, 0x55, 0x50, 0x10, 0x00, - 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x42, 0x59, 0x10, 0x01, 0x12, 0x0a, 0x0a, - 0x06, 0x41, 0x53, 0x43, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x52, 0x4f, - 0x47, 0x55, 0x45, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x45, 0x44, 0x10, 0x03, 0x12, 0x11, - 0x0a, 0x0d, 0x4d, 0x41, 0x49, 0x4e, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x45, 0x44, 0x10, - 0x04, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x05, 0x32, 0x67, 0x0a, 0x14, - 0x46, 0x69, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6c, 0x65, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x0f, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x65, - 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x19, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, - 0x64, 0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x46, 0x69, 0x6c, - 0x6c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, - 0x79, 0x22, 0x00, 0x30, 0x01, 0x32, 0x5d, 0x0a, 0x0f, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x54, - 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x4a, 0x0a, 0x0f, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x19, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x2e, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, - 0x22, 0x00, 0x30, 0x01, 0x32, 0x45, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x65, - 0x72, 0x12, 0x38, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x12, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, - 0x6e, 0x64, 0x1a, 0x15, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x19, 0x5a, 0x17, 0x2e, - 0x2e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x67, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x76, 0x6f, 0x6c, 0x74, 0x61, + 0x67, 0x65, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x69, + 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x76, 0x6f, 0x6c, 0x74, 0x61, + 0x67, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, + 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x26, 0x0a, + 0x0f, 0x61, 0x64, 0x63, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x64, 0x63, 0x49, 0x6e, 0x69, 0x74, 0x46, + 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x64, 0x63, 0x5f, 0x72, 0x65, 0x61, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x10, 0x61, 0x64, 0x63, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x72, 0x61, 0x6d, 0x5f, 0x69, 0x6e, 0x69, 0x74, + 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x66, + 0x72, 0x61, 0x6d, 0x49, 0x6e, 0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x2a, 0x0a, + 0x11, 0x66, 0x72, 0x61, 0x6d, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x66, 0x72, 0x61, 0x6d, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x64, 0x5f, + 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0c, 0x73, 0x64, 0x49, 0x6e, 0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, + 0x26, 0x0a, 0x0f, 0x73, 0x64, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x66, 0x61, 0x69, 0x6c, + 0x65, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x64, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x61, 0x76, 0x5f, 0x77, + 0x61, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x75, 0x61, 0x74, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0e, 0x6d, 0x61, 0x76, 0x57, 0x61, 0x73, 0x41, 0x63, 0x74, 0x75, 0x61, 0x74, 0x65, + 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x76, 0x5f, 0x77, 0x61, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x75, + 0x61, 0x74, 0x65, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x76, 0x57, 0x61, + 0x73, 0x41, 0x63, 0x74, 0x75, 0x61, 0x74, 0x65, 0x64, 0x12, 0x2f, 0x0a, 0x14, 0x6d, 0x61, 0x69, + 0x6e, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x65, 0x6e, + 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x6d, 0x61, 0x69, 0x6e, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x57, 0x61, 0x69, 0x74, 0x45, 0x6e, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x61, + 0x69, 0x6e, 0x5f, 0x6c, 0x6f, 0x67, 0x5f, 0x73, 0x68, 0x75, 0x74, 0x6f, 0x66, 0x66, 0x18, 0x17, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x6d, 0x61, 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x53, 0x68, 0x75, + 0x74, 0x6f, 0x66, 0x66, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x79, 0x63, 0x6c, 0x65, 0x5f, 0x6f, 0x76, + 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x79, + 0x63, 0x6c, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x27, 0x0a, 0x0f, 0x69, + 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x19, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x43, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x22, 0xd0, 0x03, 0x0a, 0x0e, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x6c, 0x74, 0x5f, 0x61, + 0x72, 0x6d, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x6c, 0x74, 0x41, + 0x72, 0x6d, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x70, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x67, 0x70, 0x73, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1b, + 0x0a, 0x09, 0x69, 0x6d, 0x75, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x69, 0x6d, 0x75, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x61, + 0x63, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x61, 0x63, 0x63, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x68, 0x65, 0x72, + 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x74, + 0x68, 0x65, 0x72, 0x6d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x6f, 0x6c, + 0x74, 0x61, 0x67, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1b, + 0x0a, 0x09, 0x61, 0x64, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x61, 0x64, 0x63, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x66, + 0x72, 0x61, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x66, 0x72, 0x61, 0x6d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x64, + 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x64, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x67, 0x70, 0x73, 0x5f, 0x6d, 0x73, 0x67, + 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x67, 0x70, + 0x73, 0x4d, 0x73, 0x67, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x76, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x61, + 0x76, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x76, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x76, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x66, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, + 0x2e, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x0a, 0x66, 0x6c, 0x69, + 0x67, 0x68, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0c, 0x47, 0x50, 0x53, 0x54, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x74, 0x69, + 0x74, 0x75, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6c, 0x61, 0x74, 0x69, + 0x74, 0x75, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, 0x64, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x74, 0x75, + 0x64, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x61, 0x74, 0x65, 0x6c, 0x6c, + 0x69, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6e, 0x75, 0x6d, 0x53, + 0x61, 0x74, 0x65, 0x6c, 0x6c, 0x69, 0x74, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x74, 0x63, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x75, 0x74, 0x63, + 0x54, 0x69, 0x6d, 0x65, 0x22, 0x63, 0x0a, 0x16, 0x41, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x6f, + 0x6d, 0x65, 0x74, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x17, + 0x0a, 0x07, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x5f, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x06, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x58, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x65, 0x6c, + 0x5f, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x59, + 0x12, 0x17, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x5f, 0x7a, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x5a, 0x22, 0xa2, 0x02, 0x0a, 0x0c, 0x49, 0x4d, + 0x55, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x15, 0x0a, 0x06, 0x67, 0x79, + 0x72, 0x6f, 0x5f, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x67, 0x79, 0x72, 0x6f, + 0x58, 0x12, 0x15, 0x0a, 0x06, 0x67, 0x79, 0x72, 0x6f, 0x5f, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x05, 0x67, 0x79, 0x72, 0x6f, 0x59, 0x12, 0x15, 0x0a, 0x06, 0x67, 0x79, 0x72, 0x6f, + 0x5f, 0x7a, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x67, 0x79, 0x72, 0x6f, 0x5a, 0x12, + 0x17, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x5f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x58, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x65, + 0x6c, 0x5f, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x6c, + 0x59, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x5f, 0x7a, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x06, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x5a, 0x12, 0x13, 0x0a, 0x05, 0x6f, 0x72, + 0x69, 0x5f, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, 0x6f, 0x72, 0x69, 0x58, 0x12, + 0x13, 0x0a, 0x05, 0x6f, 0x72, 0x69, 0x5f, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, + 0x6f, 0x72, 0x69, 0x59, 0x12, 0x13, 0x0a, 0x05, 0x6f, 0x72, 0x69, 0x5f, 0x7a, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x04, 0x6f, 0x72, 0x69, 0x5a, 0x12, 0x15, 0x0a, 0x06, 0x67, 0x72, 0x61, + 0x76, 0x5f, 0x78, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x67, 0x72, 0x61, 0x76, 0x58, + 0x12, 0x15, 0x0a, 0x06, 0x67, 0x72, 0x61, 0x76, 0x5f, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x05, 0x67, 0x72, 0x61, 0x76, 0x59, 0x12, 0x15, 0x0a, 0x06, 0x67, 0x72, 0x61, 0x76, 0x5f, + 0x7a, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x67, 0x72, 0x61, 0x76, 0x5a, 0x22, 0xd0, + 0x03, 0x0a, 0x13, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x6f, 0x52, 0x61, 0x54, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x2e, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x0d, 0x6d, + 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x42, 0x6f, 0x6f, 0x74, 0x12, + 0x27, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x6c, 0x74, 0x69, + 0x74, 0x75, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x61, 0x6c, 0x74, 0x69, + 0x74, 0x75, 0x64, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x67, 0x70, 0x73, 0x5f, 0x74, 0x65, 0x6c, 0x65, + 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x2e, 0x47, 0x50, 0x53, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x52, 0x08, + 0x67, 0x70, 0x73, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x12, 0x32, 0x0a, 0x09, 0x69, 0x6d, 0x75, 0x5f, + 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x49, 0x4d, 0x55, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x52, 0x08, 0x69, 0x6d, 0x75, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x12, 0x40, 0x0a, 0x0b, + 0x61, 0x63, 0x63, 0x65, 0x6c, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x41, 0x63, 0x63, 0x65, + 0x6c, 0x65, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, + 0x72, 0x79, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x6c, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x65, 0x6d, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, 0x74, 0x65, + 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x70, 0x74, 0x33, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x70, 0x74, 0x33, 0x12, 0x10, + 0x0a, 0x03, 0x70, 0x74, 0x34, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x70, 0x74, 0x34, + 0x12, 0x1f, 0x0a, 0x0b, 0x62, 0x6c, 0x69, 0x6d, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x62, 0x6c, 0x69, 0x6d, 0x73, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x22, 0xb7, 0x02, 0x0a, 0x12, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x55, 0x6d, 0x62, 0x54, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, + 0x0d, 0x6d, 0x73, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x62, 0x6f, 0x6f, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x73, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x42, 0x6f, 0x6f, + 0x74, 0x12, 0x27, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x61, + 0x64, 0x69, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0a, 0x72, 0x61, 0x64, 0x69, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x07, 0x76, 0x6f, 0x6c, 0x74, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x70, 0x74, 0x33, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x70, 0x74, 0x33, 0x12, 0x10, + 0x0a, 0x03, 0x70, 0x74, 0x34, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x70, 0x74, 0x34, + 0x12, 0x19, 0x0a, 0x08, 0x72, 0x74, 0x64, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x07, 0x72, 0x74, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x22, 0xaf, 0x01, 0x0a, 0x0f, + 0x52, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, + 0x40, 0x0a, 0x0a, 0x6c, 0x6f, 0x72, 0x61, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x52, 0x6f, + 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x6f, 0x52, 0x61, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, + 0x79, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x72, 0x61, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x88, 0x01, + 0x01, 0x12, 0x3d, 0x0a, 0x09, 0x75, 0x6d, 0x62, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x52, + 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x55, 0x6d, 0x62, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, + 0x79, 0x48, 0x01, 0x52, 0x08, 0x75, 0x6d, 0x62, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x88, 0x01, 0x01, + 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x6c, 0x6f, 0x72, 0x61, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x42, + 0x0c, 0x0a, 0x0a, 0x5f, 0x75, 0x6d, 0x62, 0x5f, 0x74, 0x65, 0x6c, 0x65, 0x6d, 0x22, 0xbf, 0x01, + 0x0a, 0x14, 0x46, 0x69, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x74, 0x31, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x03, 0x70, 0x74, 0x31, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x74, 0x32, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x03, 0x70, 0x74, 0x32, 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x63, 0x31, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x6c, 0x63, 0x31, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x76, + 0x31, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x73, 0x76, + 0x31, 0x43, 0x6f, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x67, 0x6e, 0x31, 0x5f, 0x63, 0x6f, + 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x69, 0x67, 0x6e, 0x31, 0x43, 0x6f, + 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x67, 0x6e, 0x32, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x69, 0x67, 0x6e, 0x32, 0x43, 0x6f, 0x6e, 0x74, 0x2a, + 0x65, 0x0a, 0x0a, 0x46, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, + 0x07, 0x53, 0x54, 0x41, 0x52, 0x54, 0x55, 0x50, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, + 0x41, 0x4e, 0x44, 0x42, 0x59, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x53, 0x43, 0x45, 0x4e, + 0x54, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x52, 0x4f, 0x47, 0x55, 0x45, 0x5f, 0x44, 0x45, + 0x50, 0x4c, 0x4f, 0x59, 0x45, 0x44, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x41, 0x49, 0x4e, + 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x45, 0x44, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x46, + 0x41, 0x55, 0x4c, 0x54, 0x10, 0x05, 0x32, 0x72, 0x0a, 0x14, 0x46, 0x69, 0x6c, 0x6c, 0x53, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x5a, + 0x0a, 0x0f, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, + 0x79, 0x12, 0x24, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x46, 0x69, 0x6c, 0x6c, + 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, + 0x64, 0x2e, 0x46, 0x69, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x22, 0x00, 0x30, 0x01, 0x32, 0x63, 0x0a, 0x0f, 0x52, 0x6f, + 0x63, 0x6b, 0x65, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x12, 0x50, 0x0a, + 0x0f, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, + 0x12, 0x1f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x52, 0x6f, 0x63, 0x6b, 0x65, + 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x18, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x52, 0x6f, 0x63, 0x6b, + 0x65, 0x74, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x22, 0x00, 0x30, 0x01, 0x32, + 0x45, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x0b, + 0x53, 0x65, 0x6e, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x10, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x1a, 0x15, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x19, 0x5a, 0x17, 0x2e, 0x2e, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1537,38 +1631,39 @@ func file_command_proto_rawDescGZIP() []byte { } var file_command_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_command_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_command_proto_msgTypes = make([]protoimpl.MessageInfo, 13) var file_command_proto_goTypes = []any{ - (FlightMode)(0), // 0: command.FlightMode - (*Command)(nil), // 1: command.Command - (*CommandReply)(nil), // 2: command.CommandReply - (*TelemetryRequest)(nil), // 3: command.TelemetryRequest - (*Events)(nil), // 4: command.Events - (*RocketMetadata)(nil), // 5: command.RocketMetadata - (*GPSTelemetry)(nil), // 6: command.GPSTelemetry - (*AccelerometerTelemetry)(nil), // 7: command.AccelerometerTelemetry - (*IMUTelemetry)(nil), // 8: command.IMUTelemetry - (*RocketLoRaTelemetry)(nil), // 9: command.RocketLoRaTelemetry - (*RocketUmbTelemetry)(nil), // 10: command.RocketUmbTelemetry - (*RocketTelemetry)(nil), // 11: command.RocketTelemetry - (*FillStationTelemetry)(nil), // 12: command.FillStationTelemetry + (FlightMode)(0), // 0: command.FlightMode + (*Command)(nil), // 1: command.Command + (*CommandReply)(nil), // 2: command.CommandReply + (*FillStationTelemetryRequest)(nil), // 3: command.FillStationTelemetryRequest + (*RocketTelemetryRequest)(nil), // 4: command.RocketTelemetryRequest + (*Events)(nil), // 5: command.Events + (*RocketMetadata)(nil), // 6: command.RocketMetadata + (*GPSTelemetry)(nil), // 7: command.GPSTelemetry + (*AccelerometerTelemetry)(nil), // 8: command.AccelerometerTelemetry + (*IMUTelemetry)(nil), // 9: command.IMUTelemetry + (*RocketLoRaTelemetry)(nil), // 10: command.RocketLoRaTelemetry + (*RocketUmbTelemetry)(nil), // 11: command.RocketUmbTelemetry + (*RocketTelemetry)(nil), // 12: command.RocketTelemetry + (*FillStationTelemetry)(nil), // 13: command.FillStationTelemetry } var file_command_proto_depIdxs = []int32{ 0, // 0: command.RocketMetadata.flight_mode:type_name -> command.FlightMode - 5, // 1: command.RocketLoRaTelemetry.metadata:type_name -> command.RocketMetadata - 4, // 2: command.RocketLoRaTelemetry.events:type_name -> command.Events - 6, // 3: command.RocketLoRaTelemetry.gps_telem:type_name -> command.GPSTelemetry - 8, // 4: command.RocketLoRaTelemetry.imu_telem:type_name -> command.IMUTelemetry - 7, // 5: command.RocketLoRaTelemetry.accel_telem:type_name -> command.AccelerometerTelemetry - 5, // 6: command.RocketUmbTelemetry.metadata:type_name -> command.RocketMetadata - 4, // 7: command.RocketUmbTelemetry.events:type_name -> command.Events - 9, // 8: command.RocketTelemetry.lora_telem:type_name -> command.RocketLoRaTelemetry - 10, // 9: command.RocketTelemetry.umb_telem:type_name -> command.RocketUmbTelemetry - 3, // 10: command.FillStationTelemeter.StreamTelemetry:input_type -> command.TelemetryRequest - 3, // 11: command.RocketTelemeter.StreamTelemetry:input_type -> command.TelemetryRequest + 6, // 1: command.RocketLoRaTelemetry.metadata:type_name -> command.RocketMetadata + 5, // 2: command.RocketLoRaTelemetry.events:type_name -> command.Events + 7, // 3: command.RocketLoRaTelemetry.gps_telem:type_name -> command.GPSTelemetry + 9, // 4: command.RocketLoRaTelemetry.imu_telem:type_name -> command.IMUTelemetry + 8, // 5: command.RocketLoRaTelemetry.accel_telem:type_name -> command.AccelerometerTelemetry + 6, // 6: command.RocketUmbTelemetry.metadata:type_name -> command.RocketMetadata + 5, // 7: command.RocketUmbTelemetry.events:type_name -> command.Events + 10, // 8: command.RocketTelemetry.lora_telem:type_name -> command.RocketLoRaTelemetry + 11, // 9: command.RocketTelemetry.umb_telem:type_name -> command.RocketUmbTelemetry + 3, // 10: command.FillStationTelemeter.StreamTelemetry:input_type -> command.FillStationTelemetryRequest + 4, // 11: command.RocketTelemeter.StreamTelemetry:input_type -> command.RocketTelemetryRequest 1, // 12: command.Commander.SendCommand:input_type -> command.Command - 12, // 13: command.FillStationTelemeter.StreamTelemetry:output_type -> command.FillStationTelemetry - 11, // 14: command.RocketTelemeter.StreamTelemetry:output_type -> command.RocketTelemetry + 13, // 13: command.FillStationTelemeter.StreamTelemetry:output_type -> command.FillStationTelemetry + 12, // 14: command.RocketTelemeter.StreamTelemetry:output_type -> command.RocketTelemetry 2, // 15: command.Commander.SendCommand:output_type -> command.CommandReply 13, // [13:16] is the sub-list for method output_type 10, // [10:13] is the sub-list for method input_type @@ -1583,14 +1678,14 @@ func file_command_proto_init() { return } file_command_proto_msgTypes[0].OneofWrappers = []any{} - file_command_proto_msgTypes[10].OneofWrappers = []any{} + file_command_proto_msgTypes[11].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_command_proto_rawDesc, NumEnums: 1, - NumMessages: 12, + NumMessages: 13, NumExtensions: 0, NumServices: 3, }, diff --git a/go-proxies/proto-out/command_grpc.pb.go b/go-proxies/proto-out/command_grpc.pb.go index bb7e3af..ce64c0c 100644 --- a/go-proxies/proto-out/command_grpc.pb.go +++ b/go-proxies/proto-out/command_grpc.pb.go @@ -6,7 +6,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.5.1 -// - protoc v3.12.4 +// - protoc v3.20.3 // source: command.proto package command_proto @@ -34,7 +34,7 @@ const ( // The telemetry service definition type FillStationTelemeterClient interface { // Sends telemetry - StreamTelemetry(ctx context.Context, in *TelemetryRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[FillStationTelemetry], error) + StreamTelemetry(ctx context.Context, in *FillStationTelemetryRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[FillStationTelemetry], error) } type fillStationTelemeterClient struct { @@ -45,13 +45,13 @@ func NewFillStationTelemeterClient(cc grpc.ClientConnInterface) FillStationTelem return &fillStationTelemeterClient{cc} } -func (c *fillStationTelemeterClient) StreamTelemetry(ctx context.Context, in *TelemetryRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[FillStationTelemetry], error) { +func (c *fillStationTelemeterClient) StreamTelemetry(ctx context.Context, in *FillStationTelemetryRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[FillStationTelemetry], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &FillStationTelemeter_ServiceDesc.Streams[0], FillStationTelemeter_StreamTelemetry_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &grpc.GenericClientStream[TelemetryRequest, FillStationTelemetry]{ClientStream: stream} + x := &grpc.GenericClientStream[FillStationTelemetryRequest, FillStationTelemetry]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -71,7 +71,7 @@ type FillStationTelemeter_StreamTelemetryClient = grpc.ServerStreamingClient[Fil // The telemetry service definition type FillStationTelemeterServer interface { // Sends telemetry - StreamTelemetry(*TelemetryRequest, grpc.ServerStreamingServer[FillStationTelemetry]) error + StreamTelemetry(*FillStationTelemetryRequest, grpc.ServerStreamingServer[FillStationTelemetry]) error mustEmbedUnimplementedFillStationTelemeterServer() } @@ -82,7 +82,7 @@ type FillStationTelemeterServer interface { // pointer dereference when methods are called. type UnimplementedFillStationTelemeterServer struct{} -func (UnimplementedFillStationTelemeterServer) StreamTelemetry(*TelemetryRequest, grpc.ServerStreamingServer[FillStationTelemetry]) error { +func (UnimplementedFillStationTelemeterServer) StreamTelemetry(*FillStationTelemetryRequest, grpc.ServerStreamingServer[FillStationTelemetry]) error { return status.Errorf(codes.Unimplemented, "method StreamTelemetry not implemented") } func (UnimplementedFillStationTelemeterServer) mustEmbedUnimplementedFillStationTelemeterServer() {} @@ -107,11 +107,11 @@ func RegisterFillStationTelemeterServer(s grpc.ServiceRegistrar, srv FillStation } func _FillStationTelemeter_StreamTelemetry_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(TelemetryRequest) + m := new(FillStationTelemetryRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(FillStationTelemeterServer).StreamTelemetry(m, &grpc.GenericServerStream[TelemetryRequest, FillStationTelemetry]{ServerStream: stream}) + return srv.(FillStationTelemeterServer).StreamTelemetry(m, &grpc.GenericServerStream[FillStationTelemetryRequest, FillStationTelemetry]{ServerStream: stream}) } // This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. @@ -145,7 +145,7 @@ const ( // The telemetry service definition type RocketTelemeterClient interface { // Sends telemetry - StreamTelemetry(ctx context.Context, in *TelemetryRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[RocketTelemetry], error) + StreamTelemetry(ctx context.Context, in *RocketTelemetryRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[RocketTelemetry], error) } type rocketTelemeterClient struct { @@ -156,13 +156,13 @@ func NewRocketTelemeterClient(cc grpc.ClientConnInterface) RocketTelemeterClient return &rocketTelemeterClient{cc} } -func (c *rocketTelemeterClient) StreamTelemetry(ctx context.Context, in *TelemetryRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[RocketTelemetry], error) { +func (c *rocketTelemeterClient) StreamTelemetry(ctx context.Context, in *RocketTelemetryRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[RocketTelemetry], error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) stream, err := c.cc.NewStream(ctx, &RocketTelemeter_ServiceDesc.Streams[0], RocketTelemeter_StreamTelemetry_FullMethodName, cOpts...) if err != nil { return nil, err } - x := &grpc.GenericClientStream[TelemetryRequest, RocketTelemetry]{ClientStream: stream} + x := &grpc.GenericClientStream[RocketTelemetryRequest, RocketTelemetry]{ClientStream: stream} if err := x.ClientStream.SendMsg(in); err != nil { return nil, err } @@ -182,7 +182,7 @@ type RocketTelemeter_StreamTelemetryClient = grpc.ServerStreamingClient[RocketTe // The telemetry service definition type RocketTelemeterServer interface { // Sends telemetry - StreamTelemetry(*TelemetryRequest, grpc.ServerStreamingServer[RocketTelemetry]) error + StreamTelemetry(*RocketTelemetryRequest, grpc.ServerStreamingServer[RocketTelemetry]) error mustEmbedUnimplementedRocketTelemeterServer() } @@ -193,7 +193,7 @@ type RocketTelemeterServer interface { // pointer dereference when methods are called. type UnimplementedRocketTelemeterServer struct{} -func (UnimplementedRocketTelemeterServer) StreamTelemetry(*TelemetryRequest, grpc.ServerStreamingServer[RocketTelemetry]) error { +func (UnimplementedRocketTelemeterServer) StreamTelemetry(*RocketTelemetryRequest, grpc.ServerStreamingServer[RocketTelemetry]) error { return status.Errorf(codes.Unimplemented, "method StreamTelemetry not implemented") } func (UnimplementedRocketTelemeterServer) mustEmbedUnimplementedRocketTelemeterServer() {} @@ -218,11 +218,11 @@ func RegisterRocketTelemeterServer(s grpc.ServiceRegistrar, srv RocketTelemeterS } func _RocketTelemeter_StreamTelemetry_Handler(srv interface{}, stream grpc.ServerStream) error { - m := new(TelemetryRequest) + m := new(RocketTelemetryRequest) if err := stream.RecvMsg(m); err != nil { return err } - return srv.(RocketTelemeterServer).StreamTelemetry(m, &grpc.GenericServerStream[TelemetryRequest, RocketTelemetry]{ServerStream: stream}) + return srv.(RocketTelemeterServer).StreamTelemetry(m, &grpc.GenericServerStream[RocketTelemetryRequest, RocketTelemetry]{ServerStream: stream}) } // This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. diff --git a/go-proxies/proxy_build.sh b/go-proxies/proxy_build.sh index 4c3f08e..94f0a2d 100755 --- a/go-proxies/proxy_build.sh +++ b/go-proxies/proxy_build.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Run from telemetry-proxy directory +# Run from go-proxy directory go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest @@ -8,10 +8,14 @@ export PATH="$PATH:$(go env GOPATH)/bin" protoc --go_out=./proto-out --go_opt=paths=source_relative --go-grpc_out=./proto-out --go-grpc_opt=paths=source_relative -I../protos ../protos/command.proto --experimental_allow_proto3_optional pushd fill-telem-proxy go build main.go +popd +pushd rocket-telem-proxy +go build main.go popd && pushd websocket-proxy go build main.go popd pushd .. docker build -t ghcr.io/cornellrocketryteam/fill-telem-proxy:latest -f go-proxies/fill-telem-proxy/Dockerfile . & +docker build -t ghcr.io/cornellrocketryteam/rocket-telem-proxy:latest -f go-proxies/rocket-telem-proxy/Dockerfile . & docker build -t ghcr.io/cornellrocketryteam/websocket-proxy:latest -f go-proxies/websocket-proxy/Dockerfile . -popd +popd \ No newline at end of file diff --git a/go-proxies/rocket-telem-proxy/Dockerfile b/go-proxies/rocket-telem-proxy/Dockerfile new file mode 100644 index 0000000..ceacaf2 --- /dev/null +++ b/go-proxies/rocket-telem-proxy/Dockerfile @@ -0,0 +1,36 @@ +FROM golang AS build + +# Set destination for COPY +WORKDIR /app + +# Install protobuf compiler +RUN apt-get update && apt-get install -y protobuf-compiler +RUN go install google.golang.org/protobuf/cmd/protoc-gen-go@latest +RUN go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest + +# Download Go modules +COPY go-proxies/go.mod go-proxies/go.sum ./ +RUN go mod download + +# Build the protobufs +COPY protos /protos +RUN mkdir proto-out +RUN protoc --go_out=./proto-out --go_opt=paths=source_relative --go-grpc_out=./proto-out --go-grpc_opt=paths=source_relative -I../protos ../protos/command.proto + +# Copy the source code +ADD go-proxies ./ + +# Build +RUN CGO_ENABLED=0 GOOS=linux go build rocket-telem-proxy/main.go + +# Use a minimal base image +FROM ubuntu:22.04 + +# Copy the binary +COPY --from=build /app/main /bin/main + +# Expose port +EXPOSE 8080 + +# Run +CMD ["/bin/main"] \ No newline at end of file diff --git a/go-proxies/rocket-telem-proxy/main b/go-proxies/rocket-telem-proxy/main new file mode 100755 index 0000000..bd02e7a Binary files /dev/null and b/go-proxies/rocket-telem-proxy/main differ diff --git a/go-proxies/rocket-telem-proxy/main.go b/go-proxies/rocket-telem-proxy/main.go new file mode 100644 index 0000000..38cfb66 --- /dev/null +++ b/go-proxies/rocket-telem-proxy/main.go @@ -0,0 +1,61 @@ +// The telemetry_proxy program receives telemetry from the fill station over gRPC and serves it to web clients via WebSocket. +package main + +import ( + "context" + "io" + "log" + "os" + "time" + + "github.com/cornellrocketryteam/Ground-Software/go-proxies/pkg/types" + + pb "github.com/cornellrocketryteam/Ground-Software/go-proxies/proto-out" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" +) + +func main() { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + // Initialize datastore + var datastore types.Datastore + datastore.Init(ctx) + + // Set up a connection to the grpc server + address := os.Getenv("FILL_HOSTNAME") + ":50051" + conn, err := grpc.NewClient(address, grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + log.Fatalf("did not connect: %v", err) + } + defer conn.Close() + grpcClient := pb.NewRocketTelemeterClient(conn) + + // Start gRPC stream in a separate Goroutine + // go receiveTelemetry(ctx, grpcClient) + go func(ctx context.Context, grpcClient pb.RocketTelemeterClient) { + for { + + stream, err := grpcClient.StreamTelemetry(ctx, &pb.RocketTelemetryRequest{}) + if err != nil { + log.Printf("could not receive stream: %v, retrying in 5 seconds...", err) + time.Sleep(5 * time.Second) + continue // Retry the connection + } + + for { + packet, err := stream.Recv() + if err == io.EOF || err != nil { + log.Printf("Received %v, retrying connection...\n", err) + break // Break out of the inner loop to retry the connection + } + + // Store packet + datastore.RocketTelemetryStore(packet) + } + } + }(ctx, grpcClient) + + select {} +} diff --git a/go-proxies/websocket-proxy/main.go b/go-proxies/websocket-proxy/main.go index 6193ede..5aeade4 100644 --- a/go-proxies/websocket-proxy/main.go +++ b/go-proxies/websocket-proxy/main.go @@ -154,7 +154,7 @@ func main() { // then stores it to InfluxDB and sends it to all active websocket connections. func HandlePacket(ctx context.Context, packet *pb.FillStationTelemetry, w *WebClients) { // Write to InfluxDB - datastore.Store(packet) + datastore.FillStationTelemetryStore(packet) marshaler := protojson.MarshalOptions{ EmitUnpopulated: true, // Include fields with zero values diff --git a/protos/command.proto b/protos/command.proto index 05c4a2a..e252756 100644 --- a/protos/command.proto +++ b/protos/command.proto @@ -12,13 +12,13 @@ package command; // The telemetry service definition service FillStationTelemeter { // Sends telemetry - rpc StreamTelemetry (TelemetryRequest) returns (stream FillStationTelemetry) {} + rpc StreamTelemetry (FillStationTelemetryRequest) returns (stream FillStationTelemetry) {} } // The telemetry service definition service RocketTelemeter { // Sends telemetry - rpc StreamTelemetry (TelemetryRequest) returns (stream RocketTelemetry) {} + rpc StreamTelemetry (RocketTelemetryRequest) returns (stream RocketTelemetry) {} } // The commanding service definition @@ -37,7 +37,8 @@ message Command { optional bool ignite = 5; optional bool sv2_close = 6; optional bool mav_open = 7; - optional bool fire = 8; + optional bool launch = 8; + // optional bool clear_sd = 9; } // The response message containing an ack @@ -45,7 +46,12 @@ message Command { message CommandReply {} // The telemetry request message -message TelemetryRequest {} +message FillStationTelemetryRequest {} + +// Rocket Telemetry Request +message RocketTelemetryRequest { + bool isRocketTelemetryRequest = 1; +} enum FlightMode { STARTUP = 0; @@ -57,27 +63,31 @@ enum FlightMode { } message Events { - bool key_armed = 1; - bool altitude_armed = 2; - bool altimeter_init_failed = 3; - bool altimeter_reading_failed = 4; - bool altimeter_was_turned_off = 5; - bool gps_init_failed = 6; - bool gps_reading_failed = 7; - bool gps_was_turned_off = 8; - bool imu_init_failed = 9; - bool imu_reading_failed = 10; - bool imu_was_turned_off = 11; - bool accelerometer_init_failed = 12; - bool accelerometer_reading_failed = 13; - bool accelerometer_was_turned_off = 14; - bool thermometer_init_failed = 15; - bool thermometer_reading_failed = 16; - bool thermometer_was_turned_off = 17; + bool altitude_armed = 1; + bool altimeter_init_failed = 2; + bool altimeter_reading_failed = 3; + bool gps_init_failed = 4; + bool gps_reading_failed = 5; + bool imu_init_failed = 6; + bool imu_reading_failed = 7; + bool accelerometer_init_failed = 8; + bool accelerometer_reading_failed = 9; + bool thermometer_init_failed = 10; + bool thermometer_reading_failed = 11; + bool voltage_init_failed = 12; + bool voltage_reading_failed = 13; + bool adc_init_failed = 14; + bool adc_reading_failed = 15; + bool fram_init_failed = 16; + bool fram_write_failed = 17; bool sd_init_failed = 18; bool sd_write_failed = 19; - bool rfm_init_failed = 20; - bool rfm_transmit_failed = 21; + bool mav_was_actuated = 20; + bool sv_was_actuated = 21; + bool main_deploy_wait_end = 22; + bool main_log_shutoff = 23; + bool cycle_overflow = 24; + bool invalid_command = 25; } message RocketMetadata {