#ifndef _Voice_Play_Buzzer_H_
#define _Voice_Play_Buzzer_H_

//暂对声音报警数量没有限制

#include "Alarm_typdef.h"

/////声音组合后的种类////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
typedef enum
{
 //单音节声音索引		 	
	Buzzer_Variety_Single_Loop=0,   //长鸣报警
	Buzzer_Variety_Single_1HZ,
	Buzzer_Variety_Single_2HZ,
	Buzzer_Variety_Single_4HZ,
	Buzzer_Variety_Single_25HZ,
	Buzzer_Variety_Single_8HZ,
	
	Buzzer_Variety_Single_Tick,
	Buzzer_Variety_Single_Tock,

	Buzzer_Variety_MAX, //最大数，

} _BuzzerVariety;

#define Buzzer_LoopOnTime   0xFFFF    //长鸣音播放时间
//蜂鸣器播放中一个音节的组成部分
typedef struct
{
	INT16U Frequency;   //当前音节 对应的频率
	INT16U Charge_Time; //充电时间
	INT16U PlayON_Time; //正常播放时间
	INT16U Fade_Time;   //淡出时间
}_BuzzerSyllable;

//声音报警固定信息结构体
typedef struct
{
//_BuzzerVariety
	INT8U  Variety;   //声音种类序号//非音源序号//通过此序号查找声音属性表

} _BuzzerAlarmVarietyInfor;

//有多少个双音节的音源//数值上与单音节的第一个索引号相等
#define Buzzer_Double_Syllable_MAX   0

extern const _BuzzerAlarmVarietyInfor     BuzzerAlarmVarietyInforTable[SoundAlarm_MAX] ;

extern const _BuzzerSyllable BuzzerAttribute[Buzzer_Variety_MAX + Buzzer_Double_Syllable_MAX];        
///////////////////////////////////////////////////////////////////////////////////////////////////////
//蜂鸣器相关初始化//首次上电调用一次即可
//MAX_NUM //外部传入声音报警最大数量
//Single_First//外部传入//双音节音源的数量//数值上与单音节的第一个索引号相等
extern void Buzzer_Play_Init(_SoundAlarm MAX_NUM, _BuzzerVariety Single_First);
//返回当前蜂鸣器播放状态
//0空闲状态，可执行休眠动作//非零，正在播放某个音源，不建议执行休眠动作
extern INT8U Buzzer_Get_PlayStatus(void);
///声音播放计时函数 计时//几毫秒调用一次就传入多少
extern void Buzzer_Play_Time_Count(INT8U Time_NUM);
//具体声音播放函数//传入要播放的报警索引//PWM初始化完成之后方可调用
extern void Buzzer_Play_Handle(_SoundAlarm SoundAlarmNew);
///////////////////////////////////////////////////////////////////////////////////////////////////////
//蜂鸣器正极//开关// 1开启  0关闭
extern void   Buzzer_Positive_Enable(INT8U ON_OFF);
//蜂鸣器负极//开关// 1开启  0关闭
extern void   Buzzer_Negative_Enable(INT8U ON_OFF);
//蜂鸣器负极//设置PWM频率，仅设置频率，不一定开启
extern void   Buzzer_Negative_Set_Frequency(INT16U   Frequency);
//蜂鸣器负极//设置PWM占空比//0%关闭   100%开启   
//大于100的按照100来处理
extern void   Buzzer_Negative_Set_Duty(INT8U   Duty);

//声音开始播放时会调用一次该函数
extern void  Buzzer_Play_Start(_SoundAlarm    SoundAlarmNew) ;    
//一个完整的声音播放完成之后会调用一次该函数
extern void  Buzzer_Play_Done(_SoundAlarm    SoundAlarmNew)   ;


extern void Buzzer_Play_Sleep(void);


#endif