This class represents the remote controller of the aircraft. It provides methods to change the settings of the physical remote controller. For some products (e.g. Inspire 1 and Matrice 100), the class provides methods to manager the slave/master mode of the remote controllers. A remote controller is a device that can have a GPS, battery, radio, buttons, sticks, wheels, and output ports for video. The mobile device is connected to the remote controller, which is always sending out information about what everything is doing. The normal remote controller is called the master. A slave wirelessly connects to the master remote controller at 5 GHz, and the aircraft can also download information to the slave. The slave can send gimbal control commands to the master. This configuration allows one person to fly the aircraft while another person controls the gimbal. This object is available from the DJIAircraft subclass off DJIBaseProduct.
Callback function that gets called when a slave Remote Controller makes a request to a master Remote Controller to control the gimbal using the method requestGimbalControlRightWithCallbackBlock.
Callback function that updates the Remote Focus State, only support Focus product. If the isRCRemoteFocusCheckingSupported is YES, this delegate method will be called.
Callback function that receives the button action triggered by a button click. The relationship between a button and an action is defined by DJIRCButtonConfiguration. It is only supported by Cendence.
Delegate method that receives the calibration progress of the remote controller. The remote controller will start to update the progress after the calibration is started successfully.
Current state of the 5D button. The button can be moved up, down, left and right and can be pressed. The 5D button is supported by Mavic Pro and Mavic 2 remote controllers.
Transformation Switch position. The Transformation Switch is around the Return To Home Button on Inspire, Inspire 1 and M100 Remote Controllers, and controls the state of the aircraft's landing gear.
Position One. For all products except Mavic Pro, this is the left most position of the flight mode switch on a remote controller from the perspective of the pilot. For example, on a Phantom 4 remote controller, Position One is labeled "A". For Mavic Pro, Spark and Mavic Air, this is the position that is furthest away from the pilot and labeled "Sport".
DJIRCFlightModeSwitchTwo
Position Two. For all products except Mavic Pro, this is the middle position of the flight mode switch on a remote controller from the perspective of the pilot. For example, on a Phantom 4 remote controller, Position Two is labeled "S". For Mavic Pro, Spark and Mavic Air, this is the position that is closest to the pilot (the P position).
DJIRCFlightModeSwitchThree
Position Three. For all products except Mavic Pro, this is the right most position of the flight mode switch on a remote controller from the perspective of the pilot. For example, on a Phantom 4 remote controller, Position Two is labeled "P". Mavic Pro, Spark or Mavic Air does not have a third position for the flight mode switch.
Remote Controller's Remote Focus State. The focus product has one dial (focus control) that controls two separate parts of the camera: focal length and aperture. However it can only control one of these at any one time and is an absolute dial, meaning that a specific rotational position of the dial corresponds to a specific focal length or aperture. This means that whenever the dial control mode is changed, the dial first has to be reset to the new mode's previous dial position before the dial can be used to adjust the setting of the new mode. Example workflow:
YES if the focus control works. The control can be either changing the Aperture or Focal Length. If it is NO, follow the DJIRCFocusControllerDirection to rotate the Remote Focus Device until it turns to YES again.
Modes to charge an iOS mobile device. Only supported by Inspire 2.
Enum Members:
DJIRCChargeMobileModeNever
The remote controller does not charge the mobile device.
DJIRCChargeMobileModeAlways
The remote controller charges the mobile device until the the mobile device is fully charged.
DJIRCChargeMobileModeIntelligent
The remote controller charges the mobile device in an intelligent mode: The remote controller starts charging when the mobile device's battery is lowered then 20% and stops charging when the mobile device's battery is above 50%.
The overall state of the remote controller's calibration.
Enum Members:
DJIRCCalibrationOverallStateRecordingCenter
The calibration is started and the remote controller is recording the center position of components. In this phase, user should not move the components.
The remote controller has recorded the center position of components and is recording the physical limits. In this phase, user should move components (sticks and wheels) all the way to the physical limits in any direction.
DJIRCCalibrationOverallStateTimeout
The calibration took too long to finish.
DJIRCCalibrationOverallStateFailed
The calibration failed. Use error to check the reason.
Actions that can be assigned to a customizable button. Some of the actions are reserved and the firmware will execute the corresponding actions even when the application is not connected. Some of the actions are defined by the mobile applications. The application is responsible for implementing the non firmware actions. The definitions used in DJI Go are provided. It is usually recommended to follow DJI Go's definitions for compability so if DJI Go is used at the same time as the SDK application the actions will be expected in both applications.
Enum Members:
DJIRCButtonActionCustom0
Custom action with value 0. In DJI Go, this value represents the action to toggle the camera setting view.
DJIRCButtonActionCustom3
Custom action with value 3. In DJI Go, this value represents the action to switch the the live view and the map view.
DJIRCButtonActionCustom4
Custom action with value 4. In DJI Go, this value represents the action to clear the flight path in the map view.
DJIRCButtonActionCustom5
Custom action with value 5. In DJI Go, this value represents the action to toggle the battery setting view.
DJIRCButtonActionCustom7
Custom action with value 7. In DJI Go, this value represents the action to trigger central exposure metering.
DJIRCButtonActionCustom8
Custom action with value 8. In DJI Go, this value represents the action to toggle AE lock.
DJIRCButtonActionCustom9
Custom action with value 9. In DJI Go, this value represents the action to toggle the LEDs on the four arms.
DJIRCButtonActionResetFPVGimbal
Reset FPV gimbal attitude to the center, the gimbal will rotate 45 degrees in pitch axis up and down when the action is trigger.
DJIRCButtonActionCustom13
Custom action with value 13. In DJI Go, this value represents the action to expand the live view from the FPV camera.
DJIRCButtonActionQuickSpin
Trigger a Quick Spin. This action is handled by the firmware.
DJIRCButtonActionCustom16
Custom action with value 16. In DJI Go, this value represents the action to toggle the playback view.
DJIRCButtonActionCustom17
Custom action with value 17. In DJI Go, this value represents the action to trigger focusing at the center of the live view.
DJIRCButtonActionCustom23
Custom action with value 23. In DJI Go, this value represents the action to request gimbal control (for the slave remote controller).
DJIRCButtonActionCustom24
Custom action with value 24. In DJI Go, this value represents the action to toggle the modes of the gimbal.
DJIRCButtonActionCustom25
Custom action with value 25. In DJI Go, this value represents the action to toggle the customizable button setting view.
DJIRCButtonActionCustom26
Custom action with value 26. In DJI Go, this value represents the action to toggle AF and MF for camera.
DJIRCButtonActionCustom27
Custom action with value 27. In DJI Go, this value represents the action to dismiss the warning tips.
DJIRCButtonActionCustom28
Custom action with value 28. In DJI Go, this value represents the action to toggle the automatic movement of the landing gear.
DJIRCButtonActionCustom29
Custom action with value 29. In DJI Go, this value represents the action to toggle the warning list view.
DJIRCButtonActionSwitchFrequency
Switch frequency bands of the remote controller. This action is handled by the firmware.
DJIRCButtonActionFocus
Trigger the camera focus. This action is handled by the firmware.
DJIRCButtonActionCustom41
Custom action with value 41. In DJI Go, this value represents the action to toggle the composition mode for the Spotlight.
DJIRCButtonActionCustom43
Custom action with value 43. In DJI Go, this value represents the action to toggle the peak focus.
DJIRCButtonActionCustom44
Custom action with value 44. In DJI Go, this value represents the action to toggle the display of grid.
DJIRCButtonActionCustom45
Custom action with value 45. In DJI Go, this value represents the action to toggle the display of histogram.
DJIRCButtonActionCustom46
Custom action with value 46. In DJI Go, this value represents the action to switch the white balance settings.
DJIRCButtonActionCustom47
Custom action with value 47. In DJI Go, this value represents the action to toggle the over-exposure warning.
DJIRCButtonActionCustom52
Custom action with value 52. In DJI Go, this value represents the action to reset the gimbal yaw to align with the aircraft heading.
DJIRCButtonActionToggleLandingGear
Retract or deploy the landing gear. This action is handled by the firmware.
DJIRCButtonActionCustom59
Custom action with value 59. In DJI Go, this value represents the action to toggle the radar map.
DJIRCButtonActionCustom60
Custom action with value 60. In DJI Go, this value represents the action to toggle the downward vision sensors.
DJIRCButtonActionCustom61
Custom action with value 61. In DJI Go, this value represents the action to toggle the forward obstacle avoidance.
DJIRCButtonActionCustom63
Custom action with value 63. In DJI Go, this value represents the action to toggle the full screen mode.
DJIRCButtonActionCustom100
Custom action with value 100. This value is reserved for SDK applications.
DJIRCButtonActionCustom101
Custom action with value 101. This value is reserved for SDK applications.
DJIRCButtonActionCustom102
Custom action with value 102. This value is reserved for SDK applications.
DJIRCButtonActionCustom103
Custom action with value 103. This value is reserved for SDK applications.
DJIRCButtonActionCustom104
Custom action with value 104. This value is reserved for SDK applications.
DJIRCButtonActionCustom105
Custom action with value 105. This value is reserved for SDK applications.
DJIRCButtonActionCustom106
Custom action with value 106. This value is reserved for SDK applications.
DJIRCButtonActionCustom107
Custom action with value 107. This value is reserved for SDK applications.
DJIRCButtonActionCustom108
Custom action with value 108. This value is reserved for SDK applications.
DJIRCButtonActionCustom109
Custom action with value 109. This value is reserved for SDK applications.
DJIRCButtonActionNotDefined
Not defined. It is used to present that no action is bound to a button.
Types of the device that the remote controller can pair with. It is only used when the remote controller supports multi-device pairing. Only Supported by Phantom 4 RTK.
Enum Members:
DJIRCPairingDeviceAircraft
The device to be paired with is an aircraft.
DJIRCPairingDeviceRTKBaseStation
The device to be paired with is an RTK base station.
The state (e.g. unpaired, paired, connected, etc.) of a device that may connected to the remote controller. It is only used when the remote controller supports multi-device pairing. Only supported by DJI Phantom 4 RTK.
Enum Members:
DJIRCMultiDeviceStateUnpaired
The remote controller is unpaired with the device. This state is for both aircraft and base station.
DJIRCMultiDeviceStatePairing
The remote controller is pairing with the device. This state is only for aircraft.
DJIRCMultiDeviceStatePaired
The remote controller is paired. This state is only for aircraft.
DJIRCMultiDeviceStateDisconnected
The remote controller is paired with the device but the connection between the device and the remote controller is broken. The remote controller already remembers the device and the connection will receover automatically when it is possible. This state is only for base station. Only Supported by Phantom 4 RTK.
DJIRCMultiDeviceStateConnected
The remote controller is paired with the device and it is connected to the device. This state is only for base station.
Result when a slave Remote Controller tries to join a master Remote Controller.
Enum Members:
DJIRCConnectToMasterResultAccepted
The slave Remote Controller's attempt to join the master Remote Controller was successful.
DJIRCConnectToMasterResultPasswordError
The slave Remote Controller's attempt to join the master Remote Controller was unsuccessful due to a password error.
DJIRCConnectToMasterResultRejected
The slave Remote Controller's attempt to join the master Remote Controller was rejected.
DJIRCConnectToMasterResultMaximumCapacity
The slave Remote Controller's attempt to join the master Remote Controller was unsuccessful because the master Remote Controller is at the maximum number of slaves it can have.
DJIRCConnectToMasterResultTimeout
The slave Remote Controller's attempt to join the master Remote Controller was unsuccessful because the request timed out.
DJIRCConnectToMasterResultUnknown
The result of the slave Remote Controller's attempt to join the master Remote Controller is unknown.
Result when a slave Remote Controller requests permission to control the gimbal.
Enum Members:
DJIRCRequestGimbalControlResultAccepted
The master Remote Controller agrees to the slave's request.
DJIRCRequestGimbalControlResultRejected
The master Remote Controller denies the slave's request. If the slave Remote Controller wants to control the gimbal, it must send a request to the master Remote Controller first. Then the master Remote Controller can decide to approve or deny the request.
The display name of the remote controller for Lightbridge 2 wireless module. The module is used by stand-alone Lightbridge 2, A3, N3 and Matrice 600 series.
Enters pairing mode, in which the Remote Controller starts pairing with the aircraft. This method is used when the Remote Controller no longer recognizes which aircraft it is paired with.
Starts pairing a target with the specific type (aircraft or RTK base station). This paring method is for Phantom 4 RTK only. To use RTK feature with a base station, the Phantom 4 RTK remote controller need to pair both the base station and the aircraft at the same time. CAUTION: pairing an RTK base station will unpair the paired aircraft. Therefore, to use the base station properly, the user needs to pair the base station first, and the aircraft after. It is only supported when isMultiDevicePairingSupported returns YES.
Stops the multi-device pairing. It is used after the pairing is started and before the remote controller is paired to a device successfully. It is not necessary to call this method if the remote controller is paired to a device successfully. Only Supported by Phantom 4 RTK.
Enables the RTK channel on the remote controller. When RTK air system is using the base station as the reference station, the remote controller should enable the RTK channel and reserve some bandwidth for data transmission between the base station and the air system. CAUTION: toggling RTK channel will reset the airlink between the remote controller and the aircraft. The airlink may take 3 seconds to recover. DO NOT enable/disable the channel when the aircraft is flying. Only Supported by Phantom 4 RTK.
Input Parameters:
BOOL enabled
YES to enable the RTK channel on the remote controller.
Set the mapping of custom style. It will change the current mapping style to DJIRCAircraftMappingStyleCustom. The setting will only take effect when the remote controller is in master mode.
Sets which of the gimbal directions the top left wheel (Gimbal Dial) on the Remote Controller will control. The three options (pitch, roll, and yaw) are outlined in the enum named DJIRCGimbalAxis.
Gets gimbal rotation speed of the top left wheel (Gimbal Dial) on the Remote Controller. The valid range is [0, 100].
Input Parameters:
NSUInteger coefficient
The gimbal control speed coefficient of the top left wheel on the Remote Controller. When it is zero, gimbal control by the top left wheel is disabled.
Sets custom button's (Back Button's) tags, which can be used by the user to record user settings for a particular Remote Controller. Unlike all other buttons, switches and sticks on the Remote Controller, the custom buttons only send state to the Mobile Device and not the aircraft.
Set C1 button enable binding DJI Go app state. If it's enabled, when the user presses the C1 button, an alertView will pop up and ask if you want to open the DJI Go app. This feature only supports MFI certificated Remote Controller. @attention This feature will affect the user of DJI Go app, we suggest you to call this interface to enable the C1 binding feature when your application enter background. Otherwise, the C1 button will be unbound with DJI Go app forever.
Sets the charge mode of a connected iOS device. Note: Android devices are always charging when connected to the remote controller. It is only supported by Inspire 2, M200 series, Cendence and Mavic 2 series.
Gets the mode to charge the connected iOS device. Note that Android devices are always charging when connected to the remote controller. It is only supported by Inspire 2, M200 series, Cendence, and Mavic 2 series.
Query method to check if the Remote Controller supports master/slave mode. Master-slave mode is supported by the Inspire 1, Inspire 1 Pro, Matrice 100, Lightbridge 2 (including Matrice 600, Matrice 600 Pro, A3 and N3) and Inspire 2. Inspire 2 is using a new set of interfaces to control the master and slave connection. - Similar to other products, Inspire 2's remote controller also use set/get DJIRCMode to change the mode. - A slave remote controller can use getMastersWithCompletion and connectToMasterWithID:authorizationCode:withCompletion to join a master remote controller. - A master remote controller can use setMasterAuthorizationCode:withCompletion to change the authentication code.
Sets the Remote Controller's mode. See the DJIRCMode enum for all possible Remote Controller modes. The master and slave modes are only supported for the Inspire 1, Inspire 1 Pro, M100, Lightbridge 2 (including Matrice 600, Matrice 600 Pro, A3 and N3) and Inspire 2.
Gets the Remote Controller's mode. It is supported by the Inspire 1, Inspire 1 Pro, Matrice 100, Lightbridge 2 (including Matrice 600, Matrice 600 Pro, A3 and N3) and Inspire 2.
Gets the Remote Controller's master and slave connection state. It is supported by the Inspire 1, Inspire 1 Pro, Matrice 100, Lightbridge 2 (including Matrice 600, Matrice 600 Pro, A3 and N3) and Inspire 2.
Input Parameters:
BOOL isConnected
Yes if the master and slave remote controller are connected.
Block that receives the information of available master remote controllers. updateBlock will be called repeated with 1 second interval once master searching is started successfully. It will stop when the searching is stopped either by the remote controller itself or by calling stopMasterSearchingWithCompletion.
Returns the state of the master Remote Controller search. The search is initiated by the Mobile Device, but performed by the Remote Controller. Therefore, if the Mobile Device's application crashes while a search is ongoing, this method can be used to let the new instance of the application understand the Remote Controller state.
Used by a slave Remote Controller to join a master Remote Controller. If the master Remote Controller accepts the request, the master Remote Controller will control the aircraft, and the slave Remote Controller will control the gimbal and/or be able to view the downlink video.
Sets the authorization code of a master remote controller. The slave remote controller needs to know the authorization code in order to join the master. A valid input is a string with 6 digits. The default value is "888888". It can only be called when the remote controller is in master mode.
Joins the master remote controller with the specific ID. If the remote controller has joined the same master before, the authorization code is not required until the master remote controller changes its authorization code. In this case, code can be nil. It can only be called when the remote controller is in slave mode.
Input Parameters:
NSString *_Nonnull masterID
Master remote controller with the specific ID to join.
NSString *_Nullable code
Authorization code of the master remote controller.
Requests the gimbal control from the other remote controller. Different from requestLegacyGimbalControlWithCompletion, the gimbal control permission is transferred to the remote controller without the reply from the master remote controller. The master remote controller can attain the gimbal control back by calling the same method. It is only supported by Inspire 2, M200 series and Cendence.
When a slave Remote Controller requests a master Remote Controller to control the gimbal, this method is used by a master Remote Controller to respond to the slave Remote Controller's request.
Input Parameters:
BOOL response
<code>YES</code> if the master Remote Controller agrees to give the slave Remote Controller the right to control the gimbal.
Called by the slave Remote Controller to request gimbal control from the master Remote Controller. It is only supported by Inspire 1 and DJI Lightbridge 2.
YES if the remote controller supports customizable buttons. With the customizable buttons, the user can define the action bound to a button. When the button is clicked, the corresponding action can be received from the delegate method remoteController:didUpdateButtonAction.
Only Cendence supports customizable buttons. This is distinct from remote
controllers with buttons C1 and C2 that support custom tags and a binding to DJI Go.
Gets the names of the customizable button profile groups. The configurations of the customizable buttons are organized as groups. The maximum number of groups is 5 and each group contains 3 profiles. It is only valid when isCustomizableButtonSupported returns YES.
Input Parameters:
NSArray<NSString *> *_Nullable groups
The names of the customizable button profile groups.
Adds a group of customizable button profiles. Three default profiles will be created for the newly added group. The default profile can accessed through defaultButtonActions. It is only valid when isCustomizableButtonSupported returns YES.
Removes a group from the customizable button profiles. There must be at least one group, therefore, the removal of the last group will fail. It is only valid when isCustomizableButtonSupported returns YES.
Selects the customizable button profile group. The profile with 0 configIndex in the group will be applied. It is only valid when isCustomizableButtonSupported returns YES.
Selects the customizable button profile with the specific index in the selected profile group. It is only valid when isCustomizableButtonSupported returns YES.
Input Parameters:
uint8_t profileIndex
The index of the profile to select. The valid range is [0, 2].
Customizes the button configuration. The configuration will be applied to the remote controller immediately and will be stored into the selected profile of the selected profile group. It is only valid when isCustomizableButtonSupported returns YES.
Resets the selected button configuration to the default settings. The default configuration will be applied to the remote controller and will be stored into the selected index of the activated user. It is only valid when isCustomizableButtonSupported returns YES.
Customizes the action of a button. The new setting will be applied to the remote controller and will be stored into the selected profile index of the selected profile group. It is only valid when isCustomizableButtonSupported returns YES.
Directs commands of the physical buttons on the remote controller (rotating gimbal, shoot photo, record video, etc.) to the specific gimbal, when there are multiple gimbals connected. If there is only one gimbal connected, this setting is reset to the remaining gimbal. Enabling setAttitudeSynchronizationEnabled:withCompletion will reset this setting to index 0 and when setAttitudeSynchronizationEnabled:withCompletion is enabled, index can only be set to 0. It is only supported by M210 and M210 RTK.
Input Parameters:
NSUInteger index
Index of the gimbal to receive the remote controller commands.
The index of the gimbal that the remote controller is controlling. Commands of the physical buttons (rotating gimbal, shoot photo, record video, etc.) will be directed to the specific gimbal. If there is only one gimbal connected, this setting is reset to the remaining gimbal's index. Enabling setAttitudeSynchronizationEnabled:withCompletion will reset the value to 0. For product that supports only one gimbal, the value is always 0.
Input Parameters:
NSUInteger index
Get the index of the gimbal that the remote controller is controlling.
Gets the hardware components (sticks or dials) on the remote controller that requires calibration. After starting the calibration, user should move the components returned by this method to their physical limits to complete the calibration. It is only supported by Phantom 4 RTK.
Input Parameters:
NSArray<NSNumber *> * components
The hardware components requiring calibration. Each element in the array is a value of DJIRCCalibrationComponent.
Starts the calibration for the remote controller. Before starting the calibration, all the hardware components requiring calibration (see getCalibrationComponentsWithCompletion) should be returned to their midpoints. The calibration progress for each component can be received from remoteController:didUpdateCalibrationProgress. It is only supported by Phantom 4 RTK.
Stops the calibration for the remote controller. CAUTION: stopping the calibration before each hardware component returns its physical limits at least once may cause error in the remote controller. Resolve the error by restarting the calibration. It is only supported by Phantom 4 RTK.