aboutsummaryrefslogtreecommitdiff
path: root/ParrotZik.py
blob: be8441130c5b120148204e3f831c2829c6b771a5 (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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import sys
if sys.platform == "darwin":
    import lightblue
else:
    import bluetooth

import ParrotProtocol
from BeautifulSoup import BeautifulSoup

class ParrotZik(object):
    def __init__(self, addr=None):
        uuid = "0ef0f502-f0ee-46c9-986c-54ed027807fb"

        if sys.platform == "darwin":
            service_matches = lightblue.findservices(
                name="Parrot RFcomm service", addr=addr)
        else:
            service_matches = bluetooth.find_service(uuid=uuid, address=addr)

        if len(service_matches) == 0:
            print "Failed to find Parrot Zik RFCOMM service"
            self.sock = ""
            return

        if sys.platform == "darwin":
            first_match = service_matches[0]
            port = first_match[1]
            name = first_match[2]
            host = first_match[0]
        else:
            first_match = service_matches[0]
            port = first_match["port"]
            name = first_match["name"]
            host = first_match["host"]

        print "Connecting to \"%s\" on %s" % (name, host)

        if sys.platform == "darwin":
            self.sock = lightblue.socket()
        else:
            self.sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)

        self.sock.connect((host, port))

        self.sock.send('\x00\x03\x00')
        data = self.sock.recv(1024)

        self.BatteryLevel = 100
        self.BatteryCharging = False
        print "Connected"

    def getBatteryState(self):
        data = self.sendGetMessage("/api/system/battery/get")
        return data.answer.system.battery["state"]

    def getBatteryLevel(self):
        data = self.sendGetMessage("/api/system/battery/get")    
        try:
            if data.answer.system.battery["level"] != '':
                self.BatteryLevel = data.answer.system.battery["level"]
            if data.answer.system.battery["state"] == 'charging':
                self.BatteryCharging = True
            else:
                self.BatteryCharging = False
        except Exception:
            pass

        try:
            print "notification received" + data.notify["path"]
        except Exception:
            pass

        return self.BatteryLevel

    def getVersion(self):
        data = self.sendGetMessage("/api/software/version/get")
        return data.answer.software["version"]    

    def getFriendlyName(self):
        data = self.sendGetMessage("/api/bluetooth/friendlyname/get")
        return data.answer.bluetooth["friendlyname"]

    def getAutoConnection(self):
        data = self.sendGetMessage("/api/system/auto_connection/enabled/get")
        return data.answer.system.auto_connection["enabled"]

    def setAutoConnection(self, arg):
        data = self.sendSetMessage("/api/system/auto_connection/enabled/set",
                                   arg)
        return data

    def getAncPhoneMode(self):
        data = self.sendGetMessage("/api/system/anc_phone_mode/enabled/get")
        return data.answer.system.anc_phone_mode["enabled"]

    def getNoiseCancel(self):
        data = self.sendGetMessage("/api/audio/noise_cancellation/enabled/get")
        return data.answer.audio.noise_cancellation["enabled"]

    def setNoiseCancel(self, arg):
        data = self.sendSetMessage("/api/audio/noise_cancellation/enabled/set",
                                   arg)
        return data

    def getLouReedMode(self):
        data = self.sendGetMessage("/api/audio/specific_mode/enabled/get")
        return data.answer.audio.specific_mode["enabled"]

    def setLouReedMode(self, arg):
        data = self.sendSetMessage("/api/audio/specific_mode/enabled/set", arg)
        return data

    def getParrotConcertHall(self):
        data = self.sendGetMessage("/api/audio/sound_effect/enabled/get")
        return data.answer.audio.sound_effect["enabled"]

    def setParrotConcertHall(self, arg):
        data = self.sendSetMessage("/api/audio/sound_effect/enabled/set", arg)
        return data

    def sendGetMessage(self, message):
        message = ParrotProtocol.getRequest(message)
        return self.sendMessage(message)

    def sendSetMessage(self, message, arg):
        message = ParrotProtocol.setRequest(message, arg)
        return self.sendMessage(message)

    def sendMessage(self, message):
        try:
            self.sock.send(str(message))
        except Exception:
            self.sock = ""
            return
        if sys.platform == "darwin":
            data = self.sock.recv(30)
        else:
            data = self.sock.recv(7)
        data = self.sock.recv(1024)
        data = BeautifulSoup(data)
        return data

    def Close(self):
        self.sock.close()