82 lines
2.2 KiB
Python
82 lines
2.2 KiB
Python
|
#!/usr/bin/python
|
||
|
'''
|
||
|
authors: edistar
|
||
|
license: gpl v2 or later
|
||
|
version 0.2
|
||
|
'''
|
||
|
|
||
|
from __future__ import with_statement
|
||
|
import time
|
||
|
import datetime
|
||
|
import ecore
|
||
|
import e_dbus
|
||
|
import os
|
||
|
from dbus import SystemBus, Interface
|
||
|
from optparse import OptionParser
|
||
|
|
||
|
class Main:
|
||
|
|
||
|
def __init__(self):
|
||
|
|
||
|
self.GetPath()
|
||
|
|
||
|
# get FSO Usage proxy/iface up to request GPS
|
||
|
self.systembus=systembus = SystemBus(mainloop=e_dbus.DBusEcoreMainLoop())
|
||
|
self.usage_proxy = self.systembus.get_object('org.freesmartphone.ousaged', '/org/freesmartphone/Usage')
|
||
|
self.usage_iface = Interface(self.usage_proxy, 'org.freesmartphone.Usage')
|
||
|
|
||
|
# Request GPS from FSO (which then powers on the GPS chip)
|
||
|
self.usage_iface.RequestResource("GPS")
|
||
|
|
||
|
#get gypsy proxy/iface up
|
||
|
self.ogpsd_proxy = self.systembus.get_object('org.freesmartphone.ogpsd', '/org/freedesktop/Gypsy')
|
||
|
self.course_iface = Interface(self.ogpsd_proxy, 'org.freedesktop.Gypsy.Course')
|
||
|
self.pos_iface = Interface(self.ogpsd_proxy, 'org.freedesktop.Gypsy.Position')
|
||
|
|
||
|
# call self.UpdatePosition() when a dbus signal "PositionChanged" comes along the system bus
|
||
|
self.pos_iface.connect_to_signal("PositionChanged", self.UpdatePosition)
|
||
|
|
||
|
|
||
|
def UpdatePosition(self, fields, timestamp, lat, lon, alt):
|
||
|
|
||
|
# get UTC time from gypsy timestamp
|
||
|
string = str(datetime.datetime.utcfromtimestamp(timestamp))
|
||
|
date, time = string.split()
|
||
|
utctime = "%sT%sZ" % (date, time)
|
||
|
|
||
|
# write data to file
|
||
|
s ="%s,%s,%s,%s\n" % (lat, lon, alt, utctime)
|
||
|
with open(self.trackfile,'a') as file:
|
||
|
file.write(s)
|
||
|
|
||
|
#debugging output:
|
||
|
print s
|
||
|
|
||
|
|
||
|
def Parser(self):
|
||
|
|
||
|
# parse command line options
|
||
|
self.parser=OptionParser("usage foo bar")
|
||
|
self.parser.add_option("-f", "--file", "-o", "-l", action = "store", dest = "trackfile")
|
||
|
(self.options, self.args) = self.parser.parse_args()
|
||
|
|
||
|
|
||
|
def GetPath(self):
|
||
|
trackpath = '.'
|
||
|
suffix = 'track'
|
||
|
self.Parser()
|
||
|
|
||
|
# raises an Exception if the path doesn't exist! :)
|
||
|
path, rubbish, suffix = self.trackfile.options.rpartition("/")
|
||
|
|
||
|
if not os.path.exists(path):
|
||
|
raise Exception("path does not exist!")
|
||
|
|
||
|
# sets trackfile path and filename
|
||
|
self.trackfile = "%s/%s-%s" % (trackpath, time.strftime(), suffix)
|
||
|
|
||
|
|
||
|
|
||
|
test=Main()
|
||
|
ecore.main_loop_begin()
|