2017-03-22 2 views
0

Je n'arrive pas à connecter ma classe autonome au my phantom 4, peu importe ce que je fais, car elle est implémentée en tant que classe autonome qui peut être lancée à volonté . Les rappels ne sont jamais atteints et les données ne semblent jamais revenir de l'appareil.DJI Sdk ne se connecte pas lorsqu'il est implémenté en tant que classe autonome

public class DjiManager {

private static DjiManager instance = null; 

private Context mContext; 
private DJIBaseProduct mProduct; 
private SendData mData; 
private DJIFlightController mFlightController = null; 
private Handler mConnectHandler = null; 
private Runnable mConnectRunnable = null; 

public DjiManager(Context context) { 
    mContext = context; 
    //start eventbus 
    EventBus.getDefault().register(this); 
    //set reference to data storage 
    mData = iOtManager.deviceData; 
    //Initialize DJI SDK Manager 
    initSdk(); 
} 

public static DjiManager getIntance(Context context) { 
    if (instance==null) { 
     instance = new DjiManager(context); 
    } 
    return instance; 
} 

public void shutDown() { 
    Log.d("DJI", "DGI Shutting down"); 
    //stop eventbus 
    EventBus.getDefault().unregister(this); 
    //stop the sdk 
    stopSdk(); 
    //clear data buffer reference 
    mData = null; 
    //clear instance 
    instance = null; 
} 

@Subscribe 
public void usbAttached(UsbAttachedEvent event) { 
    Log.d("DJI", "DGI Usb attached event"); 
    connectDrone(); 
} 

@Subscribe 
public void commandSent(SdkCommandSent event) { 

} 

private void stopSdk() { 
    Log.d("DJI", "DGI stopSdk"); 
    //shutdown geo interface 
    DJIFlyZoneManager.getInstance().setGEOSystemEnabled(false, new DJICommonCallbacks.DJICompletionCallback() { 
     @Override 
     public void onResult(DJIError djiError) { 
      if (null != djiError) { 
       Log.d("DJI", "Stopping Geo interface"); 
       Toast.showError((Activity) mContext, djiError.getDescription()); 
      } 
     } 
    }); 
    //stop connection 
    DJISDKManager.getInstance().stopConnectionToProduct(); 
} 

private void initSdk() { 
    //Initialize DJI SDK Manager 
    DJISDKManager.getInstance().initSDKManager(mContext, mDJISDKManagerCallback); 
} 

private void reInitSdk() { 
    new Handler().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      initSdk(); 
     } 
    },5000); 
} 

private void connectDrone() { 
    if (mConnectHandler!=null && mConnectRunnable!=null) { 
     mConnectHandler.removeCallbacks(mConnectRunnable); 
    } 
    mConnectHandler = new Handler(); 
    mConnectRunnable = new Runnable() { 
     @Override 
     public void run() { 
      DJISDKManager.getInstance().startConnectionToProduct(); 
     } 
    }; 
    mConnectHandler.postDelayed(mConnectRunnable,1000); 
} 

private void setupCallbacks() { 
    //start geo sytem interface 
    Log.d("DJI", "Setting up callbacks"); 
    DJIFlyZoneManager.getInstance().setGEOSystemEnabled(true, new DJICommonCallbacks.DJICompletionCallback() { 
     @Override 
     public void onResult(DJIError djiError) { 
      if (null != djiError) { 
       Log.d("DJI", "Error in callbacks: " + djiError.getDescription()); 
       Toast.showError((Activity) mContext, djiError.getDescription()); 
      } else { 
       initFlightController(); 
      } 
     } 
    }); 
} 


private void initFlightController() { 
    if (isFlightControllerSupported()) { 
     Log.d("DJI", "Flight controller supported"); 
     mFlightController = ((DJIAircraft) DJISDKManager.getInstance().getDJIProduct()).getFlightController(); 
     mFlightController.setUpdateSystemStateCallback(new DJIFlightControllerDelegate.FlightControllerUpdateSystemStateCallback() { 
      @Override 
      public void onResult(final DJIFlightControllerCurrentState state) { 
       mData.sdk_speed_h = String.valueOf(state.getVelocityX()); 
       mData.sdk_speed_v = String.valueOf(state.getVelocityY()); 
       mData.sdk_lat = String.valueOf(state.getAircraftLocation().getLatitude()); 
       mData.sdk_lng = String.valueOf(state.getAircraftLocation().getLongitude()); 
       mData.sdk_altitude = String.valueOf(state.getUltrasonicHeight()); 
      } 
     }); 
    } else { 
     Log.d("DJI", "Flight controller not supported"); 
     connectDrone(); 
    } 
} 
private boolean isFlightControllerSupported() { 
    return DJISDKManager.getInstance().getDJIProduct() != null && 
      DJISDKManager.getInstance().getDJIProduct() instanceof DJIAircraft && 
      ((DJIAircraft) DJISDKManager.getInstance().getDJIProduct()).getFlightController() != null; 
} 












//CALLBACKS 

private DJISDKManager.DJISDKManagerCallback mDJISDKManagerCallback = new DJISDKManager.DJISDKManagerCallback() { 
    @Override 
    public void onGetRegisteredResult(DJIError error) { 
     Log.d("DJI", error == null ? "success" : error.getDescription()); 
     if(error == DJISDKError.REGISTRATION_SUCCESS) { 
      connectDrone(); 
      Handler handler = new Handler(Looper.getMainLooper()); 
      handler.post(new Runnable() { 
       @Override 
       public void run() { 
        Log.d("DJI", "DGI Registration Succcessfull!"); 
       } 
      }); 
     } else { 
      Handler handler = new Handler(Looper.getMainLooper()); 
      handler.post(new Runnable() { 
       @Override 
       public void run() { 
        Log.d("DJI", "Register App Failed! Please enter your App Key and check the network."); 
        Toast.showError((Activity) mContext, "The purplebox failed to connect to a Dji Drone"); 
        reInitSdk(); 
       } 
      }); 
     } 
    } 
    @Override 
    public void onProductChanged(DJIBaseProduct oldProduct, DJIBaseProduct newProduct) { 
     mProduct = newProduct; 
     if(mProduct != null) { 
      Log.d("DJI", "Product found: " + newProduct.getModel()); 
      mProduct.setDJIBaseProductListener(mDJIBaseProductListener); 
      //setup product 
      setupCallbacks(); 
     } else { 
      Log.d("DJI", "Product Not Found, reconnecting..."); 
      //connectDrone(); 
     } 
    } 
}; 

private DJIBaseProduct.DJIBaseProductListener mDJIBaseProductListener = new DJIBaseProduct.DJIBaseProductListener() { 
    @Override 
    public void onComponentChange(DJIBaseProduct.DJIComponentKey key, DJIBaseComponent oldComponent, DJIBaseComponent newComponent) { 
     Log.d("DJI", "Component Changed"); 
    } 
    @Override 
    public void onProductConnectivityChanged(boolean isConnected) { 
     Log.d("DJI", "DGI Connected: " + isConnected); 
    } 
}; 

}

Répondre

0

Il semble que vous ne l'avez pas appelé registerApp. Au contraire, il semble que vous recherchiez une connexion USB.