#ifndef __BSP_BEEP_H
#define __BSP_BEEP_H
#define BeepPwmGPIO P24
typedef enum
{
BEEP_OFF = 0,
BEEP_ON,
BEEP_BLINKING,
} BEEP_Type;
enum
{
S_BEEP_INIT,
S_BEEP_ON,
S_BEEP_OFF,
S_BEEP_BLINK_START,
S_BEEP_BLINK_ON,
S_BEEP_BLINK_OFF,
S_BEEP_BLINK_END,
};
typedef struct
{
unsigned char state;
BEEP_Type Type;
unsigned char count;
unsigned short ticks;
unsigned short ticksCnt;
} BEEP_T;
extern BEEP_T beep_t;
void BEEP_On(void);
void BEEP_Off(void);
void BEEP_InitHard(void);
void BEEP_update(BEEP_T *beep);
void BEEP(BEEP_T *beep, BEEP_Type Type, unsigned char count, unsigned char ticks);
#endif
void BEEP_update(BEEP_T *beep)
{
static bit BEEP_OnOff = 0;
if (beep->state == S_BEEP_INIT)
{
if (beep->Type == BEEP_OFF)
{
beep->state = S_BEEP_OFF;
}
else if (beep->Type == BEEP_ON)
{
beep->state = S_BEEP_ON;
}
else if (beep->Type == BEEP_BLINKING)
{
beep->state = S_BEEP_BLINK_START;
}
}
if (beep->state == S_BEEP_OFF)
{
BEEP_OnOff = 0;
}
else if (beep->state == S_BEEP_ON)
{
BEEP_OnOff = 1;
}
else if (beep->state == S_BEEP_BLINK_START)
{
if (beep->count > 0)
{
beep->count--;
beep->ticks = beep->ticksCnt;
beep->state = S_BEEP_BLINK_ON;
}
else
{
beep->state = S_BEEP_BLINK_END;
}
}
else if (beep->state == S_BEEP_BLINK_ON)
{
BEEP_OnOff = 1;
if (--beep->ticks == 0)
{
beep->ticks = beep->ticksCnt;
beep->state = S_BEEP_BLINK_OFF;
}
}
else if (beep->state == S_BEEP_BLINK_OFF)
{
BEEP_OnOff = 0;
if (--beep->ticks == 0)
{
beep->state = S_BEEP_BLINK_START;
}
}
else if (beep->state == S_BEEP_BLINK_END)
{
BEEP_OnOff = 0;
beep->state = S_BEEP_INIT;
beep->Type = BEEP_OFF;
}
if (BEEP_OnOff)
{
BEEP_On();
}
else
{
BEEP_Off();
}
}