예제 #1
0
    def test_rsh_16(self):
        k = bf(0xFFF,length=16)
        self.assertEqual(int(k), 0xFFF)
        k >>= 1
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0x7FF)
        k >>= 1
        self.assertEqual(int(k), 0x3FF)
        k >>= 4
        self.assertEqual(int(k), 0x03F)
        k >>= 4
        self.assertEqual(int(k), 0x003)
        k >>= 4
        self.assertEqual(int(k), 0x000)


        k = bf(0xFFFFF,16)
        self.assertEqual(int(k), 0xFFFF)
        k >>= 1
        self.assertEqual(int(k), 0x7FFF)
        k >>= 1
        self.assertEqual(int(k), 0x3FFF)
        k >>= 4
        self.assertEqual(int(k), 0x03FF)
        k >>= 4
        self.assertEqual(int(k), 0x003F)

        #Check to make sure that the length has been remembered
        k = k | 0xFFFF
        self.assertEqual(int(k), 0xFFFF)

        #Check to make sure that the length has been remembered
        k = k | 0xFFFFFFFF
        self.assertEqual(int(k), 0xFFFF)
예제 #2
0
    def test_rsh_16(self):
        k = bf(0xFFF, length=16)
        self.assertEqual(int(k), 0xFFF)
        k >>= 1
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0x7FF)
        k >>= 1
        self.assertEqual(int(k), 0x3FF)
        k >>= 4
        self.assertEqual(int(k), 0x03F)
        k >>= 4
        self.assertEqual(int(k), 0x003)
        k >>= 4
        self.assertEqual(int(k), 0x000)

        k = bf(0xFFFFF, 16)
        self.assertEqual(int(k), 0xFFFF)
        k >>= 1
        self.assertEqual(int(k), 0x7FFF)
        k >>= 1
        self.assertEqual(int(k), 0x3FFF)
        k >>= 4
        self.assertEqual(int(k), 0x03FF)
        k >>= 4
        self.assertEqual(int(k), 0x003F)

        #Check to make sure that the length has been remembered
        k = k | 0xFFFF
        self.assertEqual(int(k), 0xFFFF)

        #Check to make sure that the length has been remembered
        k = k | 0xFFFFFFFF
        self.assertEqual(int(k), 0xFFFF)
예제 #3
0
    def test_rsh(self):
        k = bf(0xFF)
        self.assertEqual(int(k), 0xFF)
        k >>= 1
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0x7F)
        k >>= 1
        self.assertEqual(int(k), 0x3F)
        k >>= 4
        self.assertEqual(int(k), 0x03)
        k >>= 4
        self.assertEqual(int(k), 0x00)

        k = bf(0xFFFF)
        self.assertEqual(int(k), 0xFFFF)
        k >>= 1
        self.assertEqual(int(k), 0x7FFF)
        k >>= 1
        self.assertEqual(int(k), 0x3FFF)
        k >>= 4
        self.assertEqual(int(k), 0x03FF)
        k >>= 4
        self.assertEqual(int(k), 0x003F)

        k = bf(0xFFFFFFFF)
        self.assertEqual(int(k), 0xFFFFFFFF)
        k >>= 1
        self.assertEqual(int(k), 0x7FFFFFFF)
        k >>= 1
        self.assertEqual(int(k), 0x3FFFFFFF)
        k >>= 4
        self.assertEqual(int(k), 0x03FFFFFF)
        k >>= 4
        self.assertEqual(int(k), 0x003FFFFF)
예제 #4
0
    def test_full_assign_8bit(self):
        # make sure the shuffled sequence does not lose any elements
        k = bf(0x1,8)
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 1)
        self.assertTrue(int(k)==1)
        self.assertTrue(k)
        self.assertEqual(len(k), 8)


        k = bf(0xFF,8)
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0xFF)
        self.assertTrue(int(k)==0xFF)
        self.assertTrue(k)

        k = bf(0xFFFF,8)
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0xFF)
        self.assertTrue(int(k)==0xFF)
        self.assertTrue(k)


        k = bf(0xFFFFFFFF,8)
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0xFF)
        self.assertTrue(int(k)==0xFF)
        self.assertTrue(k)
예제 #5
0
    def test_full_assign_8bit(self):
        # make sure the shuffled sequence does not lose any elements
        k = bf(0x1, 8)
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 1)
        self.assertTrue(int(k) == 1)
        self.assertTrue(k)
        self.assertEqual(len(k), 8)

        k = bf(0xFF, 8)
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0xFF)
        self.assertTrue(int(k) == 0xFF)
        self.assertTrue(k)

        k = bf(0xFFFF, 8)
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0xFF)
        self.assertTrue(int(k) == 0xFF)
        self.assertTrue(k)

        k = bf(0xFFFFFFFF, 8)
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0xFF)
        self.assertTrue(int(k) == 0xFF)
        self.assertTrue(k)
예제 #6
0
    def test_full_assign_16(self):
        # make sure the shuffled sequence does not lose any elements
        k = bf(0x1, length=16)
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 1)
        self.assertTrue(int(k) == 1)
        self.assertTrue(k)
        self.assertEqual(len(k), 16)

        k = bf(0xFF, length=16)
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0xFF)
        self.assertTrue(int(k) == 0xFF)
        self.assertTrue(k)

        k = bf(0xFFFF, length=16)
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0xFFFF)
        self.assertTrue(int(k) == 0xFFFF)
        self.assertTrue(k)

        k = bf(0xFFFFFFFF, length=16)
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0xFFFF)
        self.assertTrue(int(k) == 0xFFFF)
        print int(k)

        k = bf(0x8000, length=16)
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0x8000)
        self.assertTrue(int(k) == 0x8000)
        print int(k)
예제 #7
0
    def test_rsh(self):
        k = bf(0xFF)
        self.assertEqual(int(k), 0xFF)
        k >>= 1
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0x7F)
        k >>= 1
        self.assertEqual(int(k), 0x3F)
        k >>= 4
        self.assertEqual(int(k), 0x03)
        k >>= 4
        self.assertEqual(int(k), 0x00)

        k = bf(0xFFFF)
        self.assertEqual(int(k), 0xFFFF)
        k >>= 1
        self.assertEqual(int(k), 0x7FFF)
        k >>= 1
        self.assertEqual(int(k), 0x3FFF)
        k >>= 4
        self.assertEqual(int(k), 0x03FF)
        k >>= 4
        self.assertEqual(int(k), 0x003F)

        k = bf(0xFFFFFFFF)
        self.assertEqual(int(k), 0xFFFFFFFF)
        k >>= 1
        self.assertEqual(int(k), 0x7FFFFFFF)
        k >>= 1
        self.assertEqual(int(k), 0x3FFFFFFF)
        k >>= 4
        self.assertEqual(int(k), 0x03FFFFFF)
        k >>= 4
        self.assertEqual(int(k), 0x003FFFFF)
예제 #8
0
    def test_full_assign_16(self):
        # make sure the shuffled sequence does not lose any elements
        k = bf(0x1,length=16)
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 1)
        self.assertTrue(int(k)==1)
        self.assertTrue(k)
        self.assertEqual(len(k), 16)


        k = bf(0xFF,length=16)
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0xFF)
        self.assertTrue(int(k)==0xFF)
        self.assertTrue(k)

        k = bf(0xFFFF,length=16)
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0xFFFF)
        self.assertTrue(int(k)==0xFFFF)
        self.assertTrue(k)


        k = bf(0xFFFFFFFF,length=16)
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0xFFFF)
        self.assertTrue(int(k)==0xFFFF)
        print int(k)

        k = bf(0x8000,length=16)
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0x8000)
        self.assertTrue(int(k)==0x8000)
        print int(k)
예제 #9
0
    def test_str(self):
        k = bf(0x6)
        self.assertEqual(str(k),"110")
        k = bf(0)
        self.assertEqual(str(k),"0")

        k = bf(0x6,8)
        self.assertEqual(str(k),"00000110")
        k = bf(0,8)
        self.assertEqual(str(k),"00000000")
예제 #10
0
    def setUp(self):
        self.data_zero = []
        self.data_1 = []

        for i in range(10):
            self.data_zero.append(bf(0, 32))
            self.data_1.append(bf(0, 32))

        self.data_1[5] = bf(0x123456 << 6, 30)
        self.data_1[6] = bf(0x345678 << 6, 30)
예제 #11
0
    def test_str(self):
        k = bf(0x6)
        self.assertEqual(str(k), "110")
        k = bf(0)
        self.assertEqual(str(k), "0")

        k = bf(0x6, 8)
        self.assertEqual(str(k), "00000110")
        k = bf(0, 8)
        self.assertEqual(str(k), "00000000")
예제 #12
0
파일: Test_word_bit.py 프로젝트: jcmb/RTCM2
    def setUp(self):
        self.data_zero=[]
        self.data_1=[]

        for i in range(10):
            self.data_zero.append(bf(0,32))
            self.data_1.append(bf(0,32))

        self.data_1[5]=bf(0x123456<<6,30)
        self.data_1[6]=bf(0x345678<<6,30)
예제 #13
0
    def test_or_16(self):
        k = bf(0x3,16)
        k=k | 0x300
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0x303)

        k = bf(0x3,16)
        k=k | 0x30
        self.assertEqual(int(k), 0x033)

        k=k | 0xF30
        self.assertEqual(int(k), 0xF33)

        k=k | 0xFFF00
        self.assertEqual(int(k), 0xFF33)
예제 #14
0
    def test_or_16(self):
        k = bf(0x3, 16)
        k = k | 0x300
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0x303)

        k = bf(0x3, 16)
        k = k | 0x30
        self.assertEqual(int(k), 0x033)

        k = k | 0xF30
        self.assertEqual(int(k), 0xF33)

        k = k | 0xFFF00
        self.assertEqual(int(k), 0xFF33)
예제 #15
0
파일: RTCM2.py 프로젝트: bodhan/RTCM2
    def dump(self,
             dump_undecoded=False,
             dump_decoded=False,
             dump_timestamp=False,
             dump_header=False):

        if self.Dump_Levels[self.packet_ID]:
            print "***********************************************************"
            if dump_timestamp:
                print datetime.now()

            print RTCM2_Message_Names[self.packet_ID] + " (" + str(
                self.packet_ID) + ")"
            if dump_header:
                print(' Zcount   : ' + str(self.zcount))
                print(' Length   : ' + str(self.length))
                print(' Sequence : ' + str(self.sqn_num))
                print(' Health   : ' + RTCM2_Health_Names[self.health])

            if self.Handler[self.packet_ID]:
                self.Handler[self.packet_ID].dump(
                    self.Dump_Levels[self.packet_ID])
            else:
                print "!Undecoded packet"
                if dump_undecoded:
                    for word in range(3, self.length + 3):
                        print "{:2} ".format(word) + str(
                            bf(extract_rtcm_bits(self.data[word], 1, 24), 24))
예제 #16
0
 def test_zero_default(self):
     # make sure the shuffled sequence does not lose any elements
     k = bf()
     self.assertIsInstance(k, bf)
     self.assertEqual(int(k), 0)
     self.assertEqual(len(k), 0)
     self.assertFalse(k)
예제 #17
0
    def test_lsh_rsh_16(self):
        k = bf(0x0F,16)
        self.assertEqual(int(k), 0x0F)
        k <<= 1
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0x1E)
        k <<= 1
        self.assertEqual(int(k), 0x3C)
        k <<= 4
        self.assertEqual(int(k), 0x3C0)
        k >>= 4
        self.assertEqual(int(k), 0x3C)
        k <<= 8
        self.assertEqual(int(k), 0x3C00)
        k <<= 4
        self.assertEqual(int(k), 0xC000)
        k <<= 4
        self.assertEqual(int(k), 0x0000)
        k >>= 4
        self.assertEqual(int(k), 0x0000)

        #Check to make sure that the length has been remembered
        k = k | 0xFFFF
        self.assertEqual(int(k), 0xFFFF)

        #Check to make sure that the length has been remembered
        k = k | 0xFFFFFFFF
        self.assertEqual(int(k), 0xFFFF)
예제 #18
0
    def test_lsh_rsh_16(self):
        k = bf(0x0F, 16)
        self.assertEqual(int(k), 0x0F)
        k <<= 1
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0x1E)
        k <<= 1
        self.assertEqual(int(k), 0x3C)
        k <<= 4
        self.assertEqual(int(k), 0x3C0)
        k >>= 4
        self.assertEqual(int(k), 0x3C)
        k <<= 8
        self.assertEqual(int(k), 0x3C00)
        k <<= 4
        self.assertEqual(int(k), 0xC000)
        k <<= 4
        self.assertEqual(int(k), 0x0000)
        k >>= 4
        self.assertEqual(int(k), 0x0000)

        #Check to make sure that the length has been remembered
        k = k | 0xFFFF
        self.assertEqual(int(k), 0xFFFF)

        #Check to make sure that the length has been remembered
        k = k | 0xFFFFFFFF
        self.assertEqual(int(k), 0xFFFF)
예제 #19
0
 def test_zero_default(self):
     # make sure the shuffled sequence does not lose any elements
     k = bf()
     self.assertIsInstance(k,bf)
     self.assertEqual(int(k), 0)
     self.assertEqual(len(k), 0)
     self.assertFalse(k)
예제 #20
0
 def test_read_bit(self):
     k = bf(0x6)
     self.assertIsInstance(k, bf)
     self.assertEqual(int(k), 0x006)
     self.assertEqual(k[0], 0x0)
     self.assertEqual(k[1], 0x1)
     self.assertEqual(k[2], 0x1)
     self.assertEqual(k[3], 0x0)
예제 #21
0
    def test_or_8(self):
        k = bf(0x3, 8)
        k = k | 0x300
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0x003)

        k = k | 0x30
        self.assertEqual(int(k), 0x033)
예제 #22
0
 def test_read_bit(self):
     k = bf(0x6)
     self.assertIsInstance(k,bf)
     self.assertEqual(int(k), 0x006)
     self.assertEqual(k[0], 0x0)
     self.assertEqual(k[1], 0x1)
     self.assertEqual(k[2], 0x1)
     self.assertEqual(k[3], 0x0)
예제 #23
0
    def test_or_8(self):
        k = bf(0x3,8)
        k=k | 0x300
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0x003)

        k=k | 0x30
        self.assertEqual(int(k), 0x033)
예제 #24
0
    def test_or_32(self):
        k = bf(0x3,32)
        k=k | 0x300
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0x303)

        k = bf(0x3,32)
        k=k | 0x30
        self.assertEqual(int(k), 0x033)

        k=k | 0xF30
        self.assertEqual(int(k), 0xF33)

        k=k | 0xFFF00
        self.assertEqual(int(k), 0xFFF33)

        k=k | 0x12300000
        self.assertEqual(int(k), 0x123FFF33)
예제 #25
0
    def test_or_32(self):
        k = bf(0x3, 32)
        k = k | 0x300
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0x303)

        k = bf(0x3, 32)
        k = k | 0x30
        self.assertEqual(int(k), 0x033)

        k = k | 0xF30
        self.assertEqual(int(k), 0xF33)

        k = k | 0xFFF00
        self.assertEqual(int(k), 0xFFF33)

        k = k | 0x12300000
        self.assertEqual(int(k), 0x123FFF33)
예제 #26
0
    def test_slice_assign(self):
        k = bf()
        self.assertIsInstance(k,bf)

        k[3:7]=5
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0x28)
        k = bf()
        k[3:7]=7
        self.assertEqual(int(k), 0x38)
        k = bf()
        k[3:7]=15
        self.assertEqual(int(k), 0x78)

        #This test is to make sure we do not assign more than the slice
        k = bf()
        k[3:7]=0xFF
        self.assertEqual(int(k), 0x78)

        k = bf(0x0000)
        k[3:7]=0xF
        self.assertEqual(int(k), 0x78)

        k = bf(0x0000)
        k[4:8]=0xF
        self.assertEqual(int(k), 0xF0)

        k = bf(0xFFFF)
        k[4:8]=0x0
        self.assertEqual(int(k), 0x0FF0F)

        k = bf(0xFFFF)
        k[0:8]=0x0
        self.assertEqual(int(k), 0x0FF00)

        k = bf(0xFFFF)
        k[0:1]=0x0
        self.assertEqual(int(k), 0x0FFFE)

        k = bf(0xFFFF)
        k[15:16]=0x0
        self.assertEqual(int(k), 0x07FFF)
예제 #27
0
    def test_slice_assign(self):
        k = bf()
        self.assertIsInstance(k, bf)

        k[3:7] = 5
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0x28)
        k = bf()
        k[3:7] = 7
        self.assertEqual(int(k), 0x38)
        k = bf()
        k[3:7] = 15
        self.assertEqual(int(k), 0x78)

        #This test is to make sure we do not assign more than the slice
        k = bf()
        k[3:7] = 0xFF
        self.assertEqual(int(k), 0x78)

        k = bf(0x0000)
        k[3:7] = 0xF
        self.assertEqual(int(k), 0x78)

        k = bf(0x0000)
        k[4:8] = 0xF
        self.assertEqual(int(k), 0xF0)

        k = bf(0xFFFF)
        k[4:8] = 0x0
        self.assertEqual(int(k), 0x0FF0F)

        k = bf(0xFFFF)
        k[0:8] = 0x0
        self.assertEqual(int(k), 0x0FF00)

        k = bf(0xFFFF)
        k[0:1] = 0x0
        self.assertEqual(int(k), 0x0FFFE)

        k = bf(0xFFFF)
        k[15:16] = 0x0
        self.assertEqual(int(k), 0x07FFF)
예제 #28
0
    def test_lsh(self):
        k = bf(1)
        self.assertEqual(int(k), 0x01)
        k <<= 1
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0x02)
        k <<= 1
        self.assertEqual(int(k), 0x04)
        k <<= 4
        self.assertEqual(int(k), 0x40)

        k = bf(0x0F)
        self.assertEqual(int(k), 0x0F)
        k <<= 1
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0x1E)
        k <<= 1
        self.assertEqual(int(k), 0x3C)
        k <<= 4
        self.assertEqual(int(k), 0x3C0)
        k <<= 4
        self.assertEqual(int(k), 0x3C00)
예제 #29
0
    def test_lsh(self):
        k = bf(1)
        self.assertEqual(int(k), 0x01)
        k <<= 1
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0x02)
        k <<= 1
        self.assertEqual(int(k), 0x04)
        k <<= 4
        self.assertEqual(int(k), 0x40)


        k = bf(0x0F)
        self.assertEqual(int(k), 0x0F)
        k <<= 1
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0x1E)
        k <<= 1
        self.assertEqual(int(k), 0x3C)
        k <<= 4
        self.assertEqual(int(k), 0x3C0)
        k <<= 4
        self.assertEqual(int(k), 0x3C00)
예제 #30
0
    def test_lsh_8(self):
        k = bf(1,8)
        self.assertEqual(int(k), 0x01)
        k <<= 1
        self.assertIsInstance(k,bf)
        self.assertEqual(int(k), 0x02)
        k <<= 1
        self.assertEqual(int(k), 0x04)
        k <<= 4
        self.assertEqual(int(k), 0x40)
        k <<= 4
        self.assertEqual(int(k), 0x00)

        #Check to make sure that the length has been remembered
        k = k | 0xFFFF
        self.assertEqual(int(k), 0xFF)
예제 #31
0
    def test_lsh_8(self):
        k = bf(1, 8)
        self.assertEqual(int(k), 0x01)
        k <<= 1
        self.assertIsInstance(k, bf)
        self.assertEqual(int(k), 0x02)
        k <<= 1
        self.assertEqual(int(k), 0x04)
        k <<= 4
        self.assertEqual(int(k), 0x40)
        k <<= 4
        self.assertEqual(int(k), 0x00)

        #Check to make sure that the length has been remembered
        k = k | 0xFFFF
        self.assertEqual(int(k), 0xFF)
예제 #32
0
 def test_set_bit(self):
     k = bf(0x6)
     self.assertIsInstance(k,bf)
     self.assertEqual(int(k), 0x006)
     self.assertEqual(k[0], 0x0)
     self.assertEqual(k[1], 0x1)
     self.assertEqual(k[2], 0x1)
     self.assertEqual(k[3], 0x0)
     k[0]=1
     k[1]=0
     k[2]=0
     k[3]=1
     self.assertEqual(k[0], 0x1)
     self.assertEqual(k[1], 0x0)
     self.assertEqual(k[2], 0x0)
     self.assertEqual(k[3], 0x1)
예제 #33
0
 def test_set_bit(self):
     k = bf(0x6)
     self.assertIsInstance(k, bf)
     self.assertEqual(int(k), 0x006)
     self.assertEqual(k[0], 0x0)
     self.assertEqual(k[1], 0x1)
     self.assertEqual(k[2], 0x1)
     self.assertEqual(k[3], 0x0)
     k[0] = 1
     k[1] = 0
     k[2] = 0
     k[3] = 1
     self.assertEqual(k[0], 0x1)
     self.assertEqual(k[1], 0x0)
     self.assertEqual(k[2], 0x0)
     self.assertEqual(k[3], 0x1)
예제 #34
0
파일: RTCM2.py 프로젝트: bodhan/RTCM2
    def __init__(self, default_output_level):
        self.undecoded = bytearray("")
        self.buffer = bytearray("")
        self.default_output_level = default_output_level
        self.packet_ID = None
        self.packet_Length = None
        self.Dump_Levels = array("I")
        self.Handler = []

        self.commands = {}
        self.last_32_bits = bf(0x00, width=32)
        self.bit_count = 0
        self.framing_mode = HDR_WORD1_SRCH
        self.frame_locked = False
        self.data = []
        for i in range(RTCM2_Max_Words):
            self.data.append(0)

        self.word_count = 0

        for i in range(RTCM2_Min_Message_ID, RTCM2_Max_Message_ID):
            self.Dump_Levels.append(default_output_level)
            self.Handler.append(None)

        self.Handler[1] = RTCM2_Type1.Type1()
        self.Handler[2] = RTCM2_Type2.Type2()
        self.Handler[3] = RTCM2_Type3.Type3()
        self.Handler[7] = RTCM2_Type7.Type7()
        self.Handler[9] = RTCM2_Type1.Type1(
        )  # Type 9 is just type 1 but without all the SV information
        self.Handler[18] = RTCM2_Type18.Type18()
        self.Handler[19] = RTCM2_Type19.Type19()
        self.Handler[22] = RTCM2_Type22.Type22()
        self.Handler[23] = RTCM2_Type23.Type23()
        self.Handler[24] = RTCM2_Type24.Type24()
        self.Handler[27] = RTCM2_Type27.Type27()
        self.Handler[31] = RTCM2_Type31.Type31()
        self.Handler[41] = RTCM2_Type41.Type41()
예제 #35
0
파일: RTCM2.py 프로젝트: jcmb/RTCM2
    def dump (self,dump_undecoded=False,dump_decoded=False,dump_timestamp=False,dump_header=False):


        if self.Dump_Levels[self.packet_ID] :
            print "***********************************************************"
            if dump_timestamp :
               print datetime.now()

            print RTCM2_Message_Names[self.packet_ID] + " ("+ str(self.packet_ID) +")"
            if dump_header:
                print(' Zcount   : '+ str(self.zcount));
                print(' Length   : '+ str(self.length));
                print(' Sequence : '+ str(self.sqn_num));
                print(' Health   : '+ RTCM2_Health_Names[self.health])


            if self.Handler[self.packet_ID]:
                self.Handler[self.packet_ID].dump(self.Dump_Levels[self.packet_ID])
            else :
                print "!Undecoded packet"
                if dump_undecoded:
                    for word in range (3,self.length+3):
                        print "{:2} ".format(word) + str(bf(extract_rtcm_bits(self.data[word],1,24),24))
예제 #36
0
파일: RTCM2.py 프로젝트: jcmb/RTCM2
    def __init__ (self,default_output_level):
        self.undecoded=bytearray("")
        self.buffer=bytearray("")
        self.default_output_level=default_output_level
        self.packet_ID=None
        self.packet_Length=None
        self.Dump_Levels=array("I")
        self.Handler=[]

        self.commands={}
        self.last_32_bits=bf(length=32)
        self.bit_count=0
        self.framing_mode = HDR_WORD1_SRCH
        self.frame_locked=False
        self.data=[]
        for i in range(RTCM2_Max_Words):
            self.data.append(0)

        self.word_count=0

        for i in range (RTCM2_Min_Message_ID,RTCM2_Max_Message_ID):
            self.Dump_Levels.append(default_output_level)
            self.Handler.append(None)

        self.Handler[1]=RTCM2_Type1.Type1()
        self.Handler[2]=RTCM2_Type2.Type2()
        self.Handler[3]=RTCM2_Type3.Type3()
        self.Handler[7]=RTCM2_Type7.Type7()
        self.Handler[9]=RTCM2_Type1.Type1() # Type 9 is just type 1 but without all the SV information
        self.Handler[18]=RTCM2_Type18.Type18()
        self.Handler[19]=RTCM2_Type19.Type19()
        self.Handler[22]=RTCM2_Type22.Type22()
        self.Handler[23]=RTCM2_Type23.Type23()
        self.Handler[24]=RTCM2_Type24.Type24()
        self.Handler[27]=RTCM2_Type27.Type27()
        self.Handler[31]=RTCM2_Type31.Type31()
        self.Handler[41]=RTCM2_Type41.Type41()
예제 #37
0
파일: RTCM2.py 프로젝트: jcmb/RTCM2
    def process_rtcm_byte (self, rtcm_byte):
        good_parity=False;
        format_status=NO_INFO

#        OutputDebugString("Process RTCM Byte Start:  " + "{:02X}".format(rtcm_byte))
#        OutputDebugString('Process RTCM Byte: ' + str(self.framing_mode)+ ' ' + str(self.frame_locked))

        if ((rtcm_byte & 0xC0) <> 0x40) :
            OutputDebugString('Not 6 of 8');
            return NO_INFO;  # Invalid 6 of 8 byte, so give up
        rtcm_byte &= 0x3F

#        OutputDebugString("Process RTCM Start:  " + "{:06b}".format(rtcm_byte))

        for Count in range(6,0,-1): # The low 6 Bits in the byte we care about, we have to make this into a bit stream


            #OutputDebugString("Process RTCM Byte:  " + "{:02X}".format(rtcm_byte) + " " + str(Count))
            self.last_32_bits<<=1; #always shift left 1

            if rtcm_byte & 1 :
                self.last_32_bits[0]=1; #Had a 1 in the byte add to the last_32_bits
            self.bit_count+=1

            #OutputDebugString(str(self.last_32_bits)+ " " + str(self.bit_count));

            rtcm_byte >>=1

            if self.bit_count >= 30:
                self.bit_count=0; # Not convinced that we should reset this here, since it seems wrong in the case that we have a bit stream and are trying to sync
                                  # In practice though we are only working with byte aligned streams, since we bail if the byte doesn't start with 0x40
                self.word_boundary=True;
                good_parity=self.check_gps_parity(self.last_32_bits)
#                OutputDebugString("word_boundary: " + str(good_parity))
                #Need to check if we should bail here or if we have to keep going for the headers
#                if not good_parity:
#                    continue
            else:
                self.word_boundary=False;
                if( self.frame_locked ) :
                    #   In an effort to save throughput, we make use of the
                    #    fact that the switch statement below need only be
                    #    executed on a non-word boundary when frame_locked is FALSE.
                   continue;

            if self.framing_mode == HDR_WORD1_SRCH:

                # If last msg ok, then wait for next word boundary
                if( (not self.frame_locked ) or self.word_boundary ):
                    #OutputDebugString("HDR_WORD1_SRCH");
                    # Look for a valid preamble bit sequence. If one is found, overwrite B30 with the assumed value *)
#                    preamble = self.last_32_bits & 0x3fc00000;
                    preamble = extract_rtcm_bits(self.last_32_bits,1,8)

#                    print preamble, POS_VER2_PREAMBLE, NEG_VER2_PREAMBLE
#                    print preamble==POS_VER2_PREAMBLE, preamble==NEG_VER2_PREAMBLE
#                    print int(preamble)==int(POS_VER2_PREAMBLE), int(preamble)==int(NEG_VER2_PREAMBLE)

                    if( preamble == POS_VER2_PREAMBLE ) :
                        self.last_32_bits[30]=0 # &= (not 0x40000000); # Clear D30* *)
#                        OutputDebugString('Pos Ver Preamble');
                        self.found_RTCMV2_header=True
                    elif( preamble == NEG_VER2_PREAMBLE ) :
                        self.last_32_bits[30]=1 # |= 0x40000000;  # Set D30* *)
#                        OutputDebugString('Neg Ver Preamble');
                        self.found_RTCMV2_header=True
                    else :
                        self.found_RTCMV2_header=False

                if self.found_RTCMV2_header:
#                    OutputDebugString('Found Header');
#                    received_checksum=self.last_32_bits[0:6] # & $3F
                    received_checksum=extract_rtcm_bits(self.last_32_bits,25,30)

                    calced_checksum=self.compute_gps_parity(self.last_32_bits)
                    xor_checksum=received_checksum ^ calced_checksum
#                    OutputDebugString("Checksum: " + "{:02X}".format(xor_checksum))

                    if (xor_checksum == 0x29) :
                        self.last_32_bits ^=  0x80000000; #Don't understand this one at all.
#                        OutputDebugString('Checksum 29 hack used');
                        xor_checksum=0

                    if (xor_checksum == 0 ):
                        self.bit_count=0;
                        self.framing_mode=HDR_WORD2_CONFIRM;
                        self.format_status=GOOD_HDR1
                        self.hdr_word=self.extract_data(self.last_32_bits)
                        self.stn_id = extract_rtcm_bits(self.hdr_word, 15, 24);
#                        print " Stn Id   : " + str(self.stn_id);
                        self.packet_ID = extract_rtcm_bits(self.hdr_word,9,14);
#                        print " Type     : " + str(self.packet_ID)

                    else :
                        self.format_status = ERROR_DETECTED;
                        self.frame_locked = False

            elif self.framing_mode == HDR_WORD2_CONFIRM:
                if ( self.word_boundary ) :
                   if( good_parity ) :
                       self.hdr_word=bf(self.extract_data(self.last_32_bits),30)
#                       OutputDebugString('HDR Word2 CONFIRM Good Parity');
                       self.frame_locked = True;
                       # Extract fields for word 2 of the message header *)
                       self.zcount  = int(extract_rtcm_bits( self.hdr_word, 1, 13 ));
                       self.sqn_num = int(extract_rtcm_bits( self.hdr_word, 14, 16 ));
                       self.length  = int(extract_rtcm_bits( self.hdr_word, 17, 21 ));
                       self.health  = int(extract_rtcm_bits( self.hdr_word, 22, 24 ));

                       # Handle the 0 length message case eg :- Type 6 *)
                       if( self.length == 0 ) :
                          self.framing_mode = HDR_WORD1_SRCH;
                          format_status  = MESSAGE_COMPLETE_GOOD_ID;
                       else:
                          self.framing_mode = DATA_COLLECT;
#                          OutputDebugString('HDR Word2 going to Data Collect');
                          format_status = GOOD_HDR2;
                          self.word_count = 0;
                   else :
                      self.frame_locked = False;
                      self.framing_mode = HDR_WORD1_SRCH;
                      format_status  = ERROR_DETECTED;

            elif self.framing_mode == DATA_COLLECT:
                if ( self.word_boundary ) :
                   if( good_parity ) :
#                       OutputDebugString('Data Collect: ' + str(self.word_count) + " " + str(self.length));
                       self.data[self.word_count+3] = self.extract_data(self.last_32_bits)
                       self.word_count+=1

                       if( self.word_count >= self.length ):
                   # This word completes the message. Perform the message termination work. *)
                           self.framing_mode = HDR_WORD1_SRCH;
                           self.bit_count = 0;
                           format_status  = MESSAGE_COMPLETE_GOOD_ID;
#                           OutputDebugString("Message Complete")
                           return format_status

                   else:
                     # A bad data word has been received. Reset data collection. *)
                       self.framing_mode = HDR_WORD1_SRCH;
                       self.frame_locked = False;
                       format_status  = ERROR_DETECTED;
        return format_status
예제 #38
0
 def test_full_assign_fail(self):
     # make sure the shuffled sequence does not lose any elements
     k = bf(2)
     self.assertIsInstance(k, bf)
     self.assertFalse(int(k) == 1)
     self.assertNotEqual(int(k), 1)
예제 #39
0
 def test_zero_default_length(self):
     k8 = bf(length=8)
     self.assertIsInstance(k8, bf)
     self.assertEqual(int(k8), 0)
     self.assertFalse(k8)
예제 #40
0
 def test_and(self):
     k = bf(1)
     k = k & 0x3
     self.assertIsInstance(k, bf)
     self.assertEqual(int(k), 0x001)
예제 #41
0
 def test_or(self):
     k = bf(1)
     k = k | 0x3
     self.assertIsInstance(k, bf)
     self.assertEqual(int(k), 0x003)
예제 #42
0
파일: RTCM2.py 프로젝트: bodhan/RTCM2
    def process_rtcm_byte(self, rtcm_byte):
        good_parity = False
        format_status = NO_INFO

        #        OutputDebugString("Process RTCM Byte Start:  " + "{:02X}".format(rtcm_byte))
        #        OutputDebugString('Process RTCM Byte: ' + str(self.framing_mode)+ ' ' + str(self.frame_locked))

        if ((rtcm_byte & 0xC0) <> 0x40):
            OutputDebugString('Not 6 of 8')
            return NO_INFO
            # Invalid 6 of 8 byte, so give up
        rtcm_byte &= 0x3F

        #        OutputDebugString("Process RTCM Start:  " + "{:06b}".format(rtcm_byte))

        for Count in range(
                6, 0, -1
        ):  # The low 6 Bits in the byte we care about, we have to make this into a bit stream

            #OutputDebugString("Process RTCM Byte:  " + "{:02X}".format(rtcm_byte) + " " + str(Count))
            self.last_32_bits <<= 1
            #always shift left 1

            if rtcm_byte & 1:
                self.last_32_bits[0] = 1
                #Had a 1 in the byte add to the last_32_bits
            self.bit_count += 1

            #OutputDebugString(str(self.last_32_bits)+ " " + str(self.bit_count));

            rtcm_byte >>= 1

            if self.bit_count >= 30:
                self.bit_count = 0
                # Not convinced that we should reset this here, since it seems wrong in the case that we have a bit stream and are trying to sync
                # In practice though we are only working with byte aligned streams, since we bail if the byte doesn't start with 0x40
                self.word_boundary = True
                good_parity = self.check_gps_parity(self.last_32_bits)
#                OutputDebugString("word_boundary: " + str(good_parity))
#Need to check if we should bail here or if we have to keep going for the headers
#                if not good_parity:
#                    continue
            else:
                self.word_boundary = False
                if (self.frame_locked):
                    #   In an effort to save throughput, we make use of the
                    #    fact that the switch statement below need only be
                    #    executed on a non-word boundary when frame_locked is FALSE.
                    continue

            if self.framing_mode == HDR_WORD1_SRCH:

                # If last msg ok, then wait for next word boundary
                if ((not self.frame_locked) or self.word_boundary):
                    #OutputDebugString("HDR_WORD1_SRCH");
                    # Look for a valid preamble bit sequence. If one is found, overwrite B30 with the assumed value *)
                    #                    preamble = self.last_32_bits & 0x3fc00000;
                    preamble = extract_rtcm_bits(self.last_32_bits, 1, 8)

                    #                    print preamble, POS_VER2_PREAMBLE, NEG_VER2_PREAMBLE
                    #                    print preamble==POS_VER2_PREAMBLE, preamble==NEG_VER2_PREAMBLE
                    #                    print int(preamble)==int(POS_VER2_PREAMBLE), int(preamble)==int(NEG_VER2_PREAMBLE)

                    if (preamble == POS_VER2_PREAMBLE):
                        self.last_32_bits[
                            30] = 0  # &= (not 0x40000000); # Clear D30* *)
                        #                        OutputDebugString('Pos Ver Preamble');
                        self.found_RTCMV2_header = True
                    elif (preamble == NEG_VER2_PREAMBLE):
                        self.last_32_bits[
                            30] = 1  # |= 0x40000000;  # Set D30* *)
                        #                        OutputDebugString('Neg Ver Preamble');
                        self.found_RTCMV2_header = True
                    else:
                        self.found_RTCMV2_header = False

                if self.found_RTCMV2_header:
                    #                    OutputDebugString('Found Header');
                    #                    received_checksum=self.last_32_bits[0:6] # & $3F
                    received_checksum = extract_rtcm_bits(
                        self.last_32_bits, 25, 30)

                    calced_checksum = self.compute_gps_parity(
                        self.last_32_bits)
                    xor_checksum = received_checksum ^ calced_checksum
                    #                    OutputDebugString("Checksum: " + "{:02X}".format(xor_checksum))

                    if (xor_checksum == 0x29):
                        self.last_32_bits ^= 0x80000000
                        #Don't understand this one at all.
                        #                        OutputDebugString('Checksum 29 hack used');
                        xor_checksum = 0

                    if (xor_checksum == 0):
                        self.bit_count = 0
                        self.framing_mode = HDR_WORD2_CONFIRM
                        self.format_status = GOOD_HDR1
                        self.hdr_word = self.extract_data(self.last_32_bits)
                        self.stn_id = extract_rtcm_bits(self.hdr_word, 15, 24)
                        #                        print " Stn Id   : " + str(self.stn_id);
                        self.packet_ID = extract_rtcm_bits(
                            self.hdr_word, 9, 14)
#                        print " Type     : " + str(self.packet_ID)

                    else:
                        self.format_status = ERROR_DETECTED
                        self.frame_locked = False

            elif self.framing_mode == HDR_WORD2_CONFIRM:
                if (self.word_boundary):
                    if (good_parity):
                        self.hdr_word = bf(
                            self.extract_data(self.last_32_bits), 30)
                        #                       OutputDebugString('HDR Word2 CONFIRM Good Parity');
                        self.frame_locked = True
                        # Extract fields for word 2 of the message header *)
                        self.zcount = int(
                            extract_rtcm_bits(self.hdr_word, 1, 13))
                        self.sqn_num = int(
                            extract_rtcm_bits(self.hdr_word, 14, 16))
                        self.length = int(
                            extract_rtcm_bits(self.hdr_word, 17, 21))
                        self.health = int(
                            extract_rtcm_bits(self.hdr_word, 22, 24))

                        # Handle the 0 length message case eg :- Type 6 *)
                        if (self.length == 0):
                            self.framing_mode = HDR_WORD1_SRCH
                            format_status = MESSAGE_COMPLETE_GOOD_ID
                        else:
                            self.framing_mode = DATA_COLLECT
                            #                          OutputDebugString('HDR Word2 going to Data Collect');
                            format_status = GOOD_HDR2
                            self.word_count = 0
                    else:
                        self.frame_locked = False
                        self.framing_mode = HDR_WORD1_SRCH
                        format_status = ERROR_DETECTED

            elif self.framing_mode == DATA_COLLECT:
                if (self.word_boundary):
                    if (good_parity):
                        #                       OutputDebugString('Data Collect: ' + str(self.word_count) + " " + str(self.length));
                        self.data[self.word_count + 3] = self.extract_data(
                            self.last_32_bits)
                        self.word_count += 1

                        if (self.word_count >= self.length):
                            # This word completes the message. Perform the message termination work. *)
                            self.framing_mode = HDR_WORD1_SRCH
                            self.bit_count = 0
                            format_status = MESSAGE_COMPLETE_GOOD_ID
                            #                           OutputDebugString("Message Complete")
                            return format_status

                    else:
                        # A bad data word has been received. Reset data collection. *)
                        self.framing_mode = HDR_WORD1_SRCH
                        self.frame_locked = False
                        format_status = ERROR_DETECTED
        return format_status
예제 #43
0
 def test_or(self):
     k = bf(1)
     k=k | 0x3
     self.assertIsInstance(k,bf)
     self.assertEqual(int(k), 0x003)
예제 #44
0
 def test_and(self):
     k = bf(1)
     k=k & 0x3
     self.assertIsInstance(k,bf)
     self.assertEqual(int(k), 0x001)
예제 #45
0
 def test_full_assign_fail(self):
     # make sure the shuffled sequence does not lose any elements
     k = bf(2)
     self.assertIsInstance(k,bf)
     self.assertFalse(int(k)==1)
     self.assertNotEqual(int(k), 1)
예제 #46
0
 def test_zero_default_length(self):
     k8 = bf(length=8)
     self.assertIsInstance(k8,bf)
     self.assertEqual(int(k8), 0)
     self.assertFalse(k8)