package com.netsdk.demo.customize; import java.io.File; import java.util.Scanner; import com.netsdk.demo.util.CaseMenu; import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.NetSDKLib.CAPTURE_SIZE; import com.netsdk.lib.NetSDKLib.EM_LOAD_CONTROL_TYPE; import com.netsdk.lib.NetSDKLib.ENUM_UAVCMD_TYPE; import com.netsdk.lib.NetSDKLib.ENUM_UAVMISSION_TYPE; import com.netsdk.lib.NetSDKLib.ENUM_UAV_MODE; import com.netsdk.lib.NetSDKLib.ENUM_UAV_ROI_MODE; import com.netsdk.lib.NetSDKLib.NET_IN_ATTACH_UAVMISSION_STATE; import com.netsdk.lib.NetSDKLib.NET_IN_READ_UAVMISSION; import com.netsdk.lib.NetSDKLib.NET_IN_UAVMISSION_COUNT; import com.netsdk.lib.NetSDKLib.NET_IN_WRITE_UAVMISSION; import com.netsdk.lib.NetSDKLib.NET_LOAD_CONTROL_AUDIO; import com.netsdk.lib.NetSDKLib.NET_LOAD_CONTROL_COMMON; import com.netsdk.lib.NetSDKLib.NET_LOAD_CONTROL_DISTANCE; import com.netsdk.lib.NetSDKLib.NET_LOAD_CONTROL_LIGHT; import com.netsdk.lib.NetSDKLib.NET_LOAD_CONTROL_PHOTO; import com.netsdk.lib.NetSDKLib.NET_LOAD_CONTROL_RELAY; import com.netsdk.lib.NetSDKLib.NET_LOAD_CONTROL_TIMING; import com.netsdk.lib.NetSDKLib.NET_LOAD_CONTROL_VIDEO; import com.netsdk.lib.NetSDKLib.NET_OUT_ATTACH_UAVMISSION_STATE; import com.netsdk.lib.NetSDKLib.NET_OUT_READ_UAVMISSION; import com.netsdk.lib.NetSDKLib.NET_OUT_UAVMISSION_COUNT; import com.netsdk.lib.NetSDKLib.NET_OUT_WRITE_UAVMISSION; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_CHANGE_SPEED; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_COMPONENT_ARM_DISARM; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_CONDITION_DELAY; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_CONDITION_DISTANCE; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_CONDITION_YAW; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_DO_DIGICAM_CONTROL; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_DO_GUIDED_LIMITS; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_DO_JUMP; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_DO_MOUNT_CONTROL; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_DO_SET_CAM_TRIGG_DIST; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_DO_SET_ROI; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_FENCE_ENABLE; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_FLIGHT_TERMINATION; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_GET_HOME_POSITION; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_HEART_BEAT; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_IMAGE_START_CAPTURE; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_IMAGE_STOP_CAPTURE; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_LAND; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_LOAD_CONTROL; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_LOITER_UNLIMITED; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_MISSION_PAUSE; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_MISSION_START; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_MISSION_STOP; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_MOUNT_CONFIGURE; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_NAV_GUIDED; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_NAV_GUIDED_ENABLE; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_NAV_LOITER_TIME; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_NAV_LOITER_TURNS; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_NAV_SPLINE_WAYPOINT; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_NAV_WAYPOINT; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_RC_CHANNELS_OVERRIDE; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_REBOOT_SHUTDOWN; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_REPEAT_RELAY; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_RETURN_TO_LAUNCH; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_SET_HOME; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_SET_MODE; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_SET_RELAY; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_TAKEOFF; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_VIDEO_START_CAPTURE; import com.netsdk.lib.NetSDKLib.NET_UAVCMD_VIDEO_STOP_CAPTURE; import com.netsdk.lib.NetSDKLib.NET_UAVMISSION_ITEM; import com.netsdk.lib.NetSDKLib.NET_UAVMISSION_STATE; import com.netsdk.lib.ToolKits; import com.netsdk.lib.NetSDKLib.LLong; import com.netsdk.lib.NetSDKLib.NET_DEVICEINFO_Ex; import com.sun.jna.Memory; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; public class UAVDemo { public static final NetSDKLib netSdk = NetSDKLib.NETSDK_INSTANCE; // 登陆句柄 private static LLong loginHandle = new LLong(0); // 订阅UAV任务句柄 private LLong lAttachHandle = new LLong(0); // 设备信息扩展 private NET_DEVICEINFO_Ex deviceInfo = new NET_DEVICEINFO_Ex(); public void InitTest(){ // 初始化SDK库 netSdk.CLIENT_Init(DisConnectCallBack.getInstance(), null); // 设置断线重连成功回调函数 netSdk.CLIENT_SetAutoReconnect(HaveReConnectCallBack.getInstance(), null); //打开日志,可选 NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO(); String logPath = new File(".").getAbsoluteFile().getParent() + File.separator + "sdk_log" + File.separator + "sdk.log"; setLog.bSetFilePath = 1; System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length); setLog.bSetPrintStrategy = 1; setLog.nPrintStrategy = 0; if (!netSdk.CLIENT_LogOpen(setLog)){ System.err.println("Open SDK Log Failed!!!"); } Login(); } public void Login(){ // 登陆设备 int nSpecCap = NetSDKLib.EM_LOGIN_SPAC_CAP_TYPE.EM_LOGIN_SPEC_CAP_TCP; // TCP登入 IntByReference nError = new IntByReference(0); loginHandle = netSdk.CLIENT_LoginEx2(m_strIp, m_nPort, m_strUser, m_strPassword ,nSpecCap, null, deviceInfo, nError); if (loginHandle.longValue() != 0) { System.out.printf("Login Device[%s] Success!\n", m_strIp); } else { System.err.printf("Login Device[%s] Fail.Error[%s]\n", m_strIp, ToolKits.getErrorCode()); LoginOut(); } } public void LoginOut(){ System.out.println("End Test"); if( loginHandle.longValue() != 0) { netSdk.CLIENT_Logout(loginHandle); } System.out.println("See You..."); netSdk.CLIENT_Cleanup(); System.exit(0); } //////////////////////////////////////////////////////////////// private String m_strIp = "10.35.16.196"/*"172.32.100.188"*/; private int m_nPort = 37777; private String m_strUser = "admin"; private String m_strPassword = "admin"; //////////////////////////////////////////////////////////////// /* * 订阅UAV航点任务 * */ public void AttachUAVMissonState(){ //入参 NET_IN_ATTACH_UAVMISSION_STATE pstuInParam=new NET_IN_ATTACH_UAVMISSION_STATE(); pstuInParam.cbNotify=MissionStateCallBack.getInstance(); //出参 NET_OUT_ATTACH_UAVMISSION_STATE pstuOutParam=new NET_OUT_ATTACH_UAVMISSION_STATE(); lAttachHandle=netSdk.CLIENT_AttachUAVMissonState(loginHandle, pstuInParam, pstuOutParam, 3000); if(lAttachHandle.longValue()!=0){ System.out.println("AttachUAVMissonState success"); }else{ System.err.println("AttachUAVMissonState false"); } } /* * 退订UAV航点任务 * */ public void DettachUAVMissonState(){ if(lAttachHandle.longValue()==0){ return; } boolean ret=netSdk.CLIENT_DettachUAVMissonState(lAttachHandle); if(ret){ System.out.println("AttachUAVMissonState success"); }else{ System.err.println("AttachUAVMissonState false"); } } /* * 无人机航点信息设置 * 设置单个航点信息 * 可根据修改参数stInparam.nItemCount修改多个 */ public void WriteUAVMissions(){ Scanner command=new Scanner(System.in); int offset=0; NET_IN_WRITE_UAVMISSION pstuInParam=new NET_IN_WRITE_UAVMISSION(); NET_OUT_WRITE_UAVMISSION pstuOutParam=new NET_OUT_WRITE_UAVMISSION(); int maxCount=pstuInParam.nItemCount=5;//单独设置,1个命令 Pointer param=null; Pointer nParam=null; boolean result=false; NET_UAVMISSION_ITEM[] items=new NET_UAVMISSION_ITEM[maxCount]; for(int i=0 ;i