@@ -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