aboutsummaryrefslogtreecommitdiff
path: root/ParrotZik.py
blob: 830e31727aa259c192804a92579367007266f345 (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
#!/usr/bin/env python

import bluetooth
import ParrotProtocol
import struct
from BeautifulSoup import BeautifulSoup

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

		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

		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)

		self.sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )
		self.sock.connect((host, port))

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

		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:
			pass

		try:
			print "notification received" + data.notify["path"]
		except:
			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:
			self.sock =""
			return
		data = self.sock.recv(7)
		len = struct.unpack('B', data[1])[0]
		data = self.sock.recv(1024)
		print data
		data=BeautifulSoup(data)
		return data

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