Table of Contents

DJI Configs Files

NOTE: The dji_configs files do not work on the most recent DJI GO software versions, you must be on 4.1.12 or older. This information is here for archival purposes only unless you wish to perform an IPA Rollback Click Here For More Details or are sideloading an older app onto your Android device

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.

Warnings

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.

Manual Apply the config (Android)

Auto Apply the config (Android) with App

Is FCC mod working? How to check?

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)

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)

EDIT 06/28/2018: There is a trick to know if you are in FCC or CE Mode. I found this on the forum MavicPilots ( https://mavicpilots.com/threads/how-to-know-if-you-are-in-fcc-or-ec-mode.38479/ ). A big thank to DragonJah.

In transmission setting, if you look at the signal graph, you can see than there is two horizontal lines, one for the “~1km” and one for the “~4km”.

If you are in EC mode, the “~1km” line is just under 90 dbm/mhz, so between 90 and 100dbm/mhz and the “~4km” line is between 100 and 110 dbm/mhz.

If you are in FCC mode, the “~1km” line is between 80 and 90 dbm/mhz and the “~4km” line is juste upper 100 dbm/mhz, so between 90 and 100dbm/mhz.

I tried with the 1.5W file but the graph stay like if I was in the EC Mode…

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

  defaults write com.apple.finder AppleShowAllFiles -bool YES
  killAll Finder

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);
}