📄 dvb_cardreader.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 + -