
#ifndef __APP_BACK_MUSIC_H__
#define __APP_BACK_MUSIC_H__

#include "stdint.h"
#include "BLV_BUS_Dev_C5MusicFun.h"

#define MUSICVOICELEVELMAX          10    //音乐音量最大级别，用于音量保存和上报
#define MUSICVOICELEVELMIN          01    //音乐音量最小级别，用于音量保存和上报

#define MusicSwt 0
#define MusicVol 1

#define BACKMUSIC_LEN  		3
#define MUSIC_PLAY     		1         //音乐播放
#define MUSIC_STOP    		2					//音乐暂停
#define MUSIC_PRE      		3					//上一曲
#define MUSIC_NEX      		4					//下一曲
//#define MUSIC_PLAY_MODE		5					//进入播放模式
#define MUSIC_VOICE_UP		5					//音量加
#define MUSIC_VOICE_DOWN	6					//音量减
//#define MUSIC_ON				  8         //开机
//#define MUSIC_OFF					9					//关机
#define MUSIC_PLAY_SPE_1  10        //指定播放第1首
#define MUSIC_PLAY_SPE_2  11        //指定播放第2首
#define MUSIC_PLAY_SPE_3  12        //指定播放第3首
#define MUSIC_PLAY_SPE_4  13        //指定播放第4首
#define MUSIC_PLAY_SPE_5  14        //指定播放第5首
#define MUSIC_PLAY_SPE_6  15        //指定播放第6首


#define MUSIC_VOICE_ALW_UP 7       //音量一直加
#define MUSIC_VOICE_ALW_DOWN 8     //音量一直减
#define MUSIC_VOICE_STOP 9         //音量加减停止


#define MUSIC_NOT_EXIST   0x00      //背景音乐不存在

//#define MUSIC_MAIN_DIS    11        //返回到主界面


//typedef struct RS485_MUSIC_INFO* RS485_MUSIC_INFOP;

typedef struct 
{
	uint16_t MusicReadFlagVar : 2; 		//读取标志或计数	
	uint16_t MusicDefaultVoiceSetVar : 3; 		  //控制标志或计数
	uint16_t MusicAddrSetVar : 2; 		     //地址设置标志或计数	
	uint16_t MusicVoiceCtrlVar : 3;   		//音量控制标志或计数	
	uint16_t MusicModeCtrlVar : 3;  		//模式控制标志或计数	
	uint16_t MusicOnOffCtrlVar : 3; 		//开关机控制标志或计数
}__attribute__ ((__packed__))MusicStateCtrlVar_Struct;


typedef struct 
{
//	uint8_t set_volume[3];
	uint8_t now_volume[3];
}__attribute__ ((__packed__))Music_Volume;

typedef struct   //  RS485_MUSIC_INFO   
{
	BLV_COMM_RECORD_G comm_record;						//通讯记录
	
	uint8_t DevSendCnt;     //设备发送计数   计数达到重发次数都没有回复，判为离线  占4位
	uint8_t DevOffline;       //设备离线标志 1，设备离线   0，设备在线             占2位
	uint8_t DevOfflineLast;       //设备离线标志 1，设备离线   0，设备在线         占2位
	
	uint8_t MusicLoopValidNum;    //音乐播放有效通道数量
	uint8_t MusicChannelNo;        //当前通道号
	
	uint8_t MusicSn;                 //低四位表示Sn号	
	uint8_t MusicVoicedefault;      //默认上电音量
	uint8_t MusicVoicedefaultLast;  //默认上电音量上一次	
	uint8_t BackMusicVoiceSetFlag;     //背景音乐默认音量设置标志
	uint8_t BackMusicVoiceSetSendCnt;  //背景音乐默认音量设置计数
	
/*背景音乐状态定义开始*/
	DEV_MUSIC_CTRLSTATE BackMusicState[MUSICLOOPMAX];      //背景音乐当前状态
	DEV_MUSIC_CTRLSTATE BackMusicStateLast[MUSICLOOPMAX];      //背景音乐上一个状态
	
	DEV_MUSIC_CTRLSTATE DevMusicCtrlState[MUSICLOOPMAX];    //背景音乐控制状态
/*背景音乐状态定义结束*/	

/*背景音乐控制设置开始*/
	MusicStateCtrlVar_Struct  MusicStateCtrlFlag[MUSICLOOPMAX];    //控制
	MusicStateCtrlVar_Struct  MusicStateCtrlCnt[MUSICLOOPMAX];     //计数
	
/*背景音乐控制设置结束*/

//	uint16_t *BackMusicState;           //背景音乐状态  开机或关机 + 音量 + 模式   注意模式里面只有播放和暂停
//	uint16_t *BackMusicStateLast;           //背景音乐上一个状态  开机或关机 + 音量 + 模式
//	uint16_t *BackMusicStateExUdp;           //背景音乐上一个状态  开机或关机 + 音量 + 模式
//	uint16_t *BackMusicStateRs485;           //背景音乐上一个状态  开机或关机 + 音量 + 模式
//	uint16_t *BackMusicStateMap;           //背景音乐上一个状态  开机或关机 + 音量 + 模式

//	uint8_t MusicVoiceReadFlag;      //背景音乐音量读取标志
//	uint8_t MusicVoiceReadCnt;       //背景音乐音量读取计数	
	
//	uint8_t *MusicBackAddrSetFlag;        //背景音乐地址设置标志
//	uint8_t *MusicBackAddrSetCnt;         //背景音乐地址设置计数		
//	
//	uint8_t *MusicBackVoiceCtrlFlag;      //背景音乐音量控制标志
//	uint8_t *MusicBackVoiceSendCnt;       //背景音乐音量控制计数	
//	
//	uint8_t *MusicBackCtrlFlag;      //背景音乐内容控制标志
//	uint8_t *MusicBackSendCnt;               //背景音乐控制计数

//	uint8_t *MusicBackOnOff; 
//	uint8_t *MusicBackOnOffLast; 
//	
//	uint8_t *MusicBackOnOffCtrlFlag; 
//	uint8_t *MusicBackOnOffCtrlCnt; 
//	
//	uint8_t *MusicBackPlayStopState;  //播放暂停状态
//	
//													//地址  控制方式    内容
//	uint8_t *backmusic_data;  //控制背景音乐执行方式 也可以状态开关机的状态，但是每次使用完就清0
	uint32_t inquire_tick;		//询问时间戳
	
	/***2022.10.13林开锐修改开始***/
	uint32_t huaersi_read_addr_time;				//华尔思读取地址轮询时间
	uint8_t huaersi_addr_command;					//华尔思地址命令
	uint8_t huaersi_addr;							//读取的华尔思音乐设备地址
	uint8_t huaersi_onoff_control[MUSICLOOPMAX];	//华尔思开关机命令	bit2：开关机发送标志   bit1~0：开关机发送次数
	uint8_t huaersi_onoff[MUSICLOOPMAX];			//华尔思当前开关机
	uint8_t huaersi_onoff_last[MUSICLOOPMAX];		//华尔思上一次开关机
	uint8_t huaersi_track_control[MUSICLOOPMAX];	//华尔思声道命令	bit2：声道发送标志   bit1~0：声道发送次数
	/***2022.10.13林开锐修改结束***/
	/*2023-04-15*/
	uint8_t room_def_volume;				    //房间音乐上电默认音量
	uint8_t room_max_volume;                    //房间音乐最大音量
	uint8_t room_min_volume;                    //房间音乐最小音量
	uint8_t bathroom_def_volume;                //洗手间音乐上电默认音量
	uint8_t bathroom_max_volume;                //洗手间音乐最大音量
	uint8_t bathroom_min_volume;                //洗手间音乐最小音量
	uint8_t doorbell_def_volume;                    //门铃默认音量
	
	Music_Volume music_volume;
	/*2023-04-15*/
}__attribute__ ((__packed__))RS485_MUSIC_INFO;	



void	BLW_RS485_Music_Data_Init(uint16_t DataLen, uint8_t *Data);
void BLW_RS485_Music_Data_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);

#endif

