#!/usr/bin/env python import re import ParrotZik import BluetoothPairedDevices from SysIndicator import * # seconds UPDATE_FREQUENCY = 30 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.battery_level = MenuItem("Battery Level:", None, sensitive=False) self.menu.append(self.battery_level) self.battery_state = MenuItem("Battery State:", None, sensitive=False) self.menu.append(self.battery_state) self.firmware_version = MenuItem("Firmware Version:", None, sensitive=False) self.menu.append(self.firmware_version) 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) self.quit = MenuItem("Quit", sys.exit, sensitive=True, checkitem=True) self.menu.append(self.quit) 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.friendly_name self.version = self.parrot.version self.check.set_sensitive(True) self.check2.set_sensitive(True) self.check3.set_sensitive(True) self.check4.set_sensitive(True) if self.parrot.noise_cancel == "true": self.check.set_active(True) else: self.check.set_active(False) if self.parrot.auto_connect == "true": self.check2.set_active(True) else: self.check2.set_active(False) if self.parrot.lou_reed_mode == "true": self.check3.set_active(True) else: self.check3.set_active(False) if self.parrot.concert_hall == "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.noise_cancel = "true" else: self.parrot.noise_cancel = "false" def toggleAuto(self, widget): if self.connected: if self.check2.get_active(): self.parrot.auto_connection = "true" else: self.parrot.auto_connection = "false" def toggleLouReedMode(self, widget): if self.connected: if self.check3.get_active(): self.parrot.lou_reed_mode = "true" self.check4.set_sensitive(False) else: self.parrot.lou_reed_mode = "false" self.check4.set_sensitive(True) def toggleParrotConcertHall(self, widget): if self.connected: if self.check4.get_active(): self.parrot.concert_hall = "true" else: self.parrot.concert_hall = "false" def CheckBattery(self): if self.connected: print "Updating battery" self.batteryLevel = int(self.parrot.battery_level) 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) self.firmware_version.set_label( "Firmware version: " + self.version) self.battery_state.set_label("State: " + self.batteryState) self.battery_level.set_label( "Battery 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()