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 }
// 显示数值. 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 }
// 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 }
// 音量设置时调用. 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; }
// 播放状态变化时调用(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; }
//按键响应 //状态处理 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 }
// 文件夹功能打开/关闭时调用. 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 }
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;//回到空闲状态 } } }
// 低音设置时调用. 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; }
//如果有和此函数类似用法(嵌入到各个模式)的函数位于其后,此函数不要有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; } }
// 设置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 }
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); }
// 上电时,硬件扫描消抖 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 } }
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); }
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;; }
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)); }
// 设置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 }
// 文件切换时调用. 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 }
//进入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 }
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; // } }
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 }
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 }
//这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 }
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); }
//按键响应 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 }
// 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; } }
// 主函数调用. 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 }
// 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 }
// 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 }
// 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; }