diff --git a/main.c b/main.c new file mode 100644 index 0000000..391ad5f --- /dev/null +++ b/main.c @@ -0,0 +1,67 @@ +#include +#include +#include +#include +#include + +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; +}