From 9cd0a26fdf9b24b307e87c56aa4edf0f3507f6c4 Mon Sep 17 00:00:00 2001 From: Gautham Date: Wed, 25 Sep 2024 11:46:05 -0400 Subject: [PATCH] add readings endpoint for MovementSensor and PowerSensor --- micro-rdk/src/common/grpc.rs | 50 ++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/micro-rdk/src/common/grpc.rs b/micro-rdk/src/common/grpc.rs index 31538d353..1d68c9613 100644 --- a/micro-rdk/src/common/grpc.rs +++ b/micro-rdk/src/common/grpc.rs @@ -319,6 +319,9 @@ impl<'a> GrpcServerInner<'a> { "/viam.component.movementsensor.v1.MovementSensorService/DoCommand" => { self.movement_sensor_do_command(payload) } + "/viam.component.movementsensor.v1.MovementSensorService/GetReadings" => { + self.movement_sensor_get_readings(payload) + } "/viam.component.encoder.v1.EncoderService/GetPosition" => { self.encoder_get_position(payload) } @@ -340,6 +343,9 @@ impl<'a> GrpcServerInner<'a> { "/viam.component.powersensor.v1.PowerSensorService/GetPower" => { self.power_sensor_get_power(payload) } + "/viam.component.powersensor.v1.PowerSensorService/GetReadings" => { + self.power_sensor_get_readings(payload) + } "/viam.component.powersensor.v1.PowerSensorService/DoCommand" => { self.power_sensor_do_command(payload) } @@ -995,6 +1001,28 @@ impl<'a> GrpcServerInner<'a> { Err(ServerError::from(GrpcError::RpcUnimplemented)) } + fn movement_sensor_get_readings(&mut self, message: &[u8]) -> Result { + let req = proto::common::v1::GetReadingsRequest::decode(message) + .map_err(|_| ServerError::from(GrpcError::RpcInvalidArgument))?; + let m_sensor = match self + .robot + .lock() + .unwrap() + .get_movement_sensor_by_name(req.name) + { + Some(b) => b, + None => return Err(ServerError::from(GrpcError::RpcUnavailable)), + }; + + let readings = m_sensor + .lock() + .unwrap() + .get_generic_readings() + .map_err(|err| ServerError::new(GrpcError::RpcInternal, Some(err.into())))?; + let resp = proto::common::v1::GetReadingsResponse { readings }; + self.encode_message(resp) + } + fn movement_sensor_do_command(&mut self, message: &[u8]) -> Result { let req = proto::common::v1::DoCommandRequest::decode(message) .map_err(|_| ServerError::from(GrpcError::RpcInvalidArgument))?; @@ -1205,6 +1233,28 @@ impl<'a> GrpcServerInner<'a> { self.encode_message(resp) } + fn power_sensor_get_readings(&mut self, message: &[u8]) -> Result { + let req = proto::common::v1::GetReadingsRequest::decode(message) + .map_err(|_| ServerError::from(GrpcError::RpcInvalidArgument))?; + let power_sensor = match self + .robot + .lock() + .unwrap() + .get_power_sensor_by_name(req.name) + { + Some(s) => s, + None => return Err(ServerError::from(GrpcError::RpcUnavailable)), + }; + + let readings = power_sensor + .lock() + .unwrap() + .get_generic_readings() + .map_err(|err| ServerError::new(GrpcError::RpcInternal, Some(err.into())))?; + let resp = proto::common::v1::GetReadingsResponse { readings }; + self.encode_message(resp) + } + fn power_sensor_do_command(&mut self, message: &[u8]) -> Result { let req = proto::common::v1::DoCommandRequest::decode(message) .map_err(|_| ServerError::from(GrpcError::RpcInvalidArgument))?;