
#ifndef _SOUND_SOURCE_H_
#define _SOUND_SOURCE_H_

#include "TYW_stdint.h"
#include "PCM_Sound_Tracks.h"

/******************************************************************************
音源名称列表

注意：音源名称所指代的序号应与该声音位于声音属性表中的序号一一对应
******************************************************************************/
typedef enum
{
    SND_SRC_VCU_SYS1 = 0x00, 
    SND_SRC_VCU_SYS2, 
    SND_SRC_VCU_SYS3, 

    SND_SRC_VCU_EPS1, 
    SND_SRC_VCU_EPS2, 
    SND_SRC_VCU_EPS3, 

    SND_SRC_VCU_ACM1,
    SND_SRC_VCU_ACM2,
    SND_SRC_VCU_ACM3,

    SND_SRC_VCU_DCDC1,
    SND_SRC_VCU_DCDC2,
    SND_SRC_VCU_DCDC3,

    SND_SRC_VCU_PDU1, 
    SND_SRC_VCU_PDU2, 
    SND_SRC_VCU_PDU3, 

    SND_SRC_VCU_MCU1,
    SND_SRC_VCU_MCU2,
    SND_SRC_VCU_MCU3,

    SND_SRC_BMS_BMS1,
    SND_SRC_BMS_BMS2,
    SND_SRC_BMS_BMS3,

    SND_SRC_Maintenance,
    SND_SRC_OvrECUSpd,
    SND_SRC_OvrSpd,
    SND_SRC_Door,
    SND_SRC_Seatbelt,
    SND_SRC_ParkingOn,
    SND_SRC_ParkingOff,
    
    SND_SRC_TICK,
    SND_SRC_TOCK,
    
    SND_SRC_Stop,

    SND_SRC_LeaveSeat,

    SND_SRC_Start,

    SND_SRC_INDEX_MAX,
} SND_SRC_Index_en_t;

/******************************************************************************
伪音源名称列表
******************************************************************************/
#define   SND_SRC_NONE                      0xFF    //没有声音
#define   SND_SRC_CURRENT                   0xFE    //当前播放的声音

/******************************************************************************
音源循环次数
******************************************************************************/
#define   SND_CYCLE_NONSTOP                 0xFF    //不停播放

/******************************************************************************
音源播放模式
******************************************************************************/
#define   SND_MODE_SINGLE                   0x00    //使用ISD_Play_Vp方法播放
#define   SND_MODE_LOOP                     0x01    //使用ISD_Play_Vp_Loop方法播放

/******************************************************************************
声音属性结构
******************************************************************************/
typedef struct
{
    PCM_Track_Index_en_t  Index;
    uint8_t   Priority;
    uint8_t   Cycle;
    uint8_t   Mode;
    uint16_t  Period;
} SndAttributeStruct;

/******************************************************************************
音源属性表
******************************************************************************/
static const SndAttributeStruct SndAttributeTable[SND_SRC_INDEX_MAX] =
{
    /*================================================================================================
                音源名称             |           音源序号        |优先级 |循环次数|    播放模式    | 周期(ms)
    ------------------------------------------------------------------------------------------------*/
    {/*00 SND_SRC_VCU_SYS1    音效6*/ PCM_Track_Index_Warrning,    3,      1,   SND_MODE_SINGLE,  1000U,},
    {/*01 SND_SRC_VCU_SYS2    音效0*/ PCM_Track_Index_Warrning,    2,      1,   SND_MODE_SINGLE,  1000U,},
    {/*02 SND_SRC_VCU_SYS3    音效2*/ PCM_Track_Index_Warrning,    1,      1,   SND_MODE_SINGLE,  1000U,},

    {/*03 SND_SRC_VCU_EPS1    音效6*/ PCM_Track_Index_Warrning,    3,      1,   SND_MODE_SINGLE,  1000U,},
    {/*04 SND_SRC_VCU_EPS2    音效0*/ PCM_Track_Index_Warrning,    2,      1,   SND_MODE_SINGLE,  1000U,},
    {/*05 SND_SRC_VCU_EPS3    音效2*/ PCM_Track_Index_Warrning,    1,      1,   SND_MODE_SINGLE,  1000U,},

    {/*06 SND_SRC_VCU_ACM1    音效6*/ PCM_Track_Index_Warrning,    3,      1,   SND_MODE_SINGLE,   400U,},
    {/*07 SND_SRC_VCU_ACM2    音效0*/ PCM_Track_Index_Warrning,    2,      1,   SND_MODE_SINGLE,   400U,},
    {/*08 SND_SRC_VCU_ACM3    音效2*/ PCM_Track_Index_Warrning,    1,      1,   SND_MODE_SINGLE,   400U,},
     
    {/*09 SND_SRC_VCU_DCDC1   音效6*/ PCM_Track_Index_Warrning,    3,      1,   SND_MODE_SINGLE,  1000U,},
    {/*10 SND_SRC_VCU_DCDC2   音效0*/ PCM_Track_Index_Warrning,    2,      1,   SND_MODE_SINGLE,  1000U,},
    {/*11 SND_SRC_VCU_DCDC3   音效2*/ PCM_Track_Index_Warrning,    1,      1,   SND_MODE_SINGLE,  1000U,},

    {/*12 SND_SRC_VCU_PDU1    音效6*/ PCM_Track_Index_Warrning,    3,      1,   SND_MODE_SINGLE,   400U,},
    {/*13 SND_SRC_VCU_PDU2    音效0*/ PCM_Track_Index_Warrning,    2,      1,   SND_MODE_SINGLE,   400U,},
    {/*14 SND_SRC_VCU_PDU3    音效2*/ PCM_Track_Index_Warrning,    1,      1,   SND_MODE_SINGLE,   400U,},

    {/*15 SND_SRC_VCU_MCU1    音效6*/ PCM_Track_Index_Warrning,    3,      1,   SND_MODE_SINGLE,  1000U,},
    {/*16 SND_SRC_VCU_MCU2    音效0*/ PCM_Track_Index_Warrning,    2,      1,   SND_MODE_SINGLE,  1000U,},
    {/*17 SND_SRC_VCU_MCU3    音效2*/ PCM_Track_Index_Warrning,    1,      1,   SND_MODE_SINGLE,  1000U,},
    
    {/*18 SND_SRC_BMS_BMS1    音效6*/ PCM_Track_Index_Warrning,    3,      1,   SND_MODE_SINGLE,  1000U,},
    {/*19 SND_SRC_BMS_BMS2    音效0*/ PCM_Track_Index_Warrning,    2,      1,   SND_MODE_SINGLE,  1000U,},
    {/*20 SND_SRC_BMS_BMS3    音效2*/ PCM_Track_Index_Warrning,    1,      1,   SND_MODE_SINGLE,  1000U,},
    
    {/*21 SND_SRC_Maintenance 音效1*/ PCM_Track_Index_Warrning,    4,      1,   SND_MODE_SINGLE,  1000U,},
    {/*22 SND_SRC_OvrECUSpd   音效1*/ PCM_Track_Index_Warrning,    4,      1,   SND_MODE_SINGLE,  1000U,},
    {/*23 SND_SRC_OvrSpd      音效1*/ PCM_Track_Index_Warrning,    4,      2,   SND_MODE_SINGLE,  1000U,},
    {/*24 SND_SRC_Door        音效1*/ PCM_Track_Index_Warrning,    4,      1,   SND_MODE_SINGLE,  1000U,},
    {/*25 SND_SRC_Seatbelt    音效1*/ PCM_Track_Index_Warrning,    4,      1,   SND_MODE_SINGLE,  1000U,},
    {/*26 SND_SRC_ParkingOn   音效1*/ PCM_Track_Index_Warrning,    4,     30,   SND_MODE_SINGLE,  1000U,}, //20231013按20230928变更由播放1次改为30次
    {/*27 SND_SRC_ParkingOff  音效1*/ PCM_Track_Index_Warrning,    4,      1,   SND_MODE_SINGLE,  1000U,},
    
    {/*28 SND_SRC_TICK        音效7*/ PCM_Track_Index_TICK,        5,      1,   SND_MODE_SINGLE,     50,},
    {/*29 SND_SRC_TOCK        音效8*/ PCM_Track_Index_TOCK,        6,      1,   SND_MODE_SINGLE,     50,},

    {/*30 SND_SRC_Stop        音效0*/ PCM_Track_Index_Crash,       0,      1,   SND_MODE_SINGLE,   150U,},
    {/*31 SND_SRC_LeaveSeat   音效1*/ PCM_Track_Index_Warrning,    4,      1,   SND_MODE_SINGLE,  1000U,},
    {/*32 SND_SRC_Start       音效9*/ PCM_Track_Index_Start,       0,      1,   SND_MODE_SINGLE,  27600U,},
    /*==============================================================================================*/
};

#define   SND_TOTAL_NUM               SND_SRC_INDEX_MAX

#endif
