<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: bluetooth code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 21 Aug 2008 08:25:32 GMT</pubDate>
    <description>DZone Snippets: bluetooth code</description>
    <item>
      <title>PyS60: Bluetooth GPS polling class</title>
      <link>http://snippets.dzone.com/posts/show/4781</link>
      <description>Threaded approach for reading NMEA data from a bluetooth GPS.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import thread, socket&lt;br /&gt;&lt;br /&gt;class BTGPSPoller(object):&lt;br /&gt;	def __init__(self, address):&lt;br /&gt;		address, services = socket.bt_discover(address)&lt;br /&gt;		self.target = (address, services.values()[0])&lt;br /&gt;		self.active = True&lt;br /&gt;		self.connected = False&lt;br /&gt;		self.lock = thread.allocate_lock()&lt;br /&gt;		self.sentances = list()&lt;br /&gt;		&lt;br /&gt;	def connect(self):&lt;br /&gt;		if not self.connected:&lt;br /&gt;			thread.start_new_thread(self.run, ())&lt;br /&gt;&lt;br /&gt;	def run(self):&lt;br /&gt;		print "BTGPSPoller thread activated"&lt;br /&gt;		try:&lt;br /&gt;			conn = socket.socket(socket.AF_BT, socket.SOCK_STREAM)&lt;br /&gt;			conn.connect(self.target)&lt;br /&gt;			self.connected = True&lt;br /&gt;		except:&lt;br /&gt;			print "Unable to connect"&lt;br /&gt;		&lt;br /&gt;		if self.connected:&lt;br /&gt;			try:&lt;br /&gt;				to_gps = conn.makefile("r", 0)&lt;br /&gt;			except:&lt;br /&gt;				print "Failure calling conn.makefile()"&lt;br /&gt;			while self.active:&lt;br /&gt;				#e32.ao_sleep(1)&lt;br /&gt;				msg = None&lt;br /&gt;				try:&lt;br /&gt;					msg = to_gps.readline()&lt;br /&gt;					if not msg == None and msg.startswith("$GPGGA"):&lt;br /&gt;						gps_data = msg.split(",")&lt;br /&gt;						if not gps_data[2] == "":&lt;br /&gt;							self.lock.acquire()&lt;br /&gt;							self.sentances.append(msg)&lt;br /&gt;							if len(self.sentances) &gt; 10:&lt;br /&gt;								self.sentances.pop(0)&lt;br /&gt;							self.lock.release()&lt;br /&gt;				except:&lt;br /&gt;					self.active = False&lt;br /&gt;&lt;br /&gt;			try:&lt;br /&gt;				to_gps.close()&lt;br /&gt;				conn.close()&lt;br /&gt;				self.connected = False&lt;br /&gt;				print "Closed and disconnected"&lt;br /&gt;			except:&lt;br /&gt;				self.connected = False&lt;br /&gt;				print "Unable to close"&lt;br /&gt;&lt;br /&gt;	def disconnect(self):&lt;br /&gt;		self.active = False&lt;br /&gt;		print "Disconnecting from GPS"&lt;br /&gt;&lt;br /&gt;	def getSentances(self):&lt;br /&gt;		self.lock.acquire()&lt;br /&gt;		l = self.sentances[:]&lt;br /&gt;		self.lock.release()&lt;br /&gt;		return l&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 16 Nov 2007 14:09:19 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4781</guid>
      <author>ejot (Magnus Persson)</author>
    </item>
  </channel>
</rss>
