Skip to content

Commit

Permalink
schemaに必要な情報を追加
Browse files Browse the repository at this point in the history
  • Loading branch information
shunsuke-shimomura committed Jul 16, 2024
1 parent 60927a9 commit c8b76cf
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 44 deletions.
1 change: 1 addition & 0 deletions gaia-ccsds-c2a/src/access/tlm/converter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ impl Polynomial {

#[derive(Debug, Clone)]
pub enum Integral {
Hex,
Status(Status),
Polynomial(Polynomial),
}
Expand Down
7 changes: 5 additions & 2 deletions gaia-ccsds-c2a/src/access/tlm/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ impl IntegralFieldSchema {
Some(converter::Integral::Polynomial(poly)) => {
FieldValue::Double(poly.convert(try_integral_to_f64(value)?))
}
None => FieldValue::Integer(value.try_into()?),
_ => FieldValue::Integer(value.try_into()?),
};
Ok((raw, converted))
}
Expand Down Expand Up @@ -203,7 +203,7 @@ fn build_telemetry_floating_field<T: Floating>(
fn build_integral_converter(conv_info: &tlmdb::ConversionInfo) -> Option<converter::Integral> {
match conv_info {
tlmdb::ConversionInfo::None => None,
tlmdb::ConversionInfo::Hex => None,
tlmdb::ConversionInfo::Hex => Some(converter::Integral::Hex),
tlmdb::ConversionInfo::Status(status) => {
Some(converter::Integral::Status(status.clone().into()))
}
Expand All @@ -220,6 +220,9 @@ fn as_polynomial(converter: Option<converter::Integral>) -> Result<Option<conver
"invalid converter for floating-point number: {:?}",
s
)),
Some(converter::Integral::Hex) => Err(anyhow!(
"invalid converter for floating-point number: Hex",
)),
None => Ok(None),
}
}
Expand Down
29 changes: 22 additions & 7 deletions tmtc-c2a/proto/tmtc_generic_c2a.proto
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,17 @@ message CommandParameterSchemaMetadata {
}

enum CommandParameterDataType {
CMD_PARAMETER_INTEGER = 0;
CMD_PARAMETER_DOUBLE = 1;
CMD_PARAMETER_BYTES = 2;
CMD_PARAMETER_INT8 = 0;
CMD_PARAMETER_INT16 = 1;
CMD_PARAMETER_INT32 = 2;
CMD_PARAMETER_INT64 = 3;
CMD_PARAMETER_UINT8 = 4;
CMD_PARAMETER_UINT16 = 5;
CMD_PARAMETER_UINT32 = 6;
CMD_PARAMETER_UINT64 = 7;
CMD_PARAMETER_FLOAT = 8;
CMD_PARAMETER_DOUBLE = 9;
CMD_PARAMETER_RAW = 10;
}

message TelemetrySchema {
Expand All @@ -78,15 +86,22 @@ message TelemetryFieldSchema {
}

enum TelemetryFieldDataType {
Integer = 0;
Double = 1;
Enum = 3;
Bytes = 4;
TLM_FIELD_INT8 = 0;
TLM_FIELD_INT16 = 1;
TLM_FIELD_INT32 = 2;
TLM_FIELD_INT64 = 3;
TLM_FIELD_UINT8 = 4;
TLM_FIELD_UINT16 = 5;
TLM_FIELD_UINT32 = 6;
TLM_FIELD_UINT64 = 7;
TLM_FIELD_FLOAT = 8;
TLM_FIELD_DOUBLE = 9;
}

message TelemetryFieldSchemaMetadata {
string description = 1;
TelemetryFieldDataType data_type = 2;
bool is_hex = 3;
}

message TelemetryChannelSchema {
Expand Down
14 changes: 0 additions & 14 deletions tmtc-c2a/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ use std::{fs, io};

use anyhow::{Context, Result};
use axum::ServiceExt;
use axum::{error_handling::HandleError, response::Redirect, routing::get};
use clap::Parser;
use gaia_tmtc::broker::broker_server::BrokerServer;
use gaia_tmtc::recorder::recorder_client::RecorderClient;
Expand Down Expand Up @@ -198,16 +197,3 @@ async fn main() -> Result<()> {
ret = server_task => Ok(ret?),
}
}

async fn handle_rpc_error(
err: Box<dyn std::error::Error + Send + Sync>,
) -> impl axum::response::IntoResponse {
(
axum::http::StatusCode::OK,
[
("content-type", "application/grpc".to_owned()),
("grpc-status", "13".to_owned()),
("content-type", format!("internal error: {err}")),
],
)
}
25 changes: 19 additions & 6 deletions tmtc-c2a/src/registry/cmd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ impl Registry {
metadata: Some(proto::CommandParameterSchemaMetadata {
description: metadata.description.clone(),
}),
data_type: proto::CommandParameterDataType::CmdParameterBytes
data_type: proto::CommandParameterDataType::CmdParameterRaw
.into(),
})
} else {
Expand All @@ -123,12 +123,25 @@ impl Registry {
.sized_parameters
.iter()
.map(|param| {
let data_type = match param.value {
structpack::NumericField::Integral(_) => {
proto::CommandParameterDataType::CmdParameterInteger
let data_type = match &param.value {
structpack::NumericField::Integral(i) => {
match i {
structpack::GenericIntegralField::U8(_) => proto::CommandParameterDataType::CmdParameterUint8,
structpack::GenericIntegralField::U16(_) => proto::CommandParameterDataType::CmdParameterUint16,
structpack::GenericIntegralField::U32(_) => proto::CommandParameterDataType::CmdParameterUint32,
structpack::GenericIntegralField::U64(_) => proto::CommandParameterDataType::CmdParameterUint64,
structpack::GenericIntegralField::I8(_) => proto::CommandParameterDataType::CmdParameterInt8,
structpack::GenericIntegralField::I16(_) => proto::CommandParameterDataType::CmdParameterInt16,
structpack::GenericIntegralField::I32(_) => proto::CommandParameterDataType::CmdParameterInt32,
structpack::GenericIntegralField::I64(_) => proto::CommandParameterDataType::CmdParameterInt64,

}
}
structpack::NumericField::Floating(_) => {
proto::CommandParameterDataType::CmdParameterDouble
structpack::NumericField::Floating(f) => {
match f {
structpack::GenericFloatingField::F32(_) => proto::CommandParameterDataType::CmdParameterFloat,
structpack::GenericFloatingField::F64(_) => proto::CommandParameterDataType::CmdParameterDouble,
}
}
};
proto::CommandParameterSchema {
Expand Down
62 changes: 47 additions & 15 deletions tmtc-c2a/src/registry/tlm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,14 +57,21 @@ pub struct FieldMetadata {
pub raw_name: String,
pub description: String,
pub data_type: DataType,
pub is_hex: bool
}

#[derive(Debug, Clone)]
pub enum DataType {
Integer,
Int8,
Int16,
Int32,
Int64,
Uint8,
Uint16,
Uint32,
Uint64,
Float,
Double,
Enum,
Bytes,
}

#[derive(Debug, Clone)]
Expand Down Expand Up @@ -108,11 +115,18 @@ impl Registry {
metadata: Some(proto::TelemetryFieldSchemaMetadata {
description: m.description.clone(),
data_type: match m.data_type {
DataType::Integer => proto::TelemetryFieldDataType::Integer as i32,
DataType::Double => proto::TelemetryFieldDataType::Double as i32,
DataType::Enum => proto::TelemetryFieldDataType::Enum as i32,
DataType::Bytes => proto::TelemetryFieldDataType::Bytes as i32,
DataType::Int8 => proto::TelemetryFieldDataType::TlmFieldInt8 as i32,
DataType::Int16 => proto::TelemetryFieldDataType::TlmFieldInt16 as i32,
DataType::Int32 => proto::TelemetryFieldDataType::TlmFieldInt32 as i32,
DataType::Int64 => proto::TelemetryFieldDataType::TlmFieldInt64 as i32,
DataType::Uint8 => proto::TelemetryFieldDataType::TlmFieldUint8 as i32,
DataType::Uint16 => proto::TelemetryFieldDataType::TlmFieldUint16 as i32,
DataType::Uint32 => proto::TelemetryFieldDataType::TlmFieldUint32 as i32,
DataType::Uint64 => proto::TelemetryFieldDataType::TlmFieldUint64 as i32,
DataType::Float => proto::TelemetryFieldDataType::TlmFieldFloat as i32,
DataType::Double => proto::TelemetryFieldDataType::TlmFieldDouble as i32,
},
is_hex: m.is_hex
}),
name: m.original_name.to_string(),
})
Expand Down Expand Up @@ -221,21 +235,37 @@ fn build_telemetry_schema<'a>(
};
for (order, pair) in iter.enumerate() {
let (field_name, field_schema) = pair?;
let data_type = match &field_schema.value {
FieldValueSchema::Integral(schema) => match schema.converter {
Some(gaia_ccsds_c2a::access::tlm::converter::Integral::Polynomial(_)) => {
DataType::Double
let (data_type, is_hex) = match &field_schema.value {
FieldValueSchema::Integral(schema) => (
match schema.field {
structpack::GenericIntegralField::I8(_) => DataType::Int8,
structpack::GenericIntegralField::I16(_) => DataType::Int16,
structpack::GenericIntegralField::I32(_) => DataType::Int32,
structpack::GenericIntegralField::I64(_) => DataType::Int64,
structpack::GenericIntegralField::U8(_) => DataType::Uint8,
structpack::GenericIntegralField::U16(_) => DataType::Uint16,
structpack::GenericIntegralField::U32(_) => DataType::Uint32,
structpack::GenericIntegralField::U64(_) => DataType::Uint64,
},
match schema.converter {
Some(gaia_ccsds_c2a::access::tlm::converter::Integral::Hex) => true,
_ => false,
}
Some(gaia_ccsds_c2a::access::tlm::converter::Integral::Status(_)) => DataType::Enum,
None => DataType::Integer,
},
FieldValueSchema::Floating(_) => DataType::Double,
),
FieldValueSchema::Floating(schema) => (
match schema.field {
structpack::GenericFloatingField::F32(_) => DataType::Float,
structpack::GenericFloatingField::F64(_) => DataType::Double,
},
false,
)
};
let name_pair = build_field_metadata(
order,
field_name,
&field_schema.metadata.description,
data_type,
is_hex
);
match field_schema.value {
FieldValueSchema::Integral(field_schema) => {
Expand All @@ -254,6 +284,7 @@ fn build_field_metadata(
tlmdb_name: &str,
description: &str,
data_type: DataType,
is_hex: bool,
) -> FieldMetadata {
FieldMetadata {
order,
Expand All @@ -262,5 +293,6 @@ fn build_field_metadata(
raw_name: format!("{tlmdb_name}@RAW"),
description: description.to_string(),
data_type,
is_hex
}
}

0 comments on commit c8b76cf

Please sign in to comment.