• Navigation überspringen
  • Zur Navigation
  • Zum Seitenende
Organisationsmenü öffnen Organisationsmenü schließen
Friedrich-Alexander-Universität Lehrstuhl für Informatik 4 (Systemsoftware)
  • FAUZur zentralen FAU Website
  1. Friedrich-Alexander-Universität
  2. Technische Fakultät
  3. Department Informatik
Suche öffnen
  • English
  • Campo
  • StudOn
  • FAUdir
  • Stellenangebote
  • Lageplan
  • Hilfe im Notfall
  1. Friedrich-Alexander-Universität
  2. Technische Fakultät
  3. Department Informatik
Friedrich-Alexander-Universität Lehrstuhl für Informatik 4 (Systemsoftware)
Menu Menu schließen
  • Lehrstuhl
    • Team
    • Aktuelles
    • Kontakt und Anfahrt
    • Leitbild
    • 50-jähriges Jubiläum
    Portal Lehrstuhl
  • Forschung
    • Forschungsbereiche
      • Betriebssysteme
      • Confidential Computing
      • Embedded Systems Software
      • Verteilte Systeme
    • Projekte
      • AIMBOS
      • BALu
      • BFT2Chain
      • DOSS
      • Mirador
      • NEON
      • PAVE
      • ResPECT
      • Watwa
    • Projektkampagnen
      • maRE
    • Seminar
      • Systemsoftware
    Portal Forschung
  • Publikationen
  • Lehre
    • Wintersemester 2025/26
      • Systemprogrammierung 2
      • Betriebssysteme
      • Middleware – Cloud Computing
      • Echtzeitsysteme
      • Virtuelle Maschinen
      • Web-basierte Systeme
      • Projekt angewandte Systemsoftwaretechnik
      • Aktuelle Entwicklung in Verteilten und Objektorientierten Betriebssystemen (für Bachelor-/Masterarbeit)
    • Sommersemester 2026
      • Applied Software Architecture
      • Betriebssystemsicherheit
      • Betriebssystemtechnik
      • System-Level Programming
      • Systemnahe Programmierung in C
      • Systemprogrammierung 1
      • Verlässliche Echtzeitsysteme
      • Verteilte Systeme
    Portal Lehre
  • Examensarbeiten
  1. Startseite
  2. Extern

Extern

Bereichsnavigation: Lehre
  • System-Level Programming
    • Exam
      • Contact

    SPiCboard

    • libspicboard
    button.h
    Go to the documentation of this file.
    1 #ifndef BUTTON_H
    2 #define BUTTON_H
    3 
    4 #include <stdint.h>
    5 #include "check.h"
    6 
    7 /**
    8  * \addtogroup Button
    9  *
    10  * \brief Enables event-driven and polling access to the buttons of the SPiCboard
    11  *
    12  * The SPiCboard is equipped with two buttons. Button 0 is debounced in
    13  * hardware, whereas Button 1 needs to be debounced in software by the
    14  * button module. Debouncing is transparent to the application, that
    15  * can use both buttons through the provided interface without the
    16  * need to care about debouncing.
    17  *
    18  * The debouncing code makes use of a timer. When no callbacks
    19  * are registered for Button 1, the debouncing code is disabled and all
    20  * alarms registered at the timer should be canceled.
    21  *
    22  * The button module uses dynamic memory management to maintain the
    23  * callback queues.
    24  *
    25  * @{
    26  * \file button.h
    27  * \version \$Rev: 7715 $
    28  */
    29 
    30 /**
    31  * \brief Identifiers for all available buttons
    32  */
    33 typedef enum {
    34  BUTTON0 = 0, /**< Button 0 */
    35  BUTTON1 = 1 /**< Button 1 */
    36 } __attribute__ ((__packed__)) BUTTON;
    37 
    38 CHECK_ENUM_SIZE(BUTTON, 1)
    39 
    40 
    41 /**
    42  * \brief States for buttons
    43  *
    44  * Pressed and released states for buttons.
    45  */
    46 typedef enum {
    47  UNKNOWN = 0, /**< Buttonstate is unknown (invalid button?) */
    48  PRESSED = 4, /**< Button is pressed */
    49  RELEASED = 8 /**< Button is released */
    50 } __attribute__ ((__packed__)) BUTTONSTATE;
    51 
    52 CHECK_ENUM_SIZE(BUTTONSTATE, 1)
    53 
    54 /**
    55  * \brief Events for buttons
    56  *
    57  * Down (on press) and up (on release) events for buttons.
    58  */
    59 typedef enum {
    60  ONPRESS = 0, /**< Button is pressed */
    61  ONRELEASE = 2 /**< Button is released */
    62 } __attribute__ ((__packed__)) BUTTONEVENT;
    63 
    64 CHECK_ENUM_SIZE(BUTTONEVENT, 1)
    65 
    66 /**
    67  * \brief Type for button event callback functions
    68  *
    69  * A button callback function is called on the interrupt level whenever
    70  * an event at a button occurs that the function was registered for.
    71  * The callback function is passed the button id and the type of event
    72  * that occurred. This way, the same callback function can be registered
    73  * for different buttons and events.
    74  */
    75 typedef void (*BUTTONCALLBACK) (BUTTON, BUTTONEVENT);
    76 
    77 /**
    78  * \brief Register a callback function for a button event
    79  *
    80  * Interrupts must be enabled to receive the callbacks.
    81  *
    82  * \param btn the id of the button
    83  * \param eve the type of event that the callback function should be invoked for.
    84  * \param callback pointer to the callback function. This function is called from the
    85  * interrupt handler.
    86  *
    87  * \retval 0 success,
    88  * \retval !0 error
    89  *
    90  * \sa sb_button_unregisterCallback
    91  */
    92 int8_t sb_button_registerCallback(BUTTON btn, BUTTONEVENT eve, BUTTONCALLBACK callback);
    93 
    94 /**
    95  * \brief Unregister a callback function for a button event
    96  *
    97  * \param btn the id of the button
    98  * \param eve the type of event that the callback function should be invoked for.
    99  * \param callback pointer to the callback function
    100  *
    101  * \return 0 on success, negative value on error
    102  *
    103  * \retval 0 success
    104  * \retval -1 the callback function was not registered with the given button/event combination
    105  *
    106  * \sa sb_button_registerCallback
    107  */
    108 int8_t sb_button_unregisterCallback(BUTTON btn, BUTTONEVENT eve, BUTTONCALLBACK callback);
    109 
    110 /**
    111  * \brief Query the current state of a button
    112  *
    113  * \param btn id of the button
    114  *
    115  * \return the buttons current state (pressed or released - or unknown if invalid button) as a \ref BUTTONSTATE
    116  */
    117 BUTTONSTATE sb_button_getState(BUTTON btn);
    118 
    119 /** @}*/
    120 
    121 #endif
    122 
    check.h
    sb_button_getState
    BUTTONSTATE sb_button_getState(BUTTON btn)
    Query the current state of a button.
    sb_button_registerCallback
    int8_t sb_button_registerCallback(BUTTON btn, BUTTONEVENT eve, BUTTONCALLBACK callback)
    Register a callback function for a button event.
    sb_button_unregisterCallback
    int8_t sb_button_unregisterCallback(BUTTON btn, BUTTONEVENT eve, BUTTONCALLBACK callback)
    Unregister a callback function for a button event.
    BUTTON
    BUTTON
    Identifiers for all available buttons.
    Definition: button.h:33
    BUTTONEVENT
    BUTTONEVENT
    Events for buttons.
    Definition: button.h:59
    BUTTONSTATE
    BUTTONSTATE
    States for buttons.
    Definition: button.h:46
    BUTTONCALLBACK
    void(* BUTTONCALLBACK)(BUTTON, BUTTONEVENT)
    Type for button event callback functions.
    Definition: button.h:75
    BUTTON0
    @ BUTTON0
    Definition: button.h:34
    BUTTON1
    @ BUTTON1
    Definition: button.h:35
    ONPRESS
    @ ONPRESS
    Definition: button.h:60
    ONRELEASE
    @ ONRELEASE
    Definition: button.h:61
    PRESSED
    @ PRESSED
    Definition: button.h:48
    UNKNOWN
    @ UNKNOWN
    Definition: button.h:47
    RELEASED
    @ RELEASED
    Definition: button.h:49
    CHECK_ENUM_SIZE
    #define CHECK_ENUM_SIZE(VAR, LEN)
    Definition: check.h:71
    Friedrich-Alexander-Universität
    Erlangen-Nürnberg

    Schlossplatz 4
    91054 Erlangen
    • Impressum
    • Datenschutz
    • Barrierefreiheit
    • Facebook
    • RSS Feed
    • Xing
    Nach oben