1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
# nxt.locator module -- Locate LEGO Minstorms NXT bricks via USB or Bluetooth
# Copyright (C) 2006, 2007 Douglas P Lau
# Copyright (C) 2009 Marcus Wanner
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
class BrickNotFoundError(Exception):
pass
class NoBackendError(Exception):
pass
def find_bricks(host=None, name=None, silent=False):
"""Used by find_one_brick to look for bricks ***ADVANCED USERS ONLY***"""
#try:
# import usbsock
# usb_available = True
# socks = usbsock.find_bricks(host, name)
# for s in socks:
# yield s
#except ImportError:
#except Exception, e:
# usb_available = False
# import sys
# if not silent: print("Error: %s"%e)
# if not silent: print >>sys.stderr, "USB module unavailable, not searching there"
import usbsock
usb_available = True
socks = usbsock.find_bricks(host, name)
for s in socks:
yield s
#try:
# import bluesock
# try:
# socks = bluesock.find_bricks(host, name)
# for s in socks:
# yield s
# except (bluesock.bluetooth.BluetoothError, IOError): #for cases such as no adapter, bluetooth throws IOError, not BluetoothError
# pass
#except ImportError:
# import sys
# if not silent: print >>sys.stderr, "Bluetooth module unavailable, not searching there"
# if not usb_available:
# raise NoBackendError("Neither USB nor Bluetooth could be used! Did you install PyUSB or PyBluez?")
def find_one_brick(host=None, name=None, silent=False):
"""Use to find one brick. After it returns a usbsock object or a bluesock
object, it automatically connects to it. The host and name args limit
the search to a given MAC or brick name. Set silent to True to stop
nxt-python from printing anything during the search."""
for s in find_bricks(host, name, silent):
return s.connect()
raise BrickNotFoundError
|