Skip to content

Commit 265ccd3

Browse files
committed
Add event processing functionality to RemoteControl
1 parent 82df2d7 commit 265ccd3

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

ev3dev.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2296,44 +2296,86 @@ class RemoteControl(object):
22962296
11: ['blue_up', 'blue_down']
22972297
}
22982298

2299+
on_red_up = None
2300+
on_red_down = None
2301+
on_blue_up = None
2302+
on_blue_down = None
2303+
on_beacon = None
2304+
on_change = None
2305+
22992306
def __init__(self, sensor=None, channel=1):
23002307
if sensor is None:
23012308
self._sensor = InfraredSensor()
23022309
else:
23032310
self._sensor = sensor
23042311

23052312
self._channel = max(1, min(4, channel)) - 1
2313+
self._state = set([])
23062314

23072315
if self._sensor.connected:
23082316
self._sensor.mode = 'IR-REMOTE'
23092317

23102318
@property
23112319
def buttons_pressed(self):
2320+
"""
2321+
Returns list of currently pressed buttons.
2322+
"""
23122323
return RemoteControl._BUTTON_VALUES.get(self._sensor.value(self._channel), [])
23132324

23142325
@property
23152326
def any(self):
2327+
"""
2328+
Checks if any button is pressed.
2329+
"""
23162330
return bool(self.buttons_pressed)
23172331

23182332
def check_buttons(self, buttons=[]):
23192333
return set(self.buttons_pressed) == set(buttons)
23202334

23212335
@property
23222336
def red_up(self):
2337+
"""
2338+
Checks if `red_up` button is pressed
2339+
"""
23232340
return 'red_up' in self.buttons_pressed
23242341

23252342
@property
23262343
def red_down(self):
2344+
"""
2345+
Checks if `red_down` button is pressed
2346+
"""
23272347
return 'red_down' in self.buttons_pressed
23282348

23292349
@property
23302350
def blue_up(self):
2351+
"""
2352+
Checks if `blue_up` button is pressed
2353+
"""
23312354
return 'blue_up' in self.buttons_pressed
23322355

23332356
@property
23342357
def blue_down(self):
2358+
"""
2359+
Checks if `blue_down` button is pressed
2360+
"""
23352361
return 'blue_down' in self.buttons_pressed
23362362

23372363
@property
23382364
def beacon(self):
2365+
"""
2366+
Checks if `beacon` button is pressed
2367+
"""
23392368
return 'beacon' in self.buttons_pressed
2369+
2370+
def process(self):
2371+
new_state = set(self.buttons_pressed)
2372+
old_state = self._state
2373+
self._state = new_state
2374+
2375+
state_diff = new_state.symmetric_difference(old_state)
2376+
for button in state_diff:
2377+
handler = getattr(self, 'on_' + button)
2378+
if handler is not None: handler(button in new_state)
2379+
2380+
if self.on_change is not None and state_diff:
2381+
self.on_change([(button, button in new_state) for button in state_diff])

0 commit comments

Comments
 (0)