Skip to content

Commit 3e1bb98

Browse files
committed
src: device: manager: Update ModifyDevice with Ping360 methods, ModifyResults, update Ip do SetIp
1 parent d4bf605 commit 3e1bb98

File tree

1 file changed

+67
-6
lines changed

1 file changed

+67
-6
lines changed

src/device/manager/mod.rs

+67-6
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,11 @@ use tracing::{error, info, trace, warn};
2525
use udp_stream::UdpStream;
2626
use uuid::Uuid;
2727

28-
use super::devices::{DeviceActor, DeviceActorHandler};
29-
use bluerobotics_ping::device::{Ping1D, Ping360};
28+
use super::devices::{DeviceActor, DeviceActorHandler, PingAnswer};
29+
use bluerobotics_ping::{
30+
common::{DeviceInformationStruct, ProtocolVersionStruct},
31+
device::{Ping1D, Ping360},
32+
};
3033

3134
pub struct Device {
3235
pub id: Uuid,
@@ -170,6 +173,7 @@ pub enum Answer {
170173
#[serde(skip)]
171174
InnerDeviceHandler(DeviceActorHandler),
172175
DeviceInfo(Vec<DeviceInfo>),
176+
DeviceConfig(ModifyDeviceResult),
173177
}
174178

175179
#[derive(Debug, Serialize, Deserialize, Clone)]
@@ -210,7 +214,15 @@ pub enum Request {
210214

211215
#[derive(Debug, Clone, Serialize, Deserialize, Apiv2Schema)]
212216
pub enum ModifyDeviceCommand {
213-
Ip(Ipv4Addr),
217+
SetIp(Ipv4Addr),
218+
SetPing360Config(Ping360Config),
219+
GetPing360Config,
220+
}
221+
222+
#[derive(Debug, Serialize, Deserialize, Clone)]
223+
pub enum ModifyDeviceResult {
224+
ConfigAcknowledge(ModifyDevice),
225+
Ping360Config(Ping360Config),
214226
}
215227

216228
#[derive(Debug, Clone, Serialize, Deserialize, Apiv2Schema)]
@@ -731,9 +743,48 @@ impl DeviceManager {
731743
Ok(device.properties.clone())
732744
}
733745

746+
pub async fn update_ping360_config(
747+
&self,
748+
device_id: Uuid,
749+
new_config: Ping360Config,
750+
) -> Result<(), ManagerError> {
751+
let device = self.get_device(device_id)?;
752+
if let Some(DeviceProperties::Ping360(properties)) = &device.properties {
753+
let mut config = properties
754+
.continuous_mode_settings
755+
.write()
756+
.map_err(|err| ManagerError::Other(err.to_string()))?;
757+
*config = new_config;
758+
return Ok(());
759+
}
760+
Err(ManagerError::DeviceSourceError(
761+
"set_ping360_config: Can't set Ping360Config".to_string(),
762+
))
763+
}
764+
765+
pub async fn get_ping360_config(&self, device_id: Uuid) -> Result<Answer, ManagerError> {
766+
let device = self.get_device(device_id)?;
767+
if let Some(DeviceProperties::Ping360(properties)) = &device.properties {
768+
return Ok(Answer::DeviceConfig(ModifyDeviceResult::Ping360Config(
769+
properties
770+
.continuous_mode_settings
771+
.read()
772+
.map_err(|err| {
773+
ManagerError::Other(format!(
774+
"get_ping360_config: {err}, device: {device_id}"
775+
))
776+
})?
777+
.clone(),
778+
)));
779+
}
780+
Err(ManagerError::DeviceSourceError(
781+
"get_ping360_config: Can't return Ping360Config".to_string(),
782+
))
783+
}
784+
734785
pub async fn modify_device(&mut self, request: ModifyDevice) -> Result<Answer, ManagerError> {
735786
match request.modify {
736-
ModifyDeviceCommand::Ip(ip) => {
787+
ModifyDeviceCommand::SetIp(ip) => {
737788
let device_info = self.info(request.uuid).await?;
738789
let Answer::DeviceInfo(data) = device_info else {
739790
return Err(ManagerError::NoDevices);
@@ -750,8 +801,18 @@ impl DeviceManager {
750801
};
751802

752803
self.modify_device_ip(ip, inner.ip).await?;
753-
self.delete(request.uuid).await
804+
self.delete(request.uuid).await?;
805+
Ok(Answer::DeviceConfig(ModifyDeviceResult::ConfigAcknowledge(
806+
request,
807+
)))
808+
}
809+
ModifyDeviceCommand::SetPing360Config(config) => {
810+
self.update_ping360_config(request.uuid, config).await?;
811+
Ok(Answer::DeviceConfig(ModifyDeviceResult::ConfigAcknowledge(
812+
request,
813+
)))
754814
}
815+
ModifyDeviceCommand::GetPing360Config => self.get_ping360_config(request.uuid).await,
755816
}
756817
}
757818

@@ -823,7 +884,7 @@ impl ManagerActorHandler {
823884
}
824885
Err(err) => {
825886
error!(
826-
"Handling Ping request: {request:?}: Error ocurred on device: {err:?}" );
887+
"Handling Ping request: {request:?}: Error occurred on device: {err:?}" );
827888
Err(ManagerError::DeviceError(err))
828889
}
829890
}

0 commit comments

Comments
 (0)