r252 - in trunk/software/pyneod: . pygsm

smartphones-commits at lists.linuxtogo.org smartphones-commits at lists.linuxtogo.org
Fri Apr 25 12:07:59 CEST 2008


Author: emdete
Date: 2008-04-25 12:07:59 +0200 (Fri, 25 Apr 2008)
New Revision: 252

Added:
   trunk/software/pyneod/pyosmd.py
Modified:
   trunk/software/pyneod/Makefile
   trunk/software/pyneod/base.py
   trunk/software/pyneod/freesmartphone.py
   trunk/software/pyneod/pygsm/attention.py
   trunk/software/pyneod/pygsm/ficmodem.py
   trunk/software/pyneod/pygsm/genericmodem.py
   trunk/software/pyneod/pygsmd.py
   trunk/software/pyneod/pyneod.ini
   trunk/software/pyneod/pyneod.py
   trunk/software/pyneod/pypppd.py
Log:
fixed timeout issue
sms receive/read fixed


Modified: trunk/software/pyneod/Makefile
===================================================================
--- trunk/software/pyneod/Makefile	2008-04-25 09:44:07 UTC (rev 251)
+++ trunk/software/pyneod/Makefile	2008-04-25 10:07:59 UTC (rev 252)
@@ -1,10 +1,11 @@
 #!/usr/bin/env make -f
 .PHONY: run
 run:
-	#python2.5 -u ./test.py org.bluez /org/bluez
-	./pyllbd.py
+	python2.5 -u ./test.py org.bluez /org/bluez
+	#daemon.import_to_gdb('/media/card/zad/VF-D2_cell_area_dssd.dat', '/media/card/zad/location.local.db')
+	#daemon.import_to_myqsl('/media/card/zad/VF-D2_cell_area_dssd.dat', 'mysql1.sit.vfnet.de', 'agpssit', 'agpssit', 'agpssit', port=3322, )
 
 .PHONY: dbg
 dbg:
-	rsync --verbose --archive . root at fic-gta01:/usr/share/pyneod/.
+	rsync --verbose --archive . root at fic-gta02:/usr/share/pyneod/.
 

Modified: trunk/software/pyneod/base.py
===================================================================
--- trunk/software/pyneod/base.py	2008-04-25 09:44:07 UTC (rev 251)
+++ trunk/software/pyneod/base.py	2008-04-25 10:07:59 UTC (rev 252)
@@ -7,7 +7,7 @@
 
 from ConfigParser import SafeConfigParser
 from os.path import exists
-from traceback import format_exc
+from traceback import format_exc, extract_stack
 
 class CfgPrsr(SafeConfigParser):
 	def __init__(self):
@@ -24,10 +24,10 @@
 	from syslog import syslog, LOG_ERR, LOG_WARNING, LOG_INFO, LOG_DEBUG
 	def LOG(level, *values):
 		if level <= LOG_ERR and log_debug:
-			e = format_exc()
-			if e:
-				for l in e.split('\n'):
-					syslog(level, ('%s %s'% (values[0], l, )).__repr__())
+			#e = format_exc()
+			#if e:
+				for l in extract_stack(): #e.split('\n'):
+					syslog(level, ('%s %s:%d'% (values[0], l[0], l[1], )).__repr__())
 		if level <= LOG_ERR \
 		or level <= LOG_INFO and log_info \
 		or level <= LOG_DEBUG and log_debug:

Modified: trunk/software/pyneod/freesmartphone.py
===================================================================
--- trunk/software/pyneod/freesmartphone.py	2008-04-25 09:44:07 UTC (rev 251)
+++ trunk/software/pyneod/freesmartphone.py	2008-04-25 10:07:59 UTC (rev 252)
@@ -12,3 +12,4 @@
 DIN_LOCATION = 'org.mobile.Location'
 DIN_NETWORK = 'org.mobile.Network'
 DIN_POWER = 'org.mobile.Power'
+DIN_MAP = 'org.mobile.Map'

Modified: trunk/software/pyneod/pygsm/attention.py
===================================================================
--- trunk/software/pyneod/pygsm/attention.py	2008-04-25 09:44:07 UTC (rev 251)
+++ trunk/software/pyneod/pygsm/attention.py	2008-04-25 10:07:59 UTC (rev 252)
@@ -75,11 +75,12 @@
 		LOG(LOG_DEBUG, __name__, '__init__')
 		self.bus = bus
 		self.rr, self.um, = None, None,
+		self.debuglog = open('/media/card/gsm.log', 'w')
 
 	def open(self):
-		LOG(LOG_DEBUG, __name__, 'activate')
+		LOG(LOG_DEBUG, __name__, 'open')
 		assert self.rr is None and self.um is None, 'already open'
-		muxer = self.bus.get_object('org.pyneo', '/org/pyneo/Muxer')
+		muxer = self.bus.get_object(config.get('gsm', 'bus'), config.get('gsm', 'obj'))
 		try:
 			muxer = Interface(muxer, 'org.freesmartphone.GSM.MUX')
 
@@ -94,11 +95,11 @@
 			if not self.rr.port: raise Exception('empty response from muxer')
 			self.rr.open()
 			self.rr.request_parser = StandardParser()
-			self.rr.request_tick = int(time() * 1000)
 			self.rr.request_timeout = 200
 			self.rr.request = '\r\nAT\r\n'
 			self.rr.write(self.rr.request) # channel wakeup
 			self.rr.request_stack = []
+			self.rr.tow = timeout_add(200, self.__timeout_rr)
 			self.rr.iow = io_add_watch(self.rr, IO_IN, self.__read_rr)
 			LOG(LOG_DEBUG, __name__, '__init__', 'opened', self.rr.port)
 
@@ -113,15 +114,13 @@
 			if not self.um.port: raise Exception('empty response from muxer')
 			self.um.open()
 			self.um.request_stack = []
-			self.um.request_tick = int(time() * 1000)
 			self.um.request = '\r\nAT\r\n'
 			self.um.write(self.um.request) # channel wakeup
+			self.um.tow = timeout_add(200, self.__timeout_um)
 			self.um.iow = io_add_watch(self.um, IO_IN, self.__read_um)
 			LOG(LOG_DEBUG, __name__, '__init__', 'opened', self.um.port)
 
 			muxer.connect_to_signal('deactivate', self.__mux_deactivate, dbus_interface='org.mobile.mux.RemoteInterface')
-			self.poll_interval = int(config.get('gsm', 'poll_interval')) * 1000
-			self.tow = timeout_add(self.poll_interval, self.__watchdog)
 		except Exception, e:
 			self.close()
 			raise e
@@ -130,57 +129,63 @@
 
 	def close(self, hard=False):
 		LOG(LOG_DEBUG, __name__, 'close')
-		for serial in (self.rr, self.um, ):
-			if serial:
-				if serial.iow:
-					source_remove(serial.iow)
-				if serial.isOpen():
-					serial.close()
+		for source in (self.rr, self.um, ):
+			if source:
+				if source.iow:
+					if source.tow:
+						source_remove(source.tow)
+					source_remove(source.iow)
+				if source.isOpen():
+					source.close()
 		self.rr, self.um, = None, None,
 
 	def __attention_write(self, source, command, ):
 		LOG(LOG_DEBUG, __name__, '__attention_write', command)
 		try:
-			source.request_tick = int(time() * 1000)
 			source.request = command
+			if self.debuglog: print >> self.debuglog, time(), source.port, 'write', 'AT%s'%command
 			command = 'AT%s\r\n'% command
 			source.write(command)
 		except Exception, e:
 			LOG(LOG_ERR, __name__, 'error', e)
 
-	def request(self, command, callback=None, timeout=200, parser=None):
+	def request(self, command, callback=None, timeout=500, parser=None):
 		if parser is None:
 			parser = StandardParser(callback)
 		if self.rr.request_parser:
 			self.rr.request_stack.append((command, parser, timeout, ))
 		else:
 			self.rr.request_parser = parser
+			self.rr.request_timeout = timeout
 			self.__attention_write(self.rr, command)
+			if self.rr.request_timeout:
+				self.rr.tow = timeout_add(self.rr.request_timeout, self.__timeout_rr)
 
-	def activate(self, command, timeout=200): # TODO timeout not implemented now
-		if self.um.request_tick:
+	def activate(self, command, timeout=500): # TODO timeout not implemented now
+		if self.um.request:
 			self.um.request_stack.append(command)
 		else:
 			self.__attention_write(self.um, command)
+			self.um.tow = timeout_add(500, self.__timeout_um)
 
 	finals = ('+CME ERROR', '+CMS ERROR', 'BUSY', 'CONNECT', 'ERROR', 'NO ANSWER', 'NO CARRIER', 'NO DIALTONE', 'OK', )
 	def __read_rr(self, source, condition):
 		assert self.rr is source
 		line = source.readline().strip()
+		if self.debuglog: print >> self.debuglog, time(), source.port, 'read', line
 		try:
 			LOG(LOG_DEBUG, __name__, '__read_rr', 'read line', line)
 			if line.startswith('+CRING'): return True # hm, can't switch that unsol. spam off here...
 			if line: # ignore empty lines
 				if source.request_parser:
 					if source.request_parser.feed(line):
-						if source.request_stack:
-							command, source.request_parser, source.request_timeout = source.request_stack.pop(0)
-							self.__attention_write(source, command)
-						else:
-							source.request_parser = None
-							source.request_timeout = None
-							source.request_tick = None
-							source.request = None
+						if source.tow:
+							source_remove(source.tow)
+							source.tow = None
+						source.request_parser = None
+						source.request_timeout = None
+						source.request = None
+						self.__next_rr()
 				else:
 					LOG(LOG_WARNING, __name__, '__read_rr', 'no parser for line', line)
 		except Exception, e:
@@ -190,6 +195,7 @@
 	def __read_um(self, source, condition):
 		assert self.um is source
 		line = source.readline().strip()
+		if self.debuglog: print >> self.debuglog, time(), source.port, 'read', line
 		try:
 			LOG(LOG_DEBUG, __name__, '__read_um', line)
 			if line: # ignore empty lines
@@ -202,45 +208,49 @@
 				if name in MuxedLines.finals:
 					if name != 'OK':
 						LOG(LOG_ERR, __name__, 'error', source.request, name, values)
-					if source.request_stack:
-						self.__attention_write(source, source.request_stack.pop(0))
-					else:
-						source.request_tick = None
-						source.request = None
+					if source.tow:
+						source_remove(source.tow)
+						source.tow = None
+					source.request = None
+					self.__next_um()
 				else:
 					self.unsolicicated_message(None, name, *values)
 		except Exception, e:
 			LOG(LOG_ERR, __name__, '__read_um', e, line)
 		return True
 
-	def __watchdog(self):
-		LOG(LOG_DEBUG, __name__, '__watchdog')
-		try:
-			now = int(time() * 1000)
-			if self.rr.request_parser:
-				if now - self.rr.request_tick > self.rr.request_timeout:
-					LOG(LOG_DEBUG, __name__, '__watchdog', 'request timed out', self.rr.request)
-					self.rr.request_parser.error('timeout', self.rr.request)
-					if self.rr.request_stack:
-						command, self.rr.request_parser, self.rr.request_timeout = self.rr.request_stack.pop(0)
-						self.__attention_write(self.rr, command)
-					else:
-						self.rr.request_parser = None
-						self.rr.request_timeout = None
-						self.rr.request_tick = None
-						self.rr.request = None
-			if self.um.request_tick:
-				if now - self.um.request_tick > self.poll_interval:
-					LOG(LOG_DEBUG, __name__, '__watchdog', 'activate timed out', self.um.request)
-					LOG(LOG_ERR, __name__, 'error', 'timeout', self.um.request)
-					self.um.request_tick = None
-					self.um.request = None
-					if self.um.request_stack:
-						self.__attention_write(self.um, self.um.request_stack.pop(0))
-		except Exception, e:
-			LOG(LOG_ERR, '__watchdog', e)
-		return True
+	def __next_rr(self):
+		if self.rr.request_stack:
+			command, self.rr.request_parser, self.rr.request_timeout = self.rr.request_stack.pop(0)
+			self.__attention_write(self.rr, command)
+			if self.rr.request_timeout:
+				self.rr.tow = timeout_add(self.rr.request_timeout, self.__timeout_rr)
+		return False
 
+	def __timeout_rr(self):
+		LOG(LOG_ERR, __name__, '__timeout_rr', 'request timed out', self.rr.request, self.rr.request_timeout, )
+		try: self.rr.request_parser.error('timeout', self.rr.request)
+		except: pass
+		self.rr.request_parser = None
+		self.rr.request_timeout = None
+		self.rr.request = None
+		self.rr.write('\r\n')
+		timeout_add(500, self.__next_rr)
+		return False
+
+	def __next_um(self):
+		if self.um.request_stack:
+			self.__attention_write(self.um, self.um.request_stack.pop(0))
+			self.um.tow = timeout_add(500, self.__timeout_um)
+		return False
+
+	def __timeout_um(self):
+		LOG(LOG_ERR, __name__, '__timeout_um', 'activate timed out', self.um.request, self.rr.request_timeout, )
+		self.um.request = None
+		self.um.write('\r\n')
+		timeout_add(500, self.__next_um)
+		return False
+
 	def __mux_deactivate(self):
 		LOG(LOG_DEBUG, __name__, '__mux_deactivate')
 		self.close()

Modified: trunk/software/pyneod/pygsm/ficmodem.py
===================================================================
--- trunk/software/pyneod/pygsm/ficmodem.py	2008-04-25 09:44:07 UTC (rev 251)
+++ trunk/software/pyneod/pygsm/ficmodem.py	2008-04-25 10:07:59 UTC (rev 252)
@@ -28,6 +28,9 @@
 		self.activate('%CUNS=0') # unsolicited commands at any time
 		self.activate('%CPI=3') # call progress indication
 
+	def debuginfo(self):
+		self.request('%DAR') # debug info
+
 	def network_inquire(self):
 		GenericModem.network_inquire(self)
 		#self.activate('%EM=2,1', self.responseEM_2_) # Serving Cell Information

Modified: trunk/software/pyneod/pygsm/genericmodem.py
===================================================================
--- trunk/software/pyneod/pygsm/genericmodem.py	2008-04-25 09:44:07 UTC (rev 251)
+++ trunk/software/pyneod/pygsm/genericmodem.py	2008-04-25 10:07:59 UTC (rev 252)
@@ -119,7 +119,7 @@
 		self.request('E0V1') # echo off, verbose result on
 		self.request('+CMEE=2') # report mobile equipment error
 		self.request('+CRC=1') # cellular result codes, enable extended format
-		self.request('+CFUN=1;+CFUN?', self.responseCFUN, 5000) # phone function full
+		self.request('+CFUN=1;+CFUN?', self.responseCFUN, timeout=5000) # phone function full
 		self.request('+CPMS="SM","SM","SM"') # preferred message storage: sim memory for mo,mt,bm
 		self.request('+CMGF=1') # meesage format: pdu mode sms disable, text
 		self.request('+CSCS="8859-1"') # caharacter set conversion
@@ -313,8 +313,8 @@
 		self.request('+CNUM', self.responseCNUM) # subscriber number
 
 	def sim_send_pin(self, pin):
-		self.request('+CFUN=1;+CFUN?', self.responseCFUN, 10000) # phone function full
-		self.request('+CPIN="%s";+CPIN?'% pin, self.responseCPIN, 10000) # pin
+		self.request('+CFUN=1;+CFUN?', self.responseCFUN, timeout=20000) # phone function full
+		self.request('+CPIN="%s";+CPIN?'% pin, self.responseCPIN, timeout=20000) # pin
 		self.sim_inquire()
 		self.network_inquire()
 
@@ -324,14 +324,14 @@
 		self.request('+CREG?', self.responseCREG) # network registration
 		self.request('+CPAS', self.responseCPAS) # request phone activity status
 		# TODO where to put this:
-		self.activate('+CNMI=2,1,2,1,0', timeout=10000) # new message indications to te
+		self.activate('+CNMI=2,1,2,1,0', timeout=5000) # new message indications to te
 
 	def network_register(self, no=0):
-		self.request('+CFUN=1;+CFUN?', self.responseCFUN, 10000) # phone function full
-		self.request('+COPS=%d;+COPS?'% no, self.responseCOPS, 20000) # operator selection
+		self.request('+CFUN=1;+CFUN?', self.responseCFUN, timeout=20000) # phone function full
+		self.request('+COPS=%d;+COPS?'% no, self.responseCOPS, timeout=20000) # operator selection
 		self.request('+CPAS', self.responseCPAS) # request phone activity status
 		self.request('+WS46?', self.responseWS46) # wireless network
-		self.activate('+CNMI=2,1,2,1,0', timeout=10000) # new message indications to te
+		self.activate('+CNMI=2,1,2,1,0', timeout=5000) # new message indications to te
 
 	def call_accept(self):
 		self.request('A', parser=StandardParser())
@@ -343,37 +343,37 @@
 		self.request('+CPAS', self.responseCPAS) # request phone activity status
 
 	def call_initiate(self, number):
-		self.request('D%s;'% number, self.responseD, 20000)
+		self.request('D%s;'% number, self.responseD, 0)
 
 	def messages_list_all(self, response, error):
-		self.request('+CMGL="ALL"', 60000, parser=CMGLParser(response, error))
+		self.request('+CMGL="ALL"', timeout=5000, parser=CMGLParser(response, error))
 
 	def messages_get(self, idx, response, error):
-		self.request('+CMGR=%d'% idx, 10000, parser=CMGRParser(response, error))
+		self.request('+CMGR=%d'% idx, timeout=5000, parser=CMGRParser(response, error))
 
 	def messages_delete(self, idx, response, error):
-		self.request('+CMGD=%d,0'% idx, 10000, parser=StandardParser(response, error))
+		self.request('+CMGD=%d,0'% idx, timeout=5000, parser=StandardParser(response, error))
 
 	def messages_delete_all(self, response, error):
-		self.request('+CMGD=0,4', 10000, parser=StandardParser(response, error))
+		self.request('+CMGD=0,4', timeout=5000, parser=StandardParser(response, error))
 
 	def messages_store(self, number, text, response, error):
-		self.request('+CMGW="%s"\n\r%s\n\r\x1a'% (number, text, ), 10000, parser=StandardParser(response, error))
+		self.request('+CMGW="%s"\n\r%s\n\r\x1a'% (number, text, ), timeout=5000, parser=StandardParser(response, error))
 
 	def messages_send(self, number, text, response, error):
-		self.request('+CMGS="%s"\n\r%s\n\r\x1a'% (number, text, ), 20000, parser=StandardParser(response, error))
+		self.request('+CMGS="%s"\n\r%s\n\r\x1a'% (number, text, ), timeout=20000, parser=StandardParser(response, error))
 
 	def phonebook_list_all(self, response, error):
-		self.request('+CPBF', 10000, parser=StandardParser(response, error)) # Find phonebook entries 
+		self.request('+CPBF', timeout=5000, parser=StandardParser(response, error)) # Find phonebook entries 
 
 	def phonebook_get(self, response, error):
-		self.request('+CPBR', 10000, parser=StandardParser(response, error)) # Read phonebook entries 
+		self.request('+CPBR', timeout=5000, parser=StandardParser(response, error)) # Read phonebook entries 
 
 	def phonebook_delete(self, idx, response, error):
-		self.request('+CPBR', 10000, parser=StandardParser(response, error)) # Read phonebook entries 
+		self.request('+CPBR', timeout=5000, parser=StandardParser(response, error)) # Read phonebook entries 
 
 	def phone_store(self, response, error):
-		self.request('+CPBW', 10000, parser=StandardParser(response, error)) # Write phonebook entry 
+		self.request('+CPBW', timeout=5000, parser=StandardParser(response, error)) # Write phonebook entry 
 
 #self.request('+CPBS', parser=StandardParser(response, error)) # Select phonebook memory storage 
 #from datetime import datetime

Modified: trunk/software/pyneod/pygsmd.py
===================================================================
--- trunk/software/pyneod/pygsmd.py	2008-04-25 09:44:07 UTC (rev 251)
+++ trunk/software/pyneod/pygsmd.py	2008-04-25 10:07:59 UTC (rev 252)
@@ -16,6 +16,8 @@
 $DB org.mobile.Phone.NetworkRegister
 $DB org.mobile.Phone.NetworkGetStatus
 $DB org.mobile.Phone.CallInitiate string:$PN string: int32:0
+$DB org.mobile.Phone.CallAccept int32:0
+$DB org.mobile.Phone.CallRelease string: int32:0
 $DB org.mobile.Phone.MessagesListAll
 $DB org.mobile.Phone.MessagesGet int32:0
 $DB org.mobile.Phone.MessagesDelete int32:6
@@ -114,10 +116,10 @@
 		pass
 	@method(DIN_PHONE, 'i', '')
 	def CallAccept(self, id):
-		return self.call_accept()
+		self.call_accept()
 	@method(DIN_PHONE, 'si', '')
 	def CallRelease(self, message, id):
-		return call_release()
+		self.call_release()
 	@method(DIN_PHONE, 'ssi', '')
 	def CallInitiate(self, number, type, id):
 		self.call_initiate(number)

Modified: trunk/software/pyneod/pyneod.ini
===================================================================
--- trunk/software/pyneod/pyneod.ini	2008-04-25 09:44:07 UTC (rev 251)
+++ trunk/software/pyneod/pyneod.ini	2008-04-25 10:07:59 UTC (rev 252)
@@ -3,20 +3,23 @@
 info = True
 debug = True
 
+[gsm]
+bus = org.pyneo
+obj = /org/pyneo/Muxer
+baudrate = 115200
+
 [ppp]
+bus = org.pyneo
+obj = /org/pyneo/Muxer
 apn = web.vodafone.de
 
-[gsm]
-poll_interval = 7
-baudrate = 115200
-
 [pwr]
 poll_interval = 7
 
 [gps]
-udp_port = 9000
-serial_device =
-#/dev/ttySAC1
+udp_port = 
+#9000
+serial_device = /dev/ttySAC1
 
 [ggl]
 database = /media/card/zad/location.google.db
@@ -27,3 +30,9 @@
 
 [llb]
 database = /media/card/zad/location.local.db
+
+[hon]
+cachedir = /media/card/zad/osm
+
+[osm]
+cachedir = /media/card/zad/osm

Modified: trunk/software/pyneod/pyneod.py
===================================================================
--- trunk/software/pyneod/pyneod.py	2008-04-25 09:44:07 UTC (rev 251)
+++ trunk/software/pyneod/pyneod.py	2008-04-25 10:07:59 UTC (rev 252)
@@ -28,6 +28,11 @@
 		from pypwrd import Power
 		daemons.append(Power(bus))
 	except Exception, e: LOG(LOG_ERR, __name__, 'pypwrd', e)
+#if has_section('hon'):
+#	try:
+#		from pyhond import HotOrNot
+#		daemons.append(HotOrNot(bus))
+#	except Exception, e: LOG(LOG_ERR, __name__, 'pyhond', e)
 if has_section('gsm'):
 	try:
 		from pygsmd import GsmPhone
@@ -53,6 +58,11 @@
 		from pyllbd import LocalLocation
 		daemons.append(LocalLocation(bus))
 	except Exception, e: LOG(LOG_ERR, __name__, 'pyllbd', e)
+if has_section('osm'):
+	try:
+		from pyosmd import OpenStreetMap
+		daemons.append(OpenStreetMap(bus))
+	except Exception, e: LOG(LOG_ERR, __name__, 'pyosmd', e)
 if has_section('ppp'):
 	try:
 		from pypppd import Gprs

Added: trunk/software/pyneod/pyosmd.py
===================================================================
--- trunk/software/pyneod/pyosmd.py	                        (rev 0)
+++ trunk/software/pyneod/pyosmd.py	2008-04-25 10:07:59 UTC (rev 252)
@@ -0,0 +1,74 @@
+#!/usr/bin/env python2.5
+# -*- coding: utf-8 -*-
+
+# copyright: m. dietrich
+# license: gpl
+__revision = '$Rev$'
+
+from os import unlink
+from thread import start_new_thread
+from Queue import Queue
+from struct import pack, unpack, calcsize
+from gdbm import open as db_open
+from base import log_info, log_debug, config, LOG_ERR, LOG_WARNING, LOG_INFO, LOG_DEBUG, LOG, dedbusmap
+from freesmartphone import *
+
+'''
+DB="dbus-send --system --print-reply --type=method_call --dest=org.mobile /org/mobile/OpenStreetMap"
+$DB org.mobile.Map.RequestMap int32:10 int32:529 int32:338
+'''
+
+class OpenStreetMap(NotifyObject):
+	def __init__(self, bus):
+		LOG(LOG_DEBUG, __name__, '__init__')
+		NotifyObject.__init__(self,
+			object_path='/org/mobile/OpenStreetMap',
+			bus_name=BusName(DBUS_NAME, bus),
+			)
+		self.queue = Queue(100)
+		self.cachedir = config.get('osm', 'cachedir')
+		start_new_thread(self.waiter, ())
+
+	@method(DIN_MAP, 'iii', '')
+	def RequestMap(self, x, y, zoom):
+		LOG(LOG_DEBUG, __name__, 'RequestMap', x, y, zoom)
+		self.queue.put((x, y, zoom, ))
+
+	@notify(DIN_MAP, 'a{sv}')
+	def NewFile(self, content):
+		LOG(LOG_DEBUG, __name__, 'Position', content)
+
+	def waiter(self):
+		while True:
+			x, y, zoom = self.queue.pop()
+			self.download(x, y, zoom)
+
+	def download(self, x, y, zoom):
+		filename = "%d/%d/%d.png"%(zoom, x, y)
+		LOG(LOG_DEBUG, __name__, 'download', filename)
+		try:
+			dirname = "%d/%d"%(zoom, x)
+			if not os.path.exists(dirname):
+				os.makedirs(dirname)
+			localFile = open(filename, 'w')
+			webFile = self.opener.open("http://a.tile.openstreetmap.org/%d/%d/%d.png"%(zoom, x, y))
+			localFile.write(webFile.read())
+			webFile.close()
+			localFile.close()
+		except Exception, e:
+			LOG(LOG_ERR, __name__, 'download', filename)
+			if os.path.exists(filename):
+				os.unlink(filename)
+
+
+if __name__ == '__main__':
+	from syslog import openlog, syslog, closelog, LOG_ERR, LOG_WARNING, LOG_INFO, LOG_DEBUG, LOG_DAEMON, LOG_NDELAY, LOG_PID, LOG_PERROR
+	from gobject import MainLoop
+	from dbus.mainloop.glib import DBusGMainLoop
+	openlog('pyggld', LOG_NDELAY|LOG_PID|LOG_PERROR, LOG_DAEMON,)
+	DBusGMainLoop(set_as_default=True)
+	mainloop = MainLoop()
+	daemon = OpenStreetMap(InitBus())
+	mainloop.run()
+	closelog()
+# vim:tw=0:nowrap


Property changes on: trunk/software/pyneod/pyosmd.py
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + "LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author Rev"
Name: svn:eol-style
   + native

Modified: trunk/software/pyneod/pypppd.py
===================================================================
--- trunk/software/pyneod/pypppd.py	2008-04-25 09:44:07 UTC (rev 251)
+++ trunk/software/pyneod/pypppd.py	2008-04-25 10:07:59 UTC (rev 252)
@@ -117,8 +117,8 @@
 		self.last_status = dict(device='')
 		timeout_add(12 * 1000, self.__poll)
 
-	def __child_watch(self, *args):
-		print '__child_watch', args
+	def __child_watch(self, pid, condition, user_data):
+		print '__child_watch', pid, condition, user_data
 
 	@method(DIN_NETWORK, 'b', '')
 	def Activate(self, on):
@@ -126,7 +126,7 @@
 		try:
 			if on:
 				if self.cpid >= 0: raise Exception('already active')
-				muxer = self.bus.get_object('org.pyneo', '/org/pyneo/Muxer')
+				muxer = self.bus.get_object(config.get('ppp', 'bus'), config.get('ppp', 'obj'))
 				muxer = Interface(muxer, 'org.freesmartphone.GSM.MUX')
 				self.port = str(muxer.AllocChannel('ppp'))
 				del muxer




More information about the Smartphones-commits mailing list