⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 amp_gui.c

📁 amp_gui for 8202r source(modified)
💻 C
📖 第 1 页 / 共 3 页
字号:

#include "osd.h"
#include "iop.h"
#include "e2prom_map.h"
#include "amp_gui.h"
#include "auddef.h" //hongfeng 2005-08-01
#ifdef ROM_BUS_EXTENT_IO//chenzhao20060114
#include "rom_bus_io.h"
#endif
#ifdef TDA7448
#include "tda7448.c"
#endif

#ifdef PT2258
#include "pt2258.c"
#endif

#ifdef TAS_5508_PWM
#include "Tas5508_pwm.h"
#endif

#ifdef SUPPORT_DDX8001
#include "ddx8001.h"
#endif

#if defined(TLV320_DAC)  //chenzhao20060118
#include "tlv320.h"
#endif 

#ifndef SUPPORT_VFD_MESSAGE
BYTE  subvol_time_out = 0 ;
#endif
BYTE current_channel = 0;
BYTE volume_changed =0;

#ifdef TREBLE_BASS_EQ_MENU_INTERFACE
#include "ircode.h" 
TONE_TYPE  amp_tone_mode = TONE_IDLE;
#endif

#ifdef SUPPORT_VFD_MESSAGE
void set_vfd_message_state(BYTE state,BYTE time);
#endif

#if defined(DOLBY_AMP_VOLUME_CTRL)
/*
channel: 0--6
 
 1-6->sub channel vol
vol:0-->79dB
*/
void subvol_channel_volume(BYTE channel,BYTE vol)
{
#ifdef SUPPORT_APOGEE_AMP
	ddx_set_channel_vol(channel, vol);
#endif

#ifdef TAS_5026_PWM
	tas_5026_channel_vol(channel,  vol);
#elif defined(TAS_5508_PWM)
    tas_5508_channel_vol(channel,  vol);
#endif
}
#endif

#if  defined(TDA7448)||defined(PT2258)||defined(DOLBY_AMP_VOLUME_CTRL)

#ifdef DOLBY_AMP_VOLUME_CTRL
#ifdef  SUPPORT_BASS_TREBLE
char *channel_str[MAX_VOLUM_CHANNEL]={"FRONT L","FRONT R","SURROUND L","SURROUND R","CENTER","LFE","BASS","TREBLE",};
#else
char *channel_str[MAX_VOLUM_CHANNEL]={"LFE","SURROUND R","SURROUND L","CENTER","FRONT R","FRONT L"};
#endif
#else
char *channel_str[6]={"SW","SR","SL","CE","FR","FL"};
//BYTE  channel_str[6]={STR_SUB_CH,STR_SR_CH,STR_SL_CH,STR_C_CH,STR_FR_CH,STR_FL_CH};
#endif

/*
current_channel:
0->main 
1->ch1
2->ch2
3->ch3
4->ch4
5->ch5
6->ch6
7->ch bass
8->ch treble
*/
BYTE volum_list[MAX_VOLUM_CHANNEL+1];
#ifdef  SUPPORT_BASS_TREBLE
BYTE channel_vol_offset[MAX_VOLUM_CHANNEL] = {CH1_VOL,CH2_VOL,CH3_VOL,CH4_VOL,CH5_VOL,CH6_VOL,CH_BASS_VOL,CH_TREBEL_VOL};
#else
BYTE channel_vol_offset[MAX_VOLUM_CHANNEL] = {CH1_VOL,CH2_VOL,CH3_VOL,CH4_VOL,CH5_VOL,CH6_VOL};
#endif

#ifdef TAS_5508_PWM
#define  GET_ABSOLUTE_VALUE(channel)     (MAIN_VOL_MAX+channel_vol_offset[channel-1]-(CH_VOL_MAX/2))
#else//#ifdef TAS_5508_PWM
#define  GET_ABSOLUTE_VALUE(channel)     (volum_list[0]+channel_vol_offset[channel-1]-(CH_VOL_MAX/2))
#endif//#ifdef TAS_5508_PWM

#ifdef SAVE_AMP_VOLUME
/*
  channel:
  main  0
  fl       1
  fr       2
  sl      3
  sr       4
  ce       5
  lfe     6

  global var: volum_list

  AMPLIFIER_START 228
  bass offset   7
  treble offset 8
*/

//#define  AMPLIFIER_START  228 moved to e2prom_map.h
extern BYTE ddx_Bass_lev;
extern BYTE ddx_Treble_lev;


void reset_amp_variable(void)
{
    int i;
    volum_list[0]=MAIN_VOL;
    channel_vol_offset[0]=CH1_VOL;
    channel_vol_offset[1]=CH2_VOL;
    channel_vol_offset[2]=CH3_VOL;
    channel_vol_offset[3]=CH4_VOL;
    channel_vol_offset[4]=CH5_VOL;
    channel_vol_offset[5]=CH6_VOL;
    #ifdef SUPPORT_BASS_TREBLE
    channel_vol_offset[6]=CH_BASS_VOL;
    channel_vol_offset[7]=CH_TREBEL_VOL;
    #endif//#ifdef SUPPORT_BASS_TREBLE
    for(i=1;i<MAX_VOLUM_CHANNEL;i++)
		volum_list[i] = GET_ABSOLUTE_VALUE(i);
    for(i=0;i<MAX_VOLUM_CHANNEL;i++)
        save_amp_variable(i);
}

void save_amp_variable(BYTE ch)
{
	BYTE data;
#if 0//def  SUPPORT_APOGEE_AMP	
	data = ddx_Treble_lev;
	WriteToI2c(I2C_ID_MEMORY, AMPLIFIER_START+8,&data, 1);
#endif
	if(ch==0)
	{
        #ifdef TAS_5508_PWM
        data = volum_list[0];
        WriteToI2c(I2C_ID_MEMORY, AMPLIFIER_START,&data, 1);
        #ifdef DEBUG_VOLUME
            printf("save ch %d data %d\n",ch,data);
        #endif
        #endif//#ifdef TAS_5508_PWM
	}
	else if ((ch > 0)&&(ch<=MAX_VOLUM_CHANNEL))
	{
		data = channel_vol_offset[ch-1];
		WriteToI2c(I2C_ID_MEMORY, AMPLIFIER_START+ch,&data, 1);
#ifdef DEBUG_VOLUME
		printf("save ch %d data %d\n",ch,data);
#endif
	}
}



void load_amp_variable()
{
	BYTE data,ch;
	int res;

    #ifdef TAS_5508_PWM
    res = ReadFromI2c(I2C_ID_MEMORY, AMPLIFIER_START,&data, 1);
    if(res>0)
        volum_list[0] = data;
    #endif//#ifdef TAS_5508_PWM
    
	for(ch = 1;ch<=MAX_VOLUM_CHANNEL;ch++)
	{
		res = ReadFromI2c(I2C_ID_MEMORY, AMPLIFIER_START+ch,&data, 1);
		
		if(res == 1)//no error
		{
#ifdef DEBUG_VOLUME
			printf("load ch %d data %d\n",ch,data);
#endif

			if(data <= CH_VOL_MAX)
				channel_vol_offset[ch-1] = data;
		}
	}
}

#endif	


extern void init_tas_5026();
void init_subvol()
{
	BYTE ch;

	volum_list[0] = MAIN_VOL;
#ifdef SAVE_AMP_VOLUME
	load_amp_variable();
#endif
#ifdef PT2258
	init_pt2258();
#endif

#ifdef TAS_5026_PWM
	init_tas_5026();
#elif defined(TAS_5508_PWM)
    init_tas_5508();
#endif

    #ifdef TAS_5508_PWM
    subvol_channel_volume(0, volum_list[0]);
    #endif
	for(ch = 1;ch<=MAX_VOLUM_CHANNEL;ch++)
	{
		volum_list[ch] = GET_ABSOLUTE_VALUE(ch);
		subvol_channel_volume(ch,volum_list[ch]);
	}
	/*init lineout volume*/
    #ifdef TAS_5508_PWM
	subvol_channel_volume(VOL_CH_BSL, LINE_OUT_VOL);
	subvol_channel_volume(VOL_CH_BSR, LINE_OUT_VOL);
    #else
	subvol_channel_volume(7, LINE_OUT_VOL);
	subvol_channel_volume(8, LINE_OUT_VOL);
    #endif
}

/*
current_channel:
0->main 
1->ch1
2->ch2
3->ch3
4->ch4
5->ch5
6->ch6
*/

void subvol_next_channel()
{
	if(current_channel == 6)
		current_channel = 0;
    #ifdef SUPPORT_BASS_TREBLE
    else if(current_channel == 0)
		current_channel = 7;
    else if(current_channel == 8)
		current_channel = 1;
    #endif
	else
		current_channel ++;

	if(current_channel == 0)
    {
		psprintf(RegionValStr[REGION1], "VOLUME %d",volum_list[0]);
     	PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);
    }
	else
	{
        #ifdef SUPPORT_VFD_MESSAGE
        set_vfd_message_state(VFD_MESSAGE_VOL,SUBVOL_TIME_OUT);
        #else
		subvol_time_out = SUBVOL_TIME_OUT;
        #endif
        show_channel_msg();
	}
}

/*
  to come with dolby's demand
  sub channel adjust from -10dB to +10dB
*/
//char  channel_offset_str[];
void show_channel_msg()
{
#ifdef DEBUG_VOLUME
	printf("keep ch %d  %d\n",current_channel,(channel_vol_offset[current_channel-1]));
#endif

	if((channel_vol_offset[current_channel-1])==(CH_VOL_MAX/2))
	{
		psprintf(RegionValStr[REGION1],"%s 0",channel_str[current_channel-1]);
	}
	else if((channel_vol_offset[current_channel-1])<(CH_VOL_MAX/2))
	{
		psprintf(RegionValStr[REGION1],"%s -%d",channel_str[current_channel-1],(CH_VOL_MAX/2)-(channel_vol_offset[current_channel-1]));
	}
	else
	{
		psprintf(RegionValStr[REGION1],"%s +%d",channel_str[current_channel-1],(channel_vol_offset[current_channel-1])-(CH_VOL_MAX/2));
	}
	PrintOsdMsg(STR_OS_SPACE, REGION1, 1, 1);
}

/*
	I place this function at 500ms polling loop
	so,the time out is 500ms * 10 == 5 sec 
*/

#ifdef SUPPORT_VFD_MESSAGE

void exit_channel_volume(void)
{
    current_channel = 0;
}

#else
void polling_channel_timeout(void)
{
	if(subvol_time_out>0)
	{
		subvol_time_out--;
/*		if(current_channel > 0)
		{
			show_channel_msg();
		}*/
	}
	else
	{
		current_channel = 0;
	}
}
#endif


#ifdef TAS_5508_PWM
void subvol_main_vol()
{
    #if defined(USE_AMP_MUTE)&& !defined(CHANGE_VOL_DEMUTE) //chenzhao20050926
    if(!user_amp_mute)
    #endif//#ifdef USE_AMP_MUTE
    {
        #ifdef SUPPORT_AMP_IO_MUTE
        amp_io_demute();
        #endif
	    subvol_channel_volume(0,volum_list[0]);
    }
}
#else//#ifdef TAS_5508_PWM
/*
  according to DOLBY's specification.
  actually,we set each channel here.
*/
void subvol_main_vol()
{
	BYTE ch;
	for(ch = 1;ch<7;ch++)
	{
		volum_list[ch]=GET_ABSOLUTE_VALUE(ch);

		/*huziqin 2004-5-10 avoid volume turn to 255*/
		if(volum_list[ch]>(255-CH_VOL_MAX))
		{
			volum_list[ch] = 0;
			break;
		}	
		if(volum_list[0] == 0) //if main vol ==0,all channel set to zero
			subvol_channel_volume(ch,0);
			else
			subvol_channel_volume(ch,volum_list[ch]);
	}
}
#endif//#ifdef TAS_5508_PWM




/*
	global -- volum_list[]
*/
void subvol_vol_up()
{
    #ifndef TAS_5508_PWM
	BYTE ch;
    #endif//#ifndef TAS_5508_PWM
	
	if(current_channel == 0) //main vol
	{
		/*check if reach max,according to DOLBY's spec*/
        #ifdef TAS_5508_PWM
        if (volum_list[0]<MAIN_VOL_MAX)
            volum_list[0] ++;
        #else//#ifdef TAS_5508_PWM
        BYTE overflow =0;
		for(ch = 0;ch <7;ch ++)
		{
			if (volum_list[ch]>=(MAIN_VOL_MAX-1))
			{
                overflow=1;
    		}
		}
        if(overflow!=1)
    		volum_list[0] ++;
        #endif//#ifdef TAS_5508_PWM
    }	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -