Skip to content

Commit

Permalink
Fix issue #353, initialising glitch filter
Browse files Browse the repository at this point in the history
  • Loading branch information
BTPankow authored and guymcswain committed Jun 26, 2020
1 parent bea5363 commit b9e57f6
Showing 1 changed file with 15 additions and 13 deletions.
28 changes: 15 additions & 13 deletions pigpio.c
Original file line number Diff line number Diff line change
Expand Up @@ -950,6 +950,7 @@ typedef struct
uint32_t nfRBitV;

uint32_t gfSteadyUs;
uint8_t gfInitialised;
uint32_t gfTick;
uint32_t gfLBitV;
uint32_t gfRBitV;
Expand Down Expand Up @@ -5685,7 +5686,7 @@ unsigned alert_delays[]=
static void alertGlitchFilter(gpioSample_t *sample, int numSamples)
{
int i, j, diff;
uint32_t steadyUs, changedTick, RBitV, LBitV;
uint32_t steadyUs, changedTick, RBitV, LBitV, initialised;
uint32_t bit, bitV;

for (i=0; i<=PI_MAX_USER_GPIO; i++)
Expand All @@ -5694,6 +5695,17 @@ static void alertGlitchFilter(gpioSample_t *sample, int numSamples)

if (monitorBits & bit & gFilterBits)
{
initialised = gpioAlert[i].gfInitialised;
if (!initialised && numSamples > 0)
{
/* Initialise filter with first sample */
bitV = sample[0].level & bit;
gpioAlert[i].gfRBitV = bitV;
gpioAlert[i].gfLBitV = bitV;
gpioAlert[i].gfTick = sample[0].tick;
gpioAlert[i].gfInitialised = 1;
}

steadyUs = gpioAlert[i].gfSteadyUs;
RBitV = gpioAlert[i].gfRBitV;
LBitV = gpioAlert[i].gfLBitV;
Expand Down Expand Up @@ -12335,18 +12347,8 @@ int gpioGlitchFilter(unsigned gpio, unsigned steady)

if (steady)
{
gpioAlert[gpio].gfTick = systReg[SYST_CLO];

if (gpioRead_Bits_0_31() & (1<<gpio))
{
gpioAlert[gpio].gfLBitV = (1<<gpio);
gpioAlert[gpio].gfRBitV = 0 ;
}
else
{
gpioAlert[gpio].gfLBitV = 0 ;
gpioAlert[gpio].gfRBitV = (1<<gpio);
}
/* Initialise values next time we process alerts */
gpioAlert[gpio].gfInitialised = 0;
}

gpioAlert[gpio].gfSteadyUs = steady;
Expand Down

0 comments on commit b9e57f6

Please sign in to comment.