Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/plugins/lib/nxt/locator.py
blob: 734662c28061a1de29d1cf399f69212bd6aaf209 (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
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