Ejemplo n.º 1
0
    def decode(self,length,data):
        if (length < 1):
            return Decode_Error
        else :
            self.SV_Details=[]
            self.SVs=0

            wb = RTCM2.word_bit(3,1)
            finished=False

            while not finished:
                self.Beacons+=1
                Latitude=RTCM2.twos_comp(wb.extract_rtcm_data_and_move(data,16),16);
                Longitude=RTCM2.twos_comp(wb.extract_rtcm_data_and_move(data,16),16);
                Range=wb.extract_rtcm_data_and_move(data,10);
                Freq=wb.extract_rtcm_data_and_move(data,12)*100 + 190;
                Health=wb.extract_rtcm_data_and_move(data,2);
                Station_ID=wb.extract_rtcm_data_and_move(data,10);
                Bit_Rate=wb.extract_rtcm_data_and_move(data,3);
                Datum=wb.extract_rtcm_data_and_move(data,1);
                Sync_type=wb.extract_rtcm_data_and_move(data,1);
                Coding=wb.extract_rtcm_data_and_move(data,1);
                Name=""
                for i in range(9): # 72/8
                    c =wb.extract_rtcm_data_and_move(data,8)
                    if c != 0 :
                        Name+=chr(c)


                finished=wb.word()==(length+2)

                self.SV_Details.append({'Beacon': Station_ID,'Lat': Latitude, 'Long':Longitude,'Range':Range, 'Freq':Freq,'Health':Health,'BitRate':Bit_Rate,'Datum':Datum,'Sync_type':Sync_type,'Coding':Coding,'Name':Name})

            return Got_Packet
Ejemplo n.º 2
0
    def decode(self,length,data):
        if (length < 1):
            return Decode_Error
        else :
            self.SV_Details=[]
            self.SVs=0
            wb = RTCM2.word_bit(3,1)
            finished=False

            while not finished:
                self.SVs+=1
                Scale_Factor=wb.extract_rtcm_data_and_move(data,1);
                UDRE=wb.extract_rtcm_data_and_move(data,2);
                SV_ID=wb.extract_rtcm_data_and_move(data,5);
                if SV_ID == 0 :
                    SV_ID=32

                DPRC=RTCM2.twos_comp(wb.extract_rtcm_data_and_move(data,24),24)

                if Scale_Factor == 0:
                    DPRC*=0.02
                else:
                    DPRC*=0.32

                IOD=wb.extract_rtcm_data_and_move(data,8)
                finished=wb.word()==(length+2)

                self.SV_Details.append({'SV': SV_ID,'UDRE': UDRE, 'IOD':IOD,'DPRC':DPRC, 'Scale_Factor': Scale_Factor})

            return Got_Packet
Ejemplo n.º 3
0
    def decode(self, length, data):
        if (length < 1):
            return Decode_Error
        else:
            self.SV_Details = []
            self.SVs = 0
            wb = RTCM2.word_bit(3, 1)
            finished = False
            #            pprint.pprint(data)
            #            print "Length: " + str(length+2)

            while not finished:
                self.SVs += 1
                #                print "SV: " + str(self.SVs)
                Scale_Factor = wb.extract_rtcm_data_and_move(data, 1)
                UDRE = wb.extract_rtcm_data_and_move(data, 2)
                SV_ID = wb.extract_rtcm_data_and_move(data, 5)
                if SV_ID == 0:
                    SV_ID = 32
                PRC = wb.extract_rtcm_data_and_move(data, 16)
                PRC = RTCM2.twos_comp(PRC, 16)
                RRC = RTCM2.twos_comp(wb.extract_rtcm_data_and_move(data, 8),
                                      8)

                if Scale_Factor == 0:
                    PRC *= 0.02
                    RRC *= 0.02
                else:
                    PRC *= 0.32
                    RRC *= 0.32

                Change = wb.extract_rtcm_data_and_move(data, 1)
                TOD = wb.extract_rtcm_data_and_move(data, 7)
                finished = wb.word() >= (length + 2)
                #                print "Word: " +str(wb.word()) + " Bit: " + str(wb.bit())

                self.SV_Details.append({
                    'SV': SV_ID,
                    'UDRE': UDRE,
                    'Change': Change,
                    'TOD': TOD,
                    'PRC': PRC,
                    'RRC': RRC,
                    'Scale_Factor': Scale_Factor
                })

            return Got_Packet
Ejemplo n.º 4
0
    def decode(self, length, data):
        if (length < 1):
            return Decode_Error
        else:
            self.SV_Details = []
            self.SVs = 0

            wb = RTCM2.word_bit(3, 1)
            finished = False

            while not finished:
                self.Beacons += 1
                Latitude = RTCM2.twos_comp(
                    wb.extract_rtcm_data_and_move(data, 16), 16)
                Longitude = RTCM2.twos_comp(
                    wb.extract_rtcm_data_and_move(data, 16), 16)
                Range = wb.extract_rtcm_data_and_move(data, 10)
                Freq = wb.extract_rtcm_data_and_move(data, 12) * 100 + 190
                Health = wb.extract_rtcm_data_and_move(data, 2)
                Station_ID = wb.extract_rtcm_data_and_move(data, 10)
                Bit_Rate = wb.extract_rtcm_data_and_move(data, 3)
                Datum = wb.extract_rtcm_data_and_move(data, 1)
                Sync_type = wb.extract_rtcm_data_and_move(data, 1)
                Coding = wb.extract_rtcm_data_and_move(data, 1)
                Name = ""
                for i in range(9):  # 72/8
                    c = wb.extract_rtcm_data_and_move(data, 8)
                    if c != 0:
                        Name += chr(c)

                finished = wb.word() == (length + 2)

                self.SV_Details.append({
                    'Beacon': Station_ID,
                    'Lat': Latitude,
                    'Long': Longitude,
                    'Range': Range,
                    'Freq': Freq,
                    'Health': Health,
                    'BitRate': Bit_Rate,
                    'Datum': Datum,
                    'Sync_type': Sync_type,
                    'Coding': Coding,
                    'Name': Name
                })

            return Got_Packet
Ejemplo n.º 5
0
    def decode(self,length,data):
        if (length < 1):
            return Decode_Error
        else :

            self.SV_Details=[]
            self.GNSS_System=RTCM2.extract_rtcm_bits(data[3],1,4)
            self.GNSS_Signal=RTCM2.extract_rtcm_bits(data[3],5,8)
            self.SV_Ephemeris=RTCM2.extract_rtcm_bits(data[3],9,10)
            self.Use=RTCM2.extract_rtcm_bits(data[3],11,12)
            self.Iono_Included=RTCM2.extract_rtcm_bits(data[3],13,13)

            self.SVs=0
            wb = RTCM2.word_bit(3,14)
            finished=False

            while not finished:
                self.SVs+=1
                SV_ID=wb.extract_rtcm_data_and_move(data,6);
                UDRE=wb.extract_rtcm_data_and_move(data,4);
                if self.GNSS_System == 3 :
                    # print "GNSS_System: Galileo"
                    IOD=wb.extract_rtcm_data_and_move(data,10);
                else:
                    IOD=wb.extract_rtcm_data_and_move(data,8);
                PRC=RTCM2.twos_comp(wb.extract_rtcm_data_and_move(data,14),14)/50.0
                if self.Iono_Included :
                    IONO=wb.twos_comp(wb.extract_rtcm_data_and_move(data,12),12)/50.0
                else:
                    IONO=None
                finished=wb.word()==(length+2)

                self.SV_Details.append({'SV': SV_ID,'UDRE': UDRE, 'IOD':IOD,'PRC':PRC, 'IONO':IONO})

            return Got_Packet
Ejemplo n.º 6
0
    def decode(self, length, data):
        if (length < 3):
            return Decode_Error
        else:
            self.ARP_Ant_Height_Following = RTCM2.extract_rtcm_bits(
                data[3], 2, 2)
            self.Serial_Included = RTCM2.extract_rtcm_bits(data[3], 3, 3)
            self.Antenna_Length = RTCM2.extract_rtcm_bits(data[3], 4, 8)
            current_word = 3
            chars_in_word = 2
            chars_left = self.Antenna_Length

            self.Antenna_Name = ""
            while chars_left > 0:
                self.Antenna_Name += chr(
                    RTCM2.extract_rtcm_bits(data[current_word],
                                            25 - (chars_in_word * 8),
                                            25 - (chars_in_word * 8) + 7))
                chars_in_word -= 1
                if chars_in_word == 0:
                    chars_in_word = 3
                    current_word += 1
                chars_left -= 1

            self.Setup_ID = RTCM2.extract_rtcm_bits(
                data[current_word], 25 - (chars_in_word * 8),
                25 - (chars_in_word * 8) + 7)
            chars_in_word -= 1
            if chars_in_word == 0:
                chars_in_word = 3
                current_word += 1

            self.Serial_Length = RTCM2.extract_rtcm_bits(
                data[current_word], 25 - (chars_in_word * 8) + 3,
                25 - (chars_in_word * 8) + 4)
            chars_in_word -= 1
            if chars_in_word == 0:
                chars_in_word = 3
                current_word += 1

            self.Serial = ""
            chars_left = self.Serial_Length

            while chars_left > 0:
                self.Serial += chr(
                    RTCM2.extract_rtcm_bits(data[current_word],
                                            25 - (chars_in_word * 8),
                                            25 - (chars_in_word * 8) + 7))
                chars_in_word -= 1
                if chars_in_word == 0:
                    chars_in_word = 3
                    current_word += 1
                chars_left -= 1
            return Got_Packet
Ejemplo n.º 7
0
    def decode(self,length,data):
        if (length < 1):
            return Decode_Error
        else :
            self.SV_Details=[]
            self.SVs=0
            wb = RTCM2.word_bit(3,1)
            finished=False
#            pprint.pprint(data)
#            print "Length: " + str(length+2)

            while not finished:
                self.SVs+=1
#                print "SV: " + str(self.SVs)
                Scale_Factor=wb.extract_rtcm_data_and_move(data,1);
                UDRE=wb.extract_rtcm_data_and_move(data,2);
                SV_ID=wb.extract_rtcm_data_and_move(data,5);
                if SV_ID == 0 :
                    SV_ID=32
                PRC=wb.extract_rtcm_data_and_move(data,16)
                PRC=RTCM2.twos_comp(PRC,16)
                RRC=RTCM2.twos_comp(wb.extract_rtcm_data_and_move(data,8),8)

                if Scale_Factor == 0:
                    PRC*=0.02
                    RRC*=0.02
                else:
                    PRC*=0.32
                    RRC*=0.32

                Change=wb.extract_rtcm_data_and_move(data,1)
                TOD=wb.extract_rtcm_data_and_move(data,7)
                finished=wb.word()>=(length+2)
#                print "Word: " +str(wb.word()) + " Bit: " + str(wb.bit())

                self.SV_Details.append({'SV': SV_ID,'UDRE': UDRE, 'Change' : Change,'TOD':TOD,'PRC':PRC, 'RRC':RRC, 'Scale_Factor': Scale_Factor})

            return Got_Packet
Ejemplo n.º 8
0
    def decode(self, length, data):
        if (length < 1):
            return Decode_Error
        else:
            self.SV_Details = []
            self.SVs = 0
            wb = RTCM2.word_bit(3, 1)
            finished = False

            while not finished:
                self.SVs += 1
                Scale_Factor = wb.extract_rtcm_data_and_move(data, 1)
                UDRE = wb.extract_rtcm_data_and_move(data, 2)
                SV_ID = wb.extract_rtcm_data_and_move(data, 5)
                if SV_ID == 0:
                    SV_ID = 32

                DPRC = RTCM2.twos_comp(wb.extract_rtcm_data_and_move(data, 24),
                                       24)

                if Scale_Factor == 0:
                    DPRC *= 0.02
                else:
                    DPRC *= 0.32

                IOD = wb.extract_rtcm_data_and_move(data, 8)
                finished = wb.word() == (length + 2)

                self.SV_Details.append({
                    'SV': SV_ID,
                    'UDRE': UDRE,
                    'IOD': IOD,
                    'DPRC': DPRC,
                    'Scale_Factor': Scale_Factor
                })

            return Got_Packet
Ejemplo n.º 9
0
    def decode(self,length,data):
        if (length != 4):
            return Decode_Error
        else :

            ECF=RTCM2.extract_rtcm_bits(data[3],1,24)
            ECF<<=8
            ECF|=RTCM2.extract_rtcm_bits(data[4],1,8)

            self.ECF_X=RTCM2.twos_comp(ECF,32)/100.0

            ECF=RTCM2.extract_rtcm_bits(data[4],9,24)
            ECF<<=16
            ECF|=RTCM2.extract_rtcm_bits(data[5],1,16)

            self.ECF_Y=int(ECF)/100.0
            self.ECF_Y=RTCM2.twos_comp(ECF,32)/100.0

            ECF=RTCM2.extract_rtcm_bits(data[5],17,24)
            ECF<<=24
            ECF|=RTCM2.extract_rtcm_bits(data[6],1,24)
            self.ECF_Z=RTCM2.twos_comp(ECF,32)/100.0

            return Got_Packet
Ejemplo n.º 10
0
    def decode(self, length, data):
        if (length < 1):
            return Decode_Error
        else:

            self.SV_Details = []
            self.GNSS_System = RTCM2.extract_rtcm_bits(data[3], 1, 4)
            self.GNSS_Signal = RTCM2.extract_rtcm_bits(data[3], 5, 8)
            self.SV_Ephemeris = RTCM2.extract_rtcm_bits(data[3], 9, 10)
            self.Use = RTCM2.extract_rtcm_bits(data[3], 11, 12)
            self.Iono_Included = RTCM2.extract_rtcm_bits(data[3], 13, 13)

            self.SVs = 0
            wb = RTCM2.word_bit(3, 14)
            finished = False

            while not finished:
                self.SVs += 1
                SV_ID = wb.extract_rtcm_data_and_move(data, 6)
                UDRE = wb.extract_rtcm_data_and_move(data, 4)
                if self.GNSS_System == 3:
                    # print "GNSS_System: Galileo"
                    IOD = wb.extract_rtcm_data_and_move(data, 10)
                else:
                    IOD = wb.extract_rtcm_data_and_move(data, 8)
                PRC = RTCM2.twos_comp(wb.extract_rtcm_data_and_move(data, 14),
                                      14) / 50.0
                if self.Iono_Included:
                    IONO = wb.twos_comp(
                        wb.extract_rtcm_data_and_move(data, 12), 12) / 50.0
                else:
                    IONO = None
                finished = wb.word() == (length + 2)

                self.SV_Details.append({
                    'SV': SV_ID,
                    'UDRE': UDRE,
                    'IOD': IOD,
                    'PRC': PRC,
                    'IONO': IONO
                })

            return Got_Packet
Ejemplo n.º 11
0
    def decode(self,length,data):
        if (length < 1):
            return Decode_Error
        else :

            self.SV_Details=[]
            self.Freq=RTCM2.extract_rtcm_bits(data[3],1,2)
            self.GNSS_Time=RTCM2.extract_rtcm_bits(data[3],5,24)
            self.SVs=(length-1)/2 # 3=0, 5=1, 7=2

            for SV in range (self.SVs):
                word=SV*2+4 # 4,6,8..
                Last_Message=RTCM2.extract_rtcm_bits(data[word],1,1)==1
                Pcode=RTCM2.extract_rtcm_bits(data[word],2,2)==1
                Glonass=RTCM2.extract_rtcm_bits(data[word],3,3)==1
                SV_ID=int(RTCM2.extract_rtcm_bits(data[word],4,8))
                if SV_ID == 0 :
                    SV_ID=32
                Quailty=int(RTCM2.extract_rtcm_bits(data[word],9,11))
                Slips=int(RTCM2.extract_rtcm_bits(data[word],12,16))
                Phase=RTCM2.extract_rtcm_bits(data[word],17,24)
                Phase<<=24
                Phase|=RTCM2.extract_rtcm_bits(data[word+1],1,24)
                Phase=RTCM2.twos_comp(Phase,32)/256.0

                self.SV_Details.append({'SV': SV_ID,'Pcode': Pcode, 'Last_Message':Last_Message,'GLONASS':Glonass, 'Quailty': Quailty,'Slips':Slips,'Phase':Phase})

            return Got_Packet
Ejemplo n.º 12
0
    def decode(self,length,data):
        if (length < 1):
            return Decode_Error
        else :

            self.SV_Details=[]
            self.Freq=RTCM2.extract_rtcm_bits(data[3],1,2)
            self.Smoothed=RTCM2.extract_rtcm_bits(data[3],3,4)
            self.GNSS_Time=RTCM2.extract_rtcm_bits(data[3],5,24)
            self.SVs=(length-1)/2 # 3=0, 5=1, 7=2

            for SV in range (self.SVs):
                word=SV*2+4 # 4,6,8..
                Last_Message=RTCM2.extract_rtcm_bits(data[word],1,1)==1
                Pcode=RTCM2.extract_rtcm_bits(data[word],2,2)==1
                Glonass=RTCM2.extract_rtcm_bits(data[word],3,3)==1
                SV_ID=int(RTCM2.extract_rtcm_bits(data[word],4,8))
                if SV_ID == 0 :
                    SV_ID=32
                Quailty=int(RTCM2.extract_rtcm_bits(data[word],9,12))
                Multipath=int(RTCM2.extract_rtcm_bits(data[word],13,16))
                Range=RTCM2.extract_rtcm_bits(data[word],17,24)
                Range<<=24
                Range|=RTCM2.extract_rtcm_bits(data[word+1],1,24)
                Range=RTCM2.twos_comp(Range,32)/50.0 # 0.02cm

                self.SV_Details.append({'SV': SV_ID,'Pcode': Pcode, 'Last_Message':Last_Message,'GLONASS':Glonass, 'Multipath':Multipath, 'Quailty': Quailty,'Range':Range})

            return Got_Packet
Ejemplo n.º 13
0
parser.add_argument("-I", "--ID", nargs='+', help="Packets that should have there ID dumped only")
parser.add_argument("-S", "--Summary", nargs='+', help="Packets that should have a Summary dumped")
parser.add_argument("-F", "--Full", nargs='+', help="Packets that should be dumped Fully")
parser.add_argument("-V", "--Verbose", nargs='+', help="Packets that should be dumped Verbosely")
parser.add_argument("-E", "--Explain", action="store_true", help="System Should Explain what is is doing, AKA Verbose")
parser.add_argument("-W", "--Time", action="store_true", help="Report the time when the packet was received")

args=parser.parse_args()

#print args

Dump_Undecoded = args.Undecoded
Dump_Decoded = args.Decoded
Dump_TimeStamp = args.Time

rtcm2=RTCM2.RTCM2(default_output_level=args.Level);

if args.None:
    for id in args.None:
        if args.Explain:
            print "Decode Level None: " + hex(int(id,0))
        rtcm2.Dump_Levels[int(id,0)]=Dump_None

if args.ID:
    for id in args.ID:
        if args.Explain:
            print "Decode Level ID: " + hex(int(id,0))
        rtcm2.Dump_Levels[int(id,0)]=Dump_ID

if args.Summary:
    for id in args.Summary:
Ejemplo n.º 14
0
    def decode(self, length, data):
        if (length < 1):
            return Decode_Error
        else:

            self.SV_Details = []
            self.Freq = RTCM2.extract_rtcm_bits(data[3], 1, 2)
            self.GNSS_Time = RTCM2.extract_rtcm_bits(data[3], 5, 24)
            self.SVs = (length - 1) / 2  # 3=0, 5=1, 7=2

            for SV in range(self.SVs):
                word = SV * 2 + 4  # 4,6,8..
                Last_Message = RTCM2.extract_rtcm_bits(data[word], 1, 1) == 1
                Pcode = RTCM2.extract_rtcm_bits(data[word], 2, 2) == 1
                Glonass = RTCM2.extract_rtcm_bits(data[word], 3, 3) == 1
                SV_ID = int(RTCM2.extract_rtcm_bits(data[word], 4, 8))
                if SV_ID == 0:
                    SV_ID = 32
                Quailty = int(RTCM2.extract_rtcm_bits(data[word], 9, 11))
                Slips = int(RTCM2.extract_rtcm_bits(data[word], 12, 16))
                Phase = RTCM2.extract_rtcm_bits(data[word], 17, 24)
                Phase <<= 24
                Phase |= RTCM2.extract_rtcm_bits(data[word + 1], 1, 24)
                Phase = RTCM2.twos_comp(Phase, 32) / 256.0

                self.SV_Details.append({
                    'SV': SV_ID,
                    'Pcode': Pcode,
                    'Last_Message': Last_Message,
                    'GLONASS': Glonass,
                    'Quailty': Quailty,
                    'Slips': Slips,
                    'Phase': Phase
                })

            return Got_Packet
Ejemplo n.º 15
0
    def decode(self,length,data):
        if (length < 5) or (length > 6):
            return Decode_Error
        else :

            ECF=RTCM2.extract_rtcm_bits(data[3],1,24)
            ECF<<=14
            ECF|=RTCM2.extract_rtcm_bits(data[4],1,14)

            self.ECF_X=RTCM2.twos_comp(ECF,38)/10000.0

            ECF=RTCM2.extract_rtcm_bits(data[4],17,24)
            ECF<<=24
            ECF|=RTCM2.extract_rtcm_bits(data[5],1,24)
            ECF<<=6
            ECF|=RTCM2.extract_rtcm_bits(data[6],1,6)

            self.ECF_Y=RTCM2.twos_comp(ECF,38)/10000.0

            ECF=RTCM2.extract_rtcm_bits(data[6],9,24)
            ECF<<=22
            ECF|=RTCM2.extract_rtcm_bits(data[7],1,22)
            self.ECF_Z=RTCM2.twos_comp(ECF,38)/10000.0

            self.GLONASS=RTCM2.extract_rtcm_bits(data[7],23,23)==1
            self.Ant_Height_Included=RTCM2.extract_rtcm_bits(data[7],24,24)==1

            if self.Ant_Height_Included:
                self.Ant_Height=int(RTCM2.extract_rtcm_bits(data[8],1,18))/10000.0
            else :
                self.Ant_Height=None
            return Got_Packet
Ejemplo n.º 16
0
    def decode(self,length,data):
        if (length < 1) or (length > 3):
            return Decode_Error
        else :

            ECF=RTCM2.extract_rtcm_bits(data[3],1,8)
            self.dECF_X=RTCM2.twos_comp(ECF,8)/256.0

            ECF=RTCM2.extract_rtcm_bits(data[3],9,16)
            self.dECF_Y=RTCM2.twos_comp(ECF,8)/256.0

            ECF=RTCM2.extract_rtcm_bits(data[3],17,24)
            self.dECF_Z=RTCM2.twos_comp(ECF,8)/256.0

            if length >= 2 :
                self.Antenna_Info=True
                self.System=RTCM2.extract_rtcm_bits(data[4],3,3)
                self.Antenna_Type_Inc=RTCM2.extract_rtcm_bits(data[4],4,4)==1
                self.Antenna_ARP_Inc=RTCM2.extract_rtcm_bits(data[4],5,5)==1
                self.Antenna_Height_Inc=RTCM2.extract_rtcm_bits(data[4],6,6)==0
                if self.Antenna_Height_Inc :
                    self.Antenna_Height=RTCM2.extract_rtcm_bits(data[4],5,24)/256
                else:
                    self.Antenna_Height=None
            else :
                self.Antenna_Info=False
                self.System=None
                self.Antenna_Type_Inc=None
                self.Antenna_ARP_Inc=None
                self.Antenna_Height_Inc=None
                self.Antenna_Height=None

            if length >= 3 :
                self.L2_Offsets=True
                ECF=RTCM2.extract_rtcm_bits(data[5],1,8)
                self.L2_DECF_X=RTCM2.twos_comp(ECF,8)/16.0
                ECF=RTCM2.extract_rtcm_bits(data[5],9,16)
                self.L2_DECF_Y=RTCM2.twos_comp(ECF,8)/16.0
                ECF=RTCM2.extract_rtcm_bits(data[5],17,24)
                self.L2_DECF_Z=RTCM2.twos_comp(ECF,8)/16.0
            else:
                self.L2_Offsets=False
                self.L2_dECF_X=None
                self.L2_dECF_Y=None
                self.L2_dECF_Z=None

            return Got_Packet
Ejemplo n.º 17
0
    def decode(self, length, data):
        if (length < 1) or (length > 3):
            return Decode_Error
        else:

            ECF = RTCM2.extract_rtcm_bits(data[3], 1, 8)
            self.dECF_X = RTCM2.twos_comp(ECF, 8) / 256.0

            ECF = RTCM2.extract_rtcm_bits(data[3], 9, 16)
            self.dECF_Y = RTCM2.twos_comp(ECF, 8) / 256.0

            ECF = RTCM2.extract_rtcm_bits(data[3], 17, 24)
            self.dECF_Z = RTCM2.twos_comp(ECF, 8) / 256.0

            if length >= 2:
                self.Antenna_Info = True
                self.System = RTCM2.extract_rtcm_bits(data[4], 3, 3)
                self.Antenna_Type_Inc = RTCM2.extract_rtcm_bits(data[4], 4,
                                                                4) == 1
                self.Antenna_ARP_Inc = RTCM2.extract_rtcm_bits(data[4], 5,
                                                               5) == 1
                self.Antenna_Height_Inc = RTCM2.extract_rtcm_bits(
                    data[4], 6, 6) == 0
                if self.Antenna_Height_Inc:
                    self.Antenna_Height = RTCM2.extract_rtcm_bits(
                        data[4], 5, 24) / 256
                else:
                    self.Antenna_Height = None
            else:
                self.Antenna_Info = False
                self.System = None
                self.Antenna_Type_Inc = None
                self.Antenna_ARP_Inc = None
                self.Antenna_Height_Inc = None
                self.Antenna_Height = None

            if length >= 3:
                self.L2_Offsets = True
                ECF = RTCM2.extract_rtcm_bits(data[5], 1, 8)
                self.L2_DECF_X = RTCM2.twos_comp(ECF, 8) / 16.0
                ECF = RTCM2.extract_rtcm_bits(data[5], 9, 16)
                self.L2_DECF_Y = RTCM2.twos_comp(ECF, 8) / 16.0
                ECF = RTCM2.extract_rtcm_bits(data[5], 17, 24)
                self.L2_DECF_Z = RTCM2.twos_comp(ECF, 8) / 16.0
            else:
                self.L2_Offsets = False
                self.L2_dECF_X = None
                self.L2_dECF_Y = None
                self.L2_dECF_Z = None

            return Got_Packet