Skip to content

Commit 8b33b36

Browse files
committed
- fixed SBAS MT24,26 decoder.
1 parent 053646c commit 8b33b36

File tree

1 file changed

+41
-17
lines changed

1 file changed

+41
-17
lines changed

src/cssrlib/sbas.py

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -432,25 +432,16 @@ def decode_sbas_mask(self, msg, i):
432432
i += 2
433433
return i
434434

435-
def decode_sbas_fast_corr(self, msg, i):
436-
""" Types 2 to 5 fast correction message """
437-
type_ = 0 if self.msgtype == 0 else self.msgtype-2
438-
439-
iodf, iodp = bs.unpack_from('u2u2', msg, i)
440-
i += 4
441-
442-
if iodp != self.iodp:
443-
i += 208
444-
return i
445-
446-
for k in range(13):
435+
def decode_sbas_fast_corr_blk(self, msg, i, n, type_):
436+
""" decode fast correction for n blocks """
437+
for k in range(n):
447438
fc = bs.unpack_from('s12', msg, i)[0]
448439
i += 12
449440
j = type_*13+k
450441
if j >= len(self.sat):
451442
break
452443
self.lc[0].hclk[self.sat[j]] = -self.sval(fc, 12, 0.125)
453-
for k in range(13):
444+
for k in range(n):
454445
udrei = bs.unpack_from('u4', msg, i)[0]
455446
i += 4
456447
j = type_*13+k
@@ -462,6 +453,20 @@ def decode_sbas_fast_corr(self, msg, i):
462453
self.lc[0].cstat |= (1 << sCType.HCLOCK)
463454
return i
464455

456+
def decode_sbas_fast_corr(self, msg, i):
457+
""" Types 2 to 5 fast correction message """
458+
type_ = 0 if self.msgtype == 0 else self.msgtype-2
459+
460+
iodf, iodp = bs.unpack_from('u2u2', msg, i)
461+
i += 4
462+
463+
if iodp != self.iodp:
464+
i += 208
465+
return i
466+
467+
i = self.decode_sbas_fast_corr_blk(msg, i, 13, type_)
468+
return i
469+
465470
def decode_sbas_integrity(self, msg, i):
466471
""" Type 6 integrity message """
467472
iodf2, iodf3, iodf4, iodf5 = bs.unpack_from('u2u2u2u2', msg, i)
@@ -640,8 +645,8 @@ def decode_sbas_lcorr_half(self, msg, i):
640645
vc = bs.unpack_from('u1', msg, i)[0]
641646
i += 1
642647

643-
i0 = 117 if vc == 0 else 105
644-
iodp = bs.unpack_from('u2', msg, i0)[0]
648+
ofst = 102 if vc == 0 else 103
649+
iodp = bs.unpack_from('u2', msg, i+ofst)[0]
645650
if iodp != self.iodp:
646651
return i
647652

@@ -669,6 +674,20 @@ def decode_sbas_lcorr_half(self, msg, i):
669674

670675
return i
671676

677+
def decode_sbas_mixed_corr(self, msg, i):
678+
""" Type 24 mixed fast/long correction """
679+
680+
# fast correction (106bits)
681+
iodp, type_, iodf = bs.unpack_from('u2u2u2', msg, i+96)
682+
683+
if iodp != self.iodp:
684+
i += 208
685+
return i
686+
687+
i = self.decode_sbas_fast_corr_blk(msg, i, 6, type_)
688+
i = self.decode_sbas_lcorr_half(msg, i) # MT25 half-msg(106bits)
689+
return i
690+
672691
def decode_sbas_long_corr(self, msg, i):
673692
""" Type 25 long-term satellite error correction """
674693
for k in range(2):
@@ -677,13 +696,18 @@ def decode_sbas_long_corr(self, msg, i):
677696

678697
def decode_sbas_iono(self, msg, i):
679698
""" Type 26 Ionospheric delay message """
680-
iodi = bs.unpack_from('u2', msg, 217)[0]
699+
iodi = bs.unpack_from('u2', msg, i+203)[0]
681700
if iodi != self.iodi:
682701
i += 212
683702
return i
684703
band, bid = bs.unpack_from('u4u4', msg, i)
685-
nigp = len(self.vtec[band])
686704
i += 8
705+
if band not in self.vtec:
706+
i += 204
707+
return i
708+
709+
nigp = len(self.vtec[band])
710+
687711
for k in range(15):
688712
vd, givei = bs.unpack_from('u9u4', msg, i)
689713
i += 13

0 commit comments

Comments
 (0)