From 0e61285cee11a2570d0388665ef724baaf1c4de6 Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Mon, 18 Sep 2023 23:43:44 +0530 Subject: [PATCH 01/17] implement CRC + destination device address field --- HighLevelAnalyzer.py | 157 +++++++++++++++++++++++++++++++++---------- README.md | 7 +- extension.json | 2 +- 3 files changed, 128 insertions(+), 38 deletions(-) diff --git a/HighLevelAnalyzer.py b/HighLevelAnalyzer.py index 575f5f2..a0b5582 100644 --- a/HighLevelAnalyzer.py +++ b/HighLevelAnalyzer.py @@ -5,11 +5,12 @@ import enum from saleae.analyzers import HighLevelAnalyzer, AnalyzerFrame + class Hla(HighLevelAnalyzer): # List of types this analyzer produces result_types = { 'crsf_sync_byte': { - 'format': 'Sync byte' + 'format': 'Going to: {{data.destination}}({{data.address}})' }, 'crsf_length_byte': { 'format': 'Length: {{data.length}}' @@ -19,13 +20,16 @@ class Hla(HighLevelAnalyzer): }, 'crsf_payload': { 'format': 'Payload: {{data.payload}}' + }, + 'crsf_CRC': { + 'format': 'CRC Check: {{data.crccheck}}' } } # Decoder FSM class dec_fsm_e(enum.Enum): Idle = 1 - #Sync_Byte = 2 # No being used - If sync byte is detected the state changes from Idle -> Length + # Sync_Byte = 2 # No being used - If sync byte is detected the state changes from Idle -> Length Length = 3 Type = 4 Payload = 5 @@ -49,7 +53,10 @@ class dec_fsm_e(enum.Enum): } # Protocol defines - CRSF_SYNC_BYTE = b'\xc8' # 0xC8 + CRSF_SYNC_BYTE = {b'\xc8': 'Flight Controller', + b'\xea': 'Radio Transmitter', + b'\xee': 'CRSF Transmitter', + b'\xec': 'CRSF Receiver'} def __init__(self): ''' @@ -62,8 +69,10 @@ def __init__(self): self.crsf_frame_length = 0 # No. of bytes (type + payload) self.crsf_frame_type = None # Type of current frame (see frame_types) self.crsf_frame_current_index = 0 # Index to determine end of payload - self.crsf_payload = [] # Stores the payload for decoding after last byte ist rx'd. - self.crsf_payload_start = None # Timestamp: Start of payload (w/o frame type) + # Stores the payload for decoding after last byte ist rx'd. + self.crsf_payload = [] + # Timestamp: Start of payload (w/o frame type) + self.crsf_payload_start = None self.crsf_payload_end = None # Timestamp: End of payload print("Initialized CRSF HLA.") @@ -84,11 +93,13 @@ def decode(self, frame: AnalyzerFrame): ''' # New frame - if self.crsf_frame_start == None and frame.data['data'] == self.CRSF_SYNC_BYTE and self.dec_fsm == self.dec_fsm_e.Idle: + if self.crsf_frame_start == None and frame.data['data'] in self.CRSF_SYNC_BYTE.keys() and self.dec_fsm == self.dec_fsm_e.Idle: print('Sync byte detected.') self.crsf_frame_start = frame.start_time self.dec_fsm = self.dec_fsm_e.Length - return AnalyzerFrame('crsf_sync_byte', frame.start_time, frame.end_time, {}) + dest = self.CRSF_SYNC_BYTE[frame.data['data']] + return AnalyzerFrame('crsf_sync_byte', frame.start_time, frame.end_time, {'address': f"{format(int.from_bytes(frame.data['data'] ,byteorder='little'),'#X')}", + 'destination': f"{dest}"}) # Length if self.dec_fsm == self.dec_fsm_e.Length: @@ -120,20 +131,18 @@ def decode(self, frame: AnalyzerFrame): self.crsf_payload.append(payload) self.crsf_frame_current_index += 1 #print('Payload start ({}): {:2x}'.format(self.crsf_frame_current_index, payload)) - elif self.crsf_frame_current_index < (self.crsf_frame_length - 1): # ... still collecting payload bytes ... + # ... still collecting payload bytes ... + elif self.crsf_frame_current_index < (self.crsf_frame_length - 2): self.crsf_payload.append(payload) self.crsf_frame_current_index += 1 #print('Adding payload ({}): {:2x}'.format(self.crsf_frame_current_index, payload)) - elif self.crsf_frame_current_index == (self.crsf_frame_length - 1): # Last payload byte received - # Last byte is actually the CRC. - # ToDo: Check CRC - analyzerframe = None - self.crsf_payload_end = frame.end_time - self.crsf_payload.append(payload) - #print('Payload complete ({}): {:2x}'.format(self.crsf_frame_current_index, payload)) - #print(self.crsf_payload) - # Let's decode the payload + elif self.crsf_frame_current_index == self.crsf_frame_length - 2: + # second last byte received + # whole payload received + self.crsf_payload.append(payload) + self.crsf_frame_current_index += 1 + self.crsf_payload_end = frame.end_time if self.crsf_frame_type == 0x08: # Battery sensor pass # ToDo @@ -143,22 +152,26 @@ def decode(self, frame: AnalyzerFrame): # 1 byte - Remaining (%) elif self.crsf_frame_type == 0x14: # Link statistics payload_signed = self.crsf_payload.copy() - payload_signed[3] = self.unsigned_to_signed_8(payload_signed[3]) # Uplink SNR and ... - payload_signed[9] = self.unsigned_to_signed_8(payload_signed[9]) # ... download SNR are signed. + # Uplink SNR and ... + payload_signed[3] = self.unsigned_to_signed_8( + payload_signed[3]) + # ... download SNR are signed. + payload_signed[9] = self.unsigned_to_signed_8( + payload_signed[9]) # One byte per entry... - payload_str = ('Uplink RSSI 1: -{}dB, ' + \ - 'Uplink RSSI 2: -{}dB, ' + \ - 'Uplink Link Quality: {}%, ' + \ - 'Uplink SNR: {}dB, ' + \ - 'Active Antenna: {}, ' + \ - 'RF Mode: {}, ' + \ - 'Uplink TX Power: {} mW, ' + \ - 'Downlink RSSI: -{}dB, ' + \ - 'Downlink Link Quality: {}%, ' + \ + payload_str = ('Uplink RSSI 1: -{}dB, ' + + 'Uplink RSSI 2: -{}dB, ' + + 'Uplink Link Quality: {}%, ' + + 'Uplink SNR: {}dB, ' + + 'Active Antenna: {}, ' + + 'RF Mode: {}, ' + + 'Uplink TX Power: {} mW, ' + + 'Downlink RSSI: -{}dB, ' + + 'Downlink Link Quality: {}%, ' + 'Downlink SNR: {}dB').format(*payload_signed) print(payload_signed) print(payload_str) - analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, frame.end_time, { + analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { 'payload': payload_str }) elif self.crsf_frame_type == 0x10: # OpenTX sync @@ -179,23 +192,46 @@ def decode(self, frame: AnalyzerFrame): bin_str = '' channels = [] for i in self.crsf_payload: - bin_str += format(i, '08b')[::-1] # Format as bits and reverse order + # Format as bits and reverse order + bin_str += format(i, '08b')[::-1] print(bin_str) for i in range(16): - value = int(bin_str[0 + 11 * i : 11 + 11 * i][::-1], 2) # 'RC' value - value_ms = int((value * 1024 / 1639) + 881) # Converted to milliseconds + # 'RC' value + value = int(bin_str[0 + 11 * i: 11 + 11 * i][::-1], 2) + # Converted to milliseconds + value_ms = int((value * 1024 / 1639) + 881) channels.append(value) channels.append(value_ms) print(channels) - payload_str = ('CH1: {} ({} ms), CH2: {} ({} ms), CH3: {} ({} ms), CH4: {} ({} ms), ' + \ - 'CH5: {} ({} ms), CH6: {} ({} ms), CH7: {} ({} ms), CH8: {} ({} ms), ' + \ - 'CH9: {} ({} ms), CH10: {} ({} ms), CH11: {} ({} ms), CH12: {} ({} ms), ' + \ + payload_str = ('CH1: {} ({} ms), CH2: {} ({} ms), CH3: {} ({} ms), CH4: {} ({} ms), ' + + 'CH5: {} ({} ms), CH6: {} ({} ms), CH7: {} ({} ms), CH8: {} ({} ms), ' + + 'CH9: {} ({} ms), CH10: {} ({} ms), CH11: {} ({} ms), CH12: {} ({} ms), ' + 'CH13: {} ({} ms), CH14: {} ({} ms), CH15: {} ({} ms), CH16: {} ({} ms)').format(*channels) print(payload_str) - analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, frame.end_time, { + analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { 'payload': payload_str }) + return analyzerframe + elif self.crsf_frame_current_index == (self.crsf_frame_length - 1): + # Last byte is actually the CRC. + + analyzerframe = None + self.crsf_payload.append(payload) + #print('Payload complete ({}): {:2x}'.format(self.crsf_frame_current_index, payload)) + # print(self.crsf_payload) + self.crsf_payload.insert(0, self.crsf_frame_type) + # convert type to bytes and then calcualtion CRC + crcresult = self.calCRC(packet=self.crsf_payload, + bytes=len(self.crsf_payload)) + if crcresult == 0: + crcresult = 'Pass' + else: + crcresult = "Fail" + analyzerframe = AnalyzerFrame('crsf_CRC', frame.start_time, frame.end_time, { + 'crccheck': f"{crcresult}" + }) + # And initialize again for next frame self.crsf_frame_start = None self.crsf_frame_end = None @@ -208,3 +244,52 @@ def decode(self, frame: AnalyzerFrame): self.crsf_payload_end = None return analyzerframe + + def calCRC(self, packet: list, bytes: int, gen_poly: int = 0xd5, start_from_byte=0): + ''' + Calcualtes CRC value for the list provided to it. + + Returns: integer + 0 - CRC matched + anything other than 0 - CRC match failed + + Parameters: + packet : list of bytes on which CRC calculation needs to be done + bytes : number of bytes on which CRC calculation needs to be done + gen_poly(default = 0xd5) : Polynomial to use for calculating CRC + start_from_byte(default = 2) : Start CRC calculation from which byte + + Note: Slow for live Analysis. + ''' + dividend = 0 + next_byte = 0 + number_of_bytes_processed = start_from_byte + number_of_bits_left = 0 + is_MSB_one = False + while(True): + if number_of_bits_left <= 0 and number_of_bytes_processed - start_from_byte >= bytes: + # ALL BITS PROCESSED + break + elif number_of_bits_left <= 0 and number_of_bytes_processed-start_from_byte < bytes: + # load bits into buffer if empty and if bits available + next_byte = packet[number_of_bytes_processed] + number_of_bytes_processed = number_of_bytes_processed+1 + number_of_bits_left = 8 + is_MSB_one = dividend & 0b10000000 + # print(f"dividend = {bin(dividend)} , next_byte = {bin(next_byte)}") + dividend = dividend << 1 + dividend = (dividend & 0b1011111111) | (next_byte >> 7) + # shift First bit of Next_byte into dividend + next_byte = (next_byte << 1) + # because python doesnt allow to constarint size to 8 + next_byte = next_byte & 0b1011111111 + # Shift out the first bit + number_of_bits_left = number_of_bits_left - 1 + if is_MSB_one == 0b10000000: + dividend = (dividend ^ gen_poly) + print(dividend) + else: + dividend = dividend + # if bit aligning with MSB of gen_poly is 1 then do XOR + + return dividend diff --git a/README.md b/README.md index 588260a..3c477c6 100644 --- a/README.md +++ b/README.md @@ -17,11 +17,16 @@ This is still a very early release. Currently the following frames are supported * Link statistics (0x14) * RC channels packed (0x16) +* CRC check +* Destination device address The decoder features a state machine that parses all frames so it can easily be extended to decode future frames. Some groundwork for additional frames already exists. ## ToDo ☝️ -* CRC check * Additional supported frames +* add check for aync serial +* pass parameters like address , len and all for all frames +* implement search for packet feature +* add drop down for units in selection (ms or raw digital value) \ No newline at end of file diff --git a/extension.json b/extension.json index 7bb0b05..16eac86 100644 --- a/extension.json +++ b/extension.json @@ -1,7 +1,7 @@ { "name": "CRSF", "apiVersion": "1.0.0", - "author": "Max Gröning", + "author": "Ansh Chawla(Original code by : Max Gröning)", "version": "0.5.2", "description": "Crossfire decoder for R/C protocol as used by TBS Crossfire, Tracer or ExpressLRS", "extensions": { From 97409ae195cddcb45f5d886d57b28260540e8b18 Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Mon, 18 Sep 2023 23:57:55 +0530 Subject: [PATCH 02/17] updated images + fixed to report actual length --- HighLevelAnalyzer.py | 2 +- README.md | 2 +- images/decode_link_statistics.png | Bin 66908 -> 60449 bytes images/decode_rc_channels_packed.png | Bin 55293 -> 108450 bytes 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/HighLevelAnalyzer.py b/HighLevelAnalyzer.py index a0b5582..7f704fd 100644 --- a/HighLevelAnalyzer.py +++ b/HighLevelAnalyzer.py @@ -108,7 +108,7 @@ def decode(self, frame: AnalyzerFrame): self.crsf_frame_length = payload self.dec_fsm = self.dec_fsm_e.Type return AnalyzerFrame('crsf_length_byte', frame.start_time, frame.end_time, { - 'length': str(payload - 1) + 'length': str(payload) }) # Type diff --git a/README.md b/README.md index 3c477c6..5dc1995 100644 --- a/README.md +++ b/README.md @@ -28,5 +28,5 @@ Some groundwork for additional frames already exists. * Additional supported frames * add check for aync serial * pass parameters like address , len and all for all frames -* implement search for packet feature +* implement search for packet feature * add drop down for units in selection (ms or raw digital value) \ No newline at end of file diff --git a/images/decode_link_statistics.png b/images/decode_link_statistics.png index 84fb24184e922bd23d58963229ad3d07494fae25..4ea66000ae5ade2f7737d65ee2ace9e0ac68434f 100644 GIT binary patch literal 60449 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 literal 66908 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 diff --git a/images/decode_rc_channels_packed.png b/images/decode_rc_channels_packed.png index 7ee6e64e3be564ce47ba0bba2348a9f06e2cfa60..5b87d797b4d2de46466a313da951fbacdec702c9 100644 GIT binary patch literal 108450 zcmbrm1yq!68!k$Sh=3?amk81+oq~ci2uL$D0@5{f3reF%N_P%jLx&)sbPpw6LrLd( z@cYl%d!MuR{=c=(TEk+PdE<#YuIsw*mykC~(zy4@?xUcf;L6HKs)An-6ckj#dw0Pn zvWeLa;1{Zss`N_~SU<%E_~VYbgrWorN_iCar4a`B8_Qls+X)5bLC5V6YPVg!DGJI> zj;y4_TQ~jf6b!Gg-QypXXJ%#Z(cC#%(9kJ78J~sN&KCH(*xBjoFxM*0LekNyzRyC? zKcGCy?7TOBX>PvpWv8LX78*k;pzN!A&_BJM?AkBrwE8oAezM%;_HGSnt7x6eBa`?4f&5P8$s0T_#W{}jZ^#IQx`5hm2bM&s88X-^WWq|H7Jyb zU$`&KQ~A%kc#9|sUq1DaBfP?GKJf@m%N3h9BcG8X$UROcJf-M{#wa&Qt9cZs)3U3^ zI@gKq)$06cqosHueWWwNvtXHtZ4W2SP)CrsWuS-ZYMIO=)j6%L#lZ*n=3K}2lmynR(sn{-9KC@~AP zb$IsGv#L-d%;C}1OIIVO`uJ6+spcfXM*sCicfDy)x@RWAC3P$uvh#LgZne*H>l4L` z8(2)fLH0QU;pM=s*w>f6=)OO?lg(_sBUmYBHK z;lYK|!TH}_6hdw;LxiI4k0J~nD|aiV$f=E*1axnGcv>)j}hnSx1<$w9uu3^$5n0u1)6r9EvRc zo`rD`BT^r5@RT-%ow@S&xp10}ibCScW-X_n3FFT?*(+%5yMxx+nvc~kpKbC^tPR5V z=Y(m(|GTx2tiI{8+ny}H@HutJgq!O0Zg5Vg{7o(2gp)iiftRQUS!4c&bIdUPX9-Fc{4NzR0sV~wk zSI0$O5P7%NM01O+aW+g5dgW9FX$prsiYY=;K6uS|^VqgcM?^Z!UWu$}qMk%4&}qwx znfT?^)!zBg-I+QE^rk=kh{vR)?&6f1rTS7)A_rw&-nyfo!M$nZ=*O0tA%Ibh@Kwbj z;aA6qoH^Gj$e-0;Ia!fHy#-BWh4H0Eo}HXHSuaRl=(&u=9xg?_7_PGP9s2Z$*0jF1 zTl7?Kl35yo;ps9U>MC3f(KtHb-RXQ&(q#g6CVW?Lr*3H-Svwzhem<^i7i(5x*1$>S zRE2%2

o_O*_P{bmK2xqMCYTiiNOl9zKxI6 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 From a6ebfe44c47a4af34619d457aede467bc8b704c2 Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Tue, 19 Sep 2023 10:49:11 +0530 Subject: [PATCH 03/17] Google indexing added --- googlec031010d885ea607.html | 1 + 1 file changed, 1 insertion(+) create mode 100644 googlec031010d885ea607.html diff --git a/googlec031010d885ea607.html b/googlec031010d885ea607.html new file mode 100644 index 0000000..c24cfe1 --- /dev/null +++ b/googlec031010d885ea607.html @@ -0,0 +1 @@ +google-site-verification: googlec031010d885ea607.html \ No newline at end of file From 8c9e6474fdb1045634594726591cc39aace23c90 Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Tue, 19 Sep 2023 11:14:57 +0530 Subject: [PATCH 04/17] google verification --- googlec031010d885ea607.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/googlec031010d885ea607.html b/googlec031010d885ea607.html index c24cfe1..97d1a21 100644 --- a/googlec031010d885ea607.html +++ b/googlec031010d885ea607.html @@ -1 +1 @@ -google-site-verification: googlec031010d885ea607.html \ No newline at end of file +google-site-verification: googlec031010d885ea607.html From 6fdc49b2ab7d03c64c2499cc8195212416d285b4 Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Tue, 19 Sep 2023 19:36:41 +0530 Subject: [PATCH 05/17] added option for units of channel values --- HighLevelAnalyzer.py | 41 +++++++++++++++++++++++++++++++---------- README.md | 2 +- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/HighLevelAnalyzer.py b/HighLevelAnalyzer.py index 7f704fd..9af10bf 100644 --- a/HighLevelAnalyzer.py +++ b/HighLevelAnalyzer.py @@ -3,7 +3,7 @@ # SPDX-License-Identifier: Apache-2.0 import enum -from saleae.analyzers import HighLevelAnalyzer, AnalyzerFrame +from saleae.analyzers import HighLevelAnalyzer, AnalyzerFrame, StringSetting, NumberSetting, ChoicesSetting class Hla(HighLevelAnalyzer): @@ -58,6 +58,10 @@ class dec_fsm_e(enum.Enum): b'\xee': 'CRSF Transmitter', b'\xec': 'CRSF Receiver'} + # Settings: + channel_unit_options = ['ms', 'Digital Value', 'Both'] + channel_unit = ChoicesSetting(channel_unit_options) + def __init__(self): ''' Initializes the CRFS HLA. @@ -75,7 +79,7 @@ def __init__(self): self.crsf_payload_start = None self.crsf_payload_end = None # Timestamp: End of payload - print("Initialized CRSF HLA.") + # print("Initialized CRSF HLA.") def unsigned_to_signed_8(self, x): ''' @@ -200,13 +204,31 @@ def decode(self, frame: AnalyzerFrame): value = int(bin_str[0 + 11 * i: 11 + 11 * i][::-1], 2) # Converted to milliseconds value_ms = int((value * 1024 / 1639) + 881) - channels.append(value) - channels.append(value_ms) - print(channels) - payload_str = ('CH1: {} ({} ms), CH2: {} ({} ms), CH3: {} ({} ms), CH4: {} ({} ms), ' + - 'CH5: {} ({} ms), CH6: {} ({} ms), CH7: {} ({} ms), CH8: {} ({} ms), ' + - 'CH9: {} ({} ms), CH10: {} ({} ms), CH11: {} ({} ms), CH12: {} ({} ms), ' + - 'CH13: {} ({} ms), CH14: {} ({} ms), CH15: {} ({} ms), CH16: {} ({} ms)').format(*channels) + if self.channel_unit in self.channel_unit_options: + if self.channel_unit == 'ms': + channels.append(value_ms) + elif self.channel_unit == 'Digital Value': + channels.append(value) + else: + channels.append(value) + channels.append(value_ms) + # print(channels) + if self.channel_unit in self.channel_unit_options: + if self.channel_unit == 'ms': + payload_str = ('CH1: {} ms, CH2: {} ms, CH3: {} ms, CH4: {} ms, ' + + 'CH5: {} ms, CH6: {} ms, CH7: {} ms, CH8: {} ms, ' + + 'CH9: {} ms, CH10: {} ms, CH11: {} ms, CH12: {} ms, ' + + 'CH13: {} ms, CH14: {} ms, CH15: {} ms, CH16: {} ms').format(*channels) + elif self.channel_unit == 'Digital Value': + payload_str = ('CH1: {} , CH2: {} , CH3: {} , CH4: {} , ' + + 'CH5: {} , CH6: {} , CH7: {} , CH8: {} , ' + + 'CH9: {} , CH10: {} , CH11: {} , CH12: {} , ' + + 'CH13: {} , CH14: {} , CH15: {} , CH16: {} ').format(*channels) + else: + payload_str = ('CH1: {} ({} ms), CH2: {} ({} ms), CH3: {} ({} ms), CH4: {} ({} ms), ' + + 'CH5: {} ({} ms), CH6: {} ({} ms), CH7: {} ({} ms), CH8: {} ({} ms), ' + + 'CH9: {} ({} ms), CH10: {} ({} ms), CH11: {} ({} ms), CH12: {} ({} ms), ' + + 'CH13: {} ({} ms), CH14: {} ({} ms), CH15: {} ({} ms), CH16: {} ({} ms)').format(*channels) print(payload_str) analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { 'payload': payload_str @@ -242,7 +264,6 @@ def decode(self, frame: AnalyzerFrame): self.crsf_payload = [] self.crsf_payload_start = None self.crsf_payload_end = None - return analyzerframe def calCRC(self, packet: list, bytes: int, gen_poly: int = 0xd5, start_from_byte=0): diff --git a/README.md b/README.md index 5dc1995..c27f64b 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ This is still a very early release. Currently the following frames are supported * RC channels packed (0x16) * CRC check * Destination device address +* Selectable Channel value units The decoder features a state machine that parses all frames so it can easily be extended to decode future frames. Some groundwork for additional frames already exists. @@ -29,4 +30,3 @@ Some groundwork for additional frames already exists. * add check for aync serial * pass parameters like address , len and all for all frames * implement search for packet feature -* add drop down for units in selection (ms or raw digital value) \ No newline at end of file From dfeb93d28dd8f752695b9d7d1aad89d446c23416 Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Tue, 19 Sep 2023 19:38:21 +0530 Subject: [PATCH 06/17] google verification commit --- googlec031010d885ea607.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/googlec031010d885ea607.html b/googlec031010d885ea607.html index 97d1a21..c24cfe1 100644 --- a/googlec031010d885ea607.html +++ b/googlec031010d885ea607.html @@ -1 +1 @@ -google-site-verification: googlec031010d885ea607.html +google-site-verification: googlec031010d885ea607.html \ No newline at end of file From 8dbcae9d75796a893131d4b493bbf430ceb22fd6 Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Tue, 19 Sep 2023 20:18:55 +0530 Subject: [PATCH 07/17] Fixed bug software Crashed when Un recognised packet arrives --- HighLevelAnalyzer.py | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/HighLevelAnalyzer.py b/HighLevelAnalyzer.py index 9af10bf..a42e6c6 100644 --- a/HighLevelAnalyzer.py +++ b/HighLevelAnalyzer.py @@ -118,13 +118,20 @@ def decode(self, frame: AnalyzerFrame): # Type if self.dec_fsm == self.dec_fsm_e.Type: payload = int.from_bytes(frame.data['data'], byteorder='little') - print('Type: {}'.format(self.frame_types[payload])) self.crsf_frame_type = payload self.dec_fsm = self.dec_fsm_e.Payload self.crsf_frame_current_index += 1 - return AnalyzerFrame('crsf_type_byte', frame.start_time, frame.end_time, { - 'type': self.frame_types[payload] - }) + if payload in self.frame_types.keys(): + print('Type: {}'.format(self.frame_types[payload])) + return AnalyzerFrame('crsf_type_byte', frame.start_time, frame.end_time, { + 'type': self.frame_types[payload] + }) + else: + print('Type: Unrecognised') + return AnalyzerFrame('crsf_type_byte', frame.start_time, frame.end_time, { + 'type': "Unrecognised", + 'error': "Unrecognised type" + }) # Payload if self.dec_fsm == self.dec_fsm_e.Payload: @@ -148,7 +155,9 @@ def decode(self, frame: AnalyzerFrame): self.crsf_frame_current_index += 1 self.crsf_payload_end = frame.end_time if self.crsf_frame_type == 0x08: # Battery sensor - pass + analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': "Battery Sensor (not yet implemented)" + }) # ToDo # 2 bytes - Voltage (mV * 100) # 2 bytes - Current (mA * 100) @@ -179,7 +188,9 @@ def decode(self, frame: AnalyzerFrame): 'payload': payload_str }) elif self.crsf_frame_type == 0x10: # OpenTX sync - pass + analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': "Open Tx sync packet not yet implemented" + }) # ToDo # 4 bytes - Adjusted Refresh Rate # 4 bytes - Last Update @@ -233,6 +244,10 @@ def decode(self, frame: AnalyzerFrame): analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { 'payload': payload_str }) + else: # unrecognised Packet type + analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': "Error in Type of Packet or not CRSF or not implemented", + 'error': "couldn't decode packet"}) return analyzerframe elif self.crsf_frame_current_index == (self.crsf_frame_length - 1): @@ -251,7 +266,8 @@ def decode(self, frame: AnalyzerFrame): else: crcresult = "Fail" analyzerframe = AnalyzerFrame('crsf_CRC', frame.start_time, frame.end_time, { - 'crccheck': f"{crcresult}" + 'crccheck': f"{crcresult}", + 'error': f'''{"CRC Fail" if crcresult !=0 else ""}''' }) # And initialize again for next frame From 17b0156408a9e65b69a6d23314592d5b7c1dfb83 Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Tue, 19 Sep 2023 22:43:34 +0530 Subject: [PATCH 08/17] implmented length check for differnt packets + expanded frame types + added battery voltage --- HighLevelAnalyzer.py | 58 ++++++++++++++++++++++++++++++++++++-------- README.md | 6 +++++ 2 files changed, 54 insertions(+), 10 deletions(-) diff --git a/HighLevelAnalyzer.py b/HighLevelAnalyzer.py index a42e6c6..196386b 100644 --- a/HighLevelAnalyzer.py +++ b/HighLevelAnalyzer.py @@ -16,7 +16,7 @@ class Hla(HighLevelAnalyzer): 'format': 'Length: {{data.length}}' }, 'crsf_type_byte': { - 'format': 'Type: {{data.type}}' + 'format': 'Type: {{data.type}} ({{data.error}})' }, 'crsf_payload': { 'format': 'Payload: {{data.payload}}' @@ -48,10 +48,30 @@ class dec_fsm_e(enum.Enum): 0x28: 'Ping devices', 0x29: 'Device info', 0x2A: 'Request settings', + 0x2B: 'Parameter settings entry', + 0x2C: 'Parameter Read', + 0x2D: 'Parameter Write', 0x32: 'Command', - 0x3A: 'Radio', - } + 0x3A: 'Radio id', + 0x78: 'KISS request', + 0x79: 'KISS respond', + 0x7A: 'MSP request', + 0x7B: 'MSP respond', + 0x7C: 'MSP Write', + 0x80: 'Arduipilot respond' + } # Extended Header Frames, range: 0x28 to 0x96 + # toDo + # Make a dictionary containing packet lengths offrame types + frame_types_sizes = { + 0x02: (15, 15), + 0x07: (2, 2), + 0x08: (8, 8), + 0x09: (4, 4), + 0x1E: (6, 6), + 0x29: (48, 48), + 0x21: (16, 16) + } # Protocol defines CRSF_SYNC_BYTE = {b'\xc8': 'Flight Controller', b'\xea': 'Radio Transmitter', @@ -121,10 +141,17 @@ def decode(self, frame: AnalyzerFrame): self.crsf_frame_type = payload self.dec_fsm = self.dec_fsm_e.Payload self.crsf_frame_current_index += 1 + min = 0 + max = 100 # setting to be greater than max payload size + if self.crsf_frame_type in self.frame_types_sizes.keys(): + # if min max size defined then match length + min, max = self.frame_types_sizes[self.crsf_frame_type] + if payload in self.frame_types.keys(): print('Type: {}'.format(self.frame_types[payload])) return AnalyzerFrame('crsf_type_byte', frame.start_time, frame.end_time, { - 'type': self.frame_types[payload] + 'type': self.frame_types[payload], + 'error': f"{f'''Length doesn't correspond to type'''if not min<= self.crsf_frame_length -2 <=max else ''}" }) else: print('Type: Unrecognised') @@ -155,14 +182,23 @@ def decode(self, frame: AnalyzerFrame): self.crsf_frame_current_index += 1 self.crsf_payload_end = frame.end_time if self.crsf_frame_type == 0x08: # Battery sensor - analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { - 'payload': "Battery Sensor (not yet implemented)" - }) - # ToDo - # 2 bytes - Voltage (mV * 100) + bin_str = '' + for i in self.crsf_payload: + # Format as bits and reverse order + bin_str += format(i, '08b')[::-1] + print(bin_str) + # 2 bytes - Voltage (mV * 100) BigEndian + Voltage = float(bin_str[0:16][::-1]) # 2 bytes - Current (mA * 100) + Current = float(bin_str[16:32][::-1]) # 3 bytes - Capacity (mAh) + Capacity = float(bin_str[32:56][::-1]) # 1 byte - Remaining (%) + Battery_percentage = float(bin_str[56:64][::-1]) + payload_str = f"Voltage: {'%.2f' % Voltage} ,Current: {'%.2f' % Current} ,Capacity: {'%.2f' % Capacity} ,Battery %: {'%.2f' % Battery_percentage}" + analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': payload_str + }) elif self.crsf_frame_type == 0x14: # Link statistics payload_signed = self.crsf_payload.copy() # Uplink SNR and ... @@ -263,11 +299,13 @@ def decode(self, frame: AnalyzerFrame): bytes=len(self.crsf_payload)) if crcresult == 0: crcresult = 'Pass' + error = "" else: crcresult = "Fail" + error = "CRC Fail" analyzerframe = AnalyzerFrame('crsf_CRC', frame.start_time, frame.end_time, { 'crccheck': f"{crcresult}", - 'error': f'''{"CRC Fail" if crcresult !=0 else ""}''' + 'error': f"{error}" }) # And initialize again for next frame diff --git a/README.md b/README.md index c27f64b..b7d91c6 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,14 @@ This is still a very early release. Currently the following frames are supported * Link statistics (0x14) * RC channels packed (0x16) +* Battery Packet (0x08) + +It currently Contains the following features: + * CRC check * Destination device address * Selectable Channel value units +* payload length check for different packets The decoder features a state machine that parses all frames so it can easily be extended to decode future frames. Some groundwork for additional frames already exists. @@ -30,3 +35,4 @@ Some groundwork for additional frames already exists. * add check for aync serial * pass parameters like address , len and all for all frames * implement search for packet feature +* implement length mismatch \ No newline at end of file From a1c0dd2ed7870bc477125f43561f354da80ed84e Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Tue, 19 Sep 2023 22:51:20 +0530 Subject: [PATCH 09/17] added more destination support --- HighLevelAnalyzer.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/HighLevelAnalyzer.py b/HighLevelAnalyzer.py index 196386b..9406448 100644 --- a/HighLevelAnalyzer.py +++ b/HighLevelAnalyzer.py @@ -61,7 +61,8 @@ class dec_fsm_e(enum.Enum): 0x80: 'Arduipilot respond' } # Extended Header Frames, range: 0x28 to 0x96 - # toDo + + #https://github.com/ExpressLRS/ExpressLRS/blob/master/src/lib/CrsfProtocol/crsf_protocol.h#L108 # Make a dictionary containing packet lengths offrame types frame_types_sizes = { 0x02: (15, 15), @@ -73,10 +74,21 @@ class dec_fsm_e(enum.Enum): 0x21: (16, 16) } # Protocol defines + #https://github.com/ExpressLRS/ExpressLRS/blob/master/src/lib/CrsfProtocol/crsf_protocol.h#L119 CRSF_SYNC_BYTE = {b'\xc8': 'Flight Controller', b'\xea': 'Radio Transmitter', b'\xee': 'CRSF Transmitter', - b'\xec': 'CRSF Receiver'} + b'\xec': 'CRSF Receiver', + b'\x00': 'CRSF Broadcast', + b'\xc0': 'Current sensor', + b'\xc2': 'GPS', + b'\xcc': 'Race Tag', + b'\xEF': 'ELRS LUA', + b'\x10': 'USB', + b'\xc4': 'TBS Black Box', + b'\x80': 'TBS CORE PNP PRO', + b'\x8A': 'Reserved 1', + b'\xCA': 'Reserved 2'} # Settings: channel_unit_options = ['ms', 'Digital Value', 'Both'] From 3526491e8649fcd76bc15f80d6247a9e9f2edf32 Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Wed, 20 Sep 2023 22:48:02 +0530 Subject: [PATCH 10/17] Flight mode coding implmented --- HighLevelAnalyzer.py | 26 ++++++++++++++++++++------ README.md | 1 + 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/HighLevelAnalyzer.py b/HighLevelAnalyzer.py index 9406448..a8d2948 100644 --- a/HighLevelAnalyzer.py +++ b/HighLevelAnalyzer.py @@ -61,8 +61,7 @@ class dec_fsm_e(enum.Enum): 0x80: 'Arduipilot respond' } # Extended Header Frames, range: 0x28 to 0x96 - - #https://github.com/ExpressLRS/ExpressLRS/blob/master/src/lib/CrsfProtocol/crsf_protocol.h#L108 + # https://github.com/ExpressLRS/ExpressLRS/blob/master/src/lib/CrsfProtocol/crsf_protocol.h#L108 # Make a dictionary containing packet lengths offrame types frame_types_sizes = { 0x02: (15, 15), @@ -71,10 +70,10 @@ class dec_fsm_e(enum.Enum): 0x09: (4, 4), 0x1E: (6, 6), 0x29: (48, 48), - 0x21: (16, 16) + 0x21: (4, 16) } # Protocol defines - #https://github.com/ExpressLRS/ExpressLRS/blob/master/src/lib/CrsfProtocol/crsf_protocol.h#L119 + # https://github.com/ExpressLRS/ExpressLRS/blob/master/src/lib/CrsfProtocol/crsf_protocol.h#L119 CRSF_SYNC_BYTE = {b'\xc8': 'Flight Controller', b'\xea': 'Radio Transmitter', b'\xee': 'CRSF Transmitter', @@ -98,7 +97,7 @@ def __init__(self): ''' Initializes the CRFS HLA. ''' - + self.crsf_packet_start = None self.crsf_frame_start = None # Timestamp: Start of frame self.crsf_frame_end = None # Timestamp: End of frame self.dec_fsm = self.dec_fsm_e.Idle # Current state of protocol decoder FSM @@ -132,6 +131,8 @@ def decode(self, frame: AnalyzerFrame): if self.crsf_frame_start == None and frame.data['data'] in self.CRSF_SYNC_BYTE.keys() and self.dec_fsm == self.dec_fsm_e.Idle: print('Sync byte detected.') self.crsf_frame_start = frame.start_time + self.crsf_packet_start = frame.start_time + self.crsf_packet_time = frame.end_time - frame.start_time self.dec_fsm = self.dec_fsm_e.Length dest = self.CRSF_SYNC_BYTE[frame.data['data']] return AnalyzerFrame('crsf_sync_byte', frame.start_time, frame.end_time, {'address': f"{format(int.from_bytes(frame.data['data'] ,byteorder='little'),'#X')}", @@ -174,6 +175,11 @@ def decode(self, frame: AnalyzerFrame): # Payload if self.dec_fsm == self.dec_fsm_e.Payload: + + # to do + # implement time out of some sort + # maybe we compare bytes received with time passed + payload = int.from_bytes(frame.data['data'], byteorder='little') if self.crsf_frame_current_index == 1: # First payload byte @@ -250,6 +256,15 @@ def decode(self, frame: AnalyzerFrame): # 1 byte - Downlink RSSI # 1 byte - Downlink Link Quality # 1 byte (signed) Downling SNR + elif self.crsf_frame_type == 0x21: + # flight mode + # max 16 bytes + # Format: String = [ACRO , WAIT , !FS! , RTH , MANU , STAB , HOR , AIR , !ERR] + *(if disarmed) + \0 + # eg: AIR* -> Air mode and disarmed + # https://github.dev/betaflight/betaflight#L379 + return AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': 'Flight Mode: ' + ''.join([chr(i) for i in self.crsf_payload]) + f'''{" ( disarmed )" if chr(self.crsf_payload[-2]) == '*' else "( Armed )"}''', + 'error': ""}) elif self.crsf_frame_type == 0x16: # RC channels packed # 11 bits per channel, 16 channels, 176 bits (22 bytes) total bin_str = '' @@ -300,7 +315,6 @@ def decode(self, frame: AnalyzerFrame): return analyzerframe elif self.crsf_frame_current_index == (self.crsf_frame_length - 1): # Last byte is actually the CRC. - analyzerframe = None self.crsf_payload.append(payload) #print('Payload complete ({}): {:2x}'.format(self.crsf_frame_current_index, payload)) diff --git a/README.md b/README.md index b7d91c6..674aec3 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ This is still a very early release. Currently the following frames are supported * Link statistics (0x14) * RC channels packed (0x16) * Battery Packet (0x08) +* Flight Mode (0x21) It currently Contains the following features: From 34085fb7b1f949d0c05a075ecd319c1acbaf82dd Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Wed, 20 Sep 2023 23:10:05 +0530 Subject: [PATCH 11/17] most basic type of error handling implmented --- HighLevelAnalyzer.py | 420 ++++++++++++++++++++++--------------------- 1 file changed, 216 insertions(+), 204 deletions(-) diff --git a/HighLevelAnalyzer.py b/HighLevelAnalyzer.py index a8d2948..20433b8 100644 --- a/HighLevelAnalyzer.py +++ b/HighLevelAnalyzer.py @@ -126,225 +126,237 @@ def decode(self, frame: AnalyzerFrame): Feed it with async analyzer frames. :) ''' + try: + # New frame + if self.crsf_frame_start == None and frame.data['data'] in self.CRSF_SYNC_BYTE.keys() and self.dec_fsm == self.dec_fsm_e.Idle: + print('Sync byte detected.') + self.crsf_frame_start = frame.start_time + self.crsf_packet_start = frame.start_time + self.crsf_packet_time = frame.end_time - frame.start_time + self.dec_fsm = self.dec_fsm_e.Length + dest = self.CRSF_SYNC_BYTE[frame.data['data']] + return AnalyzerFrame('crsf_sync_byte', frame.start_time, frame.end_time, {'address': f"{format(int.from_bytes(frame.data['data'] ,byteorder='little'),'#X')}", + 'destination': f"{dest}"}) - # New frame - if self.crsf_frame_start == None and frame.data['data'] in self.CRSF_SYNC_BYTE.keys() and self.dec_fsm == self.dec_fsm_e.Idle: - print('Sync byte detected.') - self.crsf_frame_start = frame.start_time - self.crsf_packet_start = frame.start_time - self.crsf_packet_time = frame.end_time - frame.start_time - self.dec_fsm = self.dec_fsm_e.Length - dest = self.CRSF_SYNC_BYTE[frame.data['data']] - return AnalyzerFrame('crsf_sync_byte', frame.start_time, frame.end_time, {'address': f"{format(int.from_bytes(frame.data['data'] ,byteorder='little'),'#X')}", - 'destination': f"{dest}"}) - - # Length - if self.dec_fsm == self.dec_fsm_e.Length: - payload = int.from_bytes(frame.data['data'], byteorder='little') - print('Length: {} bytes'.format(payload - 1)) - self.crsf_frame_length = payload - self.dec_fsm = self.dec_fsm_e.Type - return AnalyzerFrame('crsf_length_byte', frame.start_time, frame.end_time, { - 'length': str(payload) - }) + # Length + if self.dec_fsm == self.dec_fsm_e.Length: + payload = int.from_bytes(frame.data['data'], byteorder='little') + print('Length: {} bytes'.format(payload - 1)) + self.crsf_frame_length = payload + self.dec_fsm = self.dec_fsm_e.Type + return AnalyzerFrame('crsf_length_byte', frame.start_time, frame.end_time, { + 'length': str(payload) + }) - # Type - if self.dec_fsm == self.dec_fsm_e.Type: - payload = int.from_bytes(frame.data['data'], byteorder='little') - self.crsf_frame_type = payload - self.dec_fsm = self.dec_fsm_e.Payload - self.crsf_frame_current_index += 1 - min = 0 - max = 100 # setting to be greater than max payload size - if self.crsf_frame_type in self.frame_types_sizes.keys(): - # if min max size defined then match length - min, max = self.frame_types_sizes[self.crsf_frame_type] + # Type + if self.dec_fsm == self.dec_fsm_e.Type: + payload = int.from_bytes(frame.data['data'], byteorder='little') + self.crsf_frame_type = payload + self.dec_fsm = self.dec_fsm_e.Payload + self.crsf_frame_current_index += 1 + min = 0 + max = 100 # setting to be greater than max payload size + if self.crsf_frame_type in self.frame_types_sizes.keys(): + # if min max size defined then match length + min, max = self.frame_types_sizes[self.crsf_frame_type] - if payload in self.frame_types.keys(): - print('Type: {}'.format(self.frame_types[payload])) - return AnalyzerFrame('crsf_type_byte', frame.start_time, frame.end_time, { - 'type': self.frame_types[payload], - 'error': f"{f'''Length doesn't correspond to type'''if not min<= self.crsf_frame_length -2 <=max else ''}" - }) - else: - print('Type: Unrecognised') - return AnalyzerFrame('crsf_type_byte', frame.start_time, frame.end_time, { - 'type': "Unrecognised", - 'error': "Unrecognised type" - }) + if payload in self.frame_types.keys(): + print('Type: {}'.format(self.frame_types[payload])) + return AnalyzerFrame('crsf_type_byte', frame.start_time, frame.end_time, { + 'type': self.frame_types[payload], + 'error': f"{f'''Length doesn't correspond to type'''if not min<= self.crsf_frame_length -2 <=max else ''}" + }) + else: + print('Type: Unrecognised') + return AnalyzerFrame('crsf_type_byte', frame.start_time, frame.end_time, { + 'type': "Unrecognised", + 'error': "Unrecognised type" + }) - # Payload - if self.dec_fsm == self.dec_fsm_e.Payload: + # Payload + if self.dec_fsm == self.dec_fsm_e.Payload: - # to do - # implement time out of some sort - # maybe we compare bytes received with time passed + # to do + # implement time out of some sort + # maybe we compare bytes received with time passed - payload = int.from_bytes(frame.data['data'], byteorder='little') + payload = int.from_bytes(frame.data['data'], byteorder='little') - if self.crsf_frame_current_index == 1: # First payload byte - self.crsf_payload_start = frame.start_time - self.crsf_payload.append(payload) - self.crsf_frame_current_index += 1 - #print('Payload start ({}): {:2x}'.format(self.crsf_frame_current_index, payload)) - # ... still collecting payload bytes ... - elif self.crsf_frame_current_index < (self.crsf_frame_length - 2): - self.crsf_payload.append(payload) - self.crsf_frame_current_index += 1 - #print('Adding payload ({}): {:2x}'.format(self.crsf_frame_current_index, payload)) + if self.crsf_frame_current_index == 1: # First payload byte + self.crsf_payload_start = frame.start_time + self.crsf_payload.append(payload) + self.crsf_frame_current_index += 1 + #print('Payload start ({}): {:2x}'.format(self.crsf_frame_current_index, payload)) + # ... still collecting payload bytes ... + elif self.crsf_frame_current_index < (self.crsf_frame_length - 2): + self.crsf_payload.append(payload) + self.crsf_frame_current_index += 1 + #print('Adding payload ({}): {:2x}'.format(self.crsf_frame_current_index, payload)) - elif self.crsf_frame_current_index == self.crsf_frame_length - 2: - # second last byte received - # whole payload received - self.crsf_payload.append(payload) - self.crsf_frame_current_index += 1 - self.crsf_payload_end = frame.end_time - if self.crsf_frame_type == 0x08: # Battery sensor - bin_str = '' - for i in self.crsf_payload: - # Format as bits and reverse order - bin_str += format(i, '08b')[::-1] - print(bin_str) - # 2 bytes - Voltage (mV * 100) BigEndian - Voltage = float(bin_str[0:16][::-1]) - # 2 bytes - Current (mA * 100) - Current = float(bin_str[16:32][::-1]) - # 3 bytes - Capacity (mAh) - Capacity = float(bin_str[32:56][::-1]) - # 1 byte - Remaining (%) - Battery_percentage = float(bin_str[56:64][::-1]) - payload_str = f"Voltage: {'%.2f' % Voltage} ,Current: {'%.2f' % Current} ,Capacity: {'%.2f' % Capacity} ,Battery %: {'%.2f' % Battery_percentage}" - analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { - 'payload': payload_str - }) - elif self.crsf_frame_type == 0x14: # Link statistics - payload_signed = self.crsf_payload.copy() - # Uplink SNR and ... - payload_signed[3] = self.unsigned_to_signed_8( - payload_signed[3]) - # ... download SNR are signed. - payload_signed[9] = self.unsigned_to_signed_8( - payload_signed[9]) - # One byte per entry... - payload_str = ('Uplink RSSI 1: -{}dB, ' + - 'Uplink RSSI 2: -{}dB, ' + - 'Uplink Link Quality: {}%, ' + - 'Uplink SNR: {}dB, ' + - 'Active Antenna: {}, ' + - 'RF Mode: {}, ' + - 'Uplink TX Power: {} mW, ' + - 'Downlink RSSI: -{}dB, ' + - 'Downlink Link Quality: {}%, ' + - 'Downlink SNR: {}dB').format(*payload_signed) - print(payload_signed) - print(payload_str) - analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { - 'payload': payload_str - }) - elif self.crsf_frame_type == 0x10: # OpenTX sync - analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { - 'payload': "Open Tx sync packet not yet implemented" - }) - # ToDo - # 4 bytes - Adjusted Refresh Rate - # 4 bytes - Last Update - # 2 bytes - Refresh Rate - # 1 bytes (signed) - Refresh Rate - # 2 bytes - Input Lag - # 1 byte - Interval - # 1 byte - Target - # 1 byte - Downlink RSSI - # 1 byte - Downlink Link Quality - # 1 byte (signed) Downling SNR - elif self.crsf_frame_type == 0x21: - # flight mode - # max 16 bytes - # Format: String = [ACRO , WAIT , !FS! , RTH , MANU , STAB , HOR , AIR , !ERR] + *(if disarmed) + \0 - # eg: AIR* -> Air mode and disarmed - # https://github.dev/betaflight/betaflight#L379 - return AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { - 'payload': 'Flight Mode: ' + ''.join([chr(i) for i in self.crsf_payload]) + f'''{" ( disarmed )" if chr(self.crsf_payload[-2]) == '*' else "( Armed )"}''', - 'error': ""}) - elif self.crsf_frame_type == 0x16: # RC channels packed - # 11 bits per channel, 16 channels, 176 bits (22 bytes) total - bin_str = '' - channels = [] - for i in self.crsf_payload: - # Format as bits and reverse order - bin_str += format(i, '08b')[::-1] - print(bin_str) - for i in range(16): - # 'RC' value - value = int(bin_str[0 + 11 * i: 11 + 11 * i][::-1], 2) - # Converted to milliseconds - value_ms = int((value * 1024 / 1639) + 881) + elif self.crsf_frame_current_index == self.crsf_frame_length - 2: + # second last byte received + # whole payload received + self.crsf_payload.append(payload) + self.crsf_frame_current_index += 1 + self.crsf_payload_end = frame.end_time + if self.crsf_frame_type == 0x08: # Battery sensor + bin_str = '' + for i in self.crsf_payload: + # Format as bits and reverse order + bin_str += format(i, '08b')[::-1] + print(bin_str) + # 2 bytes - Voltage (mV * 100) BigEndian + Voltage = float(bin_str[0:16][::-1]) + # 2 bytes - Current (mA * 100) + Current = float(bin_str[16:32][::-1]) + # 3 bytes - Capacity (mAh) + Capacity = float(bin_str[32:56][::-1]) + # 1 byte - Remaining (%) + Battery_percentage = float(bin_str[56:64][::-1]) + payload_str = f"Voltage: {'%.2f' % Voltage} ,Current: {'%.2f' % Current} ,Capacity: {'%.2f' % Capacity} ,Battery %: {'%.2f' % Battery_percentage}" + analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': payload_str + }) + elif self.crsf_frame_type == 0x14: # Link statistics + payload_signed = self.crsf_payload.copy() + # Uplink SNR and ... + payload_signed[3] = self.unsigned_to_signed_8( + payload_signed[3]) + # ... download SNR are signed. + payload_signed[9] = self.unsigned_to_signed_8( + payload_signed[9]) + # One byte per entry... + payload_str = ('Uplink RSSI 1: -{}dB, ' + + 'Uplink RSSI 2: -{}dB, ' + + 'Uplink Link Quality: {}%, ' + + 'Uplink SNR: {}dB, ' + + 'Active Antenna: {}, ' + + 'RF Mode: {}, ' + + 'Uplink TX Power: {} mW, ' + + 'Downlink RSSI: -{}dB, ' + + 'Downlink Link Quality: {}%, ' + + 'Downlink SNR: {}dB').format(*payload_signed) + print(payload_signed) + print(payload_str) + analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': payload_str + }) + elif self.crsf_frame_type == 0x10: # OpenTX sync + analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': "Open Tx sync packet not yet implemented" + }) + # ToDo + # 4 bytes - Adjusted Refresh Rate + # 4 bytes - Last Update + # 2 bytes - Refresh Rate + # 1 bytes (signed) - Refresh Rate + # 2 bytes - Input Lag + # 1 byte - Interval + # 1 byte - Target + # 1 byte - Downlink RSSI + # 1 byte - Downlink Link Quality + # 1 byte (signed) Downling SNR + elif self.crsf_frame_type == 0x21: + # flight mode + # max 16 bytes + # Format: String = [ACRO , WAIT , !FS! , RTH , MANU , STAB , HOR , AIR , !ERR] + *(if disarmed) + \0 + # eg: AIR* -> Air mode and disarmed + # https://github.dev/betaflight/betaflight#L379 + return AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': 'Flight Mode: ' + ''.join([chr(i) for i in self.crsf_payload]) + f'''{" ( disarmed )" if chr(self.crsf_payload[-2]) == '*' else "( Armed )"}''', + 'error': ""}) + elif self.crsf_frame_type == 0x16: # RC channels packed + # 11 bits per channel, 16 channels, 176 bits (22 bytes) total + bin_str = '' + channels = [] + for i in self.crsf_payload: + # Format as bits and reverse order + bin_str += format(i, '08b')[::-1] + print(bin_str) + for i in range(16): + # 'RC' value + value = int(bin_str[0 + 11 * i: 11 + 11 * i][::-1], 2) + # Converted to milliseconds + value_ms = int((value * 1024 / 1639) + 881) + if self.channel_unit in self.channel_unit_options: + if self.channel_unit == 'ms': + channels.append(value_ms) + elif self.channel_unit == 'Digital Value': + channels.append(value) + else: + channels.append(value) + channels.append(value_ms) + # print(channels) if self.channel_unit in self.channel_unit_options: if self.channel_unit == 'ms': - channels.append(value_ms) + payload_str = ('CH1: {} ms, CH2: {} ms, CH3: {} ms, CH4: {} ms, ' + + 'CH5: {} ms, CH6: {} ms, CH7: {} ms, CH8: {} ms, ' + + 'CH9: {} ms, CH10: {} ms, CH11: {} ms, CH12: {} ms, ' + + 'CH13: {} ms, CH14: {} ms, CH15: {} ms, CH16: {} ms').format(*channels) elif self.channel_unit == 'Digital Value': - channels.append(value) + payload_str = ('CH1: {} , CH2: {} , CH3: {} , CH4: {} , ' + + 'CH5: {} , CH6: {} , CH7: {} , CH8: {} , ' + + 'CH9: {} , CH10: {} , CH11: {} , CH12: {} , ' + + 'CH13: {} , CH14: {} , CH15: {} , CH16: {} ').format(*channels) else: - channels.append(value) - channels.append(value_ms) - # print(channels) - if self.channel_unit in self.channel_unit_options: - if self.channel_unit == 'ms': - payload_str = ('CH1: {} ms, CH2: {} ms, CH3: {} ms, CH4: {} ms, ' + - 'CH5: {} ms, CH6: {} ms, CH7: {} ms, CH8: {} ms, ' + - 'CH9: {} ms, CH10: {} ms, CH11: {} ms, CH12: {} ms, ' + - 'CH13: {} ms, CH14: {} ms, CH15: {} ms, CH16: {} ms').format(*channels) - elif self.channel_unit == 'Digital Value': - payload_str = ('CH1: {} , CH2: {} , CH3: {} , CH4: {} , ' + - 'CH5: {} , CH6: {} , CH7: {} , CH8: {} , ' + - 'CH9: {} , CH10: {} , CH11: {} , CH12: {} , ' + - 'CH13: {} , CH14: {} , CH15: {} , CH16: {} ').format(*channels) - else: - payload_str = ('CH1: {} ({} ms), CH2: {} ({} ms), CH3: {} ({} ms), CH4: {} ({} ms), ' + - 'CH5: {} ({} ms), CH6: {} ({} ms), CH7: {} ({} ms), CH8: {} ({} ms), ' + - 'CH9: {} ({} ms), CH10: {} ({} ms), CH11: {} ({} ms), CH12: {} ({} ms), ' + - 'CH13: {} ({} ms), CH14: {} ({} ms), CH15: {} ({} ms), CH16: {} ({} ms)').format(*channels) - print(payload_str) - analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { - 'payload': payload_str + payload_str = ('CH1: {} ({} ms), CH2: {} ({} ms), CH3: {} ({} ms), CH4: {} ({} ms), ' + + 'CH5: {} ({} ms), CH6: {} ({} ms), CH7: {} ({} ms), CH8: {} ({} ms), ' + + 'CH9: {} ({} ms), CH10: {} ({} ms), CH11: {} ({} ms), CH12: {} ({} ms), ' + + 'CH13: {} ({} ms), CH14: {} ({} ms), CH15: {} ({} ms), CH16: {} ({} ms)').format(*channels) + print(payload_str) + analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': payload_str + }) + else: # unrecognised Packet type + analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': "Error in Type of Packet or not CRSF or not implemented", + 'error': "couldn't decode packet"}) + + return analyzerframe + elif self.crsf_frame_current_index == (self.crsf_frame_length - 1): + # Last byte is actually the CRC. + analyzerframe = None + self.crsf_payload.append(payload) + #print('Payload complete ({}): {:2x}'.format(self.crsf_frame_current_index, payload)) + # print(self.crsf_payload) + self.crsf_payload.insert(0, self.crsf_frame_type) + # convert type to bytes and then calcualtion CRC + crcresult = self.calCRC(packet=self.crsf_payload, + bytes=len(self.crsf_payload)) + if crcresult == 0: + crcresult = 'Pass' + error = "" + else: + crcresult = "Fail" + error = "CRC Fail" + analyzerframe = AnalyzerFrame('crsf_CRC', frame.start_time, frame.end_time, { + 'crccheck': f"{crcresult}", + 'error': f"{error}" }) - else: # unrecognised Packet type - analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { - 'payload': "Error in Type of Packet or not CRSF or not implemented", - 'error': "couldn't decode packet"}) - return analyzerframe - elif self.crsf_frame_current_index == (self.crsf_frame_length - 1): - # Last byte is actually the CRC. - analyzerframe = None - self.crsf_payload.append(payload) - #print('Payload complete ({}): {:2x}'.format(self.crsf_frame_current_index, payload)) - # print(self.crsf_payload) - self.crsf_payload.insert(0, self.crsf_frame_type) - # convert type to bytes and then calcualtion CRC - crcresult = self.calCRC(packet=self.crsf_payload, - bytes=len(self.crsf_payload)) - if crcresult == 0: - crcresult = 'Pass' - error = "" - else: - crcresult = "Fail" - error = "CRC Fail" - analyzerframe = AnalyzerFrame('crsf_CRC', frame.start_time, frame.end_time, { - 'crccheck': f"{crcresult}", - 'error': f"{error}" - }) + # And initialize again for next frame + self.crsf_frame_start = None + self.crsf_frame_end = None + self.dec_fsm = self.dec_fsm_e.Idle + self.crsf_frame_length = 0 + self.crsf_frame_type = None + self.crsf_frame_current_index = 0 + self.crsf_payload = [] + self.crsf_payload_start = None + self.crsf_payload_end = None + return analyzerframe + except Exception as e: + print(f'error occured {e}') + self.crsf_frame_start = None + self.crsf_frame_end = None + self.dec_fsm = self.dec_fsm_e.Idle + self.crsf_frame_length = 0 + self.crsf_frame_type = None + self.crsf_frame_current_index = 0 + self.crsf_payload = [] + self.crsf_payload_start = None + self.crsf_payload_end = None - # And initialize again for next frame - self.crsf_frame_start = None - self.crsf_frame_end = None - self.dec_fsm = self.dec_fsm_e.Idle - self.crsf_frame_length = 0 - self.crsf_frame_type = None - self.crsf_frame_current_index = 0 - self.crsf_payload = [] - self.crsf_payload_start = None - self.crsf_payload_end = None - return analyzerframe def calCRC(self, packet: list, bytes: int, gen_poly: int = 0xd5, start_from_byte=0): ''' From a9c766b660a5a4b368b6d4e2ac08bffc3ce539b3 Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Wed, 20 Sep 2023 23:50:07 +0530 Subject: [PATCH 12/17] Added support for GPS packet --- HighLevelAnalyzer.py | 102 ++++++++++++++++++++++++++++++------------- README.md | 4 +- 2 files changed, 75 insertions(+), 31 deletions(-) diff --git a/HighLevelAnalyzer.py b/HighLevelAnalyzer.py index 20433b8..b1fff71 100644 --- a/HighLevelAnalyzer.py +++ b/HighLevelAnalyzer.py @@ -136,21 +136,33 @@ def decode(self, frame: AnalyzerFrame): self.dec_fsm = self.dec_fsm_e.Length dest = self.CRSF_SYNC_BYTE[frame.data['data']] return AnalyzerFrame('crsf_sync_byte', frame.start_time, frame.end_time, {'address': f"{format(int.from_bytes(frame.data['data'] ,byteorder='little'),'#X')}", - 'destination': f"{dest}"}) + 'destination': f"{dest}"}) # Length if self.dec_fsm == self.dec_fsm_e.Length: - payload = int.from_bytes(frame.data['data'], byteorder='little') + payload = int.from_bytes( + frame.data['data'], byteorder='little') print('Length: {} bytes'.format(payload - 1)) self.crsf_frame_length = payload self.dec_fsm = self.dec_fsm_e.Type + if self.crsf_frame_length < 2: # error handling + self.crsf_frame_start = None + self.crsf_frame_end = None + self.dec_fsm = self.dec_fsm_e.Idle + self.crsf_frame_length = 0 + self.crsf_frame_type = None + self.crsf_frame_current_index = 0 + self.crsf_payload = [] + self.crsf_payload_start = None + self.crsf_payload_end = None return AnalyzerFrame('crsf_length_byte', frame.start_time, frame.end_time, { 'length': str(payload) }) # Type if self.dec_fsm == self.dec_fsm_e.Type: - payload = int.from_bytes(frame.data['data'], byteorder='little') + payload = int.from_bytes( + frame.data['data'], byteorder='little') self.crsf_frame_type = payload self.dec_fsm = self.dec_fsm_e.Payload self.crsf_frame_current_index += 1 @@ -179,8 +191,10 @@ def decode(self, frame: AnalyzerFrame): # to do # implement time out of some sort # maybe we compare bytes received with time passed + # CRSF is BIG Endian - payload = int.from_bytes(frame.data['data'], byteorder='little') + payload = int.from_bytes( + frame.data['data'], byteorder='little') if self.crsf_frame_current_index == 1: # First payload byte self.crsf_payload_start = frame.start_time @@ -200,15 +214,16 @@ def decode(self, frame: AnalyzerFrame): self.crsf_frame_current_index += 1 self.crsf_payload_end = frame.end_time if self.crsf_frame_type == 0x08: # Battery sensor + # https://github.com/betaflight/betaflight/blob/master/src/main/telemetry/crsf.c#L260 bin_str = '' for i in self.crsf_payload: # Format as bits and reverse order bin_str += format(i, '08b')[::-1] - print(bin_str) + # print(bin_str) # 2 bytes - Voltage (mV * 100) BigEndian - Voltage = float(bin_str[0:16][::-1]) + Voltage = float(bin_str[0:16][::-1])*100 # 2 bytes - Current (mA * 100) - Current = float(bin_str[16:32][::-1]) + Current = float(bin_str[16:32][::-1])*100 # 3 bytes - Capacity (mAh) Capacity = float(bin_str[32:56][::-1]) # 1 byte - Remaining (%) @@ -218,6 +233,7 @@ def decode(self, frame: AnalyzerFrame): 'payload': payload_str }) elif self.crsf_frame_type == 0x14: # Link statistics + # https://github.com/ExpressLRS/ExpressLRS/blob/master/src/lib/CrsfProtocol/crsf_protocol.h#L312 payload_signed = self.crsf_payload.copy() # Uplink SNR and ... payload_signed[3] = self.unsigned_to_signed_8( @@ -227,15 +243,15 @@ def decode(self, frame: AnalyzerFrame): payload_signed[9]) # One byte per entry... payload_str = ('Uplink RSSI 1: -{}dB, ' + - 'Uplink RSSI 2: -{}dB, ' + - 'Uplink Link Quality: {}%, ' + - 'Uplink SNR: {}dB, ' + - 'Active Antenna: {}, ' + - 'RF Mode: {}, ' + - 'Uplink TX Power: {} mW, ' + - 'Downlink RSSI: -{}dB, ' + - 'Downlink Link Quality: {}%, ' + - 'Downlink SNR: {}dB').format(*payload_signed) + 'Uplink RSSI 2: -{}dB, ' + + 'Uplink Link Quality: {}%, ' + + 'Uplink SNR: {}dB, ' + + 'Active Antenna: {}, ' + + 'RF Mode: {}, ' + + 'Uplink TX Power: {} mW, ' + + 'Downlink RSSI: -{}dB, ' + + 'Downlink Link Quality: {}%, ' + + 'Downlink SNR: {}dB').format(*payload_signed) print(payload_signed) print(payload_str) analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { @@ -256,16 +272,42 @@ def decode(self, frame: AnalyzerFrame): # 1 byte - Downlink RSSI # 1 byte - Downlink Link Quality # 1 byte (signed) Downling SNR - elif self.crsf_frame_type == 0x21: - # flight mode + elif self.crsf_frame_type == 0x21: # flight mode # max 16 bytes # Format: String = [ACRO , WAIT , !FS! , RTH , MANU , STAB , HOR , AIR , !ERR] + *(if disarmed) + \0 # eg: AIR* -> Air mode and disarmed - # https://github.dev/betaflight/betaflight#L379 + # https://github.com/betaflight/betaflight/blob/master/src/main/telemetry/crsf.c#L367 return AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { 'payload': 'Flight Mode: ' + ''.join([chr(i) for i in self.crsf_payload]) + f'''{" ( disarmed )" if chr(self.crsf_payload[-2]) == '*' else "( Armed )"}''', 'error': ""}) + elif self.crsf_frame_type == 0x02: # GPS + # https://github.com/betaflight/betaflight/blob/master/src/main/telemetry/crsf.c#237 + # Payload: + # int32_t Latitude ( degree / 10`000`000 ) + # int32_t Longitude (degree / 10`000`000 ) + # uint16_t Groundspeed ( km/h / 10 ) + # uint16_t GPS heading ( degree / 100 ) + # uint16 Altitude ( meter ­1000m offset ) + # uint8_t Satellites in use ( counter ) + # todo + + # Convert to signed + bin_str = '' + for i in self.crsf_payload: + # Format as bits and reverse order + bin_str += format(i, '08b')[::-1] + latitude = bin_str[0:4][::-1] + longitude = bin_str[4:8][::-1] + groundspeed = bin_str[8:10][::-1] + gps_heading = bin_str[10:12][::-1] + gps_altitude = bin_str[12:14][::-1] + satellities = bin_str[14][::-1] + return AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': f'Latitude (degrees): {latitude} ,Longitude (degrees): {longitude} ,Ground Speed (Km/h): {groundspeed} , Gps Heading (Degree): {gps_heading} ,Gps altitude(1000 m offset): {gps_altitude} ,Satellites :{satellities}', + 'error': "development pending"}) elif self.crsf_frame_type == 0x16: # RC channels packed + # https://github.com/betaflight/betaflight/blob/master/src/main/rx/crsf.c#L481 + # https://github.com/betaflight/betaflight/blob/master/src/main/rx/crsf.c#L109 # 11 bits per channel, 16 channels, 176 bits (22 bytes) total bin_str = '' channels = [] @@ -275,7 +317,8 @@ def decode(self, frame: AnalyzerFrame): print(bin_str) for i in range(16): # 'RC' value - value = int(bin_str[0 + 11 * i: 11 + 11 * i][::-1], 2) + value = int( + bin_str[0 + 11 * i: 11 + 11 * i][::-1], 2) # Converted to milliseconds value_ms = int((value * 1024 / 1639) + 881) if self.channel_unit in self.channel_unit_options: @@ -290,19 +333,19 @@ def decode(self, frame: AnalyzerFrame): if self.channel_unit in self.channel_unit_options: if self.channel_unit == 'ms': payload_str = ('CH1: {} ms, CH2: {} ms, CH3: {} ms, CH4: {} ms, ' + - 'CH5: {} ms, CH6: {} ms, CH7: {} ms, CH8: {} ms, ' + - 'CH9: {} ms, CH10: {} ms, CH11: {} ms, CH12: {} ms, ' + - 'CH13: {} ms, CH14: {} ms, CH15: {} ms, CH16: {} ms').format(*channels) + 'CH5: {} ms, CH6: {} ms, CH7: {} ms, CH8: {} ms, ' + + 'CH9: {} ms, CH10: {} ms, CH11: {} ms, CH12: {} ms, ' + + 'CH13: {} ms, CH14: {} ms, CH15: {} ms, CH16: {} ms').format(*channels) elif self.channel_unit == 'Digital Value': payload_str = ('CH1: {} , CH2: {} , CH3: {} , CH4: {} , ' + - 'CH5: {} , CH6: {} , CH7: {} , CH8: {} , ' + - 'CH9: {} , CH10: {} , CH11: {} , CH12: {} , ' + - 'CH13: {} , CH14: {} , CH15: {} , CH16: {} ').format(*channels) + 'CH5: {} , CH6: {} , CH7: {} , CH8: {} , ' + + 'CH9: {} , CH10: {} , CH11: {} , CH12: {} , ' + + 'CH13: {} , CH14: {} , CH15: {} , CH16: {} ').format(*channels) else: payload_str = ('CH1: {} ({} ms), CH2: {} ({} ms), CH3: {} ({} ms), CH4: {} ({} ms), ' + - 'CH5: {} ({} ms), CH6: {} ({} ms), CH7: {} ({} ms), CH8: {} ({} ms), ' + - 'CH9: {} ({} ms), CH10: {} ({} ms), CH11: {} ({} ms), CH12: {} ({} ms), ' + - 'CH13: {} ({} ms), CH14: {} ({} ms), CH15: {} ({} ms), CH16: {} ({} ms)').format(*channels) + 'CH5: {} ({} ms), CH6: {} ({} ms), CH7: {} ({} ms), CH8: {} ({} ms), ' + + 'CH9: {} ({} ms), CH10: {} ({} ms), CH11: {} ({} ms), CH12: {} ({} ms), ' + + 'CH13: {} ({} ms), CH14: {} ({} ms), CH15: {} ({} ms), CH16: {} ({} ms)').format(*channels) print(payload_str) analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { 'payload': payload_str @@ -357,7 +400,6 @@ def decode(self, frame: AnalyzerFrame): self.crsf_payload_start = None self.crsf_payload_end = None - def calCRC(self, packet: list, bytes: int, gen_poly: int = 0xd5, start_from_byte=0): ''' Calcualtes CRC value for the list provided to it. diff --git a/README.md b/README.md index 674aec3..9be696f 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,9 @@ This is still a very early release. Currently the following frames are supported * Link statistics (0x14) * RC channels packed (0x16) -* Battery Packet (0x08) +* Battery Sensor Packet (0x08) * Flight Mode (0x21) +* Gps Packet (0x02)(Experimental need testers) It currently Contains the following features: @@ -26,6 +27,7 @@ It currently Contains the following features: * Destination device address * Selectable Channel value units * payload length check for different packets +* some basic error handling The decoder features a state machine that parses all frames so it can easily be extended to decode future frames. Some groundwork for additional frames already exists. From afd309e935bcba047ed9abbacee41119d52ce5eb Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Fri, 22 Sep 2023 00:04:20 +0530 Subject: [PATCH 13/17] implmented and corrected all of the packets --- HighLevelAnalyzer.py | 171 ++++++++++++++++++++++++++++++++++--------- README.md | 15 ++-- 2 files changed, 144 insertions(+), 42 deletions(-) diff --git a/HighLevelAnalyzer.py b/HighLevelAnalyzer.py index b1fff71..ba2fdec 100644 --- a/HighLevelAnalyzer.py +++ b/HighLevelAnalyzer.py @@ -9,7 +9,7 @@ class Hla(HighLevelAnalyzer): # List of types this analyzer produces result_types = { - 'crsf_sync_byte': { + 'crsf_address_byte': { 'format': 'Going to: {{data.destination}}({{data.address}})' }, 'crsf_length_byte': { @@ -23,6 +23,9 @@ class Hla(HighLevelAnalyzer): }, 'crsf_CRC': { 'format': 'CRC Check: {{data.crccheck}}' + }, + 'crsf_error': { + 'format': '{{data.error}}' } } @@ -40,8 +43,13 @@ class dec_fsm_e(enum.Enum): 0x07: 'Vario', 0x08: 'Battery sensor', 0x09: 'Baro altitude', + 0x0B: 'Heart Beat', 0x10: 'OpenTX sync', 0x14: 'Link statistics', + # no plans of implmenting https://github.com/betaflight/betaflight/blob/master/src/main/rx/crsf.c#L170 + 0x1c: 'Link statistics Rx', + # no plans of implmenting https://github.com/betaflight/betaflight/blob/master/src/main/rx/crsf.c#L181 + 0x1d: 'Link statistics Tx', 0x16: 'RC channels packed', 0x1E: 'Attitude', 0x21: 'Flight mode', @@ -62,10 +70,11 @@ class dec_fsm_e(enum.Enum): } # Extended Header Frames, range: 0x28 to 0x96 # https://github.com/ExpressLRS/ExpressLRS/blob/master/src/lib/CrsfProtocol/crsf_protocol.h#L108 - # Make a dictionary containing packet lengths offrame types + # Size of payload only not including CRC and type frame_types_sizes = { 0x02: (15, 15), 0x07: (2, 2), + 0X0b: (1, 1), 0x08: (8, 8), 0x09: (4, 4), 0x1E: (6, 6), @@ -74,7 +83,7 @@ class dec_fsm_e(enum.Enum): } # Protocol defines # https://github.com/ExpressLRS/ExpressLRS/blob/master/src/lib/CrsfProtocol/crsf_protocol.h#L119 - CRSF_SYNC_BYTE = {b'\xc8': 'Flight Controller', + CRSF_ADDRESSES = {b'\xc8': 'Flight Controller', b'\xea': 'Radio Transmitter', b'\xee': 'CRSF Transmitter', b'\xec': 'CRSF Receiver', @@ -98,10 +107,9 @@ def __init__(self): Initializes the CRFS HLA. ''' self.crsf_packet_start = None - self.crsf_frame_start = None # Timestamp: Start of frame - self.crsf_frame_end = None # Timestamp: End of frame + self.crsf_new_packet_start = None # Timestamp: Start of frame self.dec_fsm = self.dec_fsm_e.Idle # Current state of protocol decoder FSM - self.crsf_frame_length = 0 # No. of bytes (type + payload) + self.crsf_frame_length = 0 # No. of bytes (type + payload + CRC) self.crsf_frame_type = None # Type of current frame (see frame_types) self.crsf_frame_current_index = 0 # Index to determine end of payload # Stores the payload for decoding after last byte ist rx'd. @@ -120,23 +128,41 @@ def unsigned_to_signed_8(self, x): x -= 256 return x + def unsigned_to_signed_16(self, x): + ''' + Little helper to get a signed value from a 2 bytes. + ''' + if x > 32767: # x > 2**15 -1 + x -= 32768 + return x + + def unsigned_to_signed_32(self, x): + ''' + Little helper to get a signed value from a 4 bytes. + ''' + if x > 2**32-1: # x > 2**15 -1 + x -= 2**32 + return x + def decode(self, frame: AnalyzerFrame): ''' Processes a frame from the async analyzer, returns an AnalyzerFrame with result_types or nothing. Feed it with async analyzer frames. :) ''' + + self.crsf_frame_start = frame.start_time # variable reused to decode error + self.crsf_frame_end = frame.end_time + # CRSF bits in packet are littleednian try: # New frame - if self.crsf_frame_start == None and frame.data['data'] in self.CRSF_SYNC_BYTE.keys() and self.dec_fsm == self.dec_fsm_e.Idle: + if self.crsf_new_packet_start == None and frame.data['data'] in self.CRSF_ADDRESSES.keys() and self.dec_fsm == self.dec_fsm_e.Idle: print('Sync byte detected.') - self.crsf_frame_start = frame.start_time - self.crsf_packet_start = frame.start_time - self.crsf_packet_time = frame.end_time - frame.start_time + self.crsf_new_packet_start = frame.start_time self.dec_fsm = self.dec_fsm_e.Length - dest = self.CRSF_SYNC_BYTE[frame.data['data']] - return AnalyzerFrame('crsf_sync_byte', frame.start_time, frame.end_time, {'address': f"{format(int.from_bytes(frame.data['data'] ,byteorder='little'),'#X')}", - 'destination': f"{dest}"}) + dest = self.CRSF_ADDRESSES[frame.data['data']] + return AnalyzerFrame('crsf_address_byte', frame.start_time, frame.end_time, {'address': f"{format(int.from_bytes(frame.data['data'] ,byteorder='little'),'#x')}", + 'destination': f"{dest}"}) # Length if self.dec_fsm == self.dec_fsm_e.Length: @@ -146,8 +172,7 @@ def decode(self, frame: AnalyzerFrame): self.crsf_frame_length = payload self.dec_fsm = self.dec_fsm_e.Type if self.crsf_frame_length < 2: # error handling - self.crsf_frame_start = None - self.crsf_frame_end = None + self.crsf_new_packet_start = None self.dec_fsm = self.dec_fsm_e.Idle self.crsf_frame_length = 0 self.crsf_frame_type = None @@ -191,7 +216,6 @@ def decode(self, frame: AnalyzerFrame): # to do # implement time out of some sort # maybe we compare bytes received with time passed - # CRSF is BIG Endian payload = int.from_bytes( frame.data['data'], byteorder='little') @@ -205,6 +229,7 @@ def decode(self, frame: AnalyzerFrame): elif self.crsf_frame_current_index < (self.crsf_frame_length - 2): self.crsf_payload.append(payload) self.crsf_frame_current_index += 1 + self.crsf_payload_end = frame.end_time #print('Adding payload ({}): {:2x}'.format(self.crsf_frame_current_index, payload)) elif self.crsf_frame_current_index == self.crsf_frame_length - 2: @@ -221,14 +246,14 @@ def decode(self, frame: AnalyzerFrame): bin_str += format(i, '08b')[::-1] # print(bin_str) # 2 bytes - Voltage (mV * 100) BigEndian - Voltage = float(bin_str[0:16][::-1])*100 + Voltage = int(bin_str[0:16][::-1], 2)/100 # 2 bytes - Current (mA * 100) - Current = float(bin_str[16:32][::-1])*100 + Current = int(bin_str[16:32][::-1], 2)/100 # 3 bytes - Capacity (mAh) - Capacity = float(bin_str[32:56][::-1]) + Capacity = int(bin_str[32:56][::-1], 2) # 1 byte - Remaining (%) - Battery_percentage = float(bin_str[56:64][::-1]) - payload_str = f"Voltage: {'%.2f' % Voltage} ,Current: {'%.2f' % Current} ,Capacity: {'%.2f' % Capacity} ,Battery %: {'%.2f' % Battery_percentage}" + Battery_percentage = int(bin_str[56:64][::-1], 2) + payload_str = f"Voltage: {'%.2f' % Voltage}mV ,Current: {'%.2f' % Current}mA ,Capacity: {'%.2f' % Capacity}mAh ,Battery %: {'%.2f' % Battery_percentage}" analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { 'payload': payload_str }) @@ -281,7 +306,7 @@ def decode(self, frame: AnalyzerFrame): 'payload': 'Flight Mode: ' + ''.join([chr(i) for i in self.crsf_payload]) + f'''{" ( disarmed )" if chr(self.crsf_payload[-2]) == '*' else "( Armed )"}''', 'error': ""}) elif self.crsf_frame_type == 0x02: # GPS - # https://github.com/betaflight/betaflight/blob/master/src/main/telemetry/crsf.c#237 + # https://github.com/betaflight/betaflight/blob/master/src/main/telemetry/crsf.c#L237 # Payload: # int32_t Latitude ( degree / 10`000`000 ) # int32_t Longitude (degree / 10`000`000 ) @@ -289,22 +314,94 @@ def decode(self, frame: AnalyzerFrame): # uint16_t GPS heading ( degree / 100 ) # uint16 Altitude ( meter ­1000m offset ) # uint8_t Satellites in use ( counter ) - # todo - - # Convert to signed bin_str = '' for i in self.crsf_payload: # Format as bits and reverse order + # bcz transmitted data is little endian bin_str += format(i, '08b')[::-1] - latitude = bin_str[0:4][::-1] - longitude = bin_str[4:8][::-1] - groundspeed = bin_str[8:10][::-1] - gps_heading = bin_str[10:12][::-1] - gps_altitude = bin_str[12:14][::-1] - satellities = bin_str[14][::-1] + latitude = self.unsigned_to_signed_32( + int(bin_str[0:32][::-1], 2)) + longitude = self.unsigned_to_signed_32( + int(bin_str[32:64][::-1], 2)) + groundspeed = int(bin_str[64:80][::-1], 2) + gps_heading = int(bin_str[80:96][::-1], 2) + gps_altitude = int(bin_str[96:112][::-1], 2) + satellities = int(bin_str[112:120][::-1], 2) return AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { - 'payload': f'Latitude (degrees): {latitude} ,Longitude (degrees): {longitude} ,Ground Speed (Km/h): {groundspeed} , Gps Heading (Degree): {gps_heading} ,Gps altitude(1000 m offset): {gps_altitude} ,Satellites :{satellities}', + 'payload': f'Latitude (degrees): {latitude} ,Longitude (degrees): {longitude} ,Ground Speed (Km/h): {(groundspeed*10)} , Gps Heading (Degree): {gps_heading*100} ,Gps altitude: {gps_altitude-1000}m ,Satellites :{satellities}', 'error': "development pending"}) + elif self.crsf_frame_type == 0x0B: # HEART BEAT + # https://github.com/betaflight/betaflight/blob/master/src/main/telemetry/crsf.c#L288 + bin_str = '' + for i in self.crsf_payload: + # Format as bits and reverse order + # bcz transmitted data is little endian + bin_str += format(i, '08b')[::-1] + address = format(int(bin_str[0:16][::-1], 2), "#x") + if address in self.CRSF_ADDRESSES.keys(): + return AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': f'Origin: {self.CRSF_ADDRESSES[address]}', + 'error': "" + }) + else: + return AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': f'Origin: {address} (unknown device address)', + 'error': "Unknown device" + }) + elif self.crsf_frame_type == 0x28: # Ping + # https://github.com/betaflight/betaflight/blob/master/src/main/telemetry/crsf.c#L300 + dest_address = format(self.crsf_payload[0], "#x") + src_address = format(self.crsf_payload[1], "#x") + if src_address in self.CRSF_ADDRESSES.keys() and dest_address in self.CRSF_ADDRESSES.keys(): + return AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': f'Destination: {self.CRSF_ADDRESSES[dest_address]} ,Origin: {self.CRSF_ADDRESSES[src_address]}', + 'error': "", + 'destination': f'{dest_address}'}) + else: + return AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': f'Destination: {dest_address} ,Origin: {src_address} (unknown devices)', + 'error': "Unknown device", + 'destination': f'{dest_address}'}) + + elif self.crsf_frame_type == 0x1E: # Attitude + # https://github.com/betaflight/betaflight/blob/master/src/main/telemetry/crsf.c#L337 + bin_str = '' + for i in self.crsf_payload: + # Format as bits and reverse order + # bcz transmitted data is little endian + # eg bits received are in order 7 6 5 4 3 2 1 0, 15 14 13 12 11 10 9 8 in self.crsf_payload + # now in for loop we reverse every byte + # so now bits are 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + # so now have to reverse the list containing both bytes + # then bit order = 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + bin_str += format(i, '08b')[::-1] + + pitch = bin_str[0:16][::-1] + roll = bin_str[16:32][::-1] + yaw = bin_str[32:48][::-1] # but this is unsigned + + pitch = self.unsigned_to_signed_16(int(pitch, 2))*10000 + roll = self.unsigned_to_signed_16(int(roll, 2))*10000 + yaw = self.unsigned_to_signed_16(int(yaw, 2))*10000 + return AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': f'Pitch(rad): {pitch} ,Roll(rad): {roll} ,Yaw(rad): {yaw}', + 'error': ""}) + elif self.crsf_frame_type == 0x29: # Device info + # https://github.com/betaflight/betaflight/blob/master/src/main/telemetry/crsf.c#L412 + + dest = self.crsf_payload[0] + origin = self.crsf_payload[1] + index = 2 + device_name = '' + while self.crsf_payload[index] != "\0" and index < self.crsf_frame_length - 2: + device_name += self.crsf_payload[index] + index = index+1 + index = index + 12 + 1 # 12 null bytes are sent after null terminated string + device_info_paramter_count = self.crsf_payload[index] + device_info_paramter_version = self.crsf_payload[index+1] + return AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { + 'payload': f'Destination: {format(dest,"#x")} ,Origin: {format(origin,"#x")} ,Device Name: {device_name} ,Device info parameter count: {device_info_paramter_count} ,Device info paramter version: {device_info_paramter_version}', + 'error': ""}) elif self.crsf_frame_type == 0x16: # RC channels packed # https://github.com/betaflight/betaflight/blob/master/src/main/rx/crsf.c#L481 # https://github.com/betaflight/betaflight/blob/master/src/main/rx/crsf.c#L109 @@ -378,8 +475,7 @@ def decode(self, frame: AnalyzerFrame): }) # And initialize again for next frame - self.crsf_frame_start = None - self.crsf_frame_end = None + self.crsf_new_packet_start = None self.dec_fsm = self.dec_fsm_e.Idle self.crsf_frame_length = 0 self.crsf_frame_type = None @@ -390,7 +486,9 @@ def decode(self, frame: AnalyzerFrame): return analyzerframe except Exception as e: print(f'error occured {e}') - self.crsf_frame_start = None + frame_start = self.crsf_frame_start + frame_end = self.crsf_frame_end + self.crsf_new_packet_start = None self.crsf_frame_end = None self.dec_fsm = self.dec_fsm_e.Idle self.crsf_frame_length = 0 @@ -399,6 +497,9 @@ def decode(self, frame: AnalyzerFrame): self.crsf_payload = [] self.crsf_payload_start = None self.crsf_payload_end = None + analyzerframe = AnalyzerFrame('crsf_error', frame_start, frame_end, { + 'error': f"Program Error (Contact developer): type:{e.args}{e.with_traceback}"}) + return analyzerframe def calCRC(self, packet: list, bytes: int, gen_poly: int = 0xd5, start_from_byte=0): ''' diff --git a/README.md b/README.md index 9be696f..7784e77 100644 --- a/README.md +++ b/README.md @@ -13,13 +13,17 @@ Saleae Logic 2 High Level Analyzer: Crossfire decoder for R/C protocol as used b ## Features ✨ -This is still a very early release. Currently the following frames are supported: +This is still a very early release. Currently full decoding of the following frames are supported: * Link statistics (0x14) * RC channels packed (0x16) * Battery Sensor Packet (0x08) * Flight Mode (0x21) * Gps Packet (0x02)(Experimental need testers) +* Heart Beat Packet (0x0B) +* Ping (0x28) +* Attitude (0x1E) +* Device info (0x29) It currently Contains the following features: @@ -27,15 +31,12 @@ It currently Contains the following features: * Destination device address * Selectable Channel value units * payload length check for different packets -* some basic error handling +* basic error handling The decoder features a state machine that parses all frames so it can easily be extended to decode future frames. Some groundwork for additional frames already exists. ## ToDo ☝️ -* Additional supported frames -* add check for aync serial -* pass parameters like address , len and all for all frames -* implement search for packet feature -* implement length mismatch \ No newline at end of file +* units of gps and others +* altitude, pitch role yaw are to be checked From 429ede06b8e2cb7c482e46b32e8f40f326daf842 Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Fri, 22 Sep 2023 00:05:13 +0530 Subject: [PATCH 14/17] Version update --- extension.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extension.json b/extension.json index 16eac86..bb1e9a0 100644 --- a/extension.json +++ b/extension.json @@ -1,6 +1,6 @@ { "name": "CRSF", - "apiVersion": "1.0.0", + "apiVersion": "1.1.0", "author": "Ansh Chawla(Original code by : Max Gröning)", "version": "0.5.2", "description": "Crossfire decoder for R/C protocol as used by TBS Crossfire, Tracer or ExpressLRS", From 1cf61d85c610a2e0942d50fa202c4c9617dcc86b Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Sun, 10 Mar 2024 20:25:36 +0530 Subject: [PATCH 15/17] battery tested and working --- HighLevelAnalyzer.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/HighLevelAnalyzer.py b/HighLevelAnalyzer.py index ba2fdec..092eb9d 100644 --- a/HighLevelAnalyzer.py +++ b/HighLevelAnalyzer.py @@ -243,17 +243,17 @@ def decode(self, frame: AnalyzerFrame): bin_str = '' for i in self.crsf_payload: # Format as bits and reverse order - bin_str += format(i, '08b')[::-1] + bin_str += format(i, '08b') # print(bin_str) # 2 bytes - Voltage (mV * 100) BigEndian - Voltage = int(bin_str[0:16][::-1], 2)/100 + Voltage = int(bin_str[0:16], 2)/10 # 2 bytes - Current (mA * 100) - Current = int(bin_str[16:32][::-1], 2)/100 + Current = int(bin_str[16:32], 2)/10 # 3 bytes - Capacity (mAh) - Capacity = int(bin_str[32:56][::-1], 2) + Capacity = int(bin_str[32:56], 2) # 1 byte - Remaining (%) - Battery_percentage = int(bin_str[56:64][::-1], 2) - payload_str = f"Voltage: {'%.2f' % Voltage}mV ,Current: {'%.2f' % Current}mA ,Capacity: {'%.2f' % Capacity}mAh ,Battery %: {'%.2f' % Battery_percentage}" + Battery_percentage = int(bin_str[56:64],2) + payload_str = f"Voltage: {'%.2f' % Voltage}V ,Current: {'%.2f' % Current}A ,Capacity: {'%.2f' % Capacity}mAh ,Battery %: {'%.2f' % Battery_percentage}" analyzerframe = AnalyzerFrame('crsf_payload', self.crsf_payload_start, self.crsf_payload_end, { 'payload': payload_str }) From dd4070a3c367c94be3ea39cd3e6d9c93abb746ee Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Thu, 14 Mar 2024 22:20:58 +0530 Subject: [PATCH 16/17] V1.0.0 release --- extension.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extension.json b/extension.json index bb1e9a0..b4bdb9d 100644 --- a/extension.json +++ b/extension.json @@ -1,8 +1,8 @@ { "name": "CRSF", - "apiVersion": "1.1.0", + "apiVersion": "1.0.0", "author": "Ansh Chawla(Original code by : Max Gröning)", - "version": "0.5.2", + "version": "1.0.0", "description": "Crossfire decoder for R/C protocol as used by TBS Crossfire, Tracer or ExpressLRS", "extensions": { "CRSF": { From 6258511c760138f0085b54534d4b3700e156c04f Mon Sep 17 00:00:00 2001 From: anshchawla521 Date: Mon, 25 Mar 2024 23:15:21 +0530 Subject: [PATCH 17/17] fixed syncing issue --- HighLevelAnalyzer.py | 51 +++++++++++++++++++++++++++++++++++++++++++- extension.json | 2 +- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/HighLevelAnalyzer.py b/HighLevelAnalyzer.py index 092eb9d..c83bdf7 100644 --- a/HighLevelAnalyzer.py +++ b/HighLevelAnalyzer.py @@ -13,7 +13,7 @@ class Hla(HighLevelAnalyzer): 'format': 'Going to: {{data.destination}}({{data.address}})' }, 'crsf_length_byte': { - 'format': 'Length: {{data.length}}' + 'format': 'Length: {{data.length}} ({{data.error}})' }, 'crsf_type_byte': { 'format': 'Type: {{data.type}} ({{data.error}})' @@ -180,6 +180,29 @@ def decode(self, frame: AnalyzerFrame): self.crsf_payload = [] self.crsf_payload_start = None self.crsf_payload_end = None + return AnalyzerFrame('crsf_length_byte', frame.start_time, frame.end_time, { + 'length': str(payload), + 'error' : "length cannot be less than 2" + }) + + elif self.crsf_frame_length > 63: + print("length of packet cannot be greater than 64") + analyzerframe = AnalyzerFrame('crsf_length_byte', frame.start_time, frame.end_time, { + 'length': str(payload), + 'error': "length cannot be greater than 63" + }) + + # And initialize again for next frame + self.crsf_new_packet_start = None + self.dec_fsm = self.dec_fsm_e.Idle + self.crsf_frame_length = 0 + self.crsf_frame_type = None + self.crsf_frame_current_index = 0 + self.crsf_payload = [] + self.crsf_payload_start = None + self.crsf_payload_end = None + return analyzerframe + return AnalyzerFrame('crsf_length_byte', frame.start_time, frame.end_time, { 'length': str(payload) }) @@ -205,6 +228,16 @@ def decode(self, frame: AnalyzerFrame): }) else: print('Type: Unrecognised') + # And initialize again for next frame + self.crsf_new_packet_start = None + self.dec_fsm = self.dec_fsm_e.Idle + self.crsf_frame_length = 0 + self.crsf_frame_type = None + self.crsf_frame_current_index = 0 + self.crsf_payload = [] + self.crsf_payload_start = None + self.crsf_payload_end = None + return AnalyzerFrame('crsf_type_byte', frame.start_time, frame.end_time, { 'type': "Unrecognised", 'error': "Unrecognised type" @@ -474,6 +507,22 @@ def decode(self, frame: AnalyzerFrame): 'error': f"{error}" }) + # And initialize again for next frame + self.crsf_new_packet_start = None + self.dec_fsm = self.dec_fsm_e.Idle + self.crsf_frame_length = 0 + self.crsf_frame_type = None + self.crsf_frame_current_index = 0 + self.crsf_payload = [] + self.crsf_payload_start = None + self.crsf_payload_end = None + return analyzerframe + else: + print("unknown error") + analyzerframe = AnalyzerFrame('crsf_error', frame.start_time, frame.end_time, { + 'error': "Something Went Wrong" + }) + # And initialize again for next frame self.crsf_new_packet_start = None self.dec_fsm = self.dec_fsm_e.Idle diff --git a/extension.json b/extension.json index b4bdb9d..26c2fd9 100644 --- a/extension.json +++ b/extension.json @@ -2,7 +2,7 @@ "name": "CRSF", "apiVersion": "1.0.0", "author": "Ansh Chawla(Original code by : Max Gröning)", - "version": "1.0.0", + "version": "1.0.1", "description": "Crossfire decoder for R/C protocol as used by TBS Crossfire, Tracer or ExpressLRS", "extensions": { "CRSF": {