User Tools

Site Tools

Translations of this page:

howto:dji_configs

DJI Configs Files

NOTE: The dji_configs files do not work on the most recent DJI GO software versions. This information is here for archival purposes only.

The DJI Configs file mod will work on both Android and iOS. The maximum power at which consumer products can transmit on the 2.4Ghz wifi frequency used by DJI aircraft is 0.1 watts (0.1W) in many countries. In a minority of countries, including the U.S. it is 1W. Some countries lie in between. Only one country, India, allows more than 1W (In India, the max is 4W!). In most parts of the world DJI aircraft uses a power output of 0.1W by default, which is pretty weak. In the U.S., it uses 0.4W. However, the equipment can be configured to a maximum of 1.5 Watts of TX power anywhere in the world with the directions below.

iOS Warnings

Stay away from iTunes 12.7 - you won’t be able to upload IPA file from Mac/PC to iDevice. This option has been removed by Apple forcing you to redownload IPA directly from iDevice. Programs section is no longer available in iTunes and you can’t download IPA directly into your Mac. If you still want to download previous versions of any program stay with iTunes 12.6. If you want to upload config files using method described below use iTunes 12.6 or external tool like iMazing

Warnings

  • Changing the video frequency to 2.33 or 2.57 ghz will be using the ISM/LIPD band. Transmitting below 0.1W is permitted in most countries without a license. Transmitting on these frequencies at higher power require the operator to hold a HAM radio license in most countries. Make sure you check your local laws before applying these changes.
  • Transmitting at higher power levels than the 0.5W is not approved by DJI. Do not use this power level unless you understand the risks of transmitting at this power level.

Supported Versions

There have been many questions about supported software/firmware on an aircraft, remote control, and even DJI go itself. This part of this page will attempt to answer some of those questions.

Firstly, lets look at how this all works:

  1. DJI GO parses, and sends commands to an RC based on an config file
  2. The RC receives the messages from DJI go, and updates its own radio settings, and passes the commands to the AC
  3. The AC receives the messages from the RC, and reconfigures its radio settings.

32 Channel Mod file

This file adds additional channels within the 2.4 ghz band increasing them to 32. Depending on the GO App, by selecting “manual channel selection” one of the additional channels can be set. This can be useful in certain circumstances for example when flying multiple dji craft in the same proximity. Or in a dense interference area. Currently, the 32 Ch. mod cannot be combined with the FCC mods.

Apply the config (Android)

  • Download your config file from one of the options below
  • Rename the file to .DJI.configs (note the preceding “.”)
  • Kill the DJI GO 4 app on your android device
  • Connect your device to your PC
  • Copy the .DJI.configs file to this folder on your device: \Android\data\dji.go.v4\files
  • done

Is FCC mod working? How to check?

Hi all guys. To make some clarity about the FCC argument and to verify if it is working, as the wide confusion surrounding the subject, I wanted to tell you that the FCC mod using the .DJI.configs (take care: put the dot DJI dot configs file in the right folder \Android\data\dji.go.v4\files) works, it doesn't matter of the number of WIFI CHANNELS shown by the application. In a nutshell, to avoid misunderstanding, FILE insertion will enable FCC mode even if you are in a non-FCC area. You will not see anything about your application that warns you whether it is active or not. It works just fine. The only way to test the FCC mode is to measure transmit power with a dedicated tool, or, as I did, fly two drones, mavic in my case, in the same place at the same time and in the same configurations, with the only difference in the presence of the .DJI.configs file in one of the two drones. Well, one mavic at a distance of about 3800 meters had WEAK SIGNAL and activated the automatic RTH, the other, continued to fly and at a distance of about 4500 meters it had 4 receive notches on the total of 5 in both the controller and in HD. (test stopped because no need to go further)

UPDATE!!!! It seems that .DJI.configs file is working until DJI GO V4 4.1.12 (iOS version) and DJI GO V4 4.1.10. With newer versions the .DJI.configs file seem that it is not working.

Here the REAL test showing that .DJI.configs is really working (thanks to @GabrieleFK14 for hardware testing)

CE MODE https://postimg.org/image/3y11dge9f/

FCC 1.5w BOOST MODE (TAKE CARE)

https://s13.postimg.org/3l9n7blpz/FCC_Boost_Mode_1.5w.jpg

how it has tested https://drive.google.com/open?id=1YW47GcpA3hDWGiqj6x2mIJWWKR_XpbtD

(By Lukappaseidue)

Apply the config (iOS)

This hack is really simple. You only need itunes on your computer. However, there is one more step required for OSX to enable displaying of hidden files in finder before you can start

  • OSX - Display hidden files
  defaults write com.apple.finder AppleShowAllFiles -bool YES
  killAll Finder
  • Download your config file from one of the options below
  • Rename the file to .DJI.configs (note the preceding “.”)
  • Kill the DJI GO 4 app on your apple device
  • Connect your iPhone/iPad/iPod to your PC and open itunes
  • In iTunes, click your apple device, go to apps, scroll to the bottom and find DJI GO 4
  • Add the file in itunes to DJI GO 4 and click Sync/Apply

Note: For OSX users. After dragging the file into iTunes, you will not see it there. iTunes is still hiding the file from you even though it has copied to that folder successfully. If you want to check… or even to upload the file without iTunes, check out http://www.i-funbox.com/

Files

I added a new column that describes where these configurations have been confirmed to be working as expected. The effect of these files in other devices is unknown.

Power or DescriptionVideo FrequencyFileTested On
Default - 0.09W2.4-2.475ghzdji.configs_force_ceMavic
Default - 0.09W2.33ghz dji.configs_force_ce_23Mavic
Default - 0.09W2.57ghz dji.configs_force_ce_25Mavic
FCC - 0.4W 2.4-2.475ghzdji.configs_force_fccMavic
FCC - 0.4W 2.33ghz dji.configs_force_fcc_and_23Mavic
FCC - 0.4W 2.57ghz dji.configs_force_fcc_and_25Mavic
1.5W 2.4-2.475ghzdji.configs_force_boostMavic
1.5W 2.33ghz dji.configs_force_boost_and_23Mavic
1.5W 2.57ghz dji.configs_force_boost_and_25Mavic
32 Channel Mod dji.configs_32-ch_modP3P, P3A, P4P
FCC+ChannelMod dji.configs_force_fcc_32-ch_modExperimental

Spectrum Analyzer Observations

Extensive testing of the mod's with a spectrum analyzer in this video by beanbubba. You can find more of his testing at https://mavicpilots.com/threads/mavic-radio-mods-primer.34444/

Detailed Video Tutorial

This tutorial was created by digdat0. He has many tutorials on his website

Hex Dumps

Below, we can see the data contained in each of these files. It is easy to see the individual bits that change for power and frequency tweaks. What is not so obvious at the moment is what part of this file does the 32 channel mod. If anyone has that detail, it would be useful information.

dji.configs_32-ch_mod

00000000  44 4a 49 20 53 4f 46 54  57 41 52 45 20 43 4f 4e  |DJI SOFTWARE CON|
00000010  46 49 47 20 3a 20 44 4f  20 4e 4f 54 20 44 45 4c  |FIG : DO NOT DEL|
00000020  45 54 45 21 00 00 00 01  11 11 11 11 11 11 11 11  |ETE!............|
00000030

dji.configs_force_boost

00000000  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000010  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000020  01 01 01 01 01 01 01 01  00 00 00 00 00 00 00 22  |..............."|
00000030  22 22 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |""..............|
00000040  00 00 00 00 00 00 00                              |.......|

dji.configs_force_boost_and_23

00000000  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000010  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000020  01 01 01 01 01 01 01 01  00 00 00 00 00 00 00 66  |...............f|
00000030  66 66 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |ff..............|
00000040  00 00 00 00 00 00 00                              |.......|

dji.configs_force_boost_and_25

00000000  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000010  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000020  01 01 01 01 01 01 01 01  00 00 00 00 00 00 00 aa  |...............?|
00000030  aa aa 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |??..............|
00000040  00 00 00 00 00 00 00                              |.......|
00000047

dji.configs_force_ce

00000000  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000010  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000020  01 01 01 01 01 01 01 01  00 00 00 00 00 00 00 44  |...............D|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00                              |.......|
00000047

dji.configs_force_ce_23

00000000  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000010  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000020  01 01 01 01 01 01 01 01  00 00 00 00 00 00 00 44  |...............D|
00000030  44 44 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |DD..............|
00000040  00 00 00 00 00 00 00                              |.......|
00000047

dji.configs_force_ce_25

00000000  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000010  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000020  01 01 01 01 01 01 01 01  00 00 00 00 00 00 00 88  |................|
00000030  88 88 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00                              |.......|
00000047

dji.configs_force_fcc

00000000  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000010  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000020  01 01 01 01 01 01 01 01  00 00 00 00 00 00 00 11  |................|
00000030  11 11 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00                              |.......|
00000047

dji.configs_force_fcc_and_23

00000000  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000010  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000020  01 01 01 01 01 01 01 01  00 00 00 00 00 00 00 55  |...............U|
00000030  55 55 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |UU..............|
00000040  00 00 00 00 00 00 00                              |.......|
00000047

dji.configs_force_fcc_and_25

00000000  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000010  01 01 01 01 01 01 01 01  01 01 01 01 01 01 01 01  |................|
00000020  01 01 01 01 01 01 01 01  00 00 00 00 00 00 00 99  |................|
00000030  99 99 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00                              |.......|
00000047

Credits

Code

The code below was reverse engineered from DJI GO 4.1.12. It is included here to help people see that even the latest DJI GO app still parses this file.

DJIAppSettings-loadDJICfg.c
void __cdecl -[DJIAppSettings loadDJICfg](DJIAppSettings *self, SEL a2)
{
  DJIAppSettings *v2; // x19
  struct objc_object *v3; // x0
  void *v4; // x0
  void *v5; // x21
  void *v6; // x0
  __int64 v7; // x20
  void *v8; // x0
  void *v9; // x0
  void *v10; // x21
  void *v11; // x0
  void *v12; // x0
  void *v13; // x0
  __int64 v14; // x8
  void *v15; // x0
  void *v16; // x0
  void *v17; // x0
  char v18; // w22
 
  v2 = self;
  v3 = +[DJIFileHelper fetchDocumentPath](&OBJC_CLASS___DJIFileHelper, "fetchDocumentPath");
  v4 = (void *)objc_retainAutoreleasedReturnValue(v3);
  v5 = v4;
  v6 = objc_msgSend(v4, "stringByAppendingPathComponent:", CFSTR(".DJI.configs"));
  v7 = objc_retainAutoreleasedReturnValue(v6);
  objc_release(v5);
  v8 = objc_msgSend(&OBJC_CLASS___NSData, "dataWithContentsOfFile:", v7);
  v9 = (void *)objc_retainAutoreleasedReturnValue(v8);
  v10 = v9;
  if ( v9 )
  {
    v2->_canUseIllegalChannels = 0;
    v2->_mfiDisable = 0;
    v2->_firmwareServiceType = 0;
    v2->_limitCameraRecordingTime = 1;
    v2->_simulatorInternalDisable = 0;
    if ( (unsigned __int64)objc_msgSend(v9, "length") >= 0x29 )
    {
      v11 = (void *)objc_retainAutorelease(v10);
      if ( *((_BYTE *)objc_msgSend(v11, "bytes") + 39) == 1 )
        v2->_canUseIllegalChannels = 1;
    }
    if ( (unsigned __int64)objc_msgSend(v10, "length") >= 0x2A )
    {
      v12 = (void *)objc_retainAutorelease(v10);
      if ( *((_BYTE *)objc_msgSend(v12, "bytes") + 40) == 1 )
        v2->_mfiDisable = 1;
    }
    if ( (unsigned __int64)objc_msgSend(v10, "length") >= 0x2D )
    {
      v13 = (void *)objc_retainAutorelease(v10);
      v14 = *((unsigned __int8 *)objc_msgSend(v13, "bytes") + 43);
      if ( (_DWORD)v14 == 2 )
        v2->_firmwareServiceType = 2;
      else
        v2->_firmwareServiceType = v14 == 1;
    }
    if ( (unsigned __int64)objc_msgSend(v10, "length") >= 0x2E )
    {
      v15 = (void *)objc_retainAutorelease(v10);
      if ( *((_BYTE *)objc_msgSend(v15, "bytes") + 44) == 1 )
        v2->_limitCameraRecordingTime = 0;
    }
    if ( (unsigned __int64)objc_msgSend(v10, "length") >= 0x2F )
    {
      v16 = (void *)objc_retainAutorelease(v10);
      if ( *((_BYTE *)objc_msgSend(v16, "bytes") + 45) == 1 )
        v2->_simulatorInternalDisable = 1;
    }
    if ( (unsigned __int64)objc_msgSend(v10, "length") >= 0x31 )
    {
      v17 = (void *)objc_retainAutorelease(v10);
      v18 = *((_BYTE *)objc_msgSend(v17, "bytes") + 48);
      if ( v18 & 1 )
        -[DJIAppSettings setSdr_force_fcc:](v2, "setSdr_force_fcc:", 1LL);
      if ( v18 & 2 )
        -[DJIAppSettings setSdr_force_boost:](v2, "setSdr_force_boost:", 1LL);
      if ( v18 & 4 )
        -[DJIAppSettings setSdr_force_2_3_G:](v2, "setSdr_force_2_3_G:", 1LL);
      if ( v18 & 8 )
        -[DJIAppSettings setSdr_force_2_5_G:](v2, "setSdr_force_2_5_G:", 1LL);
    }
  }
  objc_release(v10);
  objc_release(v7);
}
howto/dji_configs.txt · Last modified: 2018/06/14 17:34 by beanbubba