aboutsummaryrefslogtreecommitdiff
path: root/parrot_zik/model/version2.py
blob: 9ef62674d1baa39a9278c9ce12698233906d929a (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
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',
    }