package com.dji.sdk.cloudapi.wayline.api;
|
|
import com.dji.sdk.annotations.CloudSDKVersion;
|
import com.dji.sdk.cloudapi.wayline.*;
|
import com.dji.sdk.config.version.CloudSDKVersionEnum;
|
import com.dji.sdk.common.Common;
|
import com.dji.sdk.config.version.GatewayManager;
|
import com.dji.sdk.config.version.GatewayTypeEnum;
|
import com.dji.sdk.exception.CloudSDKErrorEnum;
|
import com.dji.sdk.exception.CloudSDKException;
|
import com.dji.sdk.mqtt.ChannelName;
|
import com.dji.sdk.mqtt.MqttReply;
|
import com.dji.sdk.mqtt.events.EventsDataRequest;
|
import com.dji.sdk.mqtt.events.TopicEventsRequest;
|
import com.dji.sdk.mqtt.events.TopicEventsResponse;
|
import com.dji.sdk.mqtt.requests.TopicRequestsRequest;
|
import com.dji.sdk.mqtt.requests.TopicRequestsResponse;
|
import com.dji.sdk.mqtt.services.ServicesPublish;
|
import com.dji.sdk.mqtt.services.ServicesReplyData;
|
import com.dji.sdk.mqtt.services.TopicServicesResponse;
|
import org.springframework.integration.annotation.ServiceActivator;
|
import org.springframework.messaging.Message;
|
import org.springframework.messaging.MessageHeaders;
|
|
import javax.annotation.Resource;
|
import java.util.UUID;
|
|
/**
|
* @author sean
|
* @version 1.7
|
* @date 2023/5/19
|
*/
|
public abstract class AbstractWaylineService {
|
|
@Resource
|
private ServicesPublish servicesPublish;
|
|
/**
|
* Notification of device exits the Return to Home (RTH) state
|
* @param request data
|
* @param headers The headers for a {@link Message}.
|
* @return events_reply
|
*/
|
@ServiceActivator(inputChannel = ChannelName.INBOUND_EVENTS_DEVICE_EXIT_HOMING_NOTIFY, outputChannel = ChannelName.OUTBOUND_EVENTS)
|
public TopicEventsResponse<MqttReply> deviceExitHomingNotify(TopicEventsRequest<DeviceExitHomingNotify> request, MessageHeaders headers) {
|
throw new UnsupportedOperationException("deviceExitHomingNotify not implemented");
|
}
|
|
/**
|
* Report wayline task progress
|
* @param request data
|
* @param headers The headers for a {@link Message}.
|
* @return events_reply
|
*/
|
@ServiceActivator(inputChannel = ChannelName.INBOUND_EVENTS_FLIGHTTASK_PROGRESS, outputChannel = ChannelName.OUTBOUND_EVENTS)
|
public TopicEventsResponse<MqttReply> flighttaskProgress(TopicEventsRequest<EventsDataRequest<FlighttaskProgress>> request, MessageHeaders headers) {
|
throw new UnsupportedOperationException("flighttaskProgress not implemented");
|
}
|
|
/**
|
* Notification of task readiness
|
* @param request data
|
* @param headers The headers for a {@link Message}.
|
* @return events_reply
|
*/
|
@ServiceActivator(inputChannel = ChannelName.INBOUND_EVENTS_FLIGHTTASK_READY, outputChannel = ChannelName.OUTBOUND_EVENTS)
|
public TopicEventsResponse<MqttReply> flighttaskReady(TopicEventsRequest<FlighttaskReady> request, MessageHeaders headers) {
|
throw new UnsupportedOperationException("flighttaskReady not implemented");
|
}
|
|
/**
|
* Create wayline task (Deprecated)
|
* @param gateway
|
* @return services_reply
|
*/
|
@CloudSDKVersion(deprecated = CloudSDKVersionEnum.V0_0_1, exclude = GatewayTypeEnum.RC)
|
public TopicServicesResponse<ServicesReplyData> flighttaskCreate(GatewayManager gateway, FlighttaskCreateRequest request) {
|
return servicesPublish.publish(
|
gateway.getGatewaySn(),
|
WaylineMethodEnum.FLIGHTTASK_CREATE.getMethod(),
|
request);
|
}
|
|
/**
|
* Issue wayline task
|
* @param gateway
|
* @return services_reply
|
*/
|
@CloudSDKVersion(exclude = GatewayTypeEnum.RC)
|
public TopicServicesResponse<ServicesReplyData> flighttaskPrepare(GatewayManager gateway, FlighttaskPrepareRequest request,String bid) {
|
validPrepareParam(request);
|
return servicesPublish.publish(
|
gateway.getGatewaySn(),
|
WaylineMethodEnum.FLIGHTTASK_PREPARE.getMethod(),
|
request,
|
bid);
|
}
|
|
/**
|
* Execute wayline task
|
* @param gateway
|
* @return services_reply
|
*/
|
@CloudSDKVersion(exclude = GatewayTypeEnum.RC)
|
public TopicServicesResponse<ServicesReplyData> flighttaskExecute(GatewayManager gateway, FlighttaskExecuteRequest request,String bid) {
|
return servicesPublish.publish(
|
gateway.getGatewaySn(),
|
WaylineMethodEnum.FLIGHTTASK_EXECUTE.getMethod(),
|
request,
|
bid);
|
}
|
|
/**
|
* Cancel wayline task
|
* @param gateway
|
* @return services_reply
|
*/
|
@CloudSDKVersion(exclude = GatewayTypeEnum.RC)
|
public TopicServicesResponse<ServicesReplyData> flighttaskUndo(GatewayManager gateway, FlighttaskUndoRequest request) {
|
return servicesPublish.publish(
|
gateway.getGatewaySn(),
|
WaylineMethodEnum.FLIGHTTASK_UNDO.getMethod(),
|
request);
|
}
|
|
/**
|
* Pause wayline task
|
* @param gateway
|
* @return services_reply
|
*/
|
@CloudSDKVersion(exclude = GatewayTypeEnum.RC)
|
public TopicServicesResponse<ServicesReplyData> flighttaskPause(GatewayManager gateway) {
|
return servicesPublish.publish(
|
gateway.getGatewaySn(),
|
WaylineMethodEnum.FLIGHTTASK_PAUSE.getMethod());
|
}
|
|
/**
|
* Resume wayline task
|
* @param gateway
|
* @return services_reply
|
*/
|
@CloudSDKVersion(exclude = GatewayTypeEnum.RC)
|
public TopicServicesResponse<ServicesReplyData> flighttaskRecovery(GatewayManager gateway) {
|
return servicesPublish.publish(
|
gateway.getGatewaySn(),
|
WaylineMethodEnum.FLIGHTTASK_RECOVERY.getMethod());
|
}
|
|
/**
|
* Return to Home (RTH)
|
* @param gateway
|
* @return services_reply
|
*/
|
@CloudSDKVersion(exclude = GatewayTypeEnum.RC)
|
public TopicServicesResponse<ServicesReplyData> returnHome(GatewayManager gateway) {
|
return servicesPublish.publish(
|
gateway.getGatewaySn(),
|
WaylineMethodEnum.RETURN_HOME.getMethod());
|
}
|
|
/**
|
* Cancel return to home
|
* @param gateway
|
* @return services_reply
|
*/
|
@CloudSDKVersion(exclude = GatewayTypeEnum.RC)
|
public TopicServicesResponse<ServicesReplyData> returnHomeCancel(GatewayManager gateway) {
|
return servicesPublish.publish(
|
gateway.getGatewaySn(),
|
WaylineMethodEnum.RETURN_HOME_CANCEL.getMethod());
|
}
|
|
/**
|
* Get the wayline task resource
|
* @param request data
|
* @param headers The headers for a {@link Message}.
|
* @return events_reply
|
*/
|
@ServiceActivator(inputChannel = ChannelName.INBOUND_REQUESTS_FLIGHTTASK_RESOURCE_GET, outputChannel = ChannelName.OUTBOUND_REQUESTS)
|
public TopicRequestsResponse<MqttReply<FlighttaskResourceGetResponse>> flighttaskResourceGet(TopicRequestsRequest<FlighttaskResourceGetRequest> request, MessageHeaders headers) {
|
throw new UnsupportedOperationException("flighttaskResourceGet not implemented");
|
}
|
|
/**
|
* Return-to-home information
|
* @param request data
|
* @param headers The headers for a {@link Message}.
|
* @return events_reply
|
*/
|
@ServiceActivator(inputChannel = ChannelName.INBOUND_EVENTS_RETURN_HOME_INFO, outputChannel = ChannelName.OUTBOUND_EVENTS)
|
@CloudSDKVersion(since = CloudSDKVersionEnum.V1_0_0)
|
public TopicEventsResponse<MqttReply> returnHomeInfo(TopicRequestsRequest<ReturnHomeInfo> request, MessageHeaders headers) {
|
throw new UnsupportedOperationException("returnHomeInfo not implemented");
|
}
|
|
private void validPrepareParam(FlighttaskPrepareRequest request) {
|
if (null == request.getExecuteTime()
|
&& (TaskTypeEnum.IMMEDIATE == request.getTaskType() || TaskTypeEnum.TIMED == request.getTaskType())) {
|
throw new CloudSDKException(CloudSDKErrorEnum.INVALID_PARAMETER, "Execute time must not be null.");
|
}
|
if (TaskTypeEnum.CONDITIONAL == request.getTaskType()) {
|
Common.validateModel(request.getReadyConditions());
|
}
|
}
|
|
}
|