AudioConsole/AudioConsole.X/Source/VolumeTransducer.c
2025-02-23 18:02:35 -05:00

158 lines
4.2 KiB
C

#include "VolumeTransducer.h"
#include "define.h"
#include "BoardCfg.h"
#include "timer.h"
#include <stdio.h>
#include "Syslog.h"
#include "AudioConsole.h"
int mDebouncingBureau = false;
int mDebouncingCuisine = false;
int mBureauVolume = 0;
int mCuisineVolume = 0;
char VolDebug[100];
int VolumeTransducerInit()
{
//Bureau volume transducer
IEC0bits.INT1IE = 0;
IFS0bits.INT1IF = 0;
if(BUREAU_VOL_POT_CCW_PIN == 1)
{
INTCONbits.INT1EP = 0; //Falling edge
}
else
{
INTCONbits.INT1EP = 1; //Rising edge
}
IPC1bits.INT1IP = 2;
IPC1bits.INT1IS = 1;
IEC0bits.INT1IE = 1;
//Cuisine volume transducer
IEC0bits.INT3IE = 0;
IFS0bits.INT3IF = 0;
if(CUISINE_VOL_POT_CCW_PIN == 1)
{
INTCONbits.INT3EP = 0; //Falling edge
}
else
{
INTCONbits.INT3EP = 1; //Rising edge
}
IPC3bits.INT3IP = 2;
IPC3bits.INT3IS = 2;
IEC0bits.INT3IE = 1;
mDebouncingBureau = false;
mDebouncingCuisine = false;
return RET_OK;
}
int VolumeTransducerTick()
{
if(mDebouncingBureau == true)
{
if(IsTimerExpired(BUREAU_VOLUME_TRANSDUCER_TIMER) == 1)
{
TimerStop(BUREAU_VOLUME_TRANSDUCER_TIMER);
if(BUREAU_VOL_POT_CCW_PIN == BUREAU_VOL_POT_CW_PIN)
{
AudioConsoleVolumeDown(AUDIO_CONSOLE_SALON_ZONE);
mBureauVolume += (-1 * VOLUME_TRANSDUCER_INCREMENT);
// mBureauChange = 0;
sprintf(VolDebug,"Bureau: %d\n",mBureauVolume);
SyslogNewString(VolDebug);
// mBureauChange = -1;
}
else
{
AudioConsoleVolumeUp(AUDIO_CONSOLE_SALON_ZONE);
mBureauVolume += (VOLUME_TRANSDUCER_INCREMENT);
// mBureauChange = 0;
sprintf(VolDebug,"Bureau: %d\n",mBureauVolume);
SyslogNewString(VolDebug);
// mBureauChange = 1;
}
if(BUREAU_VOL_POT_CCW_PIN == 1)
{
INTCONbits.INT1EP = 0; //Falling edge
}
else
{
INTCONbits.INT1EP = 1; //Rising edge
}
IFS0bits.INT1IF = 0;
IEC0bits.INT1IE = 1;
mDebouncingBureau = false;
}
}
if(mDebouncingCuisine == true)
{
if(IsTimerExpired(CUISINE_VOLUME_TRANSDUCER_TIMER) == 1)
{
TimerStop(CUISINE_VOLUME_TRANSDUCER_TIMER);
if(CUISINE_VOL_POT_CCW_PIN == CUISINE_VOL_POT_CW_PIN)
{
AudioConsoleVolumeDown(AUDIO_CONSOLE_CUISINE_ZONE);
mCuisineVolume += (-1 * VOLUME_TRANSDUCER_INCREMENT);
// mBureauChange = 0;
sprintf(VolDebug,"Cuisine: %d\n",mCuisineVolume);
SyslogNewString(VolDebug);
// mBureauChange = -1;
}
else
{
AudioConsoleVolumeUp(AUDIO_CONSOLE_CUISINE_ZONE);
mCuisineVolume += (VOLUME_TRANSDUCER_INCREMENT);
// mBureauChange = 0;
sprintf(VolDebug,"Cuisine: %d\n",mCuisineVolume);
SyslogNewString(VolDebug);
// mBureauChange = 1;
}
if(CUISINE_VOL_POT_CCW_PIN == 1)
{
INTCONbits.INT3EP = 0; //Falling edge
}
else
{
INTCONbits.INT3EP = 1; //Rising edge
}
IFS0bits.INT3IF = 0;
IEC0bits.INT3IE = 1;
mDebouncingCuisine = false;
}
}
}
void __ISR(_EXTERNAL_1_VECTOR, ipl2) BureauTransducerInterrupt(void)
{
IEC0bits.INT1IE = 0;
TimerStart(BUREAU_VOLUME_TRANSDUCER_TIMER,VOLUME_TRANSDUCER_DEBOUNCE_TIMEOUT);
mDebouncingBureau = true;
IFS0bits.INT1IF = 0; //Clear interrupt flag
}
void __ISR(_EXTERNAL_3_VECTOR, ipl2) CuisineTransducerInterrupt(void)
{
IEC0bits.INT3IE = 0;
TimerStart(CUISINE_VOLUME_TRANSDUCER_TIMER,VOLUME_TRANSDUCER_DEBOUNCE_TIMEOUT);
mDebouncingCuisine = true;
IFS0bits.INT3IF = 0; //Clear interrupt flag
}