#!/usr/bin/env python import sys import gtk import re import os import ParrotZik import BluetoothPairedDevices from SysIndicator import * UPDATE_FREQUENCY = 30 # seconds class ParrotZikIndicator(SysIndicator): def __init__(self): self.menu = UniversalMenu() self.info_item = MenuItem("Parrot Zik Not connected..",None,sensitive = False) self.menu.append(self.info_item) self.check = MenuItem("Noise Cancellation",self.toggleANC,sensitive = False, checkitem = True) self.menu.append(self.check) self.check2 = MenuItem("Auto Connection",self.toggleAuto,sensitive = False, checkitem = True) self.menu.append(self.check2) self.check3 = MenuItem("Lou Reed Mode",self.toggleLouReedMode,sensitive = False, checkitem = True) self.menu.append(self.check3) self.check4 = MenuItem("Concert Hall Mode",self.toggleParrotConcertHall,sensitive = False, checkitem = True) self.menu.append(self.check4) SysIndicator.__init__(self,icon = "zik-audio-headset",menu = self.menu) self.connected=False self.p = re.compile('90:03:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}') def EstablishConnection(self): if self.connected: if not self.parrot.sock: print "Lost connection" self.connected = False else: print "Connection already established" else: mac=BluetoothPairedDevices.ParrotZikMac() if mac: self.parrot = ParrotZik.ParrotZik(mac) if not self.parrot.sock: print "Failed to connect to Parrot Zik %s" % mac return False self.connected = True self.name = self.parrot.getFriendlyName() self.version = self.parrot.getVersion() self.check.set_sensitive(True) self.check2.set_sensitive(True) self.check3.set_sensitive(True) self.check4.set_sensitive(True) if self.parrot.getNoiseCancel() == "true": self.check.set_active(True) else: self.check.set_active(False) if self.parrot.getAutoConnection() == "true": self.check2.set_active(True) else: self.check2.set_active(False) if self.parrot.getLouReedMode() == "true": self.check3.set_active(True) else: self.check3.set_active(False) if self.parrot.getParrotConcertHall() == "true": self.check4.set_active(True) else: self.check4.set_active(False) self.CheckBattery() return True def toggleANC(self,widget): if self.connected: if self.check.get_active(): self.parrot.setNoiseCancel("true") else: self.parrot.setNoiseCancel("false") def toggleAuto(self,widget): if self.connected: if self.check2.get_active(): self.parrot.setAutoConnection("true") else: self.parrot.setAutoConnection("false") def toggleLouReedMode(self,widget): if self.connected: if self.check3.get_active(): self.parrot.setLouReedMode("true") else: self.parrot.setLouReedMode("false") if self.parrot.getLouReedMode() == "true": self.check3.set_active(True) else: self.check3.set_active(False) if self.parrot.getParrotConcertHall() == "true": self.check4.set_active(True) else: self.check4.set_active(False) def toggleParrotConcertHall(self,widget): if self.connected: if self.check4.get_active(): self.parrot.setParrotConcertHall("true") else: self.parrot.setParrotConcertHall("false") if self.parrot.getLouReedMode() == "true": self.check3.set_active(True) else: self.check3.set_active(False) if self.parrot.getParrotConcertHall() == "true": self.check4.set_active(True) else: self.check4.set_active(False) def CheckBattery(self): if self.connected: print "Updating battery" self.batteryLevel = int(self.parrot.getBatteryLevel()) if self.parrot.BatteryCharging: self.batteryLevel = "Charging" self.setIcon("zik-battery-charging") self.batteryLevel="Unknown" self.batteryState="Charging" elif self.batteryLevel>80: self.setIcon("zik-battery-100") self.batteryState="In Use" elif self.batteryLevel>60: self.setIcon("zik-battery-080") self.batteryState="In Use" elif self.batteryLevel>40: self.setIcon("zik-battery-060") self.batteryState="In Use" elif self.batteryLevel>20: self.setIcon("zik-battery-040") self.batteryState="In Use" else: self.setIcon("zik-battery-low") self.batteryState="In Use" self.info_item.set_label("Connected to: "+self.name+ "\nFirmware version: "+self.version+ "\nState: "+self.batteryState+ "\nBattery Level: "+str(self.batteryLevel)) else: self.setIcon("zik-audio-headset") self.info_item.set_label("Parrot Zik Not connected..") self.check.set_sensitive(False) self.check2.set_sensitive(False) self.check3.set_sensitive(False) self.check4.set_sensitive(False) return True def main(self): self.EstablishConnection() gtk.timeout_add(UPDATE_FREQUENCY * 1000, self.EstablishConnection) gtk.timeout_add(UPDATE_FREQUENCY * 1000, self.CheckBattery) SysIndicator.main(self) if __name__ == "__main__": indicator = ParrotZikIndicator() indicator.main()