Check file type being uploaded. (#2756)
[ExpressLRS.git] / src / python / bootloader.py
blob9e69b3c5d2c3bfa2507b96bd8e9b5d99e20447eb
2 INIT_SEQ = {
3 "CRSF": [0xEC,0x04,0x32,ord('b'),ord('l')],
4 "GHST": [0x89,0x04,0x32,ord('b'),ord('l')],
7 BIND_SEQ = {
8 "CRSF": [0xEC,0x04,0x32,ord('b'),ord('d')],
9 "GHST": [0x89,0x04,0x32,ord('b'),ord('d')],
12 MODEL_SEQ = [0xEC,0x04,0x32,ord('m'),ord('m')]
14 def calc_crc8(payload, poly=0xD5):
15 crc = 0
16 for data in payload:
17 crc ^= data
18 for _ in range(8):
19 if crc & 0x80:
20 crc = (crc << 1) ^ poly
21 else:
22 crc = crc << 1
23 return crc & 0xFF
25 def get_telemetry_seq(seq, key=None):
26 payload = list(seq)
27 if payload:
28 if key:
29 if type(key) == str:
30 key = [ord(x) for x in key]
31 payload += key
32 payload[1] += len(key)
33 payload += [calc_crc8(payload[2:])]
34 return bytes(payload)
36 def get_init_seq(module, key=None):
37 return get_telemetry_seq(INIT_SEQ.get(module, []), key)
39 def get_bind_seq(module, key=None):
40 return get_telemetry_seq(BIND_SEQ.get(module, []), key)
42 def get_model_seq(model):
43 return get_telemetry_seq(MODEL_SEQ, model)
45 if __name__ == '__main__':
46 print("CRC: %s" % get_init_seq('CRSF', [ord(x) for x in 'R9MM']))
47 print("CRC: %s" % get_init_seq('CRSF', 'R9MM'))