static int vehicle_demo_position_attr_get(struct vehicle_priv *priv, enum attr_type type, struct attr *attr) { char ns='N',ew='E',*timep,*rmc,*gga; int hr,min,sec,year,mon,day; double lat,lng; switch (type) { case attr_position_speed: attr->u.numd = &priv->speed; break; case attr_position_direction: attr->u.numd = &priv->direction; break; case attr_position_coord_geo: attr->u.coord_geo = &priv->geo; break; case attr_position_time_iso8601: g_free(priv->timep); priv->timep=current_to_iso8601(); attr->u.str=priv->timep; break; case attr_position_fix_type: attr->u.num = 2; break; case attr_position_sats_used: attr->u.num = 9; break; case attr_position_nmea: lat=priv->geo.lat; if (lat < 0) { lat=-lat; ns='S'; } lng=priv->geo.lng; if (lng < 0) { lng=-lng; ew='W'; } timep=current_to_iso8601(); sscanf(timep,"%d-%d-%dT%d:%d:%d",&year,&mon,&day,&hr,&min,&sec); g_free(timep); gga=g_strdup_printf("$GPGGA,%02d%02d%02d,%02.0f%07.4f,%c,%03.0f%07.4f,%c,1,08,2.5,0,M,,,,0000* \n",hr,min,sec,floor(lat),(lat-floor(lat))*60.0,ns,floor(lng),(lng-floor(lng))*60,ew); nmea_chksum(gga); rmc=g_strdup_printf("$GPRMC,%02d%02d%02d,A,%02.0f%07.4f,%c,%03.0f%07.4f,%c,%3.1f,%3.1f,%02d%02d%02d,,* \n",hr,min,sec,floor(lat),(lat-floor(lat))*60.0,ns,floor(lng),(lng-floor(lng))*60,ew,priv->speed/1.852,(double)priv->direction,day,mon,year%100); nmea_chksum(rmc); g_free(priv->nmea); priv->nmea=g_strdup_printf("%s%s",gga,rmc); g_free(gga); g_free(rmc); attr->u.str=priv->nmea; break; default: return 0; } attr->type = type; return 1; }
static int vehicle_demo_position_attr_get(struct vehicle_priv *priv, enum attr_type type, struct attr *attr) { switch (type) { case attr_position_speed: attr->u.numd = &priv->speed; break; case attr_position_direction: attr->u.numd = &priv->direction; break; case attr_position_coord_geo: attr->u.coord_geo = &priv->geo; break; case attr_position_time_iso8601: g_free(priv->timep); priv->timep=current_to_iso8601(); attr->u.str=priv->timep; break; default: return 0; } attr->type = type; return 1; }