aboutsummaryrefslogtreecommitdiff
path: root/resource_manager.py
diff options
context:
space:
mode:
authorMarek Siarkowicz <mareksiarkowicz@gmail.com>2015-06-15 11:33:33 +0200
committerMarek Siarkowicz <mareksiarkowicz@gmail.com>2015-06-15 12:01:43 +0200
commit947a9f7d10bc3c54939cfa72dab27b2e64034318 (patch)
tree052108b258f5179c457b762e2134bf9fff1dccfe /resource_manager.py
parent55255db75378f39807371bb7e434cc943fd66f27 (diff)
downloadpyParrotZikTCP-947a9f7d10bc3c54939cfa72dab27b2e64034318.tar.xz
pyParrotZikTCP-947a9f7d10bc3c54939cfa72dab27b2e64034318.zip
Create packet.
Diffstat (limited to 'resource_manager.py')
-rw-r--r--resource_manager.py176
1 files changed, 0 insertions, 176 deletions
diff --git a/resource_manager.py b/resource_manager.py
deleted file mode 100644
index daf6ecd..0000000
--- a/resource_manager.py
+++ /dev/null
@@ -1,176 +0,0 @@
-import bluetooth
-from operator import itemgetter
-import sys
-
-from BeautifulSoup import BeautifulSoup
-
-from message import Message
-
-
-class ResourceManagerBase(object):
- resources = [
- ]
-
- def __init__(self, socket, resource_values=None):
- self.sock = socket
- self.resource_values = resource_values or {}
-
- def get(self, resource):
- try:
- return self.resource_values[resource]
- except KeyError:
- return self.fetch(resource)
-
- def fetch(self, resource):
- result = self.send_message(self._create_message(resource, 'get'))
- self.resource_values[resource] = result
- return result
-
- def toggle_on(self, resource):
- self.send_message(self._create_message(resource, 'enable'))
- self.fetch(resource)
-
- def toggle_off(self, resource):
- self.send_message(self._create_message(resource, 'disable'))
- self.fetch(resource)
-
- def set(self, resource, arg):
- self.send_message(self._create_message(resource, 'set', arg))
- self.fetch(resource)
-
- def _create_message(self, resource, method, arg=None):
- assert resource in self.resources, 'Unknown resource {}'.format(resource)
- assert method in self.resources[resource], 'Unhandled method {} for {}'.format(method, resource)
- return Message(resource, method, arg)
-
- def send_message(self, message):
- try:
- self.sock.send(str(message))
- return self.get_answer(message)
- except bluetooth.btcommon.BluetoothError:
- raise DeviceDisconnected
-
- def get_answer(self, message):
- data = self.receive_message()
- notifications = []
- while not data.answer:
- if data.notify:
- notifications.append(data.notify)
- else:
- raise AssertionError('Unknown response')
- data = self.receive_message()
- self.handle_notifications(notifications, message.resource)
- return data.answer
-
- def handle_notifications(self, notifications, resource):
- paths = map(itemgetter('path'), notifications)
- clean_paths = set(map(self._clean_path, paths))
- for path in clean_paths:
- if resource != path:
- self.fetch(path)
-
- def _clean_path(self, path):
- return path.rsplit('/', 1)[0].encode('utf-8')
-
- def receive_message(self):
- if sys.platform == "darwin":
- self.sock.recv(30)
- else:
- self.sock.recv(7)
- return BeautifulSoup(self.sock.recv(1024))
-
- def close(self):
- self.sock.close()
-
-
-class GenericResourceManager(ResourceManagerBase):
- resources = {
- '/api/software/version': ['get'],
- }
-
- def __init__(self, sock):
- super(GenericResourceManager, self).__init__(sock)
- self.notifications = []
-
- def handle_notification(self, notification):
- self.notifications.append(notification)
-
- def get_resource_manager(self, resource_manager_class):
- resource_manager = resource_manager_class(self.sock, self.resource_values)
- resource_manager.handle_notifications(self.notifications, '/api/software/version')
- return resource_manager
-
- @property
- def api_version(self):
- answer = self.get("/api/software/version")
- try:
- return answer.software["version"]
- except KeyError:
- return answer.software['sip6']
-
-
-class Version1ResourceManager(ResourceManagerBase):
- resources = {
- '/api/software/version': ['get'],
- '/api/system/battery': ['get'],
- '/api/bluetooth/friendlyname': ['get'],
- '/api/system/auto_connection/enabled': ['get', 'set'],
- '/api/system/anc_phone_mode/enabled': ['get', 'set'],
- '/api/audio/specific_mode/enabled': ['get', 'set'],
- '/api/audio/sound_effect/enabled': ['get', 'set'],
- '/api/audio/noise_cancellation/enabled': ['get', 'set'],
- }
-
-class Version2ResourceManager(ResourceManagerBase):
- resources = {
- '/api/account/username': ['get', 'set'],
- '/api/appli_version': ['set'],
- '/api/audio/counter': ['get'],
- '/api/audio/equalizer/enabled': ['get', 'set'],
- '/api/audio/equalizer/preset_id': ['set'],
- '/api/audio/equalizer/preset_value': ['set'],
- '/api/audio/noise_cancellation/enabled': ['get', 'set'],
- '/api/audio/noise_control/enabled': ['get', 'set'],
- '/api/audio/noise_control': ['get'],
- '/api/audio/noise_control/phone_mode': ['get', 'set'],
- '/api/audio/noise': ['get'],
- '/api/audio/param_equalizer/value': ['set'],
- '/api/audio/preset/bypass': ['get', 'set'],
- '/api/audio/preset/': ['clear_all'],
- '/api/audio/preset/counter': ['get'],
- '/api/audio/preset/current': ['get'],
- '/api/audio/preset': ['download', 'activate', 'save', 'remove', 'cancel_producer'],
- '/api/audio/preset/synchro': ['start', 'stop'],
- '/api/audio/smart_audio_tune': ['get', 'set'],
- '/api/audio/sound_effect/angle': ['get', 'set'],
- '/api/audio/sound_effect/enabled': ['get', 'set'],
- '/api/audio/sound_effect': ['get'],
- '/api/audio/sound_effect/room_size': ['get', 'set'],
- '/api/audio/source': ['get'],
- '/api/audio/specific_mode/enabled': ['get', 'set'],
- '/api/audio/thumb_equalizer/value': ['get', 'set'],
- '/api/audio/track/metadata': ['get', 'force'],
- '/api/bluetooth/friendlyname': ['get', 'set'],
- '/api/flight_mode': ['get', 'enable', 'disable'],
- '/api/software/download_check_state': ['get'],
- '/api/software/download_size': ['set'],
- '/api/software/tts': ['get', 'enable', 'disable'],
- '/api/software/version_checking': ['get'],
- '/api/software/version': ['get'],
- '/api/system/anc_phone_mode/enabled': ['get', 'set'],
- '/api/system/auto_connection/enabled': ['get', 'set'],
- '/api/system/auto_power_off': ['get', 'set'],
- '/api/system/auto_power_off/presets_list': ['get'],
- '/api/system/battery/forecast': ['get'],
- '/api/system/battery': ['get'],
- '/api/system/bt_address': ['get'],
- '/api/system': ['calibrate'],
- '/api/system/color': ['get'],
- '/api/system/device_type': ['get'],
- '/api/system/': ['factory_reset'],
- '/api/system/head_detection/enabled': ['get', 'set'],
- '/api/system/pi': ['get'],
- }
-
-class DeviceDisconnected(Exception):
- pass