mav_sdk/
lib.rs

1/// Generated services
2pub mod grpc;
3
4pub type Result<T> = std::result::Result<T, tonic::transport::Error>;
5
6use self::grpc::{
7    action::ActionServiceClient, info::InfoServiceClient,
8    mocap::mocap_service_client::MocapServiceClient, telemetry::TelemetryServiceClient,
9};
10
11use grpc::{
12    calibration::CalibrationServiceClient, camera::CameraServiceClient, core::CoreServiceClient,
13    geofence::GeofenceServiceClient, gimbal::GimbalServiceClient, mission::MissionServiceClient,
14    offboard::OffboardServiceClient, param::ParamServiceClient, shell::ShellServiceClient,
15};
16use tonic::transport::{Channel, Endpoint};
17
18pub const DEFAULT_URL: &str = "http://0.0.0.0:14540";
19pub const OFFBOARD_PORT: u16 = 14540;
20
21#[derive(Debug, Clone)]
22pub struct Drone {
23    pub action: ActionServiceClient<Channel>,
24    pub calibration: CalibrationServiceClient<Channel>,
25    pub camera: CameraServiceClient<Channel>,
26    pub core: CoreServiceClient<Channel>,
27    pub geofence: GeofenceServiceClient<Channel>,
28    pub gimbal: GimbalServiceClient<Channel>,
29    pub info: InfoServiceClient<Channel>,
30    pub mission: MissionServiceClient<Channel>,
31    pub mocap: MocapServiceClient<Channel>,
32    pub offboard: OffboardServiceClient<Channel>,
33    pub param: ParamServiceClient<Channel>,
34    pub shell: ShellServiceClient<Channel>,
35    pub telemetry: TelemetryServiceClient<Channel>,
36}
37
38impl Drone {
39    pub async fn connect(url: &'static str) -> Result<Self> {
40        let channel = Endpoint::new(url)?.connect().await?;
41
42        Ok(Self {
43            action: ActionServiceClient::new(channel.clone()),
44            calibration: CalibrationServiceClient::new(channel.clone()),
45            camera: CameraServiceClient::new(channel.clone()),
46            core: CoreServiceClient::new(channel.clone()),
47            geofence: GeofenceServiceClient::new(channel.clone()),
48            gimbal: GimbalServiceClient::new(channel.clone()),
49            info: InfoServiceClient::new(channel.clone()),
50            mission: MissionServiceClient::new(channel.clone()),
51            mocap: MocapServiceClient::new(channel.clone()),
52            offboard: OffboardServiceClient::new(channel.clone()),
53            param: ParamServiceClient::new(channel.clone()),
54            shell: ShellServiceClient::new(channel.clone()),
55            telemetry: TelemetryServiceClient::new(channel.clone()),
56        })
57    }
58}