Explorar o código

update: libgnss.casic_aid兼容基站定位返回的字符串坐标值

Wendal Chen %!s(int64=2) %!d(string=hai) anos
pai
achega
d40cc6ad4f
Modificáronse 2 ficheiros con 26 adicións e 6 borrados
  1. 5 0
      components/minmea/casicAgnssAidIni.c
  2. 21 6
      components/minmea/luat_lib_libgnss.c

+ 5 - 0
components/minmea/casicAgnssAidIni.c

@@ -101,6 +101,11 @@ void casicAgnssAidIni(DATETIME_STR *dateTime, POS_LLA_STR *lla, char aidIniMsg[6
 
 	gregorian2SvTime(dateTime, &aidIni);
 
+	LLOGD("date time %d %d %d %d %d %d", dateTime->year, dateTime->month, dateTime->day, dateTime->hour, dateTime->minute, dateTime->second);
+	LLOGD("lat %7f", lla->lat);
+	LLOGD("lng %7f", lla->lon);
+	LLOGD("lls %s, time %s", lla->valid ? "ok" : "no", dateTime->valid ? "ok" : "no");
+
 	aidIni.df = 0;
 	aidIni.xOrLat = lla->lat;
 	aidIni.yOrLon = lla->lon;

+ 21 - 6
components/minmea/luat_lib_libgnss.c

@@ -977,9 +977,11 @@ local lla = {
 local aid = libgnss.casic_aid(dt, lla)
 */
 #include "luat_casic_gnss.h"
+double strtod(const char *s,char **ptr);
 static int l_libgnss_casic_aid(lua_State* L) {
     DATETIME_STR dt = {0};
     POS_LLA_STR lla = {0};
+    const char* data = "";
 
     if (lua_istable(L, 1)) {
         if (LUA_TNUMBER == lua_getfield(L, 1, "day")) {
@@ -1016,19 +1018,32 @@ static int l_libgnss_casic_aid(lua_State* L) {
         lua_pop(L, 1);
     }
     if (lua_istable(L, 2)) {
-        if (LUA_TNUMBER == lua_getfield(L, 2, "lat")) {
+        lua_getfield(L, 2, "lat");
+        if (LUA_TNUMBER == lua_type(L, -1)) {
             lla.lat = lua_tonumber(L, -1);
-            lla.valid = 1;
-        };
+        }
+        else if (LUA_TSTRING == lua_type(L, -1)) {
+            data = luaL_checkstring(L, -1);
+            lla.lat = strtod(data, NULL);
+        }
         lua_pop(L, 1);
-        if (LUA_TNUMBER == lua_getfield(L, 2, "lng")) {
+
+        lua_getfield(L, 2, "lng");
+        if (LUA_TNUMBER == lua_type(L, -1)) {
             lla.lon = lua_tonumber(L, -1);
-            lla.valid = 1;
-        };
+        }
+        else if (LUA_TSTRING == lua_type(L, -1)) {
+            data = luaL_checkstring(L, -1);
+            lla.lon = strtod(data, NULL);
+        }
         lua_pop(L, 1);
         if (LUA_TNUMBER == lua_getfield(L, 2, "alt")) {
             lla.alt = lua_tonumber(L, -1);
         };
+
+        if (lla.lat > 0.001 || lla.lat < -0.01)
+            if (lla.lon > 0.001 || lla.lon < -0.01)
+                lla.valid = 1;
     }
     char tmp[66] = {0};
     casicAgnssAidIni(&dt, &lla, tmp);