@@ -554,7 +554,7 @@ void SFE_UBLOX_GPS::process(uint8_t incoming, ubxPacket *incomingUBX, uint8_t re
554554 // So let's check for an HPPOSLLH message arriving when we were expecting PVT and vice versa
555555 else  if  ((packetBuf.cls  == requestedClass) &&
556556 (((packetBuf.id  == UBX_NAV_PVT) && (requestedID == UBX_NAV_HPPOSLLH || requestedID == UBX_NAV_DOP)) ||
557-  ((packetBuf.id  == UBX_NAV_HPPOSLLH) && (requestedID == UBX_NAV_PVT || requestedID == UBX_NAV_DOP)) ||
557+    ((packetBuf.id  == UBX_NAV_HPPOSLLH) && (requestedID == UBX_NAV_PVT || requestedID == UBX_NAV_DOP)) ||
558558 ((packetBuf.id  == UBX_NAV_DOP) && (requestedID == UBX_NAV_PVT || requestedID == UBX_NAV_HPPOSLLH))))
559559 {
560560 // This is not the message we were expecting but we start diverting data into incomingUBX (usually packetCfg) and process it anyway
@@ -564,7 +564,25 @@ void SFE_UBLOX_GPS::process(uint8_t incoming, ubxPacket *incomingUBX, uint8_t re
564564 incomingUBX->counter  = packetBuf.counter ; // Copy over the .counter too
565565 if  (_printDebug == true )
566566 {
567-  _debugSerial->print (F (" process: auto PVT/HPPOSLLH/DOP collision: Requested ID: 0x" 
567+  _debugSerial->print (F (" process: auto NAV PVT/HPPOSLLH/DOP collision: Requested ID: 0x" 
568+  _debugSerial->print (requestedID, HEX);
569+  _debugSerial->print (F ("  Message ID: 0x" 
570+  _debugSerial->println (packetBuf.id , HEX);
571+  }
572+  }
573+  else  if  ((packetBuf.cls  == requestedClass) &&
574+  (((packetBuf.id  == UBX_HNR_ATT) && (requestedID == UBX_HNR_INS || requestedID == UBX_HNR_PVT)) ||
575+  ((packetBuf.id  == UBX_HNR_INS) && (requestedID == UBX_HNR_ATT || requestedID == UBX_HNR_PVT)) ||
576+  ((packetBuf.id  == UBX_HNR_PVT) && (requestedID == UBX_HNR_ATT || requestedID == UBX_HNR_INS))))
577+  {
578+  // This is not the message we were expecting but we start diverting data into incomingUBX (usually packetCfg) and process it anyway
579+  activePacketBuffer = SFE_UBLOX_PACKET_PACKETCFG;
580+  incomingUBX->cls  = packetBuf.cls ; // Copy the class and ID into incomingUBX (usually packetCfg)
581+  incomingUBX->id  = packetBuf.id ;
582+  incomingUBX->counter  = packetBuf.counter ; // Copy over the .counter too
583+  if  (_printDebug == true )
584+  {
585+  _debugSerial->print (F (" process: auto HNR ATT/INS/PVT collision: Requested ID: 0x" 
568586 _debugSerial->print (requestedID, HEX);
569587 _debugSerial->print (F ("  Message ID: 0x" 
570588 _debugSerial->println (packetBuf.id , HEX);
@@ -837,12 +855,28 @@ void SFE_UBLOX_GPS::processUBX(uint8_t incoming, ubxPacket *incomingUBX, uint8_t
837855 //  Let's say so and leave incomingUBX->classAndIDmatch _unchanged_
838856 if  (_printDebug == true )
839857 {
840-  _debugSerial->print (F (" processUBX: auto PVT/HPPOSLLH/DOP collision: Requested ID: 0x" 
858+  _debugSerial->print (F (" processUBX: auto NAV  PVT/HPPOSLLH/DOP collision: Requested ID: 0x" 
841859 _debugSerial->print (requestedID, HEX);
842860 _debugSerial->print (F ("  Message ID: 0x" 
843861 _debugSerial->println (incomingUBX->id , HEX);
844862 }
845863 }
864+  //  Let's do the same for the HNR messages
865+  else  if  ((incomingUBX->cls  == requestedClass) &&
866+  (((incomingUBX->id  == UBX_HNR_ATT) && (requestedID == UBX_HNR_INS || requestedID == UBX_HNR_PVT)) ||
867+  ((incomingUBX->id  == UBX_HNR_INS) && (requestedID == UBX_HNR_ATT || requestedID == UBX_HNR_PVT)) ||
868+  ((incomingUBX->id  == UBX_HNR_PVT) && (requestedID == UBX_HNR_ATT || requestedID == UBX_HNR_INS))))
869+  {
870+  //  This isn't the message we are looking for...
871+  //  Let's say so and leave incomingUBX->classAndIDmatch _unchanged_
872+  if  (_printDebug == true )
873+  {
874+  _debugSerial->print (F (" processUBX: auto HNR ATT/INS/PVT collision: Requested ID: 0x" 
875+  _debugSerial->print (requestedID, HEX);
876+  _debugSerial->print (F ("  Message ID: 0x" 
877+  _debugSerial->println (incomingUBX->id , HEX);
878+  }
879+  }
846880
847881 if  (_printDebug == true )
848882 {
@@ -3233,9 +3267,9 @@ boolean SFE_UBLOX_GPS::getPVT(uint16_t maxWait)
32333267 {
32343268 if  (_printDebug == true )
32353269 {
3236-  _debugSerial->println (F (" getPVT: data was OVERWRITTEN by a HNR message (but  that's OK)" 
3270+  _debugSerial->println (F (" getPVT: data was OVERWRITTEN by a HNR message (and  that's not  OK)" 
32373271 }
3238-  return  (true );
3272+  return  (false );
32393273 }
32403274
32413275 if  (_printDebug == true )
@@ -3417,9 +3451,9 @@ boolean SFE_UBLOX_GPS::getHPPOSLLH(uint16_t maxWait)
34173451 {
34183452 if  (_printDebug == true )
34193453 {
3420-  _debugSerial->println (F (" getHPPOSLLH: data was OVERWRITTEN by a HNR message (but  that's OK)" 
3454+  _debugSerial->println (F (" getHPPOSLLH: data was OVERWRITTEN by a HNR message (and  that's not  OK)" 
34213455 }
3422-  return  (true );
3456+  return  (false );
34233457 }
34243458
34253459 if  (_printDebug == true )
@@ -3544,7 +3578,7 @@ boolean SFE_UBLOX_GPS::getDOP(uint16_t maxWait)
35443578 {
35453579 if  (_printDebug == true )
35463580 {
3547-  _debugSerial->println (F (" getHPPOSLLH : data was OVERWRITTEN by another NAV message (but that's OK)" 
3581+  _debugSerial->println (F (" getDOP : data was OVERWRITTEN by another NAV message (but that's OK)" 
35483582 }
35493583 return  (true );
35503584 }
@@ -3553,9 +3587,9 @@ boolean SFE_UBLOX_GPS::getDOP(uint16_t maxWait)
35533587 {
35543588 if  (_printDebug == true )
35553589 {
3556-  _debugSerial->println (F (" getPVT : data was OVERWRITTEN by a HNR message (but  that's OK)" 
3590+  _debugSerial->println (F (" getDOP : data was OVERWRITTEN by a HNR message (and  that's not  OK)" 
35573591 }
3558-  return  (true );
3592+  return  (false );
35593593 }
35603594
35613595 if  (_printDebug == true )
@@ -4459,9 +4493,9 @@ boolean SFE_UBLOX_GPS::getHNRAtt(uint16_t maxWait)
44594493 {
44604494 if  (_printDebug == true )
44614495 {
4462-  _debugSerial->println (F (" getHNRAtt: data was OVERWRITTEN by a NAV message (but  that's OK)" 
4496+  _debugSerial->println (F (" getHNRAtt: data was OVERWRITTEN by a NAV message (and  that's not  OK)" 
44634497 }
4464-  return  (true );
4498+  return  (false );
44654499 }
44664500
44674501 if  ((retVal == SFE_UBLOX_STATUS_DATA_OVERWRITTEN) && (packetCfg.cls  == UBX_CLASS_HNR))
@@ -4579,9 +4613,9 @@ boolean SFE_UBLOX_GPS::getHNRDyn(uint16_t maxWait)
45794613 {
45804614 if  (_printDebug == true )
45814615 {
4582-  _debugSerial->println (F (" getHNRDyn: data was OVERWRITTEN by a NAV message (but  that's OK)" 
4616+  _debugSerial->println (F (" getHNRDyn: data was OVERWRITTEN by a NAV message (and  that's not  OK)" 
45834617 }
4584-  return  (true );
4618+  return  (false );
45854619 }
45864620
45874621 if  ((retVal == SFE_UBLOX_STATUS_DATA_OVERWRITTEN) && (packetCfg.cls  == UBX_CLASS_HNR))
@@ -4699,9 +4733,9 @@ boolean SFE_UBLOX_GPS::getHNRPVT(uint16_t maxWait)
46994733 {
47004734 if  (_printDebug == true )
47014735 {
4702-  _debugSerial->println (F (" getHNRPVT: data was OVERWRITTEN by a NAV message (but  that's OK)" 
4736+  _debugSerial->println (F (" getHNRPVT: data was OVERWRITTEN by a NAV message (and  that's not  OK)" 
47034737 }
4704-  return  (true );
4738+  return  (false );
47054739 }
47064740
47074741 if  ((retVal == SFE_UBLOX_STATUS_DATA_OVERWRITTEN) && (packetCfg.cls  == UBX_CLASS_HNR))
0 commit comments