Beispiel #1
0
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;
}
Beispiel #2
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
	}
}
Beispiel #3
0
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

}