This is an old revision of the document!
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. Laws in the United States allow transmit power of 0.5W for radio transmission on the frequencies used by DJI aircraft. In other parts of the world, CE restrictions permit 0.025W. Outside the United States, DJI equipment uses a power output of ~0.009W by default which is pretty weak. The equipment can be configured to a maximum of 1.5 Watts of TX power.
If you are not in the USA and you want to increase the power level, follow the directions below.
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
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:
UPDATE: Starting from later version than DJI GO V4 4.1.12 (iOS version) and DJI GO V4 4.1.10 (Android version) config files do not work. It will only work on version equal to or below those.
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.
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) Lukappaseidue
UPDATE! It seems that starting from later version than DJI GO V4 4.1.12 (iOS version) and DJI GO V4 4.1.10 (Android version) config files do not work (TAKE CARE, IT SEEM: tested by myself with my MAVIC in the same place (and Android Version)
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/
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 Description | Video Frequency | File | Tested On |
---|---|---|---|
Default - 0.09W | 2.4-2.475ghz | dji.configs_force_ce | Mavic |
Default - 0.09W | 2.33ghz | dji.configs_force_ce_23 | Mavic |
Default - 0.09W | 2.57ghz | dji.configs_force_ce_25 | Mavic |
FCC - 0.4W | 2.4-2.475ghz | dji.configs_force_fcc | Mavic |
FCC - 0.4W | 2.33ghz | dji.configs_force_fcc_and_23 | Mavic |
FCC - 0.4W | 2.57ghz | dji.configs_force_fcc_and_25 | Mavic |
1.5W | 2.4-2.475ghz | dji.configs_force_boost | Mavic |
1.5W | 2.33ghz | dji.configs_force_boost_and_23 | Mavic |
1.5W | 2.57ghz | dji.configs_force_boost_and_25 | Mavic |
32 Channel Mod | dji.configs_32-ch_mod | P3P, P3A, P4P | |
FCC+ChannelMod | dji.configs_force_fcc_32-ch_mod | Experimental |
This tutorial was created by digdat0. He has many tutorials on his website
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.
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
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 |.......|
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 |.......|
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
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
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
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
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
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
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
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.
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); }