1
1
# nxt.brick module -- Classes to represent LEGO Mindstorms NXT bricks
2
2
# Copyright (C) 2006 Douglas P Lau
3
3
# Copyright (C) 2009 Marcus Wanner, rhn
4
- # Copyright (C) 2010 rhn, Marcus Wanner, zonedabone
4
+ # Copyright (C) 2010 rhn
5
5
#
6
6
# This program is free software: you can redistribute it and/or modify
7
7
# it under the terms of the GNU General Public License as published by
14
14
# GNU General Public License for more details.
15
15
16
16
from time import sleep
17
- from threading import RLock
18
17
from .error import FileNotFound , ModuleNotFound
19
18
from .telegram import OPCODES , Telegram
20
19
from .sensor import get_sensor
21
20
22
21
def _make_poller (opcode , poll_func , parse_func ):
23
22
def poll (self , * args , ** kwargs ):
24
23
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 ())
28
26
return parse_func (igram )
29
27
return poll
30
28
@@ -46,12 +44,12 @@ def __init__(self, brick, pattern):
46
44
self .brick = brick
47
45
self .pattern = pattern
48
46
self .handle = None
49
-
47
+
50
48
def _close (self ):
51
49
if self .handle is not None :
52
- self .brick .close (self .handle )
50
+ self .brick .close (self .handle )
53
51
self .handle = None
54
-
52
+
55
53
def __del__ (self ):
56
54
self ._close ()
57
55
@@ -94,7 +92,7 @@ class FileReader(object):
94
92
def __init__ (self , brick , fname ):
95
93
self .brick = brick
96
94
self .handle , self .size = brick .open_read (fname )
97
-
95
+
98
96
def read (self , bytes = None ):
99
97
if bytes is not None :
100
98
remaining = bytes
@@ -108,12 +106,12 @@ def read(self, bytes=None):
108
106
remaining -= len (buffer_ )
109
107
data .append (buffer_ )
110
108
return '' .join (data )
111
-
109
+
112
110
def close (self ):
113
111
if self .handle is not None :
114
112
self .brick .close (self .handle )
115
113
self .handle = None
116
-
114
+
117
115
def __del__ (self ):
118
116
self .close ()
119
117
@@ -122,7 +120,7 @@ def __enter__(self):
122
120
123
121
def __exit__ (self , etp , value , tb ):
124
122
self .close ()
125
-
123
+
126
124
def __iter__ (self ):
127
125
rem = self .size
128
126
bsize = self .brick .sock .bsize
@@ -144,12 +142,12 @@ def __init__(self, brick, fname, size):
144
142
145
143
def __del__ (self ):
146
144
self .close ()
147
-
145
+
148
146
def close (self ):
149
147
if self .handle is not None :
150
148
self .brick .close (self .handle )
151
149
self .handle = None
152
-
150
+
153
151
def tell (self ):
154
152
return self ._position
155
153
@@ -159,14 +157,14 @@ def write(self, data):
159
157
raise ValueError ('Data will not fit into remaining space' )
160
158
bsize = self .brick .sock .bsize
161
159
data_position = 0
162
-
160
+
163
161
while remaining > 0 :
164
162
batch_size = min (bsize , remaining )
165
163
next_data_position = data_position + batch_size
166
164
buffer_ = data [data_position :next_data_position ]
167
-
165
+
168
166
handle , size = self .brick .write (self .handle , buffer_ )
169
-
167
+
170
168
self ._position += batch_size
171
169
data_position = next_data_position
172
170
remaining -= batch_size
@@ -184,7 +182,7 @@ def _close(self):
184
182
if self .handle :
185
183
self .brick .close (self .handle )
186
184
self .handle = None
187
-
185
+
188
186
def __del__ (self ):
189
187
self ._close ()
190
188
@@ -202,23 +200,22 @@ def __iter__(self):
202
200
self ._close ()
203
201
break
204
202
205
-
203
+
206
204
class Brick (object ): #TODO: this begs to have explicit methods
207
205
'Main object for NXT Control'
208
206
209
207
__metaclass__ = _Meta
210
208
211
209
def __init__ (self , sock ):
212
210
self .sock = sock
213
- self .lock = RLock ()
214
211
215
212
def play_tone_and_wait (self , frequency , duration ):
216
213
self .play_tone (frequency , duration )
217
214
sleep (duration / 1000.0 )
218
215
219
216
def __del__ (self ):
220
217
self .sock .close ()
221
-
218
+
222
219
find_files = FileFinder
223
220
find_modules = ModuleFinder
224
221
open_file = File
0 commit comments