예제 #1
0
파일: egg.c 프로젝트: wiradharma/wiremon
void EggRotateCheck()
{
	//rotate detector
	BOOL x=0;
	BOOL y=0;
	
	if(									//jika
		IsTimeOut(&EggRotateTimeout)	//sudah waktunya dirotasi
		&&								//dan
		EggIsRotating==STOP			//sedang tidak dirotasi
	)
		{
			EggRotatorGoRight();
			EggIsRotating=TO_RIGHT;
			TimeOutSet(&EggRotateTimeout, ROTATE_TIMEOUT);
			TimeOutSet(&EggRotatorTimeout,ROTATOR_TIMEOUT );
		}
	#if 1
	else if(
		EggIsRotating!=STOP
		&&
		IsTimeOut(&EggRotatorTimeout)
	)
		{
			x=EggLimiterL();
			y=EggLimiterR();
			if(!x||!y)
				{
					EggIsRotating=STOP;
					EggRotatorStop();
				}
		}
	#endif

}
예제 #2
0
// 显示数值.
VOID DispNum(WORD Num)
{
#if (defined(FUNC_SEG_LED_EN) || defined(FUNC_SEG_LCD_EN))
	//DBG(("DispVolume,0\n"));
	if((gDisplayMode <= DISP_DEV_LCD58) && (gDisplayMode >= DISP_DEV_LED1888))
	{	
#ifdef	FUNC_NUMBER_KEY_EN
		if(((NumKeyRadioFreqErrorFlag == TRUE) && (gSys.SystemMode == SYS_MODE_RADIO))
		|| ((Num > gFsInfo.FileSum) && ((gSys.SystemMode == SYS_MODE_USB) || (gSys.SystemMode == SYS_MODE_SD))))
		{
			if(NumKeyErrorDispFlag == FALSE)
			{
				Num2Char(Num, FALSE);
				NumKeyErrorDispFlag = TRUE;
				TimeOutSet(&RecvNumTimer, NORMAL_INTERVAL);
				TimeOutSet(&DispTmr, NORMAL_INTERVAL);
				TimeOutSet(&NumKeyErrDispTimer, 500);  //数字显示500ms
			}
			else
			{
				if(IsTimeOut(&NumKeyErrDispTimer))
				{
					DispString(" Err");
				}					
			}
		}
		else
#endif
		{
			Num2Char(Num, FALSE);
		}

#ifdef	FUNC_NUMBER_KEY_EN
		if((NumKeyErrorDispFlag == FALSE) && (NumKeyRadioFreqErrorFlag == FALSE))
#endif
		{
			TimeOutSet(&DispTmr, SET_INTERVL);
		}
#ifdef	FUNC_NUMBER_KEY_EN
		else
		{
			if(IsTimeOut(&DispTmr))
			{
				NumKeyRadioFreqErrorFlag = FALSE;
				NumKeyErrorDispFlag = FALSE;
			}			
		}
#endif
		DispIcon(ICON_COLON, LIGHT_OFF);
	}
#ifdef FUNC_SEG_LCD_EN
	if(gDisplayMode == DISP_DEV_LCD58)
	{
		LcdFlushDispData();
	}
#endif
#else
	Num = 0;
#endif
}
예제 #3
0
// Show Device symbol.
VOID DispDevSymbol(VOID)
{
#ifdef FUNC_SEG_LED_EN
	if((gDisplayMode == DISP_DEV_LED8888) || (gDisplayMode == DISP_DEV_LED1888) || (gDisplayMode == DISP_DEV_LED57))
	{
		LedDispDevSymbol();
		TimeOutSet(&DispTmr, DispHoldTime);
	}
#endif

#ifdef FUNC_SEG_LCD_EN
	if(gDisplayMode == DISP_DEV_LCD58)
	{
		LcdDispDevSymbol();
		TimeOutSet(&DispTmr, DispHoldTime);
		LcdFlushDispData();
	}
#endif

#ifdef FUNC_SINGLE_LED_EN
	if(gDisplayMode == DISP_DEV_SLED)
	{
		SLedDispDevSymbol();
	}	
#endif	
}
예제 #4
0
// 音量设置时调用.
VOID DispVolume(BOOL IsForced)
{
#if (defined(FUNC_SEG_LED_EN) || defined(FUNC_SEG_LCD_EN))
#ifdef FUNC_PT231X_EN
	//DBG(("DispVolume,0\n"));
	if((gDisplayMode <= DISP_DEV_LCD58) && (gDisplayMode >= DISP_DEV_LED1888))
	{
		if((IsForced == TRUE) || (gDispPrevVol != VolMain))
		{
			//DBG(("DispVolume,1\n"));
			DispChar(' ', POS_COM_THOUSAND);
			DispChar('U', POS_COM_HUNDREDS);
			DispChar((VolMain / 10), POS_COM_TENS);
			DispChar((VolMain % 10), POS_COM_UNITS);
			TimeOutSet(&DispTmr, INTERIM_INTERVAL);
			DispIcon(ICON_DP_FM_MHZ, LIGHT_OFF);
			DispIcon(ICON_COLON, LIGHT_OFF);
#ifdef FUNC_SEG_LCD_EN
			if(gDisplayMode == DISP_DEV_LCD58)
			{
				DBG(("DispVolume,LcdFlushDispData\n"));
				LcdFlushDispData();
			}
#endif
		}
	}

	gDispPrevVol = gSys.Volume;
#else
	//DBG(("DispVolume,0\n"));
	if((gDisplayMode <= DISP_DEV_LCD58) && (gDisplayMode >= DISP_DEV_LED1888))
	{
		if((IsForced == TRUE) || (gDispPrevVol != gSys.Volume))
		{
			//DBG(("DispVolume,1\n"));
			DispChar(' ', POS_COM_THOUSAND);
			DispChar('U', POS_COM_HUNDREDS);
			DispChar((gSys.Volume / 10), POS_COM_TENS);
			DispChar((gSys.Volume % 10), POS_COM_UNITS);
			TimeOutSet(&DispTmr, INTERIM_INTERVAL);
			DispIcon(ICON_DP_FM_MHZ, LIGHT_OFF);
			DispIcon(ICON_COLON, LIGHT_OFF);
#ifdef FUNC_SEG_LCD_EN
			if(gDisplayMode == DISP_DEV_LCD58)
			{
				DBG(("DispVolume,LcdFlushDispData\n"));
				LcdFlushDispData();
			}
#endif
		}
	}

	gDispPrevVol = gSys.Volume;
#endif
#endif
	IsForced = 0;
}
예제 #5
0
// 播放状态变化时调用(Play/Pause/Stop/FF/FB).
VOID DispPlayState(VOID)
{
#ifdef FUNC_SEG_LCD_EN
	if(gDisplayMode == DISP_DEV_LCD58)
	{
		LcdDispPlayState();
		LcdFlushDispData();
	}
#endif

#ifdef FUNC_SEG_LED_EN
	if((gDisplayMode <= DISP_DEV_LED57) && (gDisplayMode >= DISP_DEV_LED1888))
	{
		LedDispPlayState();
		if(gDisplayMode != DISP_DEV_LED57)
		{
			TimeOutSet(&DispTmr, NORMAL_INTERVAL);
		}
	}
#endif

#ifdef FUNC_SINGLE_LED_EN
#if (defined(FUNC_USB_EN) || defined(FUNC_CARD_EN))
	if(gDisplayMode == DISP_DEV_SLED)
	{
		SLedDispPlayState();
	}
#endif
#endif
	gDispPrevPlayState = gPlayCtrl.State;
}
예제 #6
0
//按键响应
//状态处理
VOID RadioStateCtrl(VOID)
{	
	RadioEventProcess();
	RadioStationSearch();

#ifdef FUNC_RADIO_ESD_AUTO_RESUME
	if(gRadioCtrl.State == RADIO_IDLE)
	{
		if(IsTimeOut(&RadioStateCheckTimer))
		{		
			if((MVFM_ReadReg(0x00) & 0x20) || (MVFM_GetCh() != gRadioCurrFreqBack))
			{
				RadioStateCheckCount++;
				if(RadioStateCheckCount > 2)	
				{
					RadioSetFreq();	
					RadioMute(FALSE);	
				}
			}
			else
			{
				RadioStateCheckCount = 0;
			}
			TimeOutSet(&RadioStateCheckTimer, 250);
		}			
	}
#endif
}
예제 #7
0
// 文件夹功能打开/关闭时调用.
VOID DispFoldState(VOID)
{
#if (defined(FUNC_SEG_LCD_EN) || defined(FUNC_SEG_LED_EN))
	if((gDisplayMode <= DISP_DEV_LCD58) && (gDisplayMode >= DISP_DEV_LED1888))
	{
		if(gPlayCtrl.FolderEnable == TRUE)
		{
			DispString(" FDI");
		}
		else
		{
			DispString(" FEN");
		}
		DispIcon(ICON_COLON, LIGHT_OFF);
		DispIcon(ICON_DP_FM_MHZ, LIGHT_OFF);
		TimeOutSet(&DispTmr, NORMAL_INTERVAL);
#ifdef FUNC_SEG_LCD_EN
		if(gDisplayMode == DISP_DEV_LCD58)
		{
			LcdFlushDispData();
		}
#endif
	}
#endif
}
예제 #8
0
VOID SystemOffTimeEnDis(BYTE Type)
{
	TimeOutSet(&gSysTimeOffState.DisTimer, 3000);
		
	if(SYSOFF_TIME_SET_VALUE == Type)
	{
		if(gSysTimeOffState.EnState == FALSE)
		{
			gSysTimeOffState.EnState = TRUE;				
			gSysTimeOffState.ProState = SYS_OFF_TIMEING_SET_MODE_VALID;	
			SystemOffSetTimer();
		}
		else
		{				
			gSysTimeOffState.EnState = FALSE;		
			gSysTimeOffState.ProState = SYS_OFF_TIMEING_SET_DIS;
		}	
	}
	else if(SYSOFF_TIME_READ_ONLY == Type)
	{		
		if((gSysTimeOffState.ProState == SYS_OFF_TIMEING_WAIT_POWEROFF) || (gSysTimeOffState.ProState == SYS_OFF_TIMEING_SET_MODE_VALID))			
		{
			gSysTimeOffState.ProState = SYS_OFF_TIMEING_READ_ONLY_TIMING;//回到定时关机或设置定时关机状态
		}	
		else
		{
			gSysTimeOffState.ProState = SYS_OFF_TIMEING_READ_ONLY_IDLE;//回到空闲状态		
		}
	}
}
예제 #9
0
//  低音设置时调用.
VOID DispBass(BOOL IsForced)
{
#if (defined(FUNC_SEG_LED_EN) || defined(FUNC_SEG_LCD_EN))
	//DBG(("DispVolume,0\n"));
	if((gDisplayMode <= DISP_DEV_LCD58) && (gDisplayMode >= DISP_DEV_LED1888))
	{
		if((IsForced == TRUE) || (gDispPrevBass!= VolBass))
		{
			//DBG(("DispVolume,1\n"));
			DispChar(' ', POS_COM_THOUSAND);
			DispChar('b', POS_COM_HUNDREDS);
			DispChar((VolBass / 10), POS_COM_TENS);
			DispChar((VolBass % 10), POS_COM_UNITS);
			TimeOutSet(&DispTmr, INTERIM_INTERVAL);
			DispIcon(ICON_DP_FM_MHZ, LIGHT_OFF);
			DispIcon(ICON_COLON, LIGHT_OFF);
#ifdef FUNC_SEG_LCD_EN
			if(gDisplayMode == DISP_DEV_LCD58)
			{
				DBG(("DispVolume,LcdFlushDispData\n"));
				LcdFlushDispData();
			}
#endif
		}
	}

	gDispPrevBass = VolBass;

#endif
	IsForced = 0;
}
예제 #10
0
//如果有和此函数类似用法(嵌入到各个模式)的函数位于其后,此函数不要有default,防止拦截后者有用的消息
VOID SystemOffTimeMsgPro(BYTE Msg)
{	
	if(Msg != MSG_NONE)
	{
		TimeOutSet(&gSysTimeOffState.DisTimer, 0);	
	}
	
	switch(Msg)
	{
		case MSG_SLEEP:
			SystemOffTimeSet();
			break;		
			
//		case MSG_SYS_TIMING_EN:
//			SystemOffTimeEnDis(SYSOFF_TIME_SET_VALUE);
//			break;

//		case MSG_SYS_TIMING_SET:
//			SystemOffTimeSet();
//			break;

//		case MSG_SYS_TIMING_READ:	
//			SystemOffTimeEnDis(SYSOFF_TIME_READ_ONLY);
//			break;		

		default:
			break;
	}
}
예제 #11
0
// 设置EQ时调用.
VOID DispEQ(BOOL IsForced)
{
#if (defined(FUNC_SEG_LED_EN) || defined(FUNC_SEG_LCD_EN))
	if((gSys.SystemMode == SYS_MODE_USB) || (gSys.SystemMode == SYS_MODE_SD))
	{
		BYTE CODE EqName[DECD_EQ_SUM][4] =
		{
			" NOR", " ROC", " POP", " CLA", " JAS", " BLU", " HAL", " BAS", " SOF", " COU", " OPE"
		};
	
		if((gDisplayMode <= DISP_DEV_LCD58) && (gDisplayMode >= DISP_DEV_LED1888))
		{
			if((IsForced == TRUE) || (gDispPrevEQ != gPlayCtrl.Eq))
			{
				DispString(&EqName[gPlayCtrl.Eq][0]);
			}
			DispIcon(ICON_DP_FM_MHZ, LIGHT_OFF);
			DispIcon(ICON_COLON, LIGHT_OFF);
			TimeOutSet(&DispTmr, INTERIM_INTERVAL);
#ifdef FUNC_SEG_LCD_EN
			if(gDisplayMode == DISP_DEV_LCD58)
			{
				LcdFlushDispData();
			}
#endif
		}
	}
	gDispPrevEQ = gPlayCtrl.Eq;
#endif		
}
예제 #12
0
파일: egg.c 프로젝트: wiradharma/wiremon
void EggInit()
{

	//flag init
	EggIsRotating=TO_RIGHT;
	fFanT=OFF;
	fFanH=OFF;
	fFanEx=OFF;
	fHeater=OFF;

	//pin init
	EggFanTInit();		
 	EggFanHInit();		
 	EggFanExInit();		
 	EggHeaterInit();	
  	EggRotatorRInit();		
 	EggRotatorLInit();		
 	EggLimiterRInit()	;	
 	EggLimiterLInit()	;

	//set kondisi awal
	EggFanHOff();
	EggFanTOff();
	EggFanExOff();
	EggHeaterOff();
	EggRotatorGoRight();

	//set timeout awal
	TimeOutSet(&EggRotateTimeout, ROTATE_TIMEOUT);
	
}
예제 #13
0
// 上电时,硬件扫描消抖
void InitDeviceDetect(void)
{
	TIMER Timer;

	// GpioLcdIoConfig(RESTORE_TO_GENERAL_IO); // ??? 当前linein gpio c6 与 lcd touch 存在复用关系,所以先设置io为普通io口
	//TimeOutSet(&Timer, 800);

	//set the device detection time upto 500 ms by Robert. -20140114
	if(OSSysAuxtmrGet() + 200 + 130 + 60 < 500)
	{
		/*
		 * if device detection(especial USB) time less than 500ms,complement the left time to delete the device jitter
		 */
		TimeOutSet(&Timer, 500 - 60 - 130 - 200 - OSSysAuxtmrGet());
	}
	else
	{
		/*
		 * give 20 ms enough to device detection
		 */
		TimeOutSet(&Timer, 20);
	}
	while(!IsTimeOut(&Timer))
	{
#ifdef FUNC_USB_EN
		IsUDiskLink();
#endif
		IsPcLink();

#ifdef FUNC_CARD_EN
		IsCardLink();
#endif
		IsLineInLink();
#ifdef FUNC_MIC_DET_EN
		IsMicLinkFlag = IsMicInLink();
#endif
	}
}
예제 #14
0
void UsbAudioFreqAdjust(void)
{
	uint16_t Samples;

	if(!IsTimeOut(&UsbAudioFreqAdjustTimer))
	{
		return;
	}
	TimeOutSet(&UsbAudioFreqAdjustTimer, 1000);

	Samples	= MixerGetRemainSamples(MIXER_SOURCE_USB);
	DacSampRateAdjust(TRUE, (Samples - 1024) * 5);
	APP_DBG("%d\n", Samples);
}
예제 #15
0
static BYTE RtcAlarmSetWaitTime(VOID)
{
	if(RtcAutOutTimeCount == RTC_AUTO_OUT_TIME_COUNT)
	{
		TimeOutSet(&RtcAutoOutTimer, RTC_AUTO_OUT_TIME_UNIT);
		RtcAutOutTimeCount--;
	}
	else if(IsTimeOut(&RtcAutoOutTimer))
	{				
		if(RtcAutOutTimeCount > 0)
		{
			TimeOutSet(&RtcAutoOutTimer, RTC_AUTO_OUT_TIME_UNIT);
			RtcAutOutTimeCount--;
		}
		else
		{		
			RtcState = RTC_STATE_IDLE;
			RtcSubState = RTC_SET_NONE;
			return TRUE;
		}
	}
	return FALSE;;
}
예제 #16
0
static VOID SystemOffSetTimer(VOID)
{
	DWORD SysOffWaitTime;

	switch(gSysTimeOffState.SleepState)
	{	
		case SLEEP_15:
			SysOffWaitTime = 900000;
			break;
			
		case SLEEP_30:
			SysOffWaitTime = 1800000;
			break;

		case SLEEP_45:
			SysOffWaitTime = 2700000;
			break;
			
		case SLEEP_60:
			SysOffWaitTime = 3600000;
			break;
			
		case SLEEP_75:
			SysOffWaitTime = 4500000;
			break;	
			
		case SLEEP_90:
			SysOffWaitTime = 5400000;
			break;

		case SLEEP_105:
			SysOffWaitTime = 6300000;
			break;
			
		case SLEEP_120:
			SysOffWaitTime = 7200000;
			break;
			
		default:
			break;
	}
	
	TimeOutSet(&gSysTimeOffState.AutoOutTimer, SysOffWaitTime);	
	DBG(("Start....                                          %2BX\n",gSysTimeOffState.SleepState));
}
예제 #17
0
// 设置Repeat模式时调用.
VOID DispRepeat(BOOL IsForced)
{
#if (defined(FUNC_SEG_LED_EN) || defined(FUNC_SEG_LCD_EN))
	if(((gSys.SystemMode == SYS_MODE_USB) || (gSys.SystemMode == SYS_MODE_SD))
	&& ((IsForced == TRUE) || (gDispPrevRep != gPlayCtrl.RepeatMode)))
	{
#ifdef FUNC_SEG_LED_EN
		if((gDisplayMode < DISP_DEV_LCD58) && (gDisplayMode >= DISP_DEV_LED1888))
		{
			LedDispRepeat();
			TimeOutSet(&DispTmr, INTERIM_INTERVAL);
		}
#endif
	
#ifdef FUNC_SEG_LCD_EN
		if(gDisplayMode == DISP_DEV_LCD58)
		{
			LcdDispRepeat();
			LcdFlushDispData();	
		}
#endif
		
#ifdef FUNC_SINGLE_LED_EN
		if(gDisplayMode == DISP_DEV_SLED)
		{

		}
#endif

		gDispPrevRep = gPlayCtrl.RepeatMode;
//		gstDispPlayArg.bRep = gPlayCtrl.RepeatMode & 0x03;
	}
#endif

#if (defined(FUNC_SINGLE_LED_EN) && defined(SLED_REP_EN))
	if(gDisplayMode == DISP_DEV_SLED)
	{
		SLedDispRepeat();
	}
#endif
}
예제 #18
0
// 文件切换时调用.
VOID DispFileNum(VOID)
{
#if (defined(FUNC_SEG_LED_EN) || defined(FUNC_SEG_LCD_EN))

#ifdef FUNC_RTC_EN
	if(RtcAutOutTimeCount > 0)
	{
		return;
	}
#endif

	//DBG((">>DispFileNum\n"));
	if(gFsInfo.FileSum > 0)	//if(gFsInitOK == 1)
	{
		//DBG(("gPlayCtrl.FileNum:%u\n", gPlayCtrl.FileNum));
		Num2Char(gPlayCtrl.FileNum, FALSE);		
		if((gPlayCtrl.FileNum > 9999) && (gDisplayMode > DISP_DEV_LED1888))
		{
			DispChar('F', 3);
		}
	}
	else
	{
		DBG(("NOF\n"));
		DispString(" NOF");
	}
	TimeOutSet(&DispTmr, DEV_SYMBOL_INTERVAL);
	DispIcon(ICON_DP_FM_MHZ, LIGHT_OFF);
	DispIcon(ICON_COLON, LIGHT_OFF);
	DispIcon(ICON_PAUSE, LIGHT_OFF);
#ifdef FUNC_SEG_LCD_EN
	if(gDisplayMode == DISP_DEV_LCD58)
	{
		LcdFlushDispData();
	}
#endif
#endif
}
예제 #19
0
//进入FM 后初始化函数
VOID RadioEnterInit(VOID)
{	
#ifdef FUNC_SPI_KEY_SOUND_EN
	RadioSetFreq();
	RadioMute(FALSE);
	RadioSetVolume(gSys.Volume);	
#endif

	gRadioCtrl.State = RADIO_IDLE;
	UnMute();	

#ifdef FUNC_POWER_AMPLIFIER_EN
	ABPowerAmplifierOff();	//在FM模式下选择D 类功放
#endif
	
#ifdef FUNC_BREAK_POINT_EN
	BP_SaveInfo(&gBreakPointInfo.PowerMemory.SystemMode,sizeof(gBreakPointInfo.PowerMemory.SystemMode));
#endif

#ifdef FUNC_RADIO_ESD_AUTO_RESUME
	RadioStateCheckCount = 0;
	TimeOutSet(&RadioStateCheckTimer, 250);
#endif
}
예제 #20
0
VOID SystemOffTimeSet(VOID)
{				
	TimeOutSet(&gSysTimeOffState.DisTimer, 3000);	

	gSysTimeOffState.SleepState++;
	if(gSysTimeOffState.SleepState >= SLEEP_MAX)
	{
		gSysTimeOffState.SleepState = SLEEP_00;
	}	
	gSysTimeOffState.ProState = SYS_OFF_TIMEING_SET_MODE_VALID;	
	
	if(gSysTimeOffState.SleepState != SLEEP_00)
	{
		gSysTimeOffState.EnState = TRUE;
		SystemOffSetTimer();
	}
	else
	{
		gSysTimeOffState.EnState = FALSE;
	}	

//	if(gSysTimeOffState.EnState == TRUE)
//	{
//		gSysTimeOffState.SleepState++;
//		if(gSysTimeOffState.SleepState >= SLEEP_MAX)
//		{
//			gSysTimeOffState.SleepState = SLEEP_00;
//		}	
//		SystemOffSetTimer();
//		gSysTimeOffState.ProState = SYS_OFF_TIMEING_SET_MODE_VALID;	
//	}
//	else
//	{
//		gSysTimeOffState.ProState  = SYS_OFF_TIMEING_SET_MODE_INVALID;
//	}
}
예제 #21
0
bool UsbAudioControl(void)
{
	uint16_t Msg = 0;
    
#ifndef FUNC_MIXER_SRC_EN
	AudioSampleRateSet(44100);
#endif
    
#ifdef FUNC_USB_AUDIO_EN
	if(gSys.CurModuleID == MODULE_ID_USB_AUDIO)
	{
		APP_DBG("Enter usb-audio\n");
	}
#endif

#ifdef FUNC_USB_READER_EN
	if(gSys.CurModuleID == MODULE_ID_USB_READER)
	{
		APP_DBG("Enter sd reader\n");
	}
#endif

#ifdef FUNC_USB_AUDIO_READER_EN
	if(gSys.CurModuleID == MODULE_ID_USB_AUDIO_READER)
	{
		APP_DBG("Enter usb-audio-reader\n");
	}
#endif

	if(!IsPcLink())
	{
		APP_DBG("device not ready!\n");
		return FALSE;
	}

	TimeOutSet(&UsbAudioFreqAdjustTimer, 1000);    
	NVIC_EnableIRQ(USB_IRQn);
	UsbSetCurrentPort(PC_PORT_NUM);		// 选择USB端口

	APP_DBG("IsPcLink() OK!\n");

#ifdef FUNC_USB_AUDIO_EN
	if(gSys.CurModuleID == MODULE_ID_USB_AUDIO)
	{
		// 单独USB声卡模式,PC识别出USB声卡
		APP_DBG("MODULE_ID_USB_AUDIO\n");
		DeviceAudioSetMode(USB_DEVICE_AUDIO);
		gDeviceVID = 0x0000;
		gDevicePID = 0x0201;
		gDeviceString_Manu = "MVSILICON";					//max length: 32bytes
		gDeviceString_Product = "MV USB AUDIO";				//max length: 32bytes
		gDeviceString_SerialNumber = "20130617A002";		//max length: 32bytes
	}
#endif

#ifdef FUNC_USB_READER_EN
	if(gSys.CurModuleID == MODULE_ID_USB_READER)
	{
		// 单独USB读卡器模式,PC识别出USB读卡器
		APP_DBG("MODULE_ID_USB_READER\n");
		DeviceAudioSetMode(USB_DEVICE_READER);
		DeviceStorInit();
		gDeviceVID = 0x0000;
		gDevicePID = 0x1000;
		gDeviceString_Manu = "MVSILICON";				// max length: 32bytes
		gDeviceString_Product = "USB CARD READER";		// max length: 32bytes
		gDeviceString_SerialNumber = "20130617B002";	// max length: 32bytes
	}
#endif

#ifdef FUNC_USB_AUDIO_READER_EN
	if(gSys.CurModuleID == MODULE_ID_USB_AUDIO_READER)
	{
		// 一线通模式,PC同时识别出USB声卡和USB读卡器
		APP_DBG("MODULE_ID_USB_AUDIO_READER\n");
		DeviceAudioSetMode(USB_DEVICE_AUDIO_READER);
		DeviceStorInit();
		gDeviceVID = 0x0000;
		gDevicePID = 0x0201;
		gDeviceString_Manu = "MVSILICON";				// max length: 32bytes
		gDeviceString_Product = "MV USB AUDIO";			// max length: 32bytes
		gDeviceString_SerialNumber = "20130617C002";    // max length: 32bytes
	}
#endif


	//USB读卡器模式下,设备管理器中显示的磁盘驱动器名称
	gDeviceString_MassStor_Vendor = "MVSI";				// max length: 8bytes
	gDeviceString_MassStor_Product = "USB CARD READER";	// max length: 16bytes
	gDeviceString_MassStor_Ver = "V2.0";				// max length: 4bytes

	//USB声卡模式下,回调函数指针初始化
	gFpDeviceAudioMuteEn = DeviceAudioMuteEn;			// PC端执行MUTE命令时,回调此函数
	gFpDeviceAudioMuteDis = DeviceAudioMuteDis;			// PC端执行UNMUTE命令时,回调此函数
	gFpDeviceAudioSetVolume = DeviceAudioSetVolume;		// PC端改变音量时,回调此函数


	UsbDeviceEnableInt(DEVICE_CONTROL_EP, DeviceAudioOnCmd);
	UsbDeviceEnableInt(DEVICE_BULK_OUT_EP, DeviceAudioOnCmd);

//	CodecDacChannelSel(DAC_CH_DECD_L | DAC_CH_DECD_R); // select dac channel
	UsbDeviceInit();

//	NVIC_EnableIRQ(DECODER_IRQn);


	AudioAnaSetChannel(gSys.MicEnable ? AUDIO_CH_MIC : AUDIO_CH_NONE);	
	MixerConfigFormat(MIXER_SOURCE_USB, USB_DAC_FREQ, MIXER_FORMAT_STERO);
	mixer_pcm_format = MIXER_FORMAT_STERO;
	MixerConfigVolume(MIXER_SOURCE_USB, 4000, 4000);
	MixerUnmute(MIXER_SOURCE_USB);
	MixerEnable(MIXER_SOURCE_USB);

    AudioLeftVolume  = (AUDIO_MAX_VOLUME*3)/4;
    AudioRightVolume = (AUDIO_MAX_VOLUME*3)/4;
    APP_DBG("AudioLeftVolume = %d\n", AudioLeftVolume);
#ifdef FUNC_AUDIO_DRC_EFFECT_EN
	if(gSys.AudioDRCEffectFlag)
	{
		if(DRC_ERROR_OK != init_drc(&gSys.AudioDRCEffectHandle, MIXER_FORMAT_STERO, USB_DAC_FREQ, AUDIO_EFFECT_PARAM_DRC_THRESHHOLD,
							0, AUDIO_EFFECT_PARAM_DRC_RATIO, AUDIO_EFFECT_PARAM_DRC_ATTACK_TIME, 
							AUDIO_EFFECT_PARAM_DRC_RELEASE_TIME, AUDIO_EFFECT_PARAM_DRC_CROSSOVER_FREQ))
        {
            APP_DBG("Init DRC Effect fail,close\n");
            gDRCEffectInited = FALSE;
        }
        else
        {
        	gDRCEffectInited = TRUE;
        }
	}
#endif	
#ifdef FUNC_AUDIO_3D_EFFECT_EN
	if(gSys.Audio3dEffectFlag)
	{
		if(THREE_D_ERROR_OK != init_3d(&gSys.Audio3dEffectHandle, MIXER_FORMAT_STERO, USB_DAC_FREQ, AUDIO_EFFECT_PARAM_3D_BASS, AUDIO_EFFECT_PARAM_3D_MID_BOOST))
        {
            //gSys.Audio3dEffectFlag = 0;
            APP_DBG("Init 3D Effect fail,close\n");
            g3dEffectInited = FALSE;
        }
        else
        {
        	g3dEffectInited = TRUE;
        }
	}
#endif
#ifdef FUNC_AUDIO_VB_EFFECT_EN
    if(gSys.AudioVbEffectFlag)
    {
        if(VB_ERROR_OK != init_vb(&gSys.AudioVbEffectHandle, MIXER_FORMAT_STERO, USB_DAC_FREQ, AUDIO_EFFECT_PARAM_VB_CUTOFF_FREQ, AUDIO_EFFECT_PARAM_VB_LIMITER_EN))
        {
            gVbEffectInited = FALSE;
        }
        else
        {
            gVbEffectInited = TRUE;
        }
    }
#endif 
    SetModeSwitchState(MODE_SWITCH_STATE_DONE);
	while(Msg != MSG_COMMON_CLOSE)
	{
		//UsbDeviceDisableInt(DEVICE_BULK_OUT_EP);
		DeviceStorProcess();
		//UsbDeviceEnableInt(DEVICE_BULK_OUT_EP, DeviceAudioOnCmd);

		DeviceAudioProcess();
        
#if (!defined (OUTPUT_CHANNEL_CLASSD)) && (!defined (OUTPUT_CHANNEL_DAC_CLASSD))      //classd模式下,采用的clk mode = normal mode,禁止使用硬件微调
   #ifndef FUNC_SOFT_ADJUST_EN
        UsbAudioFreqAdjust();
   #endif
#endif        
		Msg = MsgRecv(10);// 消息接收,无消息阻塞20ms,有消息立即返回

		if(Msg == MSG_USB_DEVICE_INTERRUPT_CB)
		{
			UsbIntFlag = FALSE;
		}
                
		switch(Msg)
		{		
			case MSG_POWER:
				gSys.NextModuleID = MODULE_ID_STANDBY;
			case MSG_MODE: // mode change,end of this mode
				APP_DBG("CHANGE_MODE\n");
				// mode change,end of this mode
				Msg = MSG_COMMON_CLOSE;                    
				break;

			case MSG_PLAY_PAUSE:
				APP_DBG("PLAY_PAUSE\n");
				DeviceAudioSendPcCmd(PC_CMD_PLAY_PAUSE);
				break;

			case MSG_PRE:
				APP_DBG("PRE\n");
				DeviceAudioSendPcCmd(PC_CMD_PRE);
				SoundRemind(SOUND_PREV_TRACK);
				break;

			case MSG_NEXT:
				APP_DBG("NEXT\n");
				DeviceAudioSendPcCmd(PC_CMD_NEXT);				
                SoundRemind(SOUND_NEXT_TRACK);
				break;

			case MSG_STOP:
				APP_DBG("STOP\n");
				DeviceAudioSendPcCmd(PC_CMD_STOP);
				break;

			case MSG_MUTE:
				APP_DBG("MUTE\n");
				DeviceAudioSendPcCmd(PC_CMD_MUTE);
				break;
			
#ifdef FUNC_RECORD_EN
			case MSG_REC:  //录音
				gSys.ModuleIDBackUp = gSys.CurModuleID;
				gSys.NextModuleID = MODULE_ID_RECORDER;
				gSys.RecordState = RECORD_STATE_REC;
				gSys.RecordSource = RECORD_SOURCE_LINEIN;
				Msg = MSG_COMMON_CLOSE;
				break;
#endif
           
#ifdef FUNC_REC_PLAYBACK_EN
			case MSG_REC_PLAYBACK:
				EnterRecBackPlay(gSys.CurModuleID, IsUDiskLink() ? DEV_ID_USB : DEV_ID_SD, TRUE, 0, 0);
				break;
#endif
			default:
				CommonMsgProccess(Msg);
				break;
		}
	}

#ifdef FUNC_USB_AUDIO_EN
	if(gSys.CurModuleID == MODULE_ID_USB_AUDIO)
	{
		APP_DBG("Leave usb-audio\n");
	}
#endif

#ifdef FUNC_USB_READER_EN
	if(gSys.CurModuleID == MODULE_ID_USB_READER)
	{
		APP_DBG("Leave sd reader\n");
	}
#endif

#ifdef FUNC_USB_AUDIO_READER_EN
	if(gSys.CurModuleID == MODULE_ID_USB_AUDIO_READER)
	{
		APP_DBG("Leave usb-audio-reader\n");
	}
#endif

	MixerMute(MIXER_SOURCE_USB);
	MixerDisable(MIXER_SOURCE_USB);

	UsbDeviceDisConnect(); // 退出前断开usb device,停止接收数据,以免与SD/U盘播放产生冲突
#ifdef FUNC_USB_EN
	UsbSetCurrentPort(UDISK_PORT_NUM); // set usb host port
#endif
	return TRUE;//OK
}
예제 #22
0
VOID RtcDisplay(VOID)
{
#ifdef FUNC_UARTDBG_EN
	static BYTE TempSec = -1;
#endif

	//Display RTC time
	if(IsTimeOut(&RtcReadTimer))
	{
		TimeOutSet(&RtcReadTimer, 500);
		if(RtcState != RTC_STATE_SET_TIME)
		{
			GetRTCCurrTime(&gRtcTime);
		}
#ifdef FUNC_UARTDBG_EN
		if(gRtcTime.Sec != TempSec)
		{
			TempSec = gRtcTime.Sec;	
			RtcUpdateDisplay = TRUE;
		}
#endif
	}

#ifdef FUNC_UARTDBG_EN
	if(RtcUpdateDisplay)
	{
		RtcUpdateDisplay = FALSE;
		
		if(RtcFlag == 1)
		{
			//YYYY-MM-DD(W) HH:MM:SS
			DBG(("%d-%-.2d-%-.2d(星期%d) ", 
			(WORD)gRtcTime.Year, 
			(WORD)gRtcTime.Mon, 
			(WORD)gRtcTime.Date, 
			(WORD)(gRtcTime.WDay)));

			#ifdef FUNC_LUNAR_EN  
			DisplayLunarDate();
			#endif
				
			DBG((" %-.2d:%-.2d:%-.2d  ",  
			(WORD)gRtcTime.Hour, 
			(WORD)gRtcTime.Min, 
			(WORD)gRtcTime.Sec));
			DBG(("\n"));
		}
#ifdef FUNC_ALARM_EN
		else if(RtcFlag == 2)
		{
			switch(gAlarmMode)
			{
				case ALARM_MODE_ONCE_ONLY:
					DBG(("闹钟模式:单次(once only) "));
					DBG(("%d-%-.2d-%-.2d(星期%d) ", 
					(WORD)gAlarmTime.Year, 
					(WORD)gAlarmTime.Mon, 
					(WORD)gAlarmTime.Date, 
					(WORD)gAlarmTime.WDay));
					break;

				case ALARM_MODE_PER_DAY:
					DBG(("闹钟模式:每天一次(every day)"));
					break;

				case ALARM_MODE_PER_WEEK:
					DBG(("闹钟模式:每周一次(every week) 星期%2BX", gAlarmTime.WDay));
					break;

				default:
					DBG(("模式错误(mode error)\n"));
					break;
			}	

			DBG((" %-.2d:%-.2d:%-.2d  ",  
			(WORD)gAlarmTime.Hour, 
			(WORD)gAlarmTime.Min, 
			(WORD)(gAlarmTime.Sec+1)));
			DBG(("\n"));    
		}
		DBG(("RtcAlarmNum = :%2BX\n",RtcAlarmNum));
#endif
	}
#endif
}
예제 #23
0
//这2个函数可以放在lib中,...结束
VOID RtcCtrlInit(VOID)
{	
#ifdef	FUNC_UARTDBG_EN
	 BYTE i;
#endif

#ifdef FUNC_ALARM_EN		
	extern BYTE GetRtcCurAlarmNum(VOID);
	
	InitRtc(gAlarmList, sizeof(gAlarmList) / sizeof(AlARM_INFO));
	gCurAlarmNum = GetRtcCurAlarmNum(); //0表示没有闹钟 
	DBG(("gCurAlarmNum:%02BX\n", gCurAlarmNum));	
#else
	InitRtc(NULL, 0); // 该函数必须调用
#endif

	RtcState = RTC_STATE_IDLE;
	RtcSubState = RTC_SET_NONE;
	RtcUpdateDisplay = FALSE;
	RtcFlag = 1;
	RtcAutOutTimeCount = 0;
	TimeOutSet(&RtcReadTimer, 0);
	TimeOutSet(&RtcSetCntTimer, 0);

#ifdef FUNC_ALARM_EN
#ifdef FUNC_BREAK_POINT_EN
	BP_SaveInfo((BYTE *)&gBreakPointInfo.PowerMemory.AlarmList2Store, sizeof(gBreakPointInfo.PowerMemory.AlarmList2Store));
#endif	

#ifdef	FUNC_UARTDBG_EN
	for(i = 0; i < MAX_ALARM_NUM; i++)
	{
		 DBG(("gpAlarmList[%bu].AlarmMode:%bx,", i, gAlarmList[i].AlarmMode));
		 DBG(("gAlarmList[%bu].AlarmTimeAsSeconds:%lu,", i, gAlarmList[i].AlarmTimeAsSeconds));
		 DBG(("gAlarmList[%bu].AlarmStatus:%bx\n", i, gAlarmList[i].AlarmStatus));
	}
#endif

#ifdef	AU6210K_CAR_MODEL_DEMO
	DBG(("InitRtc2\n"));
	RtcSourceState = RTC_SOURCE_CLOCK;
	DBG(("RtcSourceState=%bu\n", RtcSourceState));
	if(GetAlarmStatus(RtcAlarmNum))
	{
		gAlarmState = ALARM_STATUS_OPEN;
		DBG(("gAlarmState= ALARM_STATUS_OPEN\n"));
	}
	else
	{
		gAlarmState = ALARM_STATUS_CLOSE;
		DBG(("gAlarmState= ALARM_STATUS_CLOSE\n"));
	}			
#endif

	
#ifdef AU6210K_BOOMBOX_DEMO
	if(GetAlarmStatus(1))
	{
		gAlarm1State = ALARM_STATUS_OPEN;
		DBG(("gAlarm1State= ALARM1_STATUS_OPEN\n"));
	}
	else
	{
		gAlarm1State = ALARM_STATUS_CLOSE;
		DBG(("gAlarm1State= ALARM1_STATUS_CLOSE\n"));
	}		

	if(GetAlarmStatus(2))
	{
		gAlarm2State = ALARM_STATUS_OPEN;
		DBG(("gAlarm2State= ALARM2_STATUS_OPEN\n"));
	}
	else
	{
		gAlarm2State = ALARM_STATUS_CLOSE;
		DBG(("gAlarm2State= ALARM2_STATUS_CLOSE\n"));
	}			
#endif
#endif

	
//	//测试用,客户根据实际情况设置。
//	gRtcTime.Year = 1980;
//	gRtcTime.Mon = 1;
//	gRtcTime.Date = 1;
//	gRtcTime.WDay = 1;	// 0:星期日
//	gRtcTime.Hour = 7;
//	gRtcTime.Min = 0; 
//	gRtcTime.Sec = 0;
//  SetRTCCurrTime(&gRtcTime);
//	gAlarmTime.Year = 1980; 
//	gAlarmTime.Mon = 1;
//	gAlarmTime.Date = 1;
//	gAlarmTime.WDay = 1;
//	gAlarmTime.Hour = 8;
//	gAlarmTime.Min = 0;
//	gAlarmTime.Sec = 0;
//  gAlarmMode = ALARM_MODE_ONCE_ONLY;
//  SetAlarmTime(RtcAlarmNum, gAlarmMode, &gAlarmTime);

#ifdef AU6210K_BOOMBOX_DEMO	
	gRtcTime.Hour = 12;
	gRtcTime.Min = 0; 
	gRtcTime.Sec = 0;
	SetRTCCurrTime(&gRtcTime);
	
	gAlarmTime.Hour = 0;
	gAlarmTime.Min = 0;
	gAlarmTime.Sec = 0;
	gAlarmMode = ALARM_MODE_PER_DAY;
	SetAlarmTime(1, gAlarmMode, &gAlarmTime);
	SetAlarmTime(2, gAlarmMode, &gAlarmTime);
#endif
}
예제 #24
0
파일: egg.c 프로젝트: wiradharma/wiremon
void EggCalibrateCondition(WORD temperNow,WORD humiNow)
{
	//only calibrate after timeout
	if(!IsTimeOut(&EggCalibrateTimeout)) return;


	//////////////////////
	//////cek suhu/////////
	//////////////////////

	
	//jika suhu sangat rendah
	if(temperNow<TEMPER_V_LO)
		{
			//nyalakan kipas pendingin dengan time out lama
			TimeOutSet(&EggFanTTimeout,FAN_T_V_TIMEOUT);
			EggFanTOn();
			fFanT=ON;
			//matikan pemanas
			EggHeaterOff();
			fHeater=OFF;
		}
	//jika suhu rendah
	else if(temperNow<TEMPER_LO&&temperNow>TEMPER_V_LO)
		{	
			//nyalakan kipas pendingin dengan time out singkat
			TimeOutSet(&EggFanTTimeout,FAN_T_TIMEOUT);
			EggFanTOn();
			fFanT=ON;
			//matikan pemanas
			EggHeaterOff();
			fHeater=OFF;}
	//jika suhu rata rata
	else if(temperNow<TEMPER_HI&&temperNow>TEMPER_LO)
		{

		}
	//jika suhu tinggi
	else if(temperNow<TEMPER_V_HI&&temperNow>TEMPER_HI)
		{
			//nyalakan pemanas dengan timeout lama
			TimeOutSet(&EggHeaterTimeout,HEATER_TIMEOUT);
			fHeater=ON;
			//matikan pendingin
			EggFanTOff();
			fFanT=OFF;
			}
	//jika suhu sangat tinggi
	else if(temperNow>TEMPER_V_HI)
		{
			//nyalakan pemanas dengan timeout singkat
			TimeOutSet(&EggHeaterTimeout,HEATER_V_TIMEOUT);
			EggHeaterOn();
			fHeater=ON;
			//matikan pendingin
			EggFanTOff();
			fFanT=OFF;
		}

	///////////////////////
	/////cek kelembapan///////////
	///////////////////////
	
	//jika udara sangat kering
	if(humiNow<HUMI_V_LO)
		{
			//nyalakan timer kipas penambah kelembapan, timeout lama
			TimeOutSet(&EggFanHTimeout,FAN_H_V_TIMEOUT);
			EggFanHOn();
			//matikan exhaust
			EggFanExOff();
			
		}
	//jika udara kering
	else if(humiNow>HUMI_V_LO&&humiNow<HUMI_LO)
		{
			//nyalakan timer kipas penambah kelembapan, timeout singkat
			TimeOutSet(&EggFanHTimeout,FAN_H_TIMEOUT);
			EggFanHOn();
			//matikan exhaust
			EggFanExOff();
			
		}
	//jika kelembapan udara rata rata
	else if(humiNow>HUMI_LO&&humiNow<HUMI_LO)
		{
		
		}
	//jika udara lembap
	else if(humiNow>HUMI_HI&&humiNow<HUMI_V_HI)
		{
			//nyalakan timer kipas exhaust, timeout singkat 
			TimeOutSet(&EggFanExTimeout,FANEX_TIMEOUT);
			EggFanExOn();
			//matikan pelembab
			EggFanHOff();
		}
	//jikaudara sangat lembap
	else if(humiNow>HUMI_V_HI)
		{
			//nyalakan timer kipas exhaust, teimout lama
			TimeOutSet(&EggFanExTimeout,FANEX_V_TIMEOUT);
			EggFanExOn();
			//matikan pelembab
			EggFanHOff();
		}
	
	TimeOutSet(&EggCalibrateTimeout, CALIBRATE_TIMEOUT);
}
예제 #25
0
//按键响应
VOID RadioEventProcess(VOID)
{
	MESSAGE Event = MessageGet(MSG_FIFO_KEY);
	
	switch(Event)
	{
		case MSG_POWER:
		case MSG_MODE_SW:
			//DBG(("Exit FM, Event:%bx\n", Event));
			CancelSearch();
			MessageSend(MSG_FIFO_DEV_CTRL, Event);
			break;
			
		case MSG_SCAN://启动自动全频段搜台
		case MSG_INTRO:
		case MSG_PLAY_1CP:
#if !defined(AU6210K_HXX_B002)			
		case MSG_PLAY_PAUSE:
#endif			
#ifdef FUNC_DEVICE_FORCEPAUSE_EN
			if(gDevicePlayForcePauseFlag == TRUE)
			{
				gDevicePlayForcePauseFlag = FALSE;
				UnMute();
				break;
			}
#endif
			DBG(("SCAN\n"));
#ifdef FUNC_BEEP_SOUND_EN	
			PushKeyBeep(1);
#endif
			if(gRadioCtrl.State == RADIO_IDLE)
			{
				gRadioCtrl.State = RADIO_READ;
				
				gRadioCtrl.SeekMode = SEEK_AUTOSCAN;
#ifdef FUNC_SLAVE_UART_EN
                            gRadioData.CurrFreq = gRadioCtrl.RadioLowerBound;
#else
				gRadioData.CurrFreq = RADIO_LOWER_BOUND;
#endif
				gRadioData.CurrStation = 0;	
				gRadioData.Area1StationSum = 0;
				gRadioData.StationSum = 0;					
				memset(&gRadioData.Stations, 0, sizeof(gRadioData.Stations));
				
				MuteOn(TRUE, TRUE);				
				RadioSetFreq();		
#ifdef FUNC_SLAVE_UART_EN
#ifdef	FUNC_RADIO_AUTOSEEK_EN
				MVFM_AutoSeekConfig(gRadioData.CurrFreq, gRadioCtrl.RadioUpperBound, gRadioCtrl.RadioSeekStep, 1, 1);
#else
				MVFM_AutoSeekConfig(gRadioData.CurrFreq, gRadioCtrl.RadioUpperBound, gRadioCtrl.RadioSeekStep, 0, 1);
#endif

#else
#ifdef	FUNC_RADIO_AUTOSEEK_EN
				MVFM_AutoSeekConfig(gRadioData.CurrFreq, RADIO_UPPER_BOUND, RADIO_SEEK_STEP, 1, 1);
#else
				MVFM_AutoSeekConfig(gRadioData.CurrFreq, RADIO_UPPER_BOUND, RADIO_SEEK_STEP, 0, 1);
#endif
#endif				
				RadioMute(TRUE);
				TimeOutSet(&gRadioCtrl.SeekPreviewTimer, RadioSeekTimeValue);
			}
			else
			{
				CancelSearch();
			}
			break;

		case MSG_SAVE_STATION:  //保存当前的频率到当前的频道
			if(gRadioCtrl.State == RADIO_IDLE)
			{		
				if(gRadioData.StationSum < MAX_RADIO_STATION_NUM)
				{		
					if((gRadioData.CurrFreq < RADIO_FREQ_BASE_875) && ((gRadioData.CurrStation + 1) <= gRadioData.Area1StationSum))
					{
						gRadioData.Stations[gRadioData.CurrStation] = (gRadioData.CurrFreq - RADIO_FREQ_BASE_760);
					}
					else if((gRadioData.CurrFreq > RADIO_FREQ_BASE_875) && ((gRadioData.CurrStation + 1) > gRadioData.Area1StationSum))
					{
						gRadioData.Stations[gRadioData.CurrStation] = (gRadioData.CurrFreq - RADIO_FREQ_BASE_875);
					}				
					RadioShowDebug(RadioShowSaveCurFreToCurChannle);
					RadioWriteData();
					RadioDisFlag = RadioDisCurFreBlink;
					RadioDisCount = 6;
					TimeOutSet(&gRadioCtrl.SeekPreviewTimer,RadioBlinkTime);
#ifdef FUNC_SLAVE_UART_EN
					SlaveRadioRetCurrentStatus();
#endif

				}
			}
			break;
		
		case MSG_NEXT://下一个台
		case MSG_PLAY_1:
#ifdef	FUNC_DEVICE_FORCEPAUSE_EN
			if(gDevicePlayForcePauseFlag == TRUE) 
			{
				break;
			}					
#endif

#ifdef AU6210K_BOOMBOX_DEMO
			if(gRadioCtrl.State == RADIO_PROG)
			{
				if(gRadioData.CurrStation < (MAX_RADIO_STATION_NUM / 2))
				{
					gRadioData.CurrStation++;
				}
				else
				{
					gRadioData.CurrStation = 0;
				}
				break;
			}
			
			if(gRadioCtrl.State == RADIO_IDLE)
			{
				if(RadioGetValidPresetNum(gRadioData.CurrStation, UP) == TRUE)
				{
					RadioDisFlag = RadioDisCurChChange;
					TimeOutSet(&gRadioCtrl.SeekPreviewTimer, RadioPreVimeTimerValue);
					RadioChannelChange();
					UnMute();
					gSys.MuteFg = FALSE;
				}
				break;
			}
#endif

			if((gRadioData.StationSum > 0) && (gRadioCtrl.State == RADIO_IDLE))
			{
#ifdef FUNC_BEEP_SOUND_EN	
				PushKeyBeep(1);
#endif
				if(gRadioData.CurrStation < (gRadioData.StationSum - 1))
				{
					gRadioData.CurrStation++;
				}
				else
				{
					gRadioData.CurrStation = 0;
				}
				RadioDisFlag = RadioDisCurChChange;				
				RadioChannelChange();
				UnMute();
				TimeOutSet(&gRadioCtrl.SeekPreviewTimer, RadioPreVimeTimerValue);
				gSys.MuteFg = FALSE;
#ifdef FUNC_SLAVE_UART_EN
				SlaveRadioRetCurrentStatus();
#endif
			}
			break;
			
		case MSG_PRE://上一个台
		case MSG_EQ_CH_SUB:
#ifdef	FUNC_DEVICE_FORCEPAUSE_EN
			if(gDevicePlayForcePauseFlag == TRUE) 
			{
				break;
			}					
#endif

#ifdef AU6210K_BOOMBOX_DEMO
			if(gRadioCtrl.State == RADIO_PROG)
			{
				if(gRadioData.CurrStation < (MAX_RADIO_STATION_NUM / 2))
				{
					gRadioData.CurrStation++;
				}
				else
				{
					gRadioData.CurrStation = 0;
				}
				break;
			}
			
			if(gRadioCtrl.State == RADIO_IDLE)
			{
				if(RadioGetValidPresetNum(gRadioData.CurrStation, DOWN) == TRUE)
				{
					RadioDisFlag = RadioDisCurChChange;
					TimeOutSet(&gRadioCtrl.SeekPreviewTimer, RadioPreVimeTimerValue);
					RadioChannelChange();
					UnMute();
					gSys.MuteFg = FALSE;
					break;
				}
			}
#endif

			if((gRadioData.StationSum >  0) && (gRadioCtrl.State == RADIO_IDLE)) 
			{
#ifdef FUNC_BEEP_SOUND_EN	
				PushKeyBeep(1);
#endif
				if(gRadioData.CurrStation > 0)
				{
					gRadioData.CurrStation--;
				}
				else
				{
					gRadioData.CurrStation = gRadioData.StationSum - 1;
				}
				RadioDisFlag = RadioDisCurChChange;				
				RadioChannelChange();
				UnMute();
				TimeOutSet(&gRadioCtrl.SeekPreviewTimer, RadioPreVimeTimerValue);
				gSys.MuteFg = FALSE;
#ifdef FUNC_SLAVE_UART_EN
				SlaveRadioRetCurrentStatus();
#endif
			}
			break;
			
#ifdef	FUNC_NUMBER_KEY_EN
		case MSG_RECV_NUM://选台(输入数值在有效台数内)或设置频率(输入数值在有效频率范围内)	
			if(gRadioCtrl.State == RADIO_IDLE)//SeanFu
			{
				if((gRecvNum > 0) && (gRecvNum <= gRadioData.StationSum))
				{
					//DBG(("RecvNum合法台号:%d\n", gRecvNum));				
					gRadioData.CurrStation = gRecvNum - 1;
					if(gRecvNum <= gRadioData.Area1StationSum)
					{
						gRadioData.CurrFreq = (gRadioData.Stations[gRadioData.CurrStation] + RADIO_FREQ_BASE_760);
					}
					else
					{
						gRadioData.CurrFreq = (gRadioData.Stations[gRadioData.CurrStation] + RADIO_FREQ_BASE_875);
					}	
					RadioWriteData();
					RadioShowDebug(RadioShowCurStationChange);
				}
#ifdef FUNC_SLAVE_UART_EN
                            else if((gRecvNum >= gRadioCtrl.RadioLowerBound) && (gRecvNum <= gRadioCtrl.RadioUpperBound))
#else
				else if((gRecvNum >= RADIO_LOWER_BOUND) && (gRecvNum <= RADIO_UPPER_BOUND))
#endif
				{
					//DBG(("RecvNum合法 频率:%d\n", gRecvNum));
					gRadioData.CurrFreq = gRecvNum;				
					RadioWriteData();
					RadioShowDebug(RadioShowSaveFre);
				}
				else 
				{
					//DBG(("RecvNum非法:%d\n", gRecvNum));	
					gRecvNum = 0;						
					NumKeyRadioFreqErrorFlag = TRUE;
					NumKeyErrorDispFlag = TRUE;					
#ifdef FUNC_DISP_EN						
					TimeOutSet(&DispTmr, NORMAL_INTERVAL);	//输入错误Err显示保留时间
#endif
					return;
				}			
				RadioSetFreq();
				RadioMute(FALSE);
				gRecvNum = 0;					
#ifdef FUNC_DISP_EN						
				TimeOutSet(&DispTmr, 0);	//退出数值显示
#endif
			}
			break;

		case MSG_NUM_SAVE_STAITON:	//将当前频率保存起来
			if(gRadioCtrl.State == RADIO_IDLE)
			{				
				//DBG(("RecvNum %d \n", gRecvNum));
				RadioArrayInsert();
				gRecvNum = 0;
				RadioWriteData();
				RadioShowDebug(RadioShowSaveFre);
				RadioDisFlag = RadioDisCurFreBlink;
				RadioDisCount = 4;
				TimeOutSet(&gRadioCtrl.SeekPreviewTimer, RadioBlinkTime);
			}
			break;
#endif
			
#ifdef	FUNC_RADIO_STEPOVER_EN		
		case MSG_NEXT1:
		case MSG_FREQ_UP:
		case MSG_FREQUP_10TRK://循环递增微调频率(+100KHZ)	
			if(gRadioCtrl.State == RADIO_IDLE)
			{
#ifdef FUNC_SLAVE_UART_EN
                            if(++gRadioData.CurrFreq > gRadioCtrl.RadioUpperBound)
				{
					gRadioData.CurrFreq = gRadioCtrl.RadioLowerBound;
				}
#else
				if(++gRadioData.CurrFreq > RADIO_UPPER_BOUND)
				{
					gRadioData.CurrFreq = RADIO_LOWER_BOUND;
				}
#endif
				RadioSetFreq();
				RadioMute(FALSE);		
				RadioWriteData();
				RadioShowDebug(RadioShowFreChange);
			}
			break;
		
		case MSG_PREV1:
		case MSG_FREQ_DN:
		case MSG_FREQDN_10TRK://循环递减微调频率(-100KHZ)		
			if(gRadioCtrl.State == RADIO_IDLE)
			{
#ifdef FUNC_SLAVE_UART_EN
                            if(--gRadioData.CurrFreq < gRadioCtrl.RadioLowerBound)
				{
					gRadioData.CurrFreq = gRadioCtrl.RadioUpperBound;
				}	
#else
				if(--gRadioData.CurrFreq < RADIO_LOWER_BOUND)
				{
					gRadioData.CurrFreq = RADIO_UPPER_BOUND;
				}	
#endif
				RadioSetFreq();
				RadioMute(FALSE);		
				RadioWriteData();
				RadioShowDebug(RadioShowFreChange);
			}
			break;
#endif
		
#ifdef	FUNC_RADIO_SEMO_AUTOSEEK_EN		
		case MSG_FF_START:
		case MSG_10TRACK_ADD://递增方式搜台,搜到第一个后停止
			if(gRadioCtrl.State == RADIO_IDLE)
			{
				gRadioCtrl.SeekMode = SEEK_SCANUP;
#ifdef FUNC_SLAVE_UART_EN
                            if(gRadioData.CurrFreq >= gRadioCtrl.RadioUpperBound)
				{	
					gRadioData.CurrFreq = gRadioCtrl.RadioLowerBound;
				}
				else
				{
					gRadioData.CurrFreq++;
				}
#else
				if(gRadioData.CurrFreq >= RADIO_UPPER_BOUND)
				{	
					gRadioData.CurrFreq = RADIO_LOWER_BOUND;
				}
				else
				{
					gRadioData.CurrFreq++;
				}
#endif				
				MuteOn(TRUE, TRUE);	
				RadioSetFreq();						
				gRadioCtrl.State = RADIO_READ;
#ifdef FUNC_SLAVE_UART_EN
#ifdef	FUNC_RADIO_AUTOSEEK_EN
				MVFM_AutoSeekConfig(gRadioData.CurrFreq, gRadioCtrl.RadioUpperBound, gRadioCtrl.RadioSeekStep, 1, 1);
#else
				MVFM_AutoSeekConfig(gRadioData.CurrFreq, gRadioCtrl.RadioUpperBound, gRadioCtrl.RadioSeekStep, 0, 1);
#endif
#else
#ifdef	FUNC_RADIO_AUTOSEEK_EN
				MVFM_AutoSeekConfig(gRadioData.CurrFreq, RADIO_UPPER_BOUND, RADIO_SEEK_STEP, 1, 1);
#else
				MVFM_AutoSeekConfig(gRadioData.CurrFreq, RADIO_UPPER_BOUND, RADIO_SEEK_STEP, 0, 1);
#endif
#endif
				RadioMute(TRUE);
				TimeOutSet(&gRadioCtrl.SeekPreviewTimer, RadioSeekTimeValue);
					
			}
			break;
		
		case MSG_FB_START:
		case MSG_10TRACK_SUB://递减方式搜台,搜到第一个后停止
			if(gRadioCtrl.State == RADIO_IDLE)
			{
				gRadioCtrl.SeekMode = SEEK_SCANDOWN;
#ifdef FUNC_SLAVE_UART_EN
                            if(gRadioData.CurrFreq <= gRadioCtrl.RadioLowerBound)
				{
					gRadioData.CurrFreq = gRadioCtrl.RadioUpperBound;
				}
				else
				{
					gRadioData.CurrFreq--;
				}
#else				
				if(gRadioData.CurrFreq <= RADIO_LOWER_BOUND)
				{
					gRadioData.CurrFreq = RADIO_UPPER_BOUND;
				}
				else
				{
					gRadioData.CurrFreq--;
				}
#endif				
				MuteOn(TRUE, TRUE);	
				RadioSetFreq();						
				gRadioCtrl.State = RADIO_READ;
#ifdef FUNC_SLAVE_UART_EN
#ifdef	FUNC_RADIO_AUTOSEEK_EN
				MVFM_AutoSeekConfig(gRadioData.CurrFreq, gRadioCtrl.RadioLowerBound, gRadioCtrl.RadioSeekStep, 1, 1);
#else
				MVFM_AutoSeekConfig(gRadioData.CurrFreq, gRadioCtrl.RadioLowerBound, gRadioCtrl.RadioSeekStep, 0, 1);
#endif
#else
#ifdef	FUNC_RADIO_AUTOSEEK_EN
				MVFM_AutoSeekConfig(gRadioData.CurrFreq, RADIO_LOWER_BOUND, RADIO_SEEK_STEP, 1, 1);
#else
				MVFM_AutoSeekConfig(gRadioData.CurrFreq, RADIO_LOWER_BOUND, RADIO_SEEK_STEP, 0, 1);
#endif
#endif
				RadioMute(TRUE);
				TimeOutSet(&gRadioCtrl.SeekPreviewTimer, RadioSeekTimeValue);
					
			}
			break;
#endif

		case MSG_VOL_ADD://音量加					
#if defined(AU6210K_NR_D_9X)||defined(AU6210K_NR_D_9X_XJ_HTS)
			if (gSys.Volume >= VOLUME_MAX)
			{
				SPI_PlaySelectNum(SPIPLAY_SONG_MAX_VOLUME, 0);
				InDacChannelSel(DAC_CH_ONCHIP_FM);
				RadioSetFreq();
				UnMute();
				SysClkDivSet(CLK_DIV_RATE);
			}
#endif

#ifdef FUNC_POWER_AMPLIFIER_EN
			ABPowerAmplifierOff();			
#endif

#ifdef FUNC_OTP_KEY_SOUND_EN
			OTP_PlaySelNum(OTPPLAY_NUM_VOLUP, 0);
			InDacChannelSel(DAC_CH_ONCHIP_FM);
			RadioSetFreq();
			UnMute();
			SysClkDivSet(CLK_DIV_RATE);
#endif
#ifdef FUNC_PT231X_EN
            VolType = VOL_MAIN;
            PT2313VolAdd();
#else
			VolumeAdjust(UP);
#endif
			break;
		
		case MSG_VOL_SUB://音量减			
#if defined(AU6210K_NR_D_9X)||defined(AU6210K_NR_D_9X_XJ_HTS)
			if (gSys.Volume <= VOLUME_MIN)
			{
				SPI_PlaySelectNum(SPIPLAY_SONG_MIN_VOLUME, 0);
				InDacChannelSel(DAC_CH_ONCHIP_FM);
				RadioSetFreq();
				SysClkDivSet(CLK_DIV_RATE);
			}
#endif

#ifdef FUNC_POWER_AMPLIFIER_EN
			ABPowerAmplifierOff();			
#endif

#ifdef FUNC_OTP_KEY_SOUND_EN
			OTP_PlaySelNum(OTPPLAY_NUM_VOLDN, 0);
			InDacChannelSel(DAC_CH_ONCHIP_FM);
			RadioSetFreq();
			UnMute();
			SysClkDivSet(CLK_DIV_RATE);
#endif
#ifdef FUNC_PT231X_EN
                    VolType = VOL_MAIN;
                    PT2313VolSub();
#else
			VolumeAdjust(DOWN);
#endif
			break;
#ifdef FUNC_PT231X_EN
              case MSG_TREBUP:
			VolType = VOL_TREB;
                     PT2313VolAdd();  	
			break;  	
		case MSG_TREBDN:
			VolType = VOL_TREB;
                     PT2313VolSub();  	
			break;  	
		case MSG_BASSUP:
			VolType = VOL_BASS;
                     PT2313VolAdd();  	
			break;  	
		case MSG_BASSDN:
			VolType = VOL_BASS;
                     PT2313VolSub();  	
			break;  	
		case MSG_DEFAULT:
			PT2313TrebBassSetDefault();
			break;  	
#endif
#if defined(AU6210K_HXX_B002)
		case MSG_PLAY_PAUSE:
#endif
		case MSG_MUTE:
			if(gRadioCtrl.State == RADIO_IDLE)
			{			
#if 0//def FUNC_SPI_KEY_SOUND_EN
				if(gSys.MuteFg)
				{
					SPI_PlaySelectNum(SPIPLAY_SONG_UNMUTE, 0);
				}
				else
				{	
					SPI_PlaySelectNum(SPIPLAY_SONG_MUTE, 0);
				}				
				InDacChannelSel(DAC_CH_ONCHIP_FM);
				if(gSys.MuteFg)
				{
					RadioSetFreq();
					gSys.MuteFg = TRUE;
				}
				SysClkDivSet(CLK_DIV_RATE);
#endif
				MuteStatusChange();			
			}
			break;	
		
#if (defined(AU6210K_BOOMBOX_DEMO))
		case MSG_CLOCK:			
			if(gRadioCtrl.State == RADIO_IDLE)
			{
				gRadioCtrl.State = RADIO_PROG;
				RadioDisFlag = RadioDisCurProgramNum;
				TimeOutSet(&gRadioCtrl.SeekPreviewTimer, RadioProgramWaitTime);
				break;
			}	

			if(gRadioCtrl.State == RADIO_PROG)
			{		
				if(gRadioData.CurrFreq < RADIO_FREQ_BASE_875) 
				{
					gRadioData.Stations[gRadioData.CurrStation] = (gRadioData.CurrFreq - RADIO_FREQ_BASE_760);
				}
				else if(gRadioData.CurrFreq > RADIO_FREQ_BASE_875)
				{
					gRadioData.Stations[gRadioData.CurrStation] = (gRadioData.CurrFreq - RADIO_FREQ_BASE_875);
				}				
				gRadioData.Stations[gRadioData.CurrStation + (MAX_RADIO_STATION_NUM / 2)] = gRadioData.CurrStation + 1;
				gRadioData.StationSum = (MAX_RADIO_STATION_NUM / 2);		
					
				RadioShowDebug(RadioShowSaveCurFreToCurChannle);
#ifdef FUNC_BREAK_POINT_EN
				RadioWriteData();
#endif
				RadioDisFlag = RadioDisCurFreNum;
				gRadioCtrl.State = RADIO_IDLE;
			}
			break;

		case MSG_FM_STERO_SW:
			if(gRadioCtrl.State == RADIO_IDLE)
			{
				gRadioMonoEnableFlag ^= 1;
				RadioMonoModeSet(gRadioMonoEnableFlag);			
			}
			break;
#endif

		default:	
			break;
	}//switch(Event)

#ifdef FUN_SYSTEM_POWEROFF_WAIT_TIME
	SystemOffTimeMsgPro(Event);
#endif
}
예제 #26
0
// Seek tuning will search up or down for a valid channel.
VOID RadioStationSearch(VOID)
{
	BYTE SearchState; 
		
	switch(gRadioCtrl.State)
	{	
		case RADIO_SEEK:	
			if(IsTimeOut(&gRadioCtrl.SeekPreviewTimer))
			{	
				MuteOn(TRUE, TRUE);	//解决FM信号源从DAC直接输出时,自动搜台过程中会有较大低噪声
				RadioMute(TRUE);
				RadioDisFlag = RadioDisCurFreNum;

#ifdef	FUNC_RADIO_AUTOSEEK_EN
				if((gRadioCtrl.SeekMode == SEEK_AUTOSCAN) ||(gRadioCtrl.SeekMode == SEEK_SCANUP))
				{
#ifdef FUNC_SLAVE_UART_EN
                                   MVFM_AutoSeekConfig(gRadioData.CurrFreq, gRadioCtrl.RadioUpperBound, gRadioCtrl.RadioSeekStep, 1, 0);
#else
					MVFM_AutoSeekConfig(gRadioData.CurrFreq, RADIO_UPPER_BOUND, RADIO_SEEK_STEP, 1, 0);
#endif
				}
				else
				{
#ifdef FUNC_SLAVE_UART_EN
                                   MVFM_AutoSeekConfig(gRadioData.CurrFreq, gRadioCtrl.RadioLowerBound, gRadioCtrl.RadioSeekStep, 1, 0);
#else				
					MVFM_AutoSeekConfig(gRadioData.CurrFreq, RADIO_LOWER_BOUND, RADIO_SEEK_STEP, 1, 0);
#endif
				}
				DBG(("Auto Seek Start Freq %d\n", gRadioData.CurrFreq));	
#else
				if((gRadioCtrl.SeekMode == SEEK_AUTOSCAN) ||(gRadioCtrl.SeekMode == SEEK_SCANUP))
				{
					gRadioData.CurrFreq++;
				}
				else
				{
					gRadioData.CurrFreq--;
				}
				//DBG(("Search  Freq %d\n",gRadioData.CurrFreq));					
				//RadioSearchSet(gRadioData.CurrFreq);
#ifdef FUNC_SLAVE_UART_EN
                            MVFM_AutoSeekConfig(gRadioData.CurrFreq, gRadioCtrl.RadioUpperBound, gRadioCtrl.RadioSeekStep, 0, 0);
                            gRadioCtrl.RadioSeekResult =0;
#else								
				MVFM_AutoSeekConfig(gRadioData.CurrFreq, RADIO_UPPER_BOUND, RADIO_SEEK_STEP, 0, 0);
#endif
#endif
				gRadioCtrl.State = RADIO_READ;
				TimeOutSet(&gRadioCtrl.SeekPreviewTimer, RadioSeekTimeValue);
				
#ifdef FUNC_RADIO_ESD_AUTO_RESUME
				gRadioCurrFreqBack = gRadioData.CurrFreq;
#endif
#ifdef FUNC_SLAVE_UART_EN
				SlaveRadioRetCurrentStatus();
#endif
			}
			break;
						
		case RADIO_READ:
			if(IsTimeOut(&gRadioCtrl.SeekPreviewTimer))
			{
#ifdef	FUNC_RADIO_AUTOSEEK_EN
				if(SearchState = RadioRSSIRead(TRUE)) 
#else
				if(SearchState = RadioRSSIRead(FALSE)) 
#endif
				{	
#ifdef FUNC_SLAVE_UART_EN
                                   gRadioCtrl.RadioSeekResult =1;
#endif
#ifdef	FUNC_RADIO_AUTOSEEK_EN
#ifdef FUNC_DISP_EN
					DispResume();
#endif
#endif
					if(SearchState == 3) 
					{
						//DBG(("Search Freq %d\n",gRadioData.CurrFreq));						
						TimeOutSet(&gRadioCtrl.SeekPreviewTimer, RadioSeekTimeValue);
						break;
					}
					
					if(gRadioCtrl.SeekMode == SEEK_AUTOSCAN)
					{
						if(gRadioData.StationSum < MAX_RADIO_STATION_NUM)
						{
							if(gRadioData.CurrFreq < RADIO_FREQ_BASE_875)
							{
								gRadioData.Stations[gRadioData.StationSum] = (gRadioData.CurrFreq - RADIO_FREQ_BASE_760);
								gRadioData.Area1StationSum++;
							}
							else
							{
								//DBG(("~~~~~~~~~~~~~%u\n",gRadioData.CurrFreq));							
								gRadioData.Stations[gRadioData.StationSum] = (gRadioData.CurrFreq - RADIO_FREQ_BASE_875);
							}						
							gRadioData.StationSum++;

//#if (defined(FUNC_SINGLE_LED_EN))	//单个LED显示需要搜台预览功能
#ifdef RADIO_SEEK_WAIT_EN
							RadioMute(FALSE);
							UnMute();
#endif
//#endif
							RadioDisFlag = RadioDisCurChAutoscan;
							TimeOutSet(&gRadioCtrl.SeekPreviewTimer, RadioPreVimeTimerValue);
#ifdef FUNC_SINGLE_LED_EN  
							DispDev();
#endif
#ifdef FUNC_SLAVE_UART_EN
							SlaveRadioRetCurrentStatus();
#endif
						}
						else
						{					
							//DBG(("FM Buffer Over\n"));
							gRadioData.CurrStation = 0;
							if(gRadioData.Area1StationSum > 0)
							{
								gRadioData.CurrFreq = gRadioData.Stations[gRadioData.CurrStation] + RADIO_FREQ_BASE_760;
							}
							else
							{
								gRadioData.CurrFreq = gRadioData.Stations[gRadioData.CurrStation] + RADIO_FREQ_BASE_875;
							}
							RadioMute(FALSE);
							UnMute();
							gRadioCtrl.State = RADIO_IDLE;																			
							RadioWriteData();							
							RadioShowDebug(RadioShowSearchEndOverflow);
#ifdef FUNC_SINGLE_LED_EN 
							DispDev();
#endif
#ifdef FUNC_SLAVE_UART_EN
							SlaveRadioRetCurrentStatus();
#endif
							return;								
						}
					}
					else
					{
						gRadioCtrl.State = RADIO_IDLE;						
						RadioMute(FALSE);
						UnMute();
						RadioWriteData();						
						RadioShowDebug(RadioShowSearchUpDown);						
#ifdef FUNC_SINGLE_LED_EN 
						DispDev();
#endif
#ifdef FUNC_SLAVE_UART_EN
						SlaveRadioRetCurrentStatus();
#endif
						return;
					}
				}
#ifdef FUNC_SLAVE_UART_EN
                            if(((gRadioCtrl.SeekMode == SEEK_SCANDOWN) && (gRadioData.CurrFreq <= gRadioCtrl.RadioLowerBound))
				|| (((gRadioCtrl.SeekMode == SEEK_SCANUP) || (gRadioCtrl.SeekMode == SEEK_AUTOSCAN)) && (gRadioData.CurrFreq >= gRadioCtrl.RadioUpperBound)))
#else
				if(((gRadioCtrl.SeekMode == SEEK_SCANDOWN) && (gRadioData.CurrFreq <= RADIO_LOWER_BOUND))
				|| (((gRadioCtrl.SeekMode == SEEK_SCANUP) || (gRadioCtrl.SeekMode == SEEK_AUTOSCAN)) && (gRadioData.CurrFreq >= RADIO_UPPER_BOUND)))
#endif
				{ 
					gRadioCtrl.State = RADIO_IDLE;
					if((gRadioData.StationSum > 0) && (gRadioCtrl.SeekMode == SEEK_AUTOSCAN))
					{						
#ifdef	FUNC_RADIO_AUTOSEEK_EN
#ifdef FUNC_DISP_EN
						DispResume();
#endif
#endif
						gRadioData.CurrStation = 0;

						if(gRadioData.Area1StationSum > 0)
						{
							gRadioData.CurrFreq = gRadioData.Stations[gRadioData.CurrStation] + RADIO_FREQ_BASE_760;
						}
						else
						{
							gRadioData.CurrFreq = gRadioData.Stations[gRadioData.CurrStation] + RADIO_FREQ_BASE_875;
						}
						
						RadioSetFreq();							
						RadioWriteData();						
						RadioShowDebug(RadioShowSearchEndBufferEnough);	
					}
					else
					{
						DBG(("Error:empty\n"));
						RadioSetFreq();
					}
					
					RadioMute(FALSE);	
					UnMute();
#ifdef FUNC_SINGLE_LED_EN 
					DispDev();
#endif
#ifdef FUNC_SLAVE_UART_EN
					SlaveRadioRetCurrentStatus();
#endif
				}
				else
				{
					gRadioCtrl.State = RADIO_SEEK;
					
#ifdef	FUNC_RADIO_AUTOSEEK_EN
					if(gRadioCtrl.SeekMode == SEEK_SCANDOWN)
					{
						gRadioData.CurrFreq--;						
					}
					else
					{
						gRadioData.CurrFreq++;
					}					
#endif
				}		
			}		
			break;
			
		case RADIO_IDLE:
			if(IsTimeOut(&gRadioCtrl.SeekPreviewTimer))
			{	
				if(RadioDisFlag == RadioDisCurChChange)
				{
#ifdef AU6210K_BOOMBOX_DEMO
					RadioDisFlag = RadioDisCurPresetCh;
#else
					RadioDisFlag = RadioDisCurFreNum;
#endif
				}
				else if(RadioDisFlag == RadioDisCurChAutoscan)
				{
					RadioDisFlag = RadioDisCurFreNum;
				}				
#ifdef	FUNC_NUMBER_KEY_EN
				else if(RadioDisFlag == RadioDisCurFreBlink)
				{		
#ifdef FUNC_DISP_EN		
					RadioDisBlink();
#endif
					if(RadioDisCount > 0)
					{
						RadioDisCount--;
					}
					else
					{
						RadioDisFlag = RadioDisCurFreNum;
					}
					TimeOutSet(&gRadioCtrl.SeekPreviewTimer, RadioBlinkTime);				
				}
#endif
			}
			break;
			
#ifdef AU6210K_BOOMBOX_DEMO
		case RADIO_PROG:
			if(IsTimeOut(&gRadioCtrl.SeekPreviewTimer))
			{
				gRadioCtrl.State = RADIO_IDLE;	
				RadioDisFlag = RadioDisCurFreNum;
			}
			break;
#endif
			
		default:
			break;	
	}
}
예제 #27
0
// 主函数调用.
VOID Display(VOID)
{
#if (defined(FUNC_SEG_LED_EN) || defined(FUNC_SEG_LCD_EN))
	if((gDisplayMode <= DISP_DEV_LCD58) && (gDisplayMode >= DISP_DEV_LED1888))
	{
#ifdef FUN_SYSTEM_POWEROFF_WAIT_TIME
		if(DispSysTimOff())
		{
			return;
		}
#endif

#ifdef FUNC_RTC_EN
		if(DispRtcSet())
		{
			return;
		}
#endif

		//DBG(("gDispState:%bd\n", gDispState));
		if(gDispState != DISP_STATE_IDLE)
		{
			DispDev();
			return;	// Waiting for " LOD" timeout.
		}
		
		if(IsTimeOut(&DispTmr))
		{
			if(gBlink.BlinkFlag)
			{
				TimeOutSet(&DispTmr, MUTE_BLINK_INTERVAL);
				if(gBlink.Blink.MuteBlink)		// MUTE闪烁
				{
					if(gBlink.Blink.MuteBlankScreen)
					{
						 gBlink.Blink.MuteBlankScreen = 0;
						 DispResume();
					}
					else
					{
						gBlink.Blink.MuteBlankScreen = 1;
						ClearDigit();	//清数值显示
					}
				}			
			}
			else
			{
				DispResume();
			}			
		}
#ifdef FUNC_SEG_LCD_EN
		else if(gDisplayMode == DISP_DEV_LCD58)
		{//为解决显示音量、EQ等状态时没有幅度显示的问题,增加以下代码。
			if(IsTimeOut(&gAmplitudeTmr))
			{
				LcdFlushDispData();//在LcdFlushDispData函数内部调用幅度显示函数。
			}
		}
#endif
	}
#endif


#ifdef FUNC_SINGLE_LED_EN
	if(gDisplayMode == DISP_DEV_SLED)
	{	
		SLedDisplay();
	}
#endif
}
예제 #28
0
// Display initilization
// Indicate whether the system in "STAND-BY" state or not.
VOID DispInit(BOOL IsStandBy)
{
	//DBG((">>DispInit(%bd)\n", IsStandBy));
	TimeOutSet(&DispTmr, 0);
#ifdef FUNC_NUMBER_KEY_EN
	TimeOutSet(&NumKeyErrDispTimer, 0);
#endif
	gDispPrevRep = gPlayCtrl.RepeatMode;
	gDispPrevEQ = gPlayCtrl.Eq;
	gDispPrevPlayState = gPlayCtrl.State;
#ifdef FUNC_PT231X_EN
       gDispPrevVol = VolMain; 
       gDispPrevTreb = VolTreb;
	gDispPrevBass = VolBass;
#else
	gDispPrevVol = gSys.Volume;
#endif
	gBlink.BlinkFlag = 0;
	gDispState = DISP_STATE_DEV;
	memset(&gDispBuff, 0, sizeof(gDispBuff));	

#ifdef FUNC_SINGLE_LED_EN
	SLedInit();
	SLedLightOp(LED_POWER, LIGHTON);	
#endif

#ifdef FUNC_SEG_LED_EN
#if (defined(FUNC_7PIN_SEG_LED_EN) || defined(FUNC_6PIN_SEG_LED_EN))
	LedPinGpioInit();
//	SetA2IcsReg(A2_ICS_FOR_GPIO, A2_ICS_CLOSE); 
#else
	ClrGpioRegBit(LED_SEG_PORT_PU, MASK_LED_SEG);	// Pull-Up.
	ClrGpioRegBit(LED_SEG_PORT_PD, MASK_LED_SEG);	// Pull-Up.
	ClrGpioRegBit(LED_SEG_PORT_IE, MASK_LED_SEG);	// Input Disable.
	ClrGpioRegBit(LED_SEG_PORT_OE, MASK_LED_SEG);	// Output Disable.
	//ClrGpioRegBit(LED_SEG_PORT_OUT, MASK_LED_SEG);
	SetGpioRegBit(LED_COM_PORT_PU, MASK_LED_COM);	// Pull-Up.
	SetGpioRegBit(LED_COM_PORT_PD, MASK_LED_COM);	// Pull-Up.
	ClrGpioRegBit(LED_COM_PORT_IE, MASK_LED_COM);	// Input Disable.
	SetGpioRegBit(LED_COM_PORT_OE, MASK_LED_COM);	// Output Enable.
#endif
#endif

#ifdef FUNC_SEG_LCD_EN
	//SetGpioRegBit(GPIO_TYPE_REG, MSK_ADC_A1_SWITCH);		//ADC Vol  preq
//	LcdInit(MASK_LCD_SEG, MASK_LCD_COM, LCD_BIAS_2);
//	LcdInit(MASK_LCD_SEG, MASK_LCD_COM, LCD_BIAS_3);
	LcdInit(MASK_LCD_SEG, MASK_LCD_COM, LCD_BIAS_4);
	DBG(("LcdInit(LCD初始化%x,%x,)\n", MASK_LCD_SEG, MASK_LCD_COM));
#endif

#ifdef FUNC_SEG_LED_EN
	gLedDispRefreshFlag = TRUE;
#endif

#if (defined(FUNC_SEG_LED_EN) || defined(FUNC_SEG_LCD_EN))
	if(IsStandBy == TRUE)
	{
		//DBG(("CLS\n"));
		ClearScreen();
	}
	else
	{
		if((gDisplayMode == DISP_DEV_NONE) && (gDisplayMode == DISP_DEV_SLED))
		{
			gDispState = DISP_STATE_IDLE;
		}
		else
		{
			//DBG(("DispLoad()\n"));
			DispPowerOn();
			TimeOutSet(&DispTmr, NORMAL_INTERVAL);
			DispDev();
		}
	}
#ifdef FUNC_SEG_LCD_EN
	if(gDisplayMode == DISP_DEV_LCD58)
	{
		TimeOutSet(&gAmplitudeTmr, 0);
		LcdFlushDispData();
	}	
#endif



#endif	
#if defined(FUNC_SINGLE_LED_EN )
	gDisplayMode = DISP_DEV_SLED;
#elif defined(FUNC_SEG_LCD_EN)
	gDisplayMode = DISP_DEV_LCD58;
#else
	//gDisplayMode = DISP_DEV_LED1888;
	//gDisplayMode = DISP_DEV_LED8888;
	gDisplayMode = DISP_DEV_LED57;
#endif
}
예제 #29
0
// Initialize hardware key scan (GPIO) operation.
VOID AdcKeyScanInit(VOID)
{
	AdcKeyState = ADC_KEY_STATE_IDLE;
	TimeOutSet(&AdcKeyScanTimer, 0);
	
#ifdef AU6210K_NR_D_8_CSRBT
	SET_B6_ANALOG_IN(); 
#endif

#ifdef ADC_KEY_PORT_CH1
#if (ADC_KEY_PORT_CH1 == ADC_CHANNEL_B6)
	SET_B6_ANALOG_IN(); 
#endif

#if (ADC_KEY_PORT_CH1 == ADC_CHANNEL_D7) 
	SET_D7_ANALOG_IN();
#endif

#if (ADC_KEY_PORT_CH1 == ADC_CHANNEL_E0)
	SET_E0_ANALOG_IN();
#endif

#if (ADC_KEY_PORT_CH1 == ADC_CHANNEL_E1)
	SET_E1_ANALOG_IN();
#endif
#endif

#ifdef ADC_KEY_PORT_CH2
#if (ADC_KEY_PORT_CH2 == ADC_CHANNEL_B6)
	SET_B6_ANALOG_IN();
#endif

#if (ADC_KEY_PORT_CH2 == ADC_CHANNEL_D7)
	SET_D7_ANALOG_IN();
#endif

#if (ADC_KEY_PORT_CH2 == ADC_CHANNEL_E0)
	SET_E0_ANALOG_IN();
#endif

#if (ADC_KEY_PORT_CH2 == ADC_CHANNEL_E1)
	SET_E1_ANALOG_IN();
#endif
#endif

#ifdef HEADPHONE_ADC_PORT_CH
#if (HEADPHONE_ADC_PORT_CH == ADC_CHANNEL_B6)
	SET_B6_ANALOG_IN();
#endif
	
#if (HEADPHONE_ADC_PORT_CH == ADC_CHANNEL_D7)
	SET_D7_ANALOG_IN();
#endif
	
#if (HEADPHONE_ADC_PORT_CH == ADC_CHANNEL_E0)
	SET_E0_ANALOG_IN();
#endif
	
#if (HEADPHONE_ADC_PORT_CH == ADC_CHANNEL_E1)
	SET_E1_ANALOG_IN();
#endif
#endif

#ifdef AU6210K_ZB_BT007_CSR
	baGPIOCtrl[GPIO_D_IE] &= ~0x20;//D5
	baGPIOCtrl[GPIO_D_OE] |= 0x20;
	baGPIOCtrl[GPIO_D_PU] |= 0x20;
	baGPIOCtrl[GPIO_D_PD] |= 0x20; 
	baGPIOCtrl[GPIO_D_OUT] &= ~0x10; 
	WaitMs(2);
	baGPIOCtrl[GPIO_D_IE] &= ~0x40;//D6
	baGPIOCtrl[GPIO_D_OE] |= 0x40;
	baGPIOCtrl[GPIO_D_PU] |= 0x40;
	baGPIOCtrl[GPIO_D_PD] |= 0x40; 
	baGPIOCtrl[GPIO_D_OUT] &= ~0x40; 
	WaitMs(2);
	baGPIOCtrl[GPIO_A_IE] &= ~0x04;//A2
	baGPIOCtrl[GPIO_A_OE] |= 0x04;
	baGPIOCtrl[GPIO_A_PU] |= 0x04;
	baGPIOCtrl[GPIO_A_PD] |= 0x04; 
	baGPIOCtrl[GPIO_A_OUT] &= ~0x04; 
	WaitMs(2);
	baGPIOCtrl[GPIO_A_IE] &= ~0x02;//A2
	baGPIOCtrl[GPIO_A_OE] |= 0x02;
	baGPIOCtrl[GPIO_A_PU] |= 0x02;
	baGPIOCtrl[GPIO_A_PD] |= 0x02; 
	baGPIOCtrl[GPIO_A_OUT] &= ~0x02; 
	WaitMs(2);
	DBG1(("dfdfd"));
#endif
}
예제 #30
0
// Key process, image key value to key event.
MESSAGE AdcKeyEventGet(VOID)							
{
	static 	BYTE PreKeyIndex = -1;
	static  BYTE KeyIndex;

	//DBG(("AdcKeyEventGet*******\n"));
	if(!IsTimeOut(&AdcKeyScanTimer))
	{
		return MSG_NONE;
	}
	TimeOutSet(&AdcKeyScanTimer, ADC_KEY_SCAN_TIME);	

	KeyIndex = GetAdcKeyIndex();

#ifdef FUNC_BEEP_SOUND_EN	
	gPushKeyNeedBeepFlag = FALSE;
#endif

	switch(AdcKeyState)
	{
		case ADC_KEY_STATE_IDLE:
			if(KeyIndex == -1)
			{
#ifdef AU6210K_ZB_BT007_CSR
				baGPIOCtrl[GPIO_D_OUT] &= ~0x20;	
				baGPIOCtrl[GPIO_D_OUT] &= ~0x40;	
				baGPIOCtrl[GPIO_A_OUT] &= ~0x04;	
				baGPIOCtrl[GPIO_A_OUT] &= ~0x02;	
#endif				
				return MSG_NONE;
			}

			PreKeyIndex = KeyIndex;
			TimeOutSet(&AdcKeyWaitTimer, ADC_KEY_JTTER_TIME);
			//DBG(("GOTO JITTER!\n"));
			AdcKeyState = ADC_KEY_STATE_JITTER;
				
		case ADC_KEY_STATE_JITTER:
			if(PreKeyIndex != KeyIndex)
			{
				//DBG(("%bx != %bx,GOTO IDLE Because jitter!\n", PreKeyIndex, KeyIndex));
				AdcKeyState = ADC_KEY_STATE_IDLE;
			}
			else if(IsTimeOut(&AdcKeyWaitTimer))
			{
				//DBG(("GOTO PRESS_DOWN!\n"));
//				if((PreKeyIndex == ADC_KEY_POWER0_IDX)	
//				||(PreKeyIndex == ADC_KEY_POWER1_IDX)
//				|| (PreKeyIndex == ADC_KEY_POWER2_IDX)				
//				)
//				{	 
//					//set cp-time 3000ms for power-down key 
// 					TimeOutSet(&AdcKeyWaitTimer, ADC_KEY_PWRDOWN_CP_TIME);	
//				}	

#ifdef HEADPHONE_ADC_PORT_CH
				if(PreKeyIndex == ADC_KEY_HPPUSHOUT_IDX)
				{
					TimeOutSet(&AdcKeyWaitTimer, ADC_KEY_HPPUSHOUT_CP_TIME);
				}
				else
#endif				
				{
					//DBG(("ADC_KEY_CP_TIME!\n"));
 					TimeOutSet(&AdcKeyWaitTimer, ADC_KEY_CP_TIME);
				}
				AdcKeyState = ADC_KEY_STATE_PRESS_DOWN;
			}
			break;

		case ADC_KEY_STATE_PRESS_DOWN:
			if(PreKeyIndex != KeyIndex)
			{
				//return key sp value
				//DBG(("KEY  SP  %bu\n",PreKeyIndex));
				AdcKeyState = ADC_KEY_STATE_IDLE;
#ifdef FUNC_BEEP_SOUND_EN	
				gPushKeyNeedBeepFlag = TRUE;
#endif

#ifdef HEADPHONE_ADC_PORT_CH
				if((PreKeyIndex == ADC_KEY_HPPUSHIN_IDX) || (PreKeyIndex == ADC_KEY_HPPUSHOUT_IDX))
				{
					break;
				}
#endif

#if 0 //def AU6210K_ZB_BT007_CSR
				if(PreKeyIndex != 1)
				switch(PreKeyIndex)
				{
				case 1:						
					baGPIOCtrl[GPIO_A_OUT] &= ~0x04; //A2
					break;
				case 2:
					baGPIOCtrl[GPIO_A_OUT] &= ~0x02; //A1
					break;
				case 3:
					baGPIOCtrl[GPIO_D_OUT] &= ~0x40; //D6
					break;
				case 4:
					baGPIOCtrl[GPIO_D_OUT] &= ~0x20; //D5
					break;
				default:
					break;
				}

#endif

				return AdcKeyEvent[PreKeyIndex][0];
			}
			else if(IsTimeOut(&AdcKeyWaitTimer))
			{
				//return key cp value
				//DBG(("KEY CPS  %bu\n",PreKeyIndex));
				TimeOutSet(&AdcKeyWaitTimer, ADC_KEY_CPH_TIME);
				AdcKeyState = ADC_KEY_STATE_CP;
#ifdef FUNC_BEEP_SOUND_EN	
				gPushKeyNeedBeepFlag = TRUE;
#endif

#ifdef HEADPHONE_ADC_PORT_CH
				if(PreKeyIndex == ADC_KEY_HPPUSHIN_IDX) 
				{					
					break;
				}
				if(PreKeyIndex == ADC_KEY_HPPUSHOUT_IDX)
				{
					IsHeadphoneLinkFlag = FALSE;
					break;
				}
#endif
				return AdcKeyEvent[PreKeyIndex][1];
			}
			break;

		case ADC_KEY_STATE_CP:
			if(PreKeyIndex != KeyIndex)
			{
				//return key cp value
				//DBG(("ADC KEY CPR!\n"));
				AdcKeyState = ADC_KEY_STATE_IDLE;				
#ifdef HEADPHONE_ADC_PORT_CH
				if((PreKeyIndex == ADC_KEY_HPPUSHIN_IDX) || (PreKeyIndex == ADC_KEY_HPPUSHOUT_IDX))
				{
					break;
				}
#endif
				return AdcKeyEvent[PreKeyIndex][3];
			}
			else if(IsTimeOut(&AdcKeyWaitTimer))
			{
				//return key cph value
				//DBG(("ADC KEY CPH!\n"));
//				if((PreKeyIndex == ADC_KEY_POWER0_IDX)	
//				||(PreKeyIndex == ADC_KEY_POWER1_IDX)
//				|| (PreKeyIndex == ADC_KEY_POWER2_IDX))
//				{	 
//					//set cp-time 3000ms for power-down key 
//					//DBG(("ADC POWER!\n"));
// 					TimeOutSet(&AdcKeyWaitTimer, 3000);
//				}
//				else
//				{
					TimeOutSet(&AdcKeyWaitTimer, ADC_KEY_CPH_TIME);
//				}
#ifdef HEADPHONE_ADC_PORT_CH
				if(PreKeyIndex == ADC_KEY_HPPUSHIN_IDX)
				{
					IsHeadphoneLinkFlag = TRUE;
					break;
				}
				else if(PreKeyIndex == ADC_KEY_HPPUSHOUT_IDX)
				{
					IsHeadphoneLinkFlag = FALSE;
					break;
				}
#endif
				return AdcKeyEvent[PreKeyIndex][2];
			}
			break;

		default:
			AdcKeyState = ADC_KEY_STATE_IDLE;
			break;
	}
	return MSG_NONE;
}