Source code for grove.button.button
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# The MIT License (MIT)
#
# Grove Base Hat for the Raspberry Pi, used to connect grove sensors.
# Copyright (C) 2018 Seeed Technology Co.,Ltd.
#
'''
'''
__all__ = ["Button"]
[docs]
class Button(object):
'''
Button Base Class
provide event callback ability to derived class
Args:
pin(int): optional, for GPIO type button, it's the GPIO pin number.
'''
# event bits
EV_RAW_STATUS = 1 << 0
EV_SINGLE_CLICK = 1 << 1
EV_DOUBLE_CLICK = 1 << 2
EV_LONG_PRESS = 1 << 3
EV_LEVEL_CHANGED = 1 << 4
# EV_HAS = 1 << 31
pins = []
def __init__(self, pin = 0):
self.__on_obj = None
self.__on_event = None
self.__event = 0
self.pins.append(pin)
# To use with button array
self._index = self.pins.index(pin)
[docs]
def get_on_event(self):
'''
Get the event receiving object and callback member function
Returns:
(obj, event_callback): a pair consist of event receiving object
and callback member function
'''
return self.__on_obj, self.__on_event
[docs]
def on_event(self, obj, callback):
'''
Set the event receiving object and it'callback member function
Args:
obj(object) : the object to receiving event
callback(callable): a member function of `obj`,
will be called when there is button event
callback prototype:
callback(obj, evt_dict)
callback argument:
Args:
obj(object) : the object that is `obj` argument of :class:`on_event`
evt_dict(dict): the event dictionary include items:
- index
- code
- pressed
- time
Returns: none
'''
if not obj:
return
if not callable(callback):
return
self.__on_obj, self.__on_event = obj, callback
[docs]
def is_pressed(self, index = 0):
'''
Get the button status if it's being pressed ?
Args:
index(int): optional, the index number of which button to be checked.
must be specified only if it's a multiple button device.
Returns:
(bool): True if the button is being pressed.
False if not.
'''
return False
# call by derivate class
def _send_event(self, event, pressed, tm):
if not callable(self.__on_event):
return
evt = {
'index': self._index,
'code' : event,
'pressed': pressed,
'time' : tm,
}
self.__on_event(self.__on_obj, evt)