Эх сурвалжийг харах

add minmea_getdate()

The GPS date is internally converted to a struct tm anyway.
Add a function to make use of this for external users too.
Benjamin Valentin 6 жил өмнө
parent
commit
4ebbaef840
2 өөрчлөгдсөн 24 нэмэгдсэн , 11 устгасан
  1. 19 11
      minmea.c
  2. 5 0
      minmea.h

+ 19 - 11
minmea.c

@@ -612,25 +612,33 @@ bool minmea_parse_zda(struct minmea_sentence_zda *frame, const char *sentence)
   return true;
 }
 
-int minmea_gettime(struct timespec *ts, const struct minmea_date *date, const struct minmea_time *time_)
+int minmea_getdate(struct tm *out, const struct minmea_date *date, const struct minmea_time *time_)
 {
     if (date->year == -1 || time_->hours == -1)
         return -1;
 
-    struct tm tm;
-    memset(&tm, 0, sizeof(tm));
+    memset(out, 0, sizeof(struct tm));
     if (date->year < 80) {
-        tm.tm_year = 2000 + date->year - 1900;  // 2000-2079
+        out->tm_year = 2000 + date->year - 1900; // 2000-2079
     } else if (date->year >= 1900) {
-        tm.tm_year = date->year - 1900; // 4 digit year, use directly
+        out->tm_year = date->year - 1900;        // 4 digit year, use directly
     } else {
-        tm.tm_year = date->year;    // 1980-1999
+        out->tm_year = date->year;               // 1980-1999
     }
-    tm.tm_mon = date->month - 1;
-    tm.tm_mday = date->day;
-    tm.tm_hour = time_->hours;
-    tm.tm_min = time_->minutes;
-    tm.tm_sec = time_->seconds;
+    out->tm_mon = date->month - 1;
+    out->tm_mday = date->day;
+    out->tm_hour = time_->hours;
+    out->tm_min = time_->minutes;
+    out->tm_sec = time_->seconds;
+
+    return 0;
+}
+
+int minmea_gettime(struct timespec *ts, const struct minmea_date *date, const struct minmea_time *time_)
+{
+    struct tm tm;
+    if (minmea_getdate(&tm, date, time_))
+        return -1;
 
     time_t timestamp = timegm(&tm); /* See README.md if your system lacks timegm(). */
     if (timestamp != (time_t)-1) {

+ 5 - 0
minmea.h

@@ -208,6 +208,11 @@ bool minmea_parse_gsv(struct minmea_sentence_gsv *frame, const char *sentence);
 bool minmea_parse_vtg(struct minmea_sentence_vtg *frame, const char *sentence);
 bool minmea_parse_zda(struct minmea_sentence_zda *frame, const char *sentence);
 
+/**
+ * Convert GPS UTC date/time representation to a UNIX calendar time.
+ */
+int minmea_getdate(struct tm *out, const struct minmea_date *date, const struct minmea_time *time_);
+
 /**
  * Convert GPS UTC date/time representation to a UNIX timestamp.
  */