• 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
      • Eingebettete Systemsoftware
      • Verteilte Systeme
    • Projekte
      • AIMBOS
      • BALu
      • BFT2Chain
      • DOSS
      • Mirador
      • NEON
      • PAVE
      • ResPECT
      • Watwa
    • Projektkampagnen
      • maRE
    • Seminar
      • Systemsoftware
    Portal Forschung
  • Publikationen
  • Lehre
    • Sommersemester 2025
      • Applied Software Architecture
      • Ausgewählte Kapitel der Systemsoftware
      • Betriebssystemtechnik
      • Projekt angewandte Systemsoftwaretechnik
      • System-Level Programming
      • Systemnahe Programmierung in C
      • Systemprogrammierung 1
      • Verteilte Systeme
    • Wintersemester 2024/25
      • Betriebssysteme
      • Middleware – Cloud Computing
      • Systemprogrammierung 2
      • Verlässliche Echtzeitsysteme
      • Virtuelle Maschinen
      • Web-basierte Systeme
    Portal Lehre
  • Examensarbeiten
  1. Startseite
  2. Extern

Extern

Bereichsnavigation: Lehre
  • Systemnahe Programmierung in C
    • Vorlesung
      • Übung
        • Folien
        • Aufgaben
        • SPiCboard
          • Bauanleitung
            • Programmieren im CIP
              • Programmieren von zu Hause
                • libspicboard-Doku
                  • SPiC-IDE
                    • SPiCsim
                      • FAQ
                        • Projekte
                        • Linux libc-Doku
                        • Prüfung
                          • Evaluation
                            • Intern

                            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 */
                            33typedef enum {
                            34 BUTTON0 = 0, /**< Button 0 */
                            35 BUTTON1 = 1 /**< Button 1 */
                            36} __attribute__ ((__packed__)) BUTTON;
                            37
                            38CHECK_ENUM_SIZE(BUTTON, 1)
                            39
                            40
                            41/**
                            42 * \brief States for buttons
                            43 *
                            44 * Pressed and released states for buttons.
                            45 */
                            46typedef 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
                            52CHECK_ENUM_SIZE(BUTTONSTATE, 1)
                            53
                            54/**
                            55 * \brief Events for buttons
                            56 *
                            57 * Down (on press) and up (on release) events for buttons.
                            58 */
                            59typedef enum {
                            60 ONPRESS = 0, /**< Button is pressed */
                            61 ONRELEASE = 2 /**< Button is released */
                            62} __attribute__ ((__packed__)) BUTTONEVENT;
                            63
                            64CHECK_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 */
                            75typedef 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 */
                            92int8_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 */
                            108int8_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 */
                            117BUTTONSTATE 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