Sound_Alarm.h 16.4 KB
Newer Older
时昊's avatar
时昊 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
#ifndef SOUND_ALARM_H__
#define SOUND_ALARM_H__
/*本文件实现声音报警排序及具体播放事宜*/
/*对于优先级而言,区分两种版本的报警策略,
1、所有报警优先级一定不同,按照报警枚举数值来定义优先级。
2、允许有同优先级存在。优先级不同的,按优先级顺序执行,优先级相同的,按照触发顺序执行。*/
/*********************************************************************************/
// #define SOUND_PLATFORM_16BIT
#ifdef SOUND_PLATFORM_16BIT
typedef unsigned char Sound_uint8_t;
typedef unsigned int  Sound_uint16_t;
typedef unsigned long Sound_uint32_t;
#else
typedef unsigned char      Sound_uint8_t;
typedef unsigned short     Sound_uint16_t;
typedef unsigned int       Sound_uint32_t;
typedef unsigned long long Sound_uint64_t;
#endif
/*********************************************************************************/
/*所有最小单位音源的枚举*/
typedef enum
{
    SOUND_SOURCE_0 = 0U,
    SOUND_SOURCE_1,
    SOUND_SOURCE_2,
    SOUND_SOURCE_3,
    SOUND_SOURCE_4,
    SOUND_SOURCE_RADAR_0,
    SOUND_SOURCE_RADAR_1,
    SOUND_SOURCE_RADAR_2,
    SOUND_SOURCE_RADAR_4,
    SOUND_SOURCE_RADAR_8,
    SOUND_SOURCE_TICK,
    SOUND_SOURCE_TOCK,
    SOUND_SOURCE_5,
    SOUND_SOURCE_6,
    SOUND_SOURCE_MAX,
} Sound_Source_en_t;
/*由各种音源组合后的声音种类。*/
/*该枚举必须和 stSoundVarietyAttribute 一一对应*/
typedef enum
{
    SOUND_VARIETY_0 = 0U,
    SOUND_VARIETY_1,
    SOUND_VARIETY_2,
    SOUND_VARIETY_3,
    SOUND_VARIETY_4,
    SOUND_VARIETY_RADAR_0,
    SOUND_VARIETY_RADAR_1,
    SOUND_VARIETY_RADAR_2,
    SOUND_VARIETY_RADAR_4,
    SOUND_VARIETY_RADAR_8,
    SOUND_VARIETY_TICK,
    SOUND_VARIETY_TOCK,
    SOUND_VARIETY_5,
    SOUND_VARIETY_6,
    SOUND_VARIETY_NO,
    SOUND_VARIETY_MAX,
} Sound_Variety_en_t;
/*所有声音报警列表
有优先级参数时按照优先级参数执行,
没有优先级参数时按照枚举数值比较优先级,数值越小优先级越高。*/
/*该枚举必须和 stSoundAlarmAttribute 一一对应*/
typedef enum
{
    SOUND_ALARM_VOLUME = 0U,            /*音量*/
    SOUND_ALARM_DPF,                    /*DPF再生中*/
    SOUND_ALARM_DOOR,                   /*门未关*/
69
    SOUND_ALARM_R_Gear,                 /*倒挡*/
时昊's avatar
时昊 committed
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
    SOUND_ALARM_RADAR_LOOP,             /*倒车雷达*/
    SOUND_ALARM_RADAR_8,                /*倒车雷达*/
    SOUND_ALARM_RADAR_4,                /*倒车雷达*/
    SOUND_ALARM_RADAR_2,                /*倒车雷达*/
    SOUND_ALARM_RADAR_1,                /*倒车雷达*/
    SOUND_ALARM_RADAR_0,                /*倒车雷达*/
    SOUND_ALARM_GEAR_P,                 /* P档相关 */
    SOUND_ALARM_START_IN_P,             /*请挂P档启动车辆*/
    SOUND_ALARM_PARK_IN_P,              /*仅限停车挂P档*/
    SOUND_ALARM_P_INVALID,              /*P档无效请用紧急解锁*/
    SOUND_ALARM_GEARBOX_HIGH_TEMP,      /*变速箱温度高*/
    SOUND_ALARM_GEARBOX_FAILURE,        /*变速箱严重故障*/
    SOUND_ALARM_TEMP,                   /*水温高*/
    SOUND_ALARM_ENGINE_LUBRICATE,       /*请检查引擎润滑系统*/
    SOUND_ALARM_PAR_FULL_MANUAL_RESET,  /*颗粒捕集器集满,请按手动复位*/
    SOUND_ALARM_PAR_FULL_SERVICE_RESET, /*颗粒捕集器集满,请联系服务站复位*/
    SOUND_ALARM_SPEED_LIMIT,            /*限速报警*/
    SOUND_ALARM_UREA,                   /*尿素报警*/
    SOUND_ALARM_UREA_2,                 /*尿素报警*/
    SOUND_ALARM_UREA_3,                 /*尿素报警*/
    SOUND_ALARM_UREA_4,                 /*尿素报警*/
    SOUND_ALARM_UREA_5,                 /*尿素报警*/
    SOUND_ALARM_UREA_6,                 /*尿素报警*/
    SOUND_ALARM_UREA_7,                 /*尿素报警*/
    SOUND_ALARM_UREA_8,                 /*尿素报警*/
    SOUND_ALARM_UREA_9,                 /*尿素报警*/
    SOUND_ALARM_UREA_10,                /*尿素报警*/
    SOUND_ALARM_UREA_11,                /*尿素报警*/
    SOUND_ALARM_UREA_12,                /*尿素报警*/
    SOUND_ALARM_UREA_13,                /*尿素报警*/
    SOUND_ALARM_UREA_14,                /*尿素报警*/
    SOUND_ALARM_UREA_15,                /*尿素报警*/
    SOUND_ALARM_TPMS,                   /*胎压异常*/
    SOUND_ALARM_TPMS_CONFIG_ERROR,      /*胎压配置错误*/
    SOUND_ALARM_SAFE_BELT,              /*安全带未系*/
  
    SOUND_ALARM_FUEL_SEN_FAIL,          /*燃油传感器故障*/
    SOUND_ALARM_START_IN_P_ONCE,        /*请挂P档启动车辆*/
    SOUND_ALARM_BRAKE_TO_SHIFT,         /*请踩制动换挡*/
    SOUND_ALARM_GEARBOX_CAUTION,        /*变速箱警示*/
    SOUND_ALARM_TBOX,                   /*   TBOX被拆除 */
111 112 113
    SOUND_ALARM_ESC_FAILURE,            /* ESP故障 */
    SOUND_ALARM_ESC_ATCIVE,             /* ESP激活 */
    SOUND_ALARM_ESC_CLOSE,              /* ESP关闭 */
时昊's avatar
时昊 committed
114 115 116 117 118 119 120 121
    SOUND_ALARM_HILL_HOLD_MALF,         /* 坡道保持故障 */

    SOUND_ALARM_UNPLUGGED_KEY,    /*钥匙未拔 OFF */
    SOUND_ALARM_LIGHT_LEFT_ON,    /*小灯未关 OFF*/
   
    SOUND_ALARM_TICK,                   /*tick*/
    SOUND_ALARM_TOCK,                   /*tock*/
    
时昊's avatar
时昊 committed
122
    SOUND_ALARM_LDWS,             /*LDWS车道偏离报警音*/
时昊's avatar
时昊 committed
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327
    SOUND_ALARM_LOW_OIL_PRESSURE, /*机油压力低   */
    SOUND_ALARM_MAX,
} Sound_Alarm_en_t;
/*同一个优先级中最多有几个报警,不可为0。根据不同项目而修改*/
#define SOUND_SAME_PRIO_NUM 1
/*有多少个不同优先级的报警,不可为0。根据不同项目而修改*/
#define SOUND_DIFF_PRIO_NUM SOUND_ALARM_MAX
/****************************************Do not modify the following***********************************************************/
/****************************************Do not modify the following***********************************************************/
/****************************************Do not modify the following***********************************************************/
/*当前文件版本号*/
#define SOUND_VERSION_NUM        0X18U
#define SOUND_SAME_PRIORITY_RANK 0U /*Do not modify*/
#define SOUND_ALARM_PLAY_SYN     1U /*Do not modify*/
#define SOUND_ALARM_TRIGGER_SYN  1U /*Do not modify*/
#define SOUND_SOURCE_NUM_MEMORY  0U /*Do not modify*/
#define SOUND_RAM_DATA_LEN       ((SOUND_ALARM_MAX * 2UL) + (( SOUND_ALARM_MAX )*SOUND_ALARM_PLAY_SYN) + (( SOUND_ALARM_MAX )*SOUND_ALARM_TRIGGER_SYN) + ((SOUND_ALARM_MAX * 2UL) * SOUND_SOURCE_NUM_MEMORY) + (((SOUND_ALARM_MAX * 2UL) + (SOUND_DIFF_PRIO_NUM)) * SOUND_SAME_PRIORITY_RANK))
/*********************************************************************************/
/*音源播放方式*/
typedef enum
{
    SOUND_SOURCE_PLAY_TYPE_ONCE = 0UL,
    SOUND_SOURCE_PLAY_TYPE_LOOP,
} Sound_Source_Play_Type_en_t;
/*报警触发条件*/
typedef enum
{
    SOUND_ALARM_TRIGGER_1   = 0x01U,
    SOUND_ALARM_TRIGGER_2   = 0x02U,
    SOUND_ALARM_TRIGGER_3   = 0x04U,
    SOUND_ALARM_TRIGGER_4   = 0x08U,
    SOUND_ALARM_TRIGGER_5   = 0x10U,
    SOUND_ALARM_TRIGGER_6   = 0x20U,
    SOUND_ALARM_TRIGGER_7   = 0x40U,
    SOUND_ALARM_TRIGGER_8   = 0x80U,
    SOUND_ALARM_TRIGGER_ALL = 0xFFU,
} Sound_Alarm_Trigger_Condition_en_t;
/*声音报警触发类型*/
typedef enum
{
    /*正常类型,报警触发之后,当播放次数播放完毕之后,必须删除报警之后才能再次触发*/
    SOUND_ALARM_TRIGGER_NORMAL = 0U,
    /*多次触发类型,报警触发之后,当播放次数播放完毕之后会自动删除该报警,也可手动删除该报警。*/
    SOUND_ALARM_TRIGGER_MULTI,
} Sound_Alarm_Trigger_Type_en_t;
/*当报警已经有一个触发条件存在时,有新的条件触发时对报警次数的处理*/
typedef enum
{
    SOUND_ALARM_NUM_FINISH_RESET = 0U, /*如果当前播放次数已经完成,那么重新计数播放。如果没播放完成时,那么无影响。*/
    SOUND_ALARM_NUM_RESET,             /*当前次数清零,重新计数播放*/
} Sound_Alarm_Num_Condition_en_t;
/*报警被打断时的处理方式*/
typedef enum
{
    SOUND_ALARM_RECOVER_NONE = 0U, /*不恢复,不播*/
    SOUND_ALARM_RECOVER_AGAIN,     /*恢复,重播*/
    SOUND_ALARM_RECOVER_CONTINUE,  /*恢复,续播*/
    SOUND_ALARM_BREAK_NONE,        /*不可被打断,报警次数播放完成后才允许切换到其他报警*/
} Sound_Alarm_Break_Type_en_t;
/*针对同优先级的报警的处理方式*/
typedef enum
{
    SOUND_ALARM_SORTORD_FIRST = 0U, /*先触发先报警*/
    SOUND_ALARM_SORTORD_AFTER,      /*后触发先报警*/
} Sound_Alarm_Sortord_Type_en_t;
/*当前音源播放状态*/
typedef enum
{
    SOUND_SOURCE_PLAY_IDLE = 0UL, /*当前空闲,没有在播放,音源播放完成*/
    SOUND_SOURCE_PLAY_BUSY,       /*当前动作未执行完,需等待*/
} Sound_Source_Play_Status_en_t;
/*操作函数返回状态*/
typedef enum
{
    SOUND_OPERATE_SUCCESS = 0UL, /*函数操作成功*/
    SOUND_OPERATE_FAIL,          /*函数操作失败*/
} Sound_Operate_Type_en_t;
/*播放同步方式*/
typedef enum
{
    SOUND_PLAY_SYN_FALL = 0UL, /*下降沿/播放停止*/
    SOUND_PLAY_SYN_RISE,       /*上升沿同步*/
    SOUND_PLAY_SYN_ENABLE,     /*播放使能*/
} Sound_Play_Syn_Type_en_t;
/*********************************************************************************/
typedef Sound_Operate_Type_en_t (*Sound_Operate_Process)(Sound_Source_en_t enSoundSourceIndex);
typedef Sound_Operate_Type_en_t (*Sound_Operate_Set_Volume)(Sound_Source_en_t enSoundSourceIndex, Sound_uint8_t u8SoundVolume);
// typedef Sound_Source_Play_Status_en_t (*Sound_Get_Status)(Sound_Source_en_t enSoundSourceIndex);
typedef Sound_Source_Play_Status_en_t (*Sound_Get_Status)(void);
/*********************************************************************************/
/*音源组合种类固定属性*/
typedef struct
{
    /*本种组合对应的音源索引,一个音源组合种类只对应一个音源。*/
    Sound_Source_en_t enSoundSource;
    /*播放时间(ms),如果播放时间小于音源实际时长,那么以音源时长为准。需要一直播放时填 0xFFFFFFFFUL */
    Sound_uint32_t u32SoundPlayOnTime;
    /*播放完成后的停止时间(ms),一般用于调节一个完整音源组合周期的时长,从而调节声音播放频率。*/
    /*需要播放同步时,此时间可设置成0*/
    Sound_uint32_t u32SoundPlayOffTime;
    /*音源播放方式,单次还是循环*/
    Sound_Source_Play_Type_en_t enSoundSourcePlayType;
    /*音源音量大小,数值没有具体含义,调用设置音量函数时传入。*/
    /*根据驱动不同,转成不同参数。或可当做一个百分比使用。*/
    /*如不支持音量调节,默认填0即可。*/
    Sound_uint8_t u8SoundSourceVolume;
    /*当一个声音报警对应一个音源时填0*/
    /*当一个声音报警对应多个音源时填1*/
    Sound_uint8_t u8SoundVarietyNum;
    /*播放次数(仅次数),播放完整一个音源的次数,需要一直播放时填 0xFFU  */
    /*一般情况下填1即可,在声音报警属性表中填写具体播放次数*/
    Sound_uint8_t u8SoundSourcePlayNum;
} Sound_Variety_Attribute_st_t;
/*声音报警固定属性*/
typedef struct
{
    /*声音报警对应要播放的音源组合种类。*/
    Sound_Variety_en_t enSoundAlarmVariety;
    /*声音报警播放次数(仅次数)。需要一直播放时填 0xFFU 。*/
    Sound_uint8_t u8SoundAlarmPlayTime;
#if ( SOUND_SAME_PRIORITY_RANK )
    /*声音报警优先级,数字小的优先级高。*/
    /*优先级相同的,按照初始化配置参数执行*/
    /*根据报警策略版本不同,选择是否支持该属性*/
    Sound_uint8_t u8SoundAlarmPrio;
#endif
    /*声音报警触发类型*/
    Sound_Alarm_Trigger_Type_en_t enSoundAlarmTriggerType;
    /*报警被打断时的处理方式,不可恢复的 需要条件取消后再次触发*/
    Sound_Alarm_Break_Type_en_t enSoundAlarmRecoverTypeBreak;
    /*当报警已经有一个触发条件存在时,再有新的条件触发时的处理方式。*/
    /*只有一个报警条件的,枚举内成员随意填*/
    Sound_Alarm_Num_Condition_en_t enSoundAlarmNumCondition;
} Sound_Alarm_Attribute_st_t;
/* 声音报警初始化参数*/
typedef struct
{
    /*一共有多少个音源组合种类,不可为0。一般填 SOUND_VARIETY_MAX */
    Sound_Variety_en_t enSoundVarietyLen;
    /*一共有多少个报警,不可为0。一般填 SOUND_ALARM_MAX */
    Sound_Alarm_en_t enSoundAlarmLen;
    /*同优先级之间的排序方式,先来先报,还是后来先报。不支持同优先级时随意填*/
    Sound_Alarm_Sortord_Type_en_t enSoundAlarmSortord;
    /*一共有多少种不同的报警优先级,不可为0。一般填 SOUND_DIFF_PRIO_NUM */
    /*具体填写的数值要小于等于  SOUND_ALARM_MAX  */
    Sound_uint8_t u8SoundDiffPrioNum;
    /*同一个优先级中最多有几个报警,不可为0。*/
    /*一般填 SOUND_SAME_PRIO_NUM 。*/
    Sound_uint8_t u8SoundSamePrioNum;
    Sound_uint8_t u8SoundReserved1; /*预留*/
    Sound_uint8_t u8SoundReserved2; /*预留*/
    /*对音源的单次播放函数*/
    Sound_Operate_Process pfnSoundOperatePlayOnce;
    /*对音源的循环播放函数*/
    Sound_Operate_Process pfnSoundOperatePlayLoop;
    /*对音源的停止函数-单次类型*/
    Sound_Operate_Process pfnSoundOperateStopOnce;
    /*对音源的停止函数-循环类型*/
    Sound_Operate_Process pfnSoundOperateStopLoop;
    /*设置音量函数,传入的音量大小形参就是属性表中填写的参数。*/
    /*需在驱动内进行对应处理。参数本身无实际意义。*/
    /*函数内部需做参数没变化,重复设置不执行判断*/
    Sound_Operate_Set_Volume pfnSoundOperateSetVolume;
    /*获取当前音源播放状态函数*/
    Sound_Get_Status pfnSoundGetStatus;
} Sound_Alarm_Init_st_t;
/*********************************************************************************/
/*********************************************************************************/
/*首次上电和唤醒时都要调用一次初始化函数*/
Sound_Operate_Type_en_t Sound_Alarm_Init(Sound_uint8_t *pu8SoundRamData, const Sound_Alarm_Attribute_st_t *pstSoundAlarmAttribute, const Sound_Variety_Attribute_st_t *pstSoundVarietyAttribute, Sound_Alarm_Init_st_t *pstSoundAlarmInit);
/*申请报警*/
Sound_Operate_Type_en_t Sound_Alarm_Request_Normal(Sound_Alarm_en_t enSoundAlarmIndex);
/*删除报警*/
Sound_Operate_Type_en_t Sound_Alarm_Delete_Normal(Sound_Alarm_en_t enSoundAlarmIndex);
/*报警需要多个触发条件时: 申请报警,触发条件任意对应*/
Sound_Operate_Type_en_t Sound_Alarm_Request_Mul(Sound_Alarm_en_t enSoundAlarmIndex, Sound_Alarm_Trigger_Condition_en_t enSoundTrigger);
/*报警需要多个触发条件时: 删除报警,触发条件和申请时对应。*/
Sound_Operate_Type_en_t Sound_Alarm_Delete_Mul(Sound_Alarm_en_t enSoundAlarmIndex, Sound_Alarm_Trigger_Condition_en_t enSoundTrigger);
/*主循环内实时调用,或者比计时函数调用的更快也可*/
void Sound_Alarm_Service(void);
/*声音报警计时相关,多少ms调用一次,那就传入多少*/
void Sound_Alarm_Handle_Time(Sound_uint8_t u8SoundTimeBase);
#if ( SOUND_ALARM_PLAY_SYN )
/*初始化后默认播放使能。*/
void Sound_Play_Enable_Suspend(Sound_Alarm_en_t enSoundAlarmIndex, Sound_Play_Syn_Type_en_t enSoundPlayEN);
#endif
#if ( SOUND_ALARM_TRIGGER_SYN )
/*初始化后默认有效。传参 0:暂停。1:使能。*/ /*主循环内调用*/
void Sound_Alarm_Enable_Suspend(Sound_Alarm_en_t enSoundAlarmIndex, Sound_uint8_t u8SoundAlarmEN);
#endif
/*读取当前正在播放的报警*/
Sound_Alarm_en_t Sound_Alarm_Current_Read(void);
/*读取版本号*/
Sound_uint8_t Sound_Version_Read(void);
/*读取当前可选功能配置参数*/
Sound_uint8_t Sound_Opt_Function_Read(void);
/*获取某个报警的播放次数,0xFFFF表示无效*/
Sound_uint16_t Sound_Get_Play_Time(Sound_Alarm_en_t enSoundAlarmIndex);
/**************************************************************************************************************************/
/***正常使用时,请测试所有报警的正常触发,播放,删除是否正常。***/
/**************************************************************************************************************************/
/****************************************Do not modify the above***********************************************************/
/****************************************Do not modify the above***********************************************************/
/****************************************Do not modify the above***********************************************************/
#endif