From afa654af0a2d2e6b34b47af52ed214977b7a3e12 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Mon, 15 Jun 2015 13:56:44 +0200 Subject: Refactor. Move. --- parrot_zik/model/__init__.py | 0 parrot_zik/model/base.py | 58 +++++++++++++++++++++ parrot_zik/model/version1.py | 48 ++++++++++++++++++ parrot_zik/model/version2.py | 118 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 224 insertions(+) create mode 100644 parrot_zik/model/__init__.py create mode 100644 parrot_zik/model/base.py create mode 100644 parrot_zik/model/version1.py create mode 100644 parrot_zik/model/version2.py (limited to 'parrot_zik/model') diff --git a/parrot_zik/model/__init__.py b/parrot_zik/model/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/parrot_zik/model/base.py b/parrot_zik/model/base.py new file mode 100644 index 0000000..0cd4652 --- /dev/null +++ b/parrot_zik/model/base.py @@ -0,0 +1,58 @@ +class ParrotZikBase(object): + def __init__(self, resource_manager): + self.resource_manager = resource_manager + + @property + def version(self): + return self.resource_manager.api_version + + def refresh_battery(self): + self.resource_manager.fetch('/api/system/battery') + + @property + def battery_state(self): + answer = self.resource_manager.get("/api/system/battery") + return answer.system.battery["state"] + + def get_battery_level(self, field_name): + answer = self.resource_manager.get("/api/system/battery") + return int(answer.system.battery[field_name]) + + @property + def friendly_name(self): + answer = self.resource_manager.get("/api/bluetooth/friendlyname") + return answer.bluetooth["friendlyname"] + + @property + def auto_connect(self): + answer = self.resource_manager.get("/api/system/auto_connection/enabled") + return self._result_to_bool( + answer.system.auto_connection["enabled"]) + + @auto_connect.setter + def auto_connect(self, arg): + self.resource_manager.set("/api/system/auto_connection/enabled", arg) + + @property + def anc_phone_mode(self): + answer = self.resource_manager.get("/api/system/anc_phone_mode/enabled") + return self._result_to_bool( + answer.system.anc_phone_mode["enabled"]) + + def _result_to_bool(self, result): + if result == "true": + return True + elif result == "false": + return False + else: + raise AssertionError(result) + +class BatteryStates: + CHARGED = 'charged' + IN_USE = 'in_use' + CHARGING = 'charging' + representation = { + CHARGED: 'Charged', + IN_USE: 'In Use', + CHARGING: 'Charging', + } diff --git a/parrot_zik/model/version1.py b/parrot_zik/model/version1.py new file mode 100644 index 0000000..b39684f --- /dev/null +++ b/parrot_zik/model/version1.py @@ -0,0 +1,48 @@ +from .base import ParrotZikBase +from ..resource_manager import Version1ResourceManager + + +class ParrotZikVersion1(ParrotZikBase): + def __init__(self, resource_manager): + super(ParrotZikVersion1, self).__init__( + resource_manager.get_resource_manager( + Version1ResourceManager)) + + @property + def version(self): + answer = self.resource_manager.get('/api/software/version') + return answer.software['version'] + + @property + def battery_level(self): + return int(self.get_battery_level('level')) + + @property + def lou_reed_mode(self): + answer = self.resource_manager.get("/api/audio/specific_mode/enabled") + return self._result_to_bool( + answer.audio.specific_mode["enabled"]) + + @lou_reed_mode.setter + def lou_reed_mode(self, arg): + self.resource_manager.get("/api/audio/specific_mode/enabled", arg) + + @property + def concert_hall(self): + answer = self.resource_manager.get("/api/audio/sound_effect/enabled") + return self._result_to_bool( + answer.audio.sound_effect["enabled"]) + + @concert_hall.setter + def concert_hall(self, arg): + self.resource_manager.get("/api/audio/sound_effect/enabled", arg) + + @property + def cancel_noise(self): + answer = self.resource_manager.get("/api/audio/noise_cancellation/enabled") + return self._result_to_bool( + answer.audio.noise_cancellation["enabled"]) + + @cancel_noise.setter + def cancel_noise(self, arg): + self.resource_manager.set("/api/audio/noise_cancellation/enabled", arg) \ No newline at end of file diff --git a/parrot_zik/model/version2.py b/parrot_zik/model/version2.py new file mode 100644 index 0000000..9ef6267 --- /dev/null +++ b/parrot_zik/model/version2.py @@ -0,0 +1,118 @@ +from .base import ParrotZikBase +from ..resource_manager import Version2ResourceManager + + +class ParrotZikVersion2(ParrotZikBase): + def __init__(self, resource_manager): + super(ParrotZikVersion2, self).__init__( + resource_manager.get_resource_manager( + Version2ResourceManager)) + + @property + def version(self): + answer = self.resource_manager.get('/api/software/version') + return answer.software['sip6'] + + @property + def battery_level(self): + return self.get_battery_level('percent') + + @property + def flight_mode(self): + answer = self.resource_manager.get('/api/flight_mode') + return self._result_to_bool(answer.flight_mode['enabled']) + + @flight_mode.setter + def flight_mode(self, arg): + if arg: + self.resource_manager.toggle_on('/api/flight_mode') + else: + self.resource_manager.toggle_off('/api/flight_mode') + + @property + def sound_effect(self): + answer = self.resource_manager.get('/api/audio/sound_effect/enabled') + return self._result_to_bool(answer.audio.sound_effect['enabled']) + + @sound_effect.setter + def sound_effect(self, arg): + self.resource_manager.set('/api/audio/sound_effect/enabled', arg) + + @property + def room(self): + answer = self.resource_manager.get('/api/audio/sound_effect/room_size') + return answer.audio.sound_effect['room_size'] + + @room.setter + def room(self, arg): + self.resource_manager.set('/api/audio/sound_effect/room_size', arg) + + @property + def external_noise(self): + answer = self.resource_manager.get('/api/audio/noise') + return int(answer.audio.noise['external']) + + @property + def internal_noise(self): + answer = self.resource_manager.get('/api/audio/noise') + return int(answer.audio.noise['internal']) + + @property + def angle(self): + answer = self.resource_manager.get('/api/audio/sound_effect/angle') + return int(answer.audio.sound_effect['angle']) + + @angle.setter + def angle(self, arg): + self.resource_manager.set('/api/audio/sound_effect/angle', arg) + + @property + def noise_control(self): + answer = self.resource_manager.get('/api/audio/noise_control') + return NoiseControl.from_noise_control(answer.audio.noise_control) + + @noise_control.setter + def noise_control(self, arg): + pass + + @property + def noise_control_enabled(self): + answer = self.resource_manager.get('/api/audio/noise_control/enabled') + return self._result_to_bool(answer.audio.noise_control['enabled']) + + +class NoiseControl(object): + def __init__(self, type, value): + self.type = type + self.value = value + + @classmethod + def from_noise_control(cls, noise_control): + return cls(noise_control['type'], int(noise_control['value'])) + + def __eq__(self, other): + return self.type == other.type and self.value == other.value + + def __str__(self): + return '{}++{}'.format(self.type, self.value) + + +class NoiseControlTypes: + NOISE_CONTROL_MAX = NoiseControl('anc', 2) + NOISE_CONTROL_ON = NoiseControl('anc', 1) + NOISE_CONTROL_OFF = NoiseControl('off', 1) + STREET_MODE = NoiseControl('aoc', 1) + STREET_MODE_MAX = NoiseControl('aoc', 2) + + +class Rooms: + CONCERT_HALL = 'concert' + JAZZ_CLUB = 'jazz' + LIVING_ROOM = 'living' + SILENT_ROOM = 'silent' + representation = { + CONCERT_HALL: 'Concert Hall', + JAZZ_CLUB: 'Jazz Club', + LIVING_ROOM: 'Living Room', + SILENT_ROOM: 'Silent Room', + } \ No newline at end of file -- cgit v1.2.1 From 4573f9f3e95a0d79c576e3fe0f34023bbf6f0898 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Mon, 15 Jun 2015 14:56:52 +0200 Subject: Implement head detection setting. --- parrot_zik/model/version2.py | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'parrot_zik/model') diff --git a/parrot_zik/model/version2.py b/parrot_zik/model/version2.py index 9ef6267..e0bce44 100644 --- a/parrot_zik/model/version2.py +++ b/parrot_zik/model/version2.py @@ -80,6 +80,15 @@ class ParrotZikVersion2(ParrotZikBase): answer = self.resource_manager.get('/api/audio/noise_control/enabled') return self._result_to_bool(answer.audio.noise_control['enabled']) + @property + def head_detection(self): + answer = self.resource_manager.get('/api/system/head_detection/enabled') + return self._result_to_bool(answer.system.head_detection['enabled']) + + @head_detection.setter + def head_detection(self, arg): + self.resource_manager.set('/api/system/head_detection/enabled', arg) + class NoiseControl(object): def __init__(self, type, value): -- cgit v1.2.1 From 1e6c7b96695cb69de8655cbe20e8ddb5baa77a32 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Mon, 15 Jun 2015 15:33:35 +0200 Subject: Add sound source model. --- parrot_zik/model/version2.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'parrot_zik/model') diff --git a/parrot_zik/model/version2.py b/parrot_zik/model/version2.py index e0bce44..d90d79d 100644 --- a/parrot_zik/model/version2.py +++ b/parrot_zik/model/version2.py @@ -124,4 +124,8 @@ class Rooms: JAZZ_CLUB: 'Jazz Club', LIVING_ROOM: 'Living Room', SILENT_ROOM: 'Silent Room', - } \ No newline at end of file + } + +class SoundSource: + LINE_IN = 'line-in' + A2DP = 'a2dp' -- cgit v1.2.1 From e7089b04e59ae1cf7a24649ec2ef64af56eb7dce Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Mon, 15 Jun 2015 17:46:22 +0200 Subject: Use absolute package imports. --- parrot_zik/model/version1.py | 4 ++-- parrot_zik/model/version2.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'parrot_zik/model') diff --git a/parrot_zik/model/version1.py b/parrot_zik/model/version1.py index b39684f..f0197e9 100644 --- a/parrot_zik/model/version1.py +++ b/parrot_zik/model/version1.py @@ -1,5 +1,5 @@ -from .base import ParrotZikBase -from ..resource_manager import Version1ResourceManager +from parrot_zik.model.base import ParrotZikBase +from parrot_zik.resource_manager import Version1ResourceManager class ParrotZikVersion1(ParrotZikBase): diff --git a/parrot_zik/model/version2.py b/parrot_zik/model/version2.py index d90d79d..11b4d51 100644 --- a/parrot_zik/model/version2.py +++ b/parrot_zik/model/version2.py @@ -1,5 +1,5 @@ -from .base import ParrotZikBase -from ..resource_manager import Version2ResourceManager +from parrot_zik.model.base import ParrotZikBase +from parrot_zik.resource_manager import Version2ResourceManager class ParrotZikVersion2(ParrotZikBase): -- cgit v1.2.1 From 8236f6229e420406cfc64a55c8b358f7cb0357a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20S=C3=A1nchez?= Date: Fri, 3 Jul 2015 12:02:51 +0200 Subject: Fixed setter properties in version1 model --- parrot_zik/model/version1.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'parrot_zik/model') diff --git a/parrot_zik/model/version1.py b/parrot_zik/model/version1.py index f0197e9..324cc9f 100644 --- a/parrot_zik/model/version1.py +++ b/parrot_zik/model/version1.py @@ -25,7 +25,7 @@ class ParrotZikVersion1(ParrotZikBase): @lou_reed_mode.setter def lou_reed_mode(self, arg): - self.resource_manager.get("/api/audio/specific_mode/enabled", arg) + self.resource_manager.set("/api/audio/specific_mode/enabled", arg) @property def concert_hall(self): @@ -35,7 +35,7 @@ class ParrotZikVersion1(ParrotZikBase): @concert_hall.setter def concert_hall(self, arg): - self.resource_manager.get("/api/audio/sound_effect/enabled", arg) + self.resource_manager.set("/api/audio/sound_effect/enabled", arg) @property def cancel_noise(self): @@ -45,4 +45,4 @@ class ParrotZikVersion1(ParrotZikBase): @cancel_noise.setter def cancel_noise(self, arg): - self.resource_manager.set("/api/audio/noise_cancellation/enabled", arg) \ No newline at end of file + self.resource_manager.set("/api/audio/noise_cancellation/enabled", arg) -- cgit v1.2.1 From 22e903f15887bff972ecd0f28c0ee485e918c3f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20S=C3=A1nchez?= Date: Fri, 3 Jul 2015 13:33:26 +0200 Subject: Fixed cast when the value is an empty string --- parrot_zik/model/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'parrot_zik/model') diff --git a/parrot_zik/model/base.py b/parrot_zik/model/base.py index 0cd4652..d722788 100644 --- a/parrot_zik/model/base.py +++ b/parrot_zik/model/base.py @@ -16,7 +16,7 @@ class ParrotZikBase(object): def get_battery_level(self, field_name): answer = self.resource_manager.get("/api/system/battery") - return int(answer.system.battery[field_name]) + return int(answer.system.battery[field_name] or 0) @property def friendly_name(self): -- cgit v1.2.1 From 0200800656ff1add2df9c662ade6a52a2adb9f9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20S=C3=A1nchez?= Date: Fri, 3 Jul 2015 13:22:02 +0200 Subject: Fixed _result_to_bool() assertion when a values has some strange status --- parrot_zik/model/base.py | 2 ++ 1 file changed, 2 insertions(+) (limited to 'parrot_zik/model') diff --git a/parrot_zik/model/base.py b/parrot_zik/model/base.py index d722788..fdacde0 100644 --- a/parrot_zik/model/base.py +++ b/parrot_zik/model/base.py @@ -44,6 +44,8 @@ class ParrotZikBase(object): return True elif result == "false": return False + elif result == "invalid_on": + return True else: raise AssertionError(result) -- cgit v1.2.1 From d6e3eb4ffb88959503cf41870dab72446ace6b46 Mon Sep 17 00:00:00 2001 From: Pavel Salomatov Date: Fri, 5 Feb 2016 15:41:47 +0300 Subject: Added functionality to change noise cancellation mode "Head detection" now initializes on startup --- parrot_zik/model/version2.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'parrot_zik/model') diff --git a/parrot_zik/model/version2.py b/parrot_zik/model/version2.py index 11b4d51..0cbdc1a 100644 --- a/parrot_zik/model/version2.py +++ b/parrot_zik/model/version2.py @@ -73,7 +73,7 @@ class ParrotZikVersion2(ParrotZikBase): @noise_control.setter def noise_control(self, arg): - pass + self.resource_manager.set('/api/audio/noise_control', arg) @property def noise_control_enabled(self): @@ -103,7 +103,7 @@ class NoiseControl(object): return self.type == other.type and self.value == other.value def __str__(self): - return '{}++{}'.format(self.type, self.value) + return '{}&value={}'.format(self.type, self.value) class NoiseControlTypes: -- cgit v1.2.1