⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dvb_cardreader.c

📁 DVB软件,基于CT216软件的开发源程序.
💻 C
字号:
#include <stdio.h>

#include "io_config.h"
#ifdef CT216T_ELGIST_MM
#include "ct_os.h"
#endif
#include "ct_cardreader.h"
#include "dvb_cardreader.h"
#include "dvb_device.h"

#if 0
#define DVBCARDREADER_MSG(p)
#else
#define DVBCARDREADER_MSG(p)			printf p
#endif

#if 0
#define DVBCARDREADER_DBG(p)
#else
#define DVBCARDREADER_DBG(p) 		printf p
#endif


static EN_CARD_EXIST_STATUS enCardStatus = EN_CARD_NOT_EXIST;

static CTOS_TIMER	     DVB_Crd_MonitorTimer;

static bool8 b8CR_Init_OK = FALSE;
//static bool8 _checkCardReinsert(void)
static void _checkCardReinsert(u32 u32arg)
{
	if(CT_CARD_CardStatus_Inserted() == EN_CTCARD_CONTROLLER_NONE)
	{
		//if(enCardStatus == EN_CARD_ACTIVE)
		if(enCardStatus == EN_CARD_INSERT)
		{
			b8CR_Init_OK = FALSE;
			DVB_DEVCTRL_UnRegisterDevice(EN_DEV_CR_LUN0);
			enCardStatus = EN_CARD_NOT_EXIST;	
		}
			//enCardStatus = EN_CARD_NOT_EXIST;	
	}
	else if(enCardStatus == EN_CARD_NOT_EXIST)
	{
		enCardStatus = EN_CARD_INSERT;
//		if(TRUE == CT_CARD_InitCard())
		{
//			enCardStatus = EN_CARD_ACTIVE;
			DVB_DEVCTRL_RegisterDevice(EN_DEV_CR_LUN0);
		}
//		return TRUE;
	}
//	return FALSE;  
}

EN_CARD_EXIST_STATUS DVB_CR_GetCardStatus(void)
{
	return enCardStatus;	
}

void DVB_CR_SetCardStatus(EN_CARD_EXIST_STATUS enStatus)
{
	enCardStatus = enStatus;	
}

bool8 DVB_CR_SetupSystem(void)
{
	bool8 b8Status = FALSE;
	
#ifdef CT216H  //add by mjliao---2008.4.8
	if(IOCFG_QueryIOFunction(EN_SD_HZ)==DRV_OK)
		CT_CARD_InitPlatform(EN_CTCARD_CT216HZ);

#endif

#ifdef CT216S
	EN_CT_GPIO_PORT enSD_PWR_Port, enSD_WP_Port;
	EN_CT_GPIO_BIT enSD_PWR_Bit, enSD_WP_Bit;
	
	if(IOCFG_QueryIOFunction(EN_SD)==DRV_OK)
		CT_CARD_InitPlatform(EN_CTCARD_CT216SR);
	else 
	if(IOCFG_QueryIOFunction(EN_SD_SZ)==DRV_OK)
	{
		CT_CARD_InitPlatform(EN_CTCARD_CT216SZ);
		if(IOCFG_GetIOLocation(EN_SD_POWER, &enSD_PWR_Port, &enSD_PWR_Bit) == DRVERR_NOTOK)
			return FALSE;
		CT_CARD_SetSD_PWR(enSD_PWR_Port, enSD_PWR_Bit);
		if(IOCFG_GetIOLocation(EN_SD_WP, &enSD_WP_Port, &enSD_WP_Bit) == DRVERR_NOTOK)
			return FALSE;
		CT_CARD_SetSD_WP(enSD_WP_Port, enSD_WP_Bit);
	}
#endif

#ifdef CT216T
	if(IOCFG_QueryIOFunction(EN_SD)==DRV_OK)
		CT_CARD_InitPlatform(EN_CTCARD_CT216TR);
	else if(IOCFG_QueryIOFunction(EN_SD_TZ_1BIT)==DRV_OK)
		CT_CARD_InitPlatform(EN_CTCARD_CT216TZ_1BIT);
	else if(IOCFG_QueryIOFunction(EN_SD_TZ_4BIT)==DRV_OK || IOCFG_QueryIOFunction(EN_SD_TZ_4BIT_v21)==DRV_OK)
		CT_CARD_InitPlatform(EN_CTCARD_CT216TZ_4BIT);
#endif

#ifdef CT956
	if(IOCFG_QueryIOFunction(EN_CARD_READER) == DRV_OK)
		CT_CARD_InitPlatform(EN_CTCARD_CT956);
#endif

	else
		return FALSE;

#ifdef CT956
	if(CT_CARD_SetupSystem(DMP956A_EVAL) == FALSE)
		return FALSE;
#endif
    b8Status = CT_CARD_InitSystem();

    if(EN_CTOS_SUCCESS != CT_OS_CreateTimer(&DVB_Crd_MonitorTimer,
                                            "CrdTimer",
                                            EN_CTOS_TIMER_CONTINUOUS,
                                            _checkCardReinsert,      // handler
                                            0,
                                            50))                        // time interval
    {
        DVBCARDREADER_MSG(("    [ERROR]:- CreateTimer error\n"));
        b8Status = FALSE;
    }

	return b8Status;
}

bool8 DVB_CR_InitCard(void)
{
	if(b8CR_Init_OK == FALSE)
	{
		if(CT_CARD_InitCard())
		{
			b8CR_Init_OK = TRUE;
			return TRUE;
		}
		return FALSE;
	}
	return TRUE;
	//return CT_CARD_InitCard();
/*	if(CT_CARD_InitCard())
	{
		enCardStatus = EN_CARD_ACTIVE;
    return TRUE;
  }
  else
  	return FALSE;
*/
}

bool8 DVB_CR_Protected(void)
{
	return CT_CARD_CardStatus_WriteProtected();
}

bool8 DVB_CR_Read(u32 u32SectorIndex, u32 u32SectorLengths, u8 *pu8Buffer)
{
	return CT_CARD_ReadSector((u32)pu8Buffer, u32SectorIndex, u32SectorLengths);
}

bool8 DVB_CR_Write(u32 u32SectorIndex, u32 u32SectorLengths, u8 *pu8Buffer)
{
	return CT_CARD_WriteSector((u32)pu8Buffer, u32SectorIndex, u32SectorLengths);
}

void DVB_CR_GetSectorInfo(u32 *pu32TotalSectors, u32 *pu32SectorBytes)
{
	*pu32TotalSectors = CT_CARD_GetCapacity();
	*pu32SectorBytes = 512;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -