aboutsummaryrefslogtreecommitdiff
path: root/AT91SAM7S256/armdebug/nxt-python-fantom/nxt/locator.py
blob: 4adc680cac5b25e902859b5e4206f6df45a948e8 (plain)
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
# 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:
        usb_available = False
        import sys
        if not silent: print >>sys.stderr, "USB module unavailable, not searching there"
    
    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