Start with wiringPi and libmpdclient
0 parent commit 9b2d484bec1d780bf9a68a170cff870b63ee5fb6
@Alex Tucker Alex Tucker authored on 14 Oct 2018
Showing 1 changed file
View
68
main.c 0 → 100644
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <wiringPi.h>
#include <mpd/client.h>
 
pthread_cond_t isr_cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t isr_mtx = PTHREAD_MUTEX_INITIALIZER;
unsigned int pin_pressed= 0;
 
#define FASTFORWARD_PIN 5
#define PLAYPAUSE_PIN 6
#define REWIND_PIN 13
#define VOLUMEDOWN_PIN 26
#define ONOFF_PIN 12
#define VOLUMEUP_PIN 16
 
void serviceInterrupt(int pin)
{
pthread_mutex_lock(&isr_mtx);
pin_pressed = pin;
pthread_cond_signal(&isr_cond);
pthread_mutex_unlock(&isr_mtx);
}
 
void fastForwardInterrupt() { serviceInterrupt(FASTFORWARD_PIN); }
void playPauseInterrupt() { serviceInterrupt(PLAYPAUSE_PIN); }
void rewindInterrupt() { serviceInterrupt(REWIND_PIN); }
void volumeDownInterrupt() { serviceInterrupt(VOLUMEDOWN_PIN); }
void onOffInterrupt() { serviceInterrupt(ONOFF_PIN); }
void volumeUpInterrupt() { serviceInterrupt(VOLUMEUP_PIN); }
 
int main()
{
struct mpd_connection *conn;
conn = mpd_connection_new(NULL, 0, 0);
if (mpd_connection_get_error(conn) != MPD_ERROR_SUCCESS) {
mpd_connection_free(conn);
return EXIT_FAILURE;
}
wiringPiSetupGpio();
pullUpDnControl(FASTFORWARD_PIN, PUD_UP);
pullUpDnControl(PLAYPAUSE_PIN, PUD_UP);
pullUpDnControl(REWIND_PIN, PUD_UP);
pullUpDnControl(VOLUMEDOWN_PIN, PUD_UP);
pullUpDnControl(ONOFF_PIN, PUD_UP);
pullUpDnControl(VOLUMEUP_PIN, PUD_UP);
wiringPiISR(FASTFORWARD_PIN, INT_EDGE_FALLING, &fastForwardInterrupt);
wiringPiISR(PLAYPAUSE_PIN, INT_EDGE_FALLING, &playPauseInterrupt);
wiringPiISR(REWIND_PIN, INT_EDGE_FALLING, &rewindInterrupt);
wiringPiISR(VOLUMEDOWN_PIN, INT_EDGE_FALLING, &volumeDownInterrupt);
wiringPiISR(ONOFF_PIN, INT_EDGE_FALLING, &onOffInterrupt);
wiringPiISR(VOLUMEUP_PIN, INT_EDGE_FALLING, &volumeUpInterrupt);
 
for(;;) {
pthread_mutex_lock(&isr_mtx);
while (pin_pressed == 0) {
pthread_cond_wait(&isr_cond, &isr_mtx);
}
printf("Pressed %d\n", pin_pressed);
pin_pressed = 0;
pthread_mutex_unlock(&isr_mtx);
}
 
return 0;
}