Brick Groove Machine 0.9.3
Firmware embarqué pour contrôleur/synthé Brick
 
Chargement...
Recherche...
Aucune correspondance
Référence du fichier drv_buttons.c

Driver matériel pour la lecture des boutons via registres à décalage 74HC165. Plus de détails...

#include "drv_buttons.h"
#include "ch.h"
#include "hal.h"
#include "brick_config.h"

Macros

#define SR_LOAD_LINE   PAL_LINE(GPIOB, 0)
 Ligne LOAD des registres 74HC165 (Latch des entrées).
 
#define SR_CLK_LINE   PAL_LINE(GPIOB, 1)
 Ligne CLOCK pour décalage série.
 
#define SR_DATA_LINE   PAL_LINE(GPIOG, 11)
 Ligne DATA (sortie série des registres).
 

Fonctions

void drv_buttons_start (void)
 Initialise le driver boutons et démarre le thread de scan.
 
bool drv_button_is_pressed (int id)
 Vérifie l’état courant d’un bouton.
 
bool drv_buttons_poll (button_event_t *evt, systime_t timeout)
 Récupère un événement de bouton depuis la mailbox.
 

Description détaillée

Driver matériel pour la lecture des boutons via registres à décalage 74HC165.

Ce module gère la capture, le filtrage et la détection d’événements des boutons physiques de la surface Brick.

Les 74HC165 sont lus en série à l’aide de lignes :

  • LOAD (latch parallèle),
  • CLK (décalage série),
  • DATA (sortie série des registres chainés).

Le driver :

  • effectue un scan périodique (~200 Hz),
  • détecte automatiquement les transitions (pression / relâchement),
  • publie les événements dans une mailbox pour consommation asynchrone,
  • offre un accès instantané à l’état courant de chaque bouton.

Documentation des macros

◆ SR_CLK_LINE

#define SR_CLK_LINE   PAL_LINE(GPIOB, 1)

Ligne CLOCK pour décalage série.

◆ SR_DATA_LINE

#define SR_DATA_LINE   PAL_LINE(GPIOG, 11)

Ligne DATA (sortie série des registres).

◆ SR_LOAD_LINE

#define SR_LOAD_LINE   PAL_LINE(GPIOB, 0)

Ligne LOAD des registres 74HC165 (Latch des entrées).

Documentation des fonctions

◆ drv_button_is_pressed()

bool drv_button_is_pressed ( int  id)

Vérifie l’état courant d’un bouton.

Paramètres
idIdentifiant du bouton (0 à NUM_BUTTONS-1)
Renvoie
true si le bouton est pressé, sinon false.

◆ drv_buttons_poll()

bool drv_buttons_poll ( button_event_t evt,
systime_t  timeout 
)

Récupère un événement de bouton depuis la mailbox.

Lit un événement de bouton dans la mailbox.

Paramètres
[out]evtStructure où stocker l’événement lu.
[in]timeoutDélai maximum d’attente (ex. TIME_IMMEDIATE ou TIME_INFINITE).
Renvoie
true si un événement a été lu, sinon false (timeout).

◆ drv_buttons_start()

void drv_buttons_start ( void  )

Initialise le driver boutons et démarre le thread de scan.

Initialise le driver des boutons et démarre le thread de lecture.

Configure les lignes GPIO, initialise la mailbox d’événements et lance le thread périodique de lecture.