kopia lustrzana https://github.com/cyoung/stratux
Merge pull request #178 from AvSquirrel/ahrsFusion
Check for valid GPS date. Fix time string formatting.pull/182/merge v0.5b4
commit
d682bb5cf0
|
@ -524,6 +524,18 @@ func processNMEALine(l string) bool {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
} else if x[1] == "04" { // clock message
|
} else if x[1] == "04" { // clock message
|
||||||
|
// field 5 is UTC week (epoch = 1980-JAN-06). If this is invalid, do not parse date / time
|
||||||
|
utcWeek, err0 := strconv.Atoi(x[5])
|
||||||
|
if err0 != nil {
|
||||||
|
// log.Printf("Error reading GPS week\n")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if utcWeek < 1877 || utcWeek >= 32767 { // unless we're in a flying Delorean, UTC dates before 2016-JAN-01 are not valid. Check underflow condition as well.
|
||||||
|
log.Printf("GPS week # %v out of scope; not setting time and date\n", utcWeek)
|
||||||
|
return false
|
||||||
|
} /* else {
|
||||||
|
log.Printf("GPS week # %v valid; evaluate time and date\n", utcWeek) //debug option
|
||||||
|
} */
|
||||||
|
|
||||||
// field 2 is UTC time
|
// field 2 is UTC time
|
||||||
if len(x[2]) < 9 {
|
if len(x[2]) < 9 {
|
||||||
|
@ -541,10 +553,11 @@ func processNMEALine(l string) bool {
|
||||||
|
|
||||||
if len(x[3]) == 6 {
|
if len(x[3]) == 6 {
|
||||||
// Date of Fix, i.e 191115 = 19 November 2015 UTC field 9
|
// Date of Fix, i.e 191115 = 19 November 2015 UTC field 9
|
||||||
gpsTimeStr := fmt.Sprintf("%s %d:%d:%d", x[3], hr, min, sec)
|
gpsTimeStr := fmt.Sprintf("%s %02d:%02d:%02d", x[3], hr, min, sec)
|
||||||
gpsTime, err := time.Parse("020106 15:04:05", gpsTimeStr)
|
gpsTime, err := time.Parse("020106 15:04:05", gpsTimeStr)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
if time.Since(gpsTime) > 10*time.Minute {
|
// log.Printf("GPS time is: %s\n", gpsTime) //debug
|
||||||
|
if time.Since(gpsTime) > 3*time.Second || time.Since(gpsTime) < -3*time.Second {
|
||||||
log.Printf("setting system time to: %s\n", gpsTime)
|
log.Printf("setting system time to: %s\n", gpsTime)
|
||||||
setStr := gpsTime.Format("20060102 15:04:05")
|
setStr := gpsTime.Format("20060102 15:04:05")
|
||||||
if err := exec.Command("date", "-s", setStr).Run(); err != nil {
|
if err := exec.Command("date", "-s", setStr).Run(); err != nil {
|
||||||
|
@ -736,10 +749,10 @@ func processNMEALine(l string) bool {
|
||||||
|
|
||||||
if len(x[9]) == 6 {
|
if len(x[9]) == 6 {
|
||||||
// Date of Fix, i.e 191115 = 19 November 2015 UTC field 9
|
// Date of Fix, i.e 191115 = 19 November 2015 UTC field 9
|
||||||
gpsTimeStr := fmt.Sprintf("%s %d:%d:%d", x[9], hr, min, sec)
|
gpsTimeStr := fmt.Sprintf("%s %02d:%02d:%02d", x[9], hr, min, sec)
|
||||||
gpsTime, err := time.Parse("020106 15:04:05", gpsTimeStr)
|
gpsTime, err := time.Parse("020106 15:04:05", gpsTimeStr)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
if time.Since(gpsTime) > 10*time.Minute {
|
if time.Since(gpsTime) > 3*time.Second || time.Since(gpsTime) < -3*time.Second {
|
||||||
log.Printf("setting system time to: %s\n", gpsTime)
|
log.Printf("setting system time to: %s\n", gpsTime)
|
||||||
setStr := gpsTime.Format("20060102 15:04:05")
|
setStr := gpsTime.Format("20060102 15:04:05")
|
||||||
if err := exec.Command("date", "-s", setStr).Run(); err != nil {
|
if err := exec.Command("date", "-s", setStr).Run(); err != nil {
|
||||||
|
|
Ładowanie…
Reference in New Issue