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 deviceExitHomingNotify(TopicEventsRequest 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 flighttaskProgress(TopicEventsRequest> 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 flighttaskReady(TopicEventsRequest 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 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 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 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 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 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 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 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 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> flighttaskResourceGet(TopicRequestsRequest 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 returnHomeInfo(TopicRequestsRequest 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()); } } }