static bool HardwareInit(DEV_ID DevId) { switch(DevId) { case DEV_ID_SD: if(!IsCardLink()) { return FALSE; } FSDeInit(DEV_ID_SD); if(SdCardInit()) { return FALSE; } if(!FSInit(DEV_ID_SD)) { return FALSE; } return TRUE; case DEV_ID_USB: Usb2SetDetectMode(1, 0); UsbSetCurrentPort(UDISK_PORT_NUM); if(!IsUDiskLink()) { return FALSE; } FSDeInit(DEV_ID_SD); FSDeInit(DEV_ID_USB); if(!HostStorInit()) { return FALSE; } if(!FSInit(DEV_ID_USB)) { return FALSE; } return TRUE; default: break; } return FALSE; }
// 上电时,硬件扫描消抖 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 DeviceDetect(void) { int32_t Msg; if(gSys.CurModuleID == MODULE_ID_BT_HF) { // 蓝牙免提通话时,插入或拔除SD、U盘等设备,不切换模式,以免中断通话 return; } #ifdef FUNC_USB_EN //U盘插拔检测 if((!IsUDiskLinkFlag) && IsUDiskLink()) { IsUDiskLinkFlag = TRUE; DBG("UDiskPlugIn\n"); Msg = MSG_USB_PLUGIN; // 为避免多个插拔事件的排队现象,所以每次收到新的插拔事件都清除前面未处理的事件,遵循后插先播原则 MsgClear(MSG_USB_PLUGIN); MsgClear(MSG_USB_PLUGOUT); MsgSend(Msg); return; } else if((IsUDiskLinkFlag) && (!IsUDiskLink())) { // if(gSys.CurModuleID == MODULE_ID_PLAYER_USB) // { // DacSoftMuteSet(TRUE, TRUE); // } IsUDiskLinkFlag = FALSE; DBG("UDiskPlugOut\n"); Msg = MSG_USB_PLUGOUT; // 为避免多个插拔事件的排队现象,所以每次收到新的插拔事件都清除前面未处理的事件,遵循后插先播原则 MsgClear(MSG_USB_PLUGIN); MsgClear(MSG_USB_PLUGOUT); MsgSend(Msg); return; } #endif //PC插拔检测 if((!IsPcLinkFlag) && IsPcLink()) { IsPcLinkFlag = TRUE; DBG("PcPlugIn\n"); Msg = MSG_PC_PLUGIN; // 为避免多个插拔事件的排队现象,所以每次收到新的插拔事件都清除前面未处理的事件,遵循后插先播原则 MsgClear(MSG_PC_PLUGIN); MsgClear(MSG_PC_PLUGOUT); MsgSend(Msg); return; } else if((IsPcLinkFlag) && (!IsPcLink())) { IsPcLinkFlag = FALSE; DBG("PcPlugOut\n"); Msg = MSG_PC_PLUGOUT; //为避免多个插拔事件的排队现象,所以每次收到新的插拔事件都清除前面未处理的事件,遵循后插先播原则 MsgClear(MSG_PC_PLUGIN); MsgClear(MSG_PC_PLUGOUT); MsgSend(Msg); return; } #ifdef FUNC_CARD_EN //CARD插拔检测 if((!IsCardLinkFlag) && IsCardLink()) { IsCardLinkFlag = TRUE; DBG("CardPlugIn\n"); Msg = MSG_SD_PLUGIN; // 为避免多个插拔事件的排队现象,所以每次收到新的插拔事件都清除前面未处理的事件,遵循后插先播原则 MsgClear(MSG_SD_PLUGIN); MsgClear(MSG_SD_PLUGOUT); MsgSend(Msg); return; } else if((IsCardLinkFlag) && (!IsCardLink())) { // if(gSys.CurModuleID == MODULE_ID_PLAYER_SD) // { // DacSoftMuteSet(TRUE, TRUE); // } IsCardLinkFlag = FALSE; DBG("CardPlugOut\n"); Msg = MSG_SD_PLUGOUT; // 为避免多个插拔事件的排队现象,所以每次收到新的插拔事件都清除前面未处理的事件,遵循后插先播原则 MsgClear(MSG_SD_PLUGIN); MsgClear(MSG_SD_PLUGOUT); MsgSend(Msg); return; } #endif //LINEIN插拔检测 if((!IsLineInLinkFlag) && IsLineInLink()) { IsLineInLinkFlag = TRUE; DBG("LineInPlugIn\n"); Msg = MSG_LINEIN_PLUGIN; // 为避免多个插拔事件的排队现象,所以每次收到新的插拔事件都清除前面未处理的事件,遵循后插先播原则 MsgClear(MSG_LINEIN_PLUGIN); MsgClear(MSG_LINEIN_PLUGOUT); MsgSend(Msg); return; } else if((IsLineInLinkFlag) && (!IsLineInLink())) { IsLineInLinkFlag = FALSE; DBG("LineInPlugOut\n"); Msg = MSG_LINEIN_PLUGOUT; // 为避免多个插拔事件的排队现象,所以每次收到新的插拔事件都清除前面未处理的事件,遵循后插先播原则 MsgClear(MSG_LINEIN_PLUGIN); MsgClear(MSG_LINEIN_PLUGOUT); MsgSend(Msg); return; } #ifdef FUNC_MIC_DET_EN if((!IsMicLinkFlag) && IsMicInLink()) { //MIC插入 IsMicLinkFlag = TRUE; DBG("MicInPlugIn\n"); Msg = MSG_MIC_PLUGIN; // 为避免多个插拔事件的排队现象,所以每次收到新的插拔事件都清除前面未处理的事件,遵循后插先播原则 MsgClear(MSG_LINEIN_PLUGIN); MsgClear(MSG_LINEIN_PLUGOUT); MsgSend(Msg); } else if((IsMicLinkFlag) && (!IsMicInLink())) { //MIC拔出 IsMicLinkFlag = FALSE; DBG("MicInPlugOut\n"); Msg = MSG_MIC_PLUGOUT; // 为避免多个插拔事件的排队现象,所以每次收到新的插拔事件都清除前面未处理的事件,遵循后插先播原则 MsgClear(MSG_LINEIN_PLUGIN); MsgClear(MSG_LINEIN_PLUGOUT); MsgSend(Msg); } #endif }