@@ -1864,6 +1864,110 @@ def backspace(self):
18641864
18651865
18661866#~autogen
1867+
1868+ class RemoteControl (object ):
1869+ """
1870+ EV3 Remote Control
1871+ """
1872+
1873+ _BUTTON_VALUES = {
1874+ 1 : ['red_up' ],
1875+ 2 : ['red_down' ],
1876+ 3 : ['blue_up' ],
1877+ 4 : ['blue_down' ],
1878+ 5 : ['red_up' , 'blue_up' ],
1879+ 6 : ['red_up' , 'blue_down' ],
1880+ 7 : ['red_down' , 'blue_up' ],
1881+ 8 : ['red_down' , 'blue_down' ],
1882+ 9 : ['beacon' ],
1883+ 10 : ['red_up' , 'red_down' ],
1884+ 11 : ['blue_up' , 'blue_down' ]
1885+ }
1886+
1887+ on_red_up = None
1888+ on_red_down = None
1889+ on_blue_up = None
1890+ on_blue_down = None
1891+ on_beacon = None
1892+ on_change = None
1893+
1894+ def __init__ (self , sensor = None , channel = 1 ):
1895+ if sensor is None :
1896+ self ._sensor = InfraredSensor ()
1897+ else :
1898+ self ._sensor = sensor
1899+
1900+ self ._channel = max (1 , min (4 , channel )) - 1
1901+ self ._state = set ([])
1902+
1903+ if self ._sensor .connected :
1904+ self ._sensor .mode = 'IR-REMOTE'
1905+
1906+ @property
1907+ def buttons_pressed (self ):
1908+ """
1909+ Returns list of currently pressed buttons.
1910+ """
1911+ return RemoteControl ._BUTTON_VALUES .get (self ._sensor .value (self ._channel ), [])
1912+
1913+ @property
1914+ def any (self ):
1915+ """
1916+ Checks if any button is pressed.
1917+ """
1918+ return bool (self .buttons_pressed )
1919+
1920+ def check_buttons (self , buttons = []):
1921+ return set (self .buttons_pressed ) == set (buttons )
1922+
1923+ @property
1924+ def red_up (self ):
1925+ """
1926+ Checks if `red_up` button is pressed
1927+ """
1928+ return 'red_up' in self .buttons_pressed
1929+
1930+ @property
1931+ def red_down (self ):
1932+ """
1933+ Checks if `red_down` button is pressed
1934+ """
1935+ return 'red_down' in self .buttons_pressed
1936+
1937+ @property
1938+ def blue_up (self ):
1939+ """
1940+ Checks if `blue_up` button is pressed
1941+ """
1942+ return 'blue_up' in self .buttons_pressed
1943+
1944+ @property
1945+ def blue_down (self ):
1946+ """
1947+ Checks if `blue_down` button is pressed
1948+ """
1949+ return 'blue_down' in self .buttons_pressed
1950+
1951+ @property
1952+ def beacon (self ):
1953+ """
1954+ Checks if `beacon` button is pressed
1955+ """
1956+ return 'beacon' in self .buttons_pressed
1957+
1958+ def process (self ):
1959+ new_state = set (self .buttons_pressed )
1960+ old_state = self ._state
1961+ self ._state = new_state
1962+
1963+ state_diff = new_state .symmetric_difference (old_state )
1964+ for button in state_diff :
1965+ handler = getattr (self , 'on_' + button )
1966+ if handler is not None : handler (button in new_state )
1967+
1968+ if self .on_change is not None and state_diff :
1969+ self .on_change ([(button , button in new_state ) for button in state_diff ])
1970+
18671971#~autogen generic-class classes.powerSupply>currentClass
18681972
18691973class PowerSupply (Device ):
@@ -2276,106 +2380,3 @@ def update(self):
22762380 else :
22772381 raise Exception ("Not supported" )
22782382
2279-
2280- class RemoteControl (object ):
2281- """
2282- EV3 Remote Control
2283- """
2284-
2285- _BUTTON_VALUES = {
2286- 1 : ['red_up' ],
2287- 2 : ['red_down' ],
2288- 3 : ['blue_up' ],
2289- 4 : ['blue_down' ],
2290- 5 : ['red_up' , 'blue_up' ],
2291- 6 : ['red_up' , 'blue_down' ],
2292- 7 : ['red_down' , 'blue_up' ],
2293- 8 : ['red_down' , 'blue_down' ],
2294- 9 : ['beacon' ],
2295- 10 : ['red_up' , 'red_down' ],
2296- 11 : ['blue_up' , 'blue_down' ]
2297- }
2298-
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-
2306- def __init__ (self , sensor = None , channel = 1 ):
2307- if sensor is None :
2308- self ._sensor = InfraredSensor ()
2309- else :
2310- self ._sensor = sensor
2311-
2312- self ._channel = max (1 , min (4 , channel )) - 1
2313- self ._state = set ([])
2314-
2315- if self ._sensor .connected :
2316- self ._sensor .mode = 'IR-REMOTE'
2317-
2318- @property
2319- def buttons_pressed (self ):
2320- """
2321- Returns list of currently pressed buttons.
2322- """
2323- return RemoteControl ._BUTTON_VALUES .get (self ._sensor .value (self ._channel ), [])
2324-
2325- @property
2326- def any (self ):
2327- """
2328- Checks if any button is pressed.
2329- """
2330- return bool (self .buttons_pressed )
2331-
2332- def check_buttons (self , buttons = []):
2333- return set (self .buttons_pressed ) == set (buttons )
2334-
2335- @property
2336- def red_up (self ):
2337- """
2338- Checks if `red_up` button is pressed
2339- """
2340- return 'red_up' in self .buttons_pressed
2341-
2342- @property
2343- def red_down (self ):
2344- """
2345- Checks if `red_down` button is pressed
2346- """
2347- return 'red_down' in self .buttons_pressed
2348-
2349- @property
2350- def blue_up (self ):
2351- """
2352- Checks if `blue_up` button is pressed
2353- """
2354- return 'blue_up' in self .buttons_pressed
2355-
2356- @property
2357- def blue_down (self ):
2358- """
2359- Checks if `blue_down` button is pressed
2360- """
2361- return 'blue_down' in self .buttons_pressed
2362-
2363- @property
2364- def beacon (self ):
2365- """
2366- Checks if `beacon` button is pressed
2367- """
2368- 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