sd_switch.c 3.28 KB
#include "c_def.h"
#include "debug.h"
#include "oem.h"


#ifdef SD_ENABLE

#include "regmap.h"

#include "hw_gpio.h"

#include "message.h"
#include "sd_switch.h"
#include "app_gpio.h"
#include "app_main.h"
#include "app_cmd.h"


//#define SD_WR_PROTECT_ENABEL

#define SD_ONE_CARD

//SD detect
//#define SD1_DETECT_PIN     GPIO0_18_INDEX
//#define SD1_DETECT         app_gpio_input_level_read(SD1_DETECT_PIN)//GPIO0_READ(SD1_DETECT_PIN)

//#define SD2_DETECT_PIN    GPIO18_MASK
//#define SD2_DETECT        GPIO0_READ(SD2_DETECT_PIN)

extern volatile U8 sd1_FileSysPresent;
extern volatile U8 sdmmcReady;

U8 sd1_state;
//U8 sd2_state;
//U8 sd3_state;


//SDMMC switch

#ifndef SD_ONE_CARD
void SD_Switch_Init(void)
{
}

void SD_Switch_Setting(U8 channel)
{
	switch (channel)
	{
	case SDMMC_CHANNEL_1:
		break;

	case SDMMC_CHANNEL_2:
		break;

	case SDMMC_CHANNEL_3:
		break;

	default:
		break;
	}
}
#endif

void SD_Detect_Init(void)
{
	//SDMM detec pin input
	//gpio0_SetOutputDisable(SD1_DETECT_PIN);
	//gpio0_SetFunction(SD1_DETECT_PIN, TRUE);
	app_gpio_MUXfunction_select(SD1_DETECT_PIN,MUX_SEL_GPIO_INPUT);

#ifdef FILE_DELETE_ENABLE
	//gpio0_SetOutputDisable(SD_WP_PIN);
	//gpio0_SetFunction(SD_WP_PIN, TRUE);
	app_gpio_MUXfunction_select(SD_WP_PIN,MUX_SEL_GPIO_INPUT);
#endif

	sd1_state = SD_Card1_Detect();

	sdmmcReady = sd1_state;
}


#ifdef SD_ONE_CARD
U8 SD_Card1_Detect(void)
{
	if (SD1_DETECT)
	{
		return FALSE;
	}
	else
	{
		return TRUE;
	}
}
#else
U8 SD_Card1_Detect(void)
{
	if (SD1_DETECT)
	{
		return FALSE;
	}
	else
	{
		return TRUE;
	}
}

U8 SD_Card2_Detect(void)
{
	if (SD2_DETECT)
	{
		return FALSE;
	}
	else
	{
		return TRUE;
	}
}
#endif

U8 SD_Card_Detect_Get(void)
{
	if (SD1_DETECT)
	{
		return enSD_PLUG_OUT;
	}
	else
	{
		return enSD_PLUG_IN;
	}
}

U8 SD_WR_Protect_Get(void)
{
#ifdef SD_WR_PROTECT_ENABEL
	if (SD_WP_DETECT)
	{
		return enSD_WR_PROTECT;
	}
	else
	{
		return enSD_WR_PROTECT_NONE;
	}
#else
	return enSD_WR_PROTECT_NONE;
#endif
}

void SD1_Detect_Polling(void)
{
	static U8 i = 0;
	static U8 j = 0;
	U8 cur_sd1_state;


	if (app_main_data.media != MEDIA_SDMMC)
	{
		return;
	}
	
	{
		//cursd1_state = SD_Card1_Detect();
		if (SD1_DETECT)
		{
			cur_sd1_state = FALSE;
		}
		else
		{
			cur_sd1_state = TRUE;
		}

		if (cur_sd1_state)
		{
			i++;
			j = 0;
		}
		else
		{
			i = 0;
			j++;
		}

		if ( (i >= 3) || (j >= 3) )
		{
			i = 0;
			j = 0;
			if (sd1_state != cur_sd1_state)
			{
				if (cur_sd1_state == TRUE )
				{
					/*if (app_main_data.standby)
					{
						app_main_data.media = MEDIA_SDMMC;
						app_nav_standby_normal_release();
					}*/

					sd1_state = TRUE;
					sd1_FileSysPresent = FALSE;
					sdmmcReady = TRUE;

#ifdef CD_RIPPING
					app_media_new_album ();
#endif

					//if (app_main_data.media != MEDIA_TUNER)
					if (app_main_data.media == MEDIA_SDMMC)
					{
						ukMsgSend(app_nav_media_sd_insert);
					}
					DBG_KEYPrintf ("SD1:Inserted\n\r");
				}
				else
				{
					sd1_state = FALSE;
					sd1_FileSysPresent = FALSE;
					sdmmcReady = FALSE;

					//if (app_main_data.media != MEDIA_TUNER)
					if (app_main_data.media == MEDIA_SDMMC)
					{
						ukMsgSend(app_nav_medid_sd_remove);
					}
					DBG_KEYPrintf ("SD1:Removed\n\r");
				}
			}
		}
	}
}

#ifdef SD_GPIO_TEST
void SD_Switch_GPIO_Test(void)
{
}

void SD_Detect_GPIO_Test(void)
{
}

#endif

#endif //SD_ENABLE