dji-firmware-tools icon indicating copy to clipboard operation
dji-firmware-tools copied to clipboard

Power zone (FCC/CE) in GL300a/b/c RC Firmware

Open MrBurnsAT opened this issue 7 years ago • 439 comments

RC Firmware must be changeable too.

Some limitations was added with RC Firmwares 1.6 and newer. Output Power is reduced from 25mW to 10mW in CE Mode.

And It should be possible to change CE to FCC Mode (RC Checks via GPS location and Sets than FCC or CE Mode, USA = FCC, Europe = CE

MrBurnsAT avatar Jan 12 '17 20:01 MrBurnsAT

Actually, the power output mode needs to be changed in both transmitter in radio controller and in the transmitter on OFDM board.

It's good to know the change in power was made with 1.6 - it should allow to find the change by comparing two firmwares. Please make sure that this information is correct, if you can.

mefistotelis avatar Jan 12 '17 20:01 mefistotelis

Yes the change was with RC Firmware 1.6 (C1_FW_v01.06.0000.bin) (DJI support confirmed me this! They must do this because of local laws)

Craft and RC Firmwares are not the same since 1.3.2 which was the last Craft and RC update which was done by USB drive. Since there RC Firmware is only updated via DJI GoApp.

And not every craft firmware Version there was a RC Firmware Update. For P3 actual RC Firmware is 1.6 (where encryption of the Transmission also has been changed)

RC Firmware 1.6 is only compatible with craft firmware 1.8 or newer!!!

MrBurnsAT avatar Jan 12 '17 22:01 MrBurnsAT

Thank you, I didn't know many of these facts. I will take a look at RC firmware.

mefistotelis avatar Jan 12 '17 23:01 mefistotelis

In Ph3 Pro/Adv the hardware related to RF transmission is different than for Ph3 Std.

It would seem that transmission is configured by: m1500 radio transmitter 'IG810 LB2_68013_TX' and m1600 radio receiver 'IG810 LB2_68013_RX ground'

I don't know whether these transmitters are visible from any other firmware as network interfaces.

I also don't know if the tx power is configurable within these firmwares directly, or sent to it from a more complex module.

EDIT: We now have wikis which explain what each hardware chip does, and what each FW module does.

mefistotelis avatar Jan 18 '17 00:01 mefistotelis

Yes the change was with RC Firmware 1.6 (C1_FW_v01.06.0000.bin) (DJI support confirmed me this! They must do this because of local laws)

I compared C1_FW_V01.05.0080 and C1_FW_V01.06.0000. The only modules which are different between these versions are m1400 and m1401, which are MCUs for A and B remotes.

Will look in detail at this module.

mefistotelis avatar Jan 18 '17 01:01 mefistotelis

mefistotelis : these seems to be lots of variables in mi09.bin have you had and success defining any of them. and can you tell me what the FPGA ground module is?

notsolowki avatar Jan 20 '17 00:01 notsolowki

Will arm_bin2elf.py work on RC firmware m1400/m1401

Yes; but I'm not sure what is the correct base address. Without it, some pointers may lead to invalid locations. Maybe it's 0? Not sure, will figure it out later.

The ".bss" section should probably start at 0x10000000. Its size seem to extend to 0x50000000, but so much data would slow down any disassembler - I will try to select narrowed area.

these seems to be lots of variables in mi09.bin have you had and success defining any of them.

I'm not sure what you mean, you shoul ask for specific mXXYY module.

can you tell me what the FPGA ground module is?

I'm not sure what is the function of FPGAs used in the drone. I don't have much experience in analysing synthesised hardware programming; without debug symbols, it is very hard to grasp the purpose of the circuit. Hardware definition is something completely different than processor programming, even if the languages seem to look alike.

mefistotelis avatar Jan 20 '17 01:01 mefistotelis

RC hacking update:

We don't know what information the RC receives to set output power:

  • if it receives GPS coordinates, then the firmware must have definition of CE area
  • if it receives simple "set CE mode" instruction, then CE area definition must be in the aircraft FW

Either way, since we know how the CE area is defined in the mobile app (for P3 Standard), we can expect one of the firmware modules will have similar float/double numbers within. I believe this is the best starting point for getting the CE/FCC code - search for coordinates.

I tried looking at the RC firmware code directly, but this isn't easy - there are almost no debug messages which would allow to locate points of interests.

mefistotelis avatar Feb 01 '17 11:02 mefistotelis

@mefistotelis: thanks for info who knows, maybe P3X and P3A obey that SetPowerMode command too :) I edited my DJI GO in a way I was talking about, but I have no resources to actually measure, if it has any effect

ferraript avatar Feb 01 '17 20:02 ferraript

i can tell you i had a fly away at a really high altitude and i was 9,000ft away before i was loosing signal but i never totally lost it. could someone use a mltimeter to measure the mw from the antenna output?

notsolowki avatar Feb 02 '17 18:02 notsolowki

Measured GL300A and B model radios, without GPS-lock, both 0.72-0.76mW. I will measure again during weekend, with GPS lock. Tested with RC 1.5.8 only, 1.7.6 doesnt seem to work with 1.6 radio.

rulppa avatar Feb 02 '17 19:02 rulppa

1.7.6 doesnt seem to work with 1.6 radio

yeah, that's right RC FW 1.6 (and newer) is compatible only with AC FW 1.8 (and newer) and since you said you don't have Android phone, I doubt you'll be able to downgrade RC to 1.4.3 to test power output :-(

ferraript avatar Feb 02 '17 21:02 ferraript

I prepared a list of places in C1_FW_V01.06.0000 which could store Europe coordinates. Now each of the matches needs to be checked.

How I made the list:

# Europe is around 71,-18 .. 27,50; match -19..0 and 0..69 with no exponent
ls -1 C1_FW_*.bin | xargs -I {} sh -c 'od -tfF -w4 {} | sed "s/^\(.*\)/{}: \1/g"' | grep '^.*: [0-9]*[ ]*\([1-6]\?[0-9]\|[-][1]\?[0-9]\)\([.][0-9]*\)\?$' | grep -v "^.*: [0-9]*[ ]*[-]\?0\([.][0-9]*\|\)$" > _match_f1.txt
ls -1 C1_FW_*.bin | xargs -I {} sh -c 'od -tfD -w8 -j0 {} | sed "s/^\(.*\)/{}: \1/g"' | grep '^.*: [0-9]*[ ]*\([1-6]\?[0-9]\|[-][1]\?[0-9]\)\([.][0-9]*\)\?$' | grep -v "^.*: [0-9]*[ ]*[-]\?0\([.][0-9]*\|\)$" > _match_d1.txt
ls -1 C1_FW_*.bin | xargs -I {} sh -c 'od -tfD -w8 -j4 {} | sed "s/^\(.*\)/{}: \1/g"' | grep '^.*: [0-9]*[ ]*\([1-6]\?[0-9]\|[-][1]\?[0-9]\)\([.][0-9]*\)\?$' | grep -v "^.*: [0-9]*[ ]*[-]\?0\([.][0-9]*\|\)$" > _match_d2.txt
# Now assuming lon lat coords are adjacent, let's find 71..27 and get one before and one after
grep -B1 -A1 '^.*: [0-9]*[ ]*[2-7][0-9]\([.][0-9]*\)\?$' _match_f1.txt > _match_f1b.txt
grep -B1 -A1 '^.*: [0-9]*[ ]*[2-7][0-9]\([.][0-9]*\)\?$' _match_d1.txt > _match_d1b.txt
grep -B1 -A1 '^.*: [0-9]*[ ]*[2-7][0-9]\([.][0-9]*\)\?$' _match_d2.txt > _match_d2b.txt

Files with list of possible coords: _match_d1b.txt _match_d2b.txt _match_f1b.txt

mefistotelis avatar Feb 04 '17 14:02 mefistotelis

interesting (and crazy linux commands :D )

just remember, that coordinates may be saved in different ways in DJI GO, Europe is stored as (55.529627,15.702531,2824707), where coordinates are double and radius is int but, for example, coordinates may be stored as long (and they are then divided by 1000000) or, they can be stored in radian format, so 55.529627° = 0.969174823554

ferraript avatar Feb 04 '17 21:02 ferraript

Also thought this might be useful.. DJI PHANTOM 3 PROFESSIONAL HASHES AND PASSWORDS

UPDATE: ftp password is cracked: admin999

Some hashes and passwords:

  1. System access:

root:$6$zi2k1pqQ$aYoxWoM9suJzq4xcIz0Uh/sMBQxIrM7QzqpNH.UMrX6TAmBx37jN0ygKlnpmHkgilWV5YzpfikkaylTWWo8RU0:16184:0:99999:7::: bin::10933:0:99999:7::: daemon::10933:0:99999:7::: adm::10933:0:99999:7::: lp::10933:0:99999:7::: sync::10933:0:99999:7::: shutdown::10933:0:99999:7::: halt::10933:0:99999:7::: uucp::10933:0:99999:7::: operator::10933:0:99999:7::: ftp:$6$Kt6U5MHk$aCy81r9Wz49TlfDwSPHkx8bEouNFdt0khJg7Pj1HOJtECe5.t9KfNWOKKQXnyVqjd5whliLQGTQkXfB8p3rBX/:10933:0:99999:7::: nobody::10933:0:99999:7::: default::10933:0:99999:7::: a8sdk:HHTiH8SGMjHoM:0:0:99999:7::: root, ftp, default, a8sdk has an access to /bin/sh

  1. Wireless networks:

ESSID=Amba_AP PASSWORD=PWFORAMBA

ESSID=amba_boss PASSWORD=1234567890 P.S.

Wi-Fi Channel is number 5

ifconfig wlan0 192.168.42.1 …dhcp-range=192.168.42.2,192.168.42.6

Have a safe flight! ;-)

KennethMcNutt avatar Feb 05 '17 07:02 KennethMcNutt

@FERRARIPT what would be involved in making the latest dji go app send all the parameters like 2.4

notsolowki avatar Feb 06 '17 06:02 notsolowki

@notsolowki: I don't know if I would be able to hack DJI GO 3 in such a way in 2.4.3, there is one class (dji\pilot\fpv\stage\cs) with onClick method and according to clicked button, it does some actions if "Reset All Settings" is clicked, there are some checks and in the end DataFlycResetParams class sends command to AC

however, in 3.0.1, every button has its own class and onClick method (fortunately?) class for "Reset All Settings" button exists (dji\setting\ui\flyc\ResetView), but it's not used maybe I could redirect actions from here to another button - and the most similar button (I mean with similar class structure) is ClearFlightLogsButton

but I can't guarantee it will work

I still think the easiest way is to use DJI GO 2 with existing "Reset All Settings" button

ferraript avatar Feb 06 '17 23:02 ferraript

someone pointed this out to me

there is a lot of FDI things, freqs, max. FCC ids, (all fcc id's starts with with FDI) so i think this is the way to get more power out? (dB/mW) as you might know, when eg. inspire1 controller is hooked to I1, measuring it's power, its WAY better than same remote, linked to p3p. (same remote, same fw, just different pairing process which adjust the output)

There is one interesting number..

" "defaultValue" : 0.150000, "name" : "g_config.fdi.max_ctrl_frequency_power_0""

This is what i think it will affect..

https://dl.dropboxusercontent.com/u/1177154/phantompilots/p3p/Video 06-02-2017, 16.28.33.mov

left work already, i will test tomorrow to see if it "handshakes" with more power when the number is more than 0.15, what do you think?

notsolowki avatar Feb 07 '17 22:02 notsolowki

"name" : "g_config.fdi.max_ctrl_frequency_power_0""

Sounds promising. I will check it in the code.

EDIT: checked. The value does not seem to be used for any computations in the flight controller itself, so it is possible it's used for another module.

mefistotelis avatar Feb 07 '17 23:02 mefistotelis

does that mean it could change the output power?

notsolowki avatar Feb 08 '17 02:02 notsolowki

It could. This means the value isn't used by the flight controller directly, but this also means its value is not set by flight controller based on home point. It would be best to check by experiment.

mefistotelis avatar Feb 08 '17 18:02 mefistotelis

I have a change which I need to test as part of developing the FCC hack.

I need someone with RF Power Meter to test it. If there's anyone interested, please give me a firmware version you prefer.

There is a chance of bricking your RC with this; I will do my best to verify it on my end, but still, volunteer takes the risk. Anyone interested?

mefistotelis avatar Feb 21 '17 08:02 mefistotelis

Upload version 1.5.8. Thanks,

notsolowki avatar Feb 21 '17 14:02 notsolowki

I'm from europe (CE-mode), able to measure directly from RC, GL300A and B versions. I can test the 1.5.8 if needed.

rulppa avatar Feb 21 '17 17:02 rulppa

Here's the modification in two firmwares: C1_FW_V01.05.0080 C1_FW_V01.06.0000 Dl link: https://mega.nz/#!hcV0URSB!GauZgmpVWEF3Hf8d5N0NPtjSjQT4IcoAPJa3Fs7J9Lg

What is modified:

xxd  -p -c1024 C1_FW_V01.06.0000_mi06.bin | \
  sed 's/\(00b5..4.85b0\)\(c17a\)\(..71017ac1f34112022a..d141f0800101720021\)/\10121\3/' | \
  xxd -r -p -c1024 > C1_FW_V01.06.0000_mi06-mod.bin

xxd  -p -c1024 C1_FW_V01.05.0080_mi06.bin | \
  sed 's/\(00b5..4.85b0\)\(c17a\)\(..71017ac1f34112022a..d141f0800101720021\)/\10121\3/' | \
  xxd -r -p -c1024 > C1_FW_V01.05.0080_mi06-mod.bin

In assembly:

85 B0		SUB             SP, SP, #0x14
-C1 7A		LDRB            R1, [R0,#0xB]
+01 21		MOVS            R1, #1
91 71		STRB            R1, [R2,#(zone_is_fcc - 0x100005E8)]
01 7A		LDRB            R1, [R0,#8]

mefistotelis avatar Feb 21 '17 19:02 mefistotelis

New to android and cant currently do this with iOS. Whats the location where go app downloads these files before up/downgrade so i can replace with new one?

rulppa avatar Feb 21 '17 21:02 rulppa

Whats the location where go app downloads these files before up/downgrade so i can replace with new one?

was mentioned here

ferraript avatar Feb 21 '17 22:02 ferraript

@ferraript

Under /Android/ i have only 3 directories, data, media and obb. So not there, or i need rooted device to view those folders, idk. Time to get some sleep, i will try another device tomorrow, which i believe i can root. Can't root this one :(

rulppa avatar Feb 21 '17 22:02 rulppa

no, it's just written in specific way :D it's in internal SD card, in DJI/dji.pilot/package

ferraript avatar Feb 21 '17 22:02 ferraript

Oh ok, what kind of way is that, to give directory that actually exists but is wrong lol. Downgrading now.

rulppa avatar Feb 21 '17 22:02 rulppa