1pub 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}