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.
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:
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.
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…
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 |
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/
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); }