4 * @author Toni Jussila <toni.jussila@fudeco.com>
5 * @copyright (c) 2010 Speed Freak team
6 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
13 * Default constructor of this class.
15 GPSData::GPSData(Maemo5Location *maemo5location)
17 qDebug() << "__GPSData";
18 location = maemo5location;
20 connect(location,SIGNAL(agnss()),this,SLOT(agnss()));
21 connect(location,SIGNAL(awcp()),this,SLOT(awcp()));
22 connect(location,SIGNAL(locationUpdated()),this,SLOT(locationUpdated()));
23 connect(location,SIGNAL(gps_connected()),this,SLOT(gpsConnected()));
24 connect(location,SIGNAL(gps_disconnected()),this,SLOT(gpsDisconnected()));
25 connect(location,SIGNAL(gps_error(int)),this,SLOT(gpsError()));
26 connect(location,SIGNAL(gpsd_running()),this,SLOT(gpsdRunning()));
27 connect(location,SIGNAL(gpsd_stopped()),this,SLOT(gpsdStopped()));
29 gpsDateTime = new QDateTime();
34 * Destructor of this class. Deletes all dynamic objects and sets them to NULL.
38 qDebug() << "__~GPSData";
46 * This function reset all variables.
48 void GPSData::resetAll()
67 longitudePrevious = 0;
70 sLatitudePrevious = "";
71 sLongitudePrevious = "";
74 recordingStatus = false;
80 *This slot function is called when GPS update location.
84 //satellitesInUse = location->getSatellitesInUse()); //Returns number of satellites in use.
85 //satellitesInView = location->getSatellitesInView(); //Returns number of satellites in view.
86 //signalStrength = location->getSignalStrength(); //Returns average signal strength of satellites which are in use.
87 //gpsOnline = location->getGpsOnline(); //Returns gsp online
88 //ept = location->getEpt(); //Returns time accuracy in seconds.
89 //eph = location->getEph(); //Returns horizontal position accuracy in cm.
90 //track = location->getTrack(); //Returns direction of motion in degrees(0-359).
91 //epd = location->getEpd(); //Returns track accuracy in degrees.
92 //climb = location->getClimb(); //Returns current rate of climb in m/s.
93 //epc = location->getEpc(); //Returns climb accuracy in m/s.
94 //time = location->getTime(); //Returns timestamp of the update in seconds.
95 //epv = location->getEpv(); //Returns altitude accuracy in meters.
96 //eps = location->getEps(); //Returns speed accuracy in km/h.
97 //distance = location->distance_between_two_points(double latitude_s, double longitude_s, double latitude_f, double longitude_f);
99 //If route recording true
100 if ( recordingStatus == true )
102 latitudePrevious = latitude;
103 longitudePrevious = longitude;
104 latitude = location->getLatitude(); //Returns latitude.
105 longitude = location->getLongitude(); //Returns longitude.
106 altitude = location->getAltitude(); //Returns fix altitude in meters.
107 speed = location->getSpeed(); //Returns current speed in km/h.
108 track = location->getTrack(); //Returns direction of motion in degrees(0-359).
110 QFile routeTempFile("/home/user/MyDocs/speedfreak/route/routetemp.xml");//Temp xml.
112 //If GPS find 4 or more satellite and signal stregth is 30 or more.
113 if (location->getSatellitesInUse() >= 4 && location->getSignalStrength() >= 30)
116 if (roundCounter == 0)
118 if (!routeTempFile.open(QIODevice::WriteOnly | QIODevice::Text))
120 writeRouteXml(&routeTempFile, 0);
121 routeTempFile.close();
125 //Points writing round.
128 sLatitudeNow.sprintf("%.4f", latitude); //Latitude now to string
129 sLongitudeNow.sprintf("%.4f", longitude);//Longitude now to string
130 sLatitudePrevious.sprintf("%.4f", latitudePrevious); //Previous latitude to string
131 sLongitudePrevious.sprintf("%.4f", longitudePrevious); //Previous longitude to string
133 //If latitude or longitude change
134 if ( sLatitudeNow != sLatitudePrevious || sLongitudeNow != sLongitudePrevious )
136 if (!routeTempFile.open(QIODevice::Append | QIODevice::Text))
139 distance += location->distance_between_two_points(latitudePrevious, longitudePrevious, latitude, longitude);
140 writeRouteXml(&routeTempFile, 0);
142 routeTempFile.close();
150 * This slot function is called when gprs update location.
157 * This slot function is called when .
159 void GPSData::locationUpdated()
164 * This slot function is called when .
166 void GPSData::gpsConnected()
171 * This slot function is called when .
173 void GPSData::gpsDisconnected()
178 * This slot function is called when .
180 void GPSData::gpsError()
185 * This slot function is called when .
187 void GPSData::gpsdRunning()
192 * This slot function is called when .
194 void GPSData::gpsdStopped()
199 * This function start route recording.
201 * @param QString time recording start time.
203 void GPSData::startRouteRecording()
205 if (recordingStatus == false)
207 //Get start time and start recording.
208 gpsDateTime->setTime_t(location->getTime());
209 routeStartTime = gpsDateTime->toString("dd.MM.yyyy hh:mm:ss");
210 recordingStatus = true;
216 * This function stop route recording.
218 * @param QString time recording stop time.
220 void GPSData::stopRouteRecording()
222 if (recordingStatus == true)
224 //Get stop time and stop recording.
225 gpsDateTime->setTime_t(location->getTime());
226 routeStopTime = gpsDateTime->toString("dd.MM.yyyy hh:mm:ss");
227 recordingStatus = false;
230 QFile file("/home/user/MyDocs/speedfreak/route/route.xml");
231 if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
233 writeRouteXml(&file, 1);
240 * This function write route to .xml file.
242 * @param QIODevice *device
245 void GPSData::writeRouteXml(QIODevice *device, int round)
247 xmlwriter.setDevice(device);
249 //Write temp xml (/home/user/MyDocs/speedfreak/route/routetemp.xml).
252 xmlwriter.writeStartElement("Point");
253 xmlwriter.writeAttribute("Latitude", QString::number(latitude));
254 xmlwriter.writeAttribute("Longitude", QString::number(longitude));
255 xmlwriter.writeAttribute("Altitude", QString::number(altitude));
256 xmlwriter.writeAttribute("Speed", QString::number(speed));
257 xmlwriter.writeEndElement();//Point
260 //Write final xml (/home/user/MyDocs/speedfreak/route/route.xml).
261 else if ( round == 1 )
263 xmlwriter.writeStartDocument();
264 xmlwriter.writeStartElement("Route");
265 xmlwriter.writeAttribute("Start-time", routeStartTime);
266 xmlwriter.writeAttribute("Stop-time", routeStopTime);
267 xmlwriter.writeAttribute("Points", QString::number(roundCounter));
269 //Open temp xml and read points
270 QFile tempFile("/home/user/MyDocs/speedfreak/route/routetemp.xml");
271 if (!tempFile.open(QIODevice::ReadOnly | QIODevice::Text))
273 QTextStream readRoute(&tempFile);
274 QTextStream writeRoute(device);
275 writeRoute << readRoute.readLine();
276 tempFile.close();//Close temp xml
278 xmlwriter.writeEndElement();//Route
279 xmlwriter.writeEndDocument();
284 * This function returns distance traveled since recording started.
286 * @return double distance
288 double GPSData::getDistanceTraveled()
294 * This function returns direction of motion in degrees(0-359).
296 * @return double track
298 double GPSData::getDirection()