11# nxt.brick module -- Classes to represent LEGO Mindstorms NXT bricks
22# Copyright (C) 2006 Douglas P Lau
33# Copyright (C) 2009 Marcus Wanner, rhn
4- # Copyright (C) 2010 rhn, Marcus Wanner, zonedabone
4+ # Copyright (C) 2010 rhn
55#
66# This program is free software: you can redistribute it and/or modify
77# it under the terms of the GNU General Public License as published by
1414# GNU General Public License for more details.
1515
1616from time import sleep
17- from threading import RLock
1817from .error import FileNotFound , ModuleNotFound
1918from .telegram import OPCODES , Telegram
2019from .sensor import get_sensor
2120
2221def _make_poller (opcode , poll_func , parse_func ):
2322 def poll (self , * args , ** kwargs ):
2423 ogram = poll_func (opcode , * args , ** kwargs )
25- with self .lock :
26- self .sock .send (str (ogram ))
27- igram = Telegram (opcode = opcode , pkt = self .sock .recv ())
24+ self .sock .send (str (ogram ))
25+ igram = Telegram (opcode = opcode , pkt = self .sock .recv ())
2826 return parse_func (igram )
2927 return poll
3028
@@ -46,12 +44,12 @@ def __init__(self, brick, pattern):
4644 self .brick = brick
4745 self .pattern = pattern
4846 self .handle = None
49-
47+
5048 def _close (self ):
5149 if self .handle is not None :
52- self .brick .close (self .handle )
50+ self .brick .close (self .handle )
5351 self .handle = None
54-
52+
5553 def __del__ (self ):
5654 self ._close ()
5755
@@ -94,7 +92,7 @@ class FileReader(object):
9492 def __init__ (self , brick , fname ):
9593 self .brick = brick
9694 self .handle , self .size = brick .open_read (fname )
97-
95+
9896 def read (self , bytes = None ):
9997 if bytes is not None :
10098 remaining = bytes
@@ -108,12 +106,12 @@ def read(self, bytes=None):
108106 remaining -= len (buffer_ )
109107 data .append (buffer_ )
110108 return '' .join (data )
111-
109+
112110 def close (self ):
113111 if self .handle is not None :
114112 self .brick .close (self .handle )
115113 self .handle = None
116-
114+
117115 def __del__ (self ):
118116 self .close ()
119117
@@ -122,7 +120,7 @@ def __enter__(self):
122120
123121 def __exit__ (self , etp , value , tb ):
124122 self .close ()
125-
123+
126124 def __iter__ (self ):
127125 rem = self .size
128126 bsize = self .brick .sock .bsize
@@ -144,12 +142,12 @@ def __init__(self, brick, fname, size):
144142
145143 def __del__ (self ):
146144 self .close ()
147-
145+
148146 def close (self ):
149147 if self .handle is not None :
150148 self .brick .close (self .handle )
151149 self .handle = None
152-
150+
153151 def tell (self ):
154152 return self ._position
155153
@@ -159,14 +157,14 @@ def write(self, data):
159157 raise ValueError ('Data will not fit into remaining space' )
160158 bsize = self .brick .sock .bsize
161159 data_position = 0
162-
160+
163161 while remaining > 0 :
164162 batch_size = min (bsize , remaining )
165163 next_data_position = data_position + batch_size
166164 buffer_ = data [data_position :next_data_position ]
167-
165+
168166 handle , size = self .brick .write (self .handle , buffer_ )
169-
167+
170168 self ._position += batch_size
171169 data_position = next_data_position
172170 remaining -= batch_size
@@ -184,7 +182,7 @@ def _close(self):
184182 if self .handle :
185183 self .brick .close (self .handle )
186184 self .handle = None
187-
185+
188186 def __del__ (self ):
189187 self ._close ()
190188
@@ -202,23 +200,22 @@ def __iter__(self):
202200 self ._close ()
203201 break
204202
205-
203+
206204class Brick (object ): #TODO: this begs to have explicit methods
207205 'Main object for NXT Control'
208206
209207 __metaclass__ = _Meta
210208
211209 def __init__ (self , sock ):
212210 self .sock = sock
213- self .lock = RLock ()
214211
215212 def play_tone_and_wait (self , frequency , duration ):
216213 self .play_tone (frequency , duration )
217214 sleep (duration / 1000.0 )
218215
219216 def __del__ (self ):
220217 self .sock .close ()
221-
218+
222219 find_files = FileFinder
223220 find_modules = ModuleFinder
224221 open_file = File
0 commit comments