From 529142795fcc3d78c13f1f6d449f620e20bdcd0e Mon Sep 17 00:00:00 2001 From: Michael Torrie Date: Thu, 28 Mar 2019 13:39:56 -0600 Subject: [PATCH 1/2] Integer parsing requires twos compliment. Fixes ECEF numbers in types 1005 and 1006. --- RTCM3.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/RTCM3.py b/RTCM3.py index f7ca795..a7cf41b 100755 --- a/RTCM3.py +++ b/RTCM3.py @@ -88,6 +88,18 @@ def bitValue(bitArray,Start,Length): s +=bitArray[i] return(int(s,2)) +def bitValueSigned(bitArray,Start,Length): +# print Start,Length + s = "" + for i in range (Start,Start+Length): + s +=bitArray[i] + + if bitArray[Start] == '0': + return(int(s,2)) + else: + # two's complement + return(-(((int(s,2) ^ (0x3fffffffff)) + 1))) + #(********************************************************************** # * Compute the CRC24 checksum using a lookup table method. # * @@ -161,7 +173,7 @@ def decode(self,packet_ID, packet_data): field["value"]= bitValue(bitArray,current_bit,field["bitlength"]) current_bit+=field["bitlength"] elif field["type"] == "INT" : - field["value"]= bitValue(bitArray,current_bit,field["bitlength"]) + field["value"]= bitValueSigned(bitArray,current_bit,field["bitlength"]) current_bit+=field["bitlength"] elif field["type"] == "REPEAT" : field["value"]= bitValue(bitArray,current_bit,field["bitlength"]) From 1491451aa2f1227504b4def8a83c4721e03b9fa5 Mon Sep 17 00:00:00 2001 From: Michael Torrie Date: Thu, 28 Mar 2019 13:45:09 -0600 Subject: [PATCH 2/2] signed integer parsing of any width --- RTCM3.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RTCM3.py b/RTCM3.py index a7cf41b..b467f93 100755 --- a/RTCM3.py +++ b/RTCM3.py @@ -98,7 +98,7 @@ def bitValueSigned(bitArray,Start,Length): return(int(s,2)) else: # two's complement - return(-(((int(s,2) ^ (0x3fffffffff)) + 1))) + return(-(((int(s,2) ^ (2**Length-1)) + 1))) #(********************************************************************** # * Compute the CRC24 checksum using a lookup table method.