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