@@ -3534,10 +3534,12 @@ boolean SFE_UBLOX_GPS::getVehAtt(uint16_t maxWait)
3534
3534
return (true );
3535
3535
}
3536
3536
3537
- // Set the ECEF coordinates of a receiver
3537
+ // Set the ECEF or Lat/Long coordinates of a receiver
3538
3538
// This imediately puts the receiver in TIME mode (fixed) and will begin outputting RTCM sentences if enabled
3539
3539
// This is helpful once an antenna's position has been established. See this tutorial: https://learn.sparkfun.com/tutorials/how-to-build-a-diy-gnss-reference-station#gather-raw-gnss-data
3540
- bool SFE_UBLOX_GPS::setStaticPosition (int32_t ecefX, int8_t ecefXHP, int32_t ecefY, int8_t ecefYHP, int32_t ecefZ, int8_t ecefZHP, bool latLong, uint16_t maxWait)
3540
+ // For ECEF the units are: cm, 0.1mm, cm, 0.1mm, cm, 0.1mm
3541
+ // For Lat/Lon/Alt the units are: degrees^-7, degrees^-9, degrees^-7, degrees^-9, cm, 0.1mm
3542
+ bool SFE_UBLOX_GPS::setStaticPosition (int32_t ecefXOrLat, int8_t ecefXOrLatHP, int32_t ecefYOrLon, int8_t ecefYOrLonHP, int32_t ecefZOrAlt, int8_t ecefZOrAltHP, bool latLong, uint16_t maxWait)
3541
3543
{
3542
3544
packetCfg.cls = UBX_CLASS_CFG;
3543
3545
packetCfg.id = UBX_CFG_TMODE3;
@@ -3560,33 +3562,33 @@ bool SFE_UBLOX_GPS::setStaticPosition(int32_t ecefX, int8_t ecefXHP, int32_t ece
3560
3562
if (latLong == true )
3561
3563
payloadCfg[3 ] = (uint8_t )(1 << 0 ); // Set mode to fixed. Use LAT/LON/ALT.
3562
3564
3563
- // Set ECEF X
3564
- payloadCfg[4 ] = (ecefX >> 8 * 0 ) & 0xFF ; // LSB
3565
- payloadCfg[5 ] = (ecefX >> 8 * 1 ) & 0xFF ;
3566
- payloadCfg[6 ] = (ecefX >> 8 * 2 ) & 0xFF ;
3567
- payloadCfg[7 ] = (ecefX >> 8 * 3 ) & 0xFF ; // MSB
3568
-
3569
- // Set ECEF Y
3570
- payloadCfg[8 ] = (ecefY >> 8 * 0 ) & 0xFF ; // LSB
3571
- payloadCfg[9 ] = (ecefY >> 8 * 1 ) & 0xFF ;
3572
- payloadCfg[10 ] = (ecefY >> 8 * 2 ) & 0xFF ;
3573
- payloadCfg[11 ] = (ecefY >> 8 * 3 ) & 0xFF ; // MSB
3574
-
3575
- // Set ECEF Z
3576
- payloadCfg[12 ] = (ecefZ >> 8 * 0 ) & 0xFF ; // LSB
3577
- payloadCfg[13 ] = (ecefZ >> 8 * 1 ) & 0xFF ;
3578
- payloadCfg[14 ] = (ecefZ >> 8 * 2 ) & 0xFF ;
3579
- payloadCfg[15 ] = (ecefZ >> 8 * 3 ) & 0xFF ; // MSB
3580
-
3581
- // Set ECEF high precision bits
3582
- payloadCfg[16 ] = ecefXHP ;
3583
- payloadCfg[17 ] = ecefYHP ;
3584
- payloadCfg[18 ] = ecefZHP ;
3565
+ // Set ECEF X or Lat
3566
+ payloadCfg[4 ] = (ecefXOrLat >> 8 * 0 ) & 0xFF ; // LSB
3567
+ payloadCfg[5 ] = (ecefXOrLat >> 8 * 1 ) & 0xFF ;
3568
+ payloadCfg[6 ] = (ecefXOrLat >> 8 * 2 ) & 0xFF ;
3569
+ payloadCfg[7 ] = (ecefXOrLat >> 8 * 3 ) & 0xFF ; // MSB
3570
+
3571
+ // Set ECEF Y or Long
3572
+ payloadCfg[8 ] = (ecefYOrLon >> 8 * 0 ) & 0xFF ; // LSB
3573
+ payloadCfg[9 ] = (ecefYOrLon >> 8 * 1 ) & 0xFF ;
3574
+ payloadCfg[10 ] = (ecefYOrLon >> 8 * 2 ) & 0xFF ;
3575
+ payloadCfg[11 ] = (ecefYOrLon >> 8 * 3 ) & 0xFF ; // MSB
3576
+
3577
+ // Set ECEF Z or Altitude
3578
+ payloadCfg[12 ] = (ecefZOrAlt >> 8 * 0 ) & 0xFF ; // LSB
3579
+ payloadCfg[13 ] = (ecefZOrAlt >> 8 * 1 ) & 0xFF ;
3580
+ payloadCfg[14 ] = (ecefZOrAlt >> 8 * 2 ) & 0xFF ;
3581
+ payloadCfg[15 ] = (ecefZOrAlt >> 8 * 3 ) & 0xFF ; // MSB
3582
+
3583
+ // Set high precision parts
3584
+ payloadCfg[16 ] = ecefXOrLatHP ;
3585
+ payloadCfg[17 ] = ecefYOrLonHP ;
3586
+ payloadCfg[18 ] = ecefZOrAltHP ;
3585
3587
3586
3588
return ((sendCommand (&packetCfg, maxWait)) == SFE_UBLOX_STATUS_DATA_SENT); // We are only expecting an ACK
3587
3589
}
3588
3590
3589
- bool SFE_UBLOX_GPS::setStaticPosition (int32_t ecefX , int32_t ecefY , int32_t ecefZ , bool latlong, uint16_t maxWait)
3591
+ bool SFE_UBLOX_GPS::setStaticPosition (int32_t ecefXOrLat , int32_t ecefYOrLon , int32_t ecefZOrAlt , bool latlong, uint16_t maxWait)
3590
3592
{
3591
- return (setStaticPosition (ecefX , 0 , ecefY , 0 , ecefZ , 0 , latlong, maxWait));
3593
+ return (setStaticPosition (ecefXOrLat , 0 , ecefYOrLon , 0 , ecefZOrAlt , 0 , latlong, maxWait));
3592
3594
}
0 commit comments