Merge branch '2.0.x-maintenance' into master-merge-commit
[ExpressLRS.git] / src / python / opentx.py
blobdbf06a0c790226ae2738780375d4a736d20c25a2
1 import os
2 import sys
5 def gen_elrs(source, target, env):
6 source_bin = source[0]
7 sys.stdout.write("Source bin: %s \n" % source_bin)
8 bin_path = os.path.dirname(source_bin.rstr())
9 bin_target = os.path.join(bin_path, 'firmware.elrs')
10 with open(bin_target, "wb+") as _out:
11 _out.write(source_bin.get_contents())
12 _out.close()
13 sys.stdout.write("\n")
14 sys.stdout.write("=====================================================================================================================================\n")
15 sys.stdout.write("|| !!! Copy %s to SD card and choose flash ext. ELRS !!! ||\n" % bin_target)
16 sys.stdout.write("=====================================================================================================================================\n")
17 sys.stdout.write("\n")
18 sys.stdout.flush()
20 def gen_frsky(source, target, env):
21 print("generating frk file...")
22 if "_stock" in env['PIOENV']:
23 return
24 sys.stdout.write("\n")
25 sys.stdout.write("\n")
26 sys.stdout.write("Building flashable .frk file...\n")
27 target_bin = source[0] # target[0]
28 sys.stdout.write("Source bin: %s \n" % target_bin)
29 bin_path = os.path.dirname(target_bin.rstr())
30 bin_target = os.path.join(bin_path, 'elrs-old-bootloader.frk')
31 with open(bin_target, "wb+") as _out:
32 bin_content = target_bin.get_contents()
33 # append FrSky header (16bytes)
34 '''
35 struct FrSkyFirmwareInformation_no_pack {
36 uint32_t fourcc; = 0x4B535246
37 uint8_t headerVersion; = 1
38 uint8_t firmwareVersionMajor;
39 uint8_t firmwareVersionMinor;
40 uint8_t firmwareVersionRevision;
41 uint32_t size; == len(bin_content)
42 uint8_t productFamily;
43 uint8_t productId;
44 uint16_t crc;
46 '''
47 sys.stdout.write("Bin size: %u \n" % len(bin_content))
48 _out.write(b"\x46\x52\x53\x4B") # fourcc
49 _out.write(b"\x01") # header version
50 _out.write(b"\x00\x00\x00") # fw versions
51 size = len(bin_content) + 16
52 _out.write(bytearray(
53 [size & 0xFF, size >> 8 & 0xFF, size >> 16 & 0xFF, size >> 24 & 0xFF]))
54 _out.write(b"\x00\x00") # productFamily, productId
55 _out.write(b"\x00\x00") # crc
56 _out.write(bin_content)
57 _out.close()
58 sys.stdout.write("\n")
59 sys.stdout.write("=====================================================================================================================================\n")
60 sys.stdout.write("|| !!! Copy %s to SD card and choose flash external in order to flash via OpenTX !!! ||\n" % bin_target)
61 sys.stdout.write("=====================================================================================================================================\n")
62 sys.stdout.write("\n")
63 sys.stdout.flush()