📄 dvb_db.c
字号:
}
}
return FALSE;
}
/*******************************************************************************************/
u16 DVB_LCNResetByMaxNum(u16 u16MaxLCN)
{
u16 u16TotalService, u16SrvIdx;
u8 u8SrvTypeLoop;
EN_SERVICE_TYPE enServiceType;
DVB_ServiceInfo pstService;
DB_SrvDetail pstSrvItemInDB;
DB_SrvRel pstSrvRel;
for (u8SrvTypeLoop = 0; u8SrvTypeLoop < 2; u8SrvTypeLoop++)
{
if (u8SrvTypeLoop == 0)
{
enServiceType = EN_SERVICE_TYPE_TV;
}
else
{
enServiceType = EN_SERVICE_TYPE_RADIO;
}
u16TotalService = DVB_ServiceGetTotal (enServiceType);
for(u16SrvIdx = 0; u16SrvIdx < u16TotalService; u16SrvIdx++)
{
DVB_ServiceRead (enServiceType, u16SrvIdx, &pstService);
if (pstService.bitLCNGet == FALSE)
{
continue;
}
if (pstService.u16LCN > u16MaxLCN)
{
u16MaxLCN = pstService.u16LCN + 1;
}
}
}
for (u8SrvTypeLoop = 0; u8SrvTypeLoop < 2; u8SrvTypeLoop++)
{
if (u8SrvTypeLoop == 0)
{
enServiceType = EN_SERVICE_TYPE_TV;
}
else
{
enServiceType = EN_SERVICE_TYPE_RADIO;
}
u16TotalService = DVB_ServiceGetTotal (enServiceType);
for(u16SrvIdx = 0; u16SrvIdx < u16TotalService; u16SrvIdx++)
{
DVB_ServiceReadDetail(enServiceType, u16SrvIdx, &pstSrvItemInDB, &pstSrvRel);
if (pstSrvItemInDB.bitLCNGet == TRUE)
{
continue;
}
DVB_ServiceRead (enServiceType, u16SrvIdx, &pstService);
pstService.u16LCN = u16MaxLCN;
DVB_ServiceUpdate (enServiceType, u16SrvIdx, &pstService);
u16MaxLCN ++;
}
}
return u16MaxLCN;
}
bool8 check_lcn_flag (EN_SERVICE_TYPE enServiceType, u16 u16SrvIndex)
{
DB_SrvDetail pstSrvItemInDB;
DB_SrvRel pstSrvRel;
DVB_ServiceReadDetail(enServiceType, u16SrvIndex, &pstSrvItemInDB, &pstSrvRel);
return pstSrvItemInDB.bitLCNGet;
}
#endif
/*******************************************************************************************/
u16 DVB_GetPgmNo(EN_SERVICE_TYPE enServiceType, u16 u16DbIdx)
{
if(enPgmNoDisplayType==EN_DISPLAY_TYPE_SRV_ID)
{
return DVB_GetSrvIDByDbIdx(enServiceType, u16DbIdx);
}
#ifdef ENABLE_LCN_SUPPORT
else if (enPgmNoDisplayType == EN_DISPLAY_TYPE_LCNS)
{
if(DVB_DBGetSystemType() != EN_SYSTEM_TYPE_DVBS)
{
return DVB_GetLCNsByDbIdx(enServiceType, u16DbIdx, NULL);
}
}
#endif
if(u16DbIdx >= DVB_ServiceGetTotal(enServiceType))
{
return 0xFFFF;
}
#ifdef DVB_SYSTEM_S_T
else if(DVB_DBGetSystemType() == EN_SYSTEM_TYPE_DVBS)
{
return u16DbIdx+1001;
}
#endif
else
{
return u16DbIdx+1;
}
}
/*******************************************************************************************/
u16 DVB_GetDbIdx(EN_SERVICE_TYPE enServiceType, u16 u16PgmNo)
{
if(enPgmNoDisplayType==EN_DISPLAY_TYPE_SRV_ID)
{
return DVB_GetDbIdxBySrvID(enServiceType, u16PgmNo);
}
#ifdef ENABLE_LCN_SUPPORT
else if(enPgmNoDisplayType == EN_DISPLAY_TYPE_LCNS)
{
if(DVB_DBGetSystemType() != EN_SYSTEM_TYPE_DVBS)
{
return DVB_GetDbIdxByLCNs(enServiceType, u16PgmNo, NULL);
}
}
#endif
#ifdef DVB_SYSTEM_S_T
if(DVB_DBGetSystemType() == EN_SYSTEM_TYPE_DVBS)
{
u16PgmNo -= 1001;
}
else
#endif
{
u16PgmNo -= 1;
}
if(u16PgmNo >= DVB_ServiceGetTotal(enServiceType))
{
return 0xFFFF;
}
else
{
return u16PgmNo;
}
}
/*******************************************************************************************/
void DVB_ServiceSetDefaultAudioMode(EN_SERVICE_TYPE enSrvType,EN_AUD_MODE enAudMode)
{
switch(enAudMode)
{
case EN_AUD_MODE_LR:
case EN_AUD_MODE_LL:
case EN_AUD_MODE_RR:
if(enSrvType == EN_SERVICE_TYPE_RADIO)
{
enRadioAudioMode = enAudMode;
}
else
{
enTVAudioMode = enAudMode;
}
break;
case EN_AUD_MODE_RL:
case EN_AUD_MODE_LR_MIX:
if(enSrvType == EN_SERVICE_TYPE_RADIO)
{
enRadioAudioMode = EN_AUD_MODE_LR;
}
else
{
enTVAudioMode = EN_AUD_MODE_LR;
}
break;
}
}
/*******************************************************************************************/
EN_AUD_MODE DVB_ServiceGetDefaultAudioMode(EN_SERVICE_TYPE enSrvType)
{
if(enSrvType == EN_SERVICE_TYPE_RADIO)
{
return enRadioAudioMode;
}
else
{
return enTVAudioMode;
}
}
/*******************************************************************************************/
bool8 DVB_ServiceSetParentalLock (EN_SERVICE_TYPE enServiceType, u16 u16SrvIdx, bool8 bLock)
{
if ( u16SrvIdx>=DVB_ServiceGetTotal(enServiceType) )
{
return FALSE;
}
DVB_ServiceRead(enServiceType, u16SrvIdx, &pgmItem);
if (bLock == TRUE)
{
pgmItem.u8Type |= 0x80;
}
else
{
pgmItem.u8Type &= 0x7f;
}
DVB_ServiceUpdate(enServiceType, u16SrvIdx, &pgmItem);
return TRUE;
}
/*******************************************************************************************/
bool8 DVB_ServiceCheckParentalLock (DVB_ServiceInfo *pstService)
{
if ( (pstService->u8Type&0x80)==0)
{
return FALSE;
}
else
{
return TRUE;
}
}
/*******************************************************************************************/
bool8 DVB_ServiceSetFavorite (EN_SERVICE_TYPE enServiceType, u16 u16SrvIdx, bool8 bFavorite)
{
return DVB_ServiceSetFavoriteEX( enServiceType, u16SrvIdx, bFavorite, 0);
}
/*******************************************************************************************/
bool8 DVB_ServiceCheckFavorite (DVB_ServiceInfo *pstService)
{
return DVB_ServiceCheckFavoriteEX( pstService, 0);
}
/*******************************************************************************************/
bool8 DVB_ServiceSetFavoriteEX (EN_SERVICE_TYPE enServiceType, u16 u16SrvIdx, bool8 bFavorite, u8 u8FavGroup)
{
if ( u16SrvIdx>=DVB_ServiceGetTotal(enServiceType) )
{
return FALSE;
}
if( u8FavGroup>=MAX_FAVORITE_GROUP_NUM )
{
return FALSE;
}
DVB_ServiceRead(enServiceType, u16SrvIdx, &pgmItem);
if (bFavorite == TRUE)
{
pgmItem.u16TypeEX |= (0x01<<u8FavGroup);
}
else
{
pgmItem.u16TypeEX &= ~(0x01<<u8FavGroup);
}
DVB_ServiceUpdate(enServiceType, u16SrvIdx, &pgmItem);
return TRUE;
}
/*******************************************************************************************/
bool8 DVB_ServiceCheckFavoriteEX (DVB_ServiceInfo *pstService, u8 u8FavGroup)
{
if( u8FavGroup>=MAX_FAVORITE_GROUP_NUM )
{
return FALSE;
}
if ( (pstService->u16TypeEX&(0x01<<u8FavGroup))==0)
{
return FALSE;
}
else
{
return TRUE;
}
}
/*******************************************************************************************/
bool8 DVB_ServiceSetSkip (DVB_ServiceInfo *pstService, bool8 b8Skip)
{
if (b8Skip==TRUE)
{
pstService->u16TypeEX |= TYPE_EX_SKIP_BITMASK;
}
else
{
pstService->u16TypeEX &= (~TYPE_EX_SKIP_BITMASK);
}
return TRUE;
}
/*******************************************************************************************/
bool8 DVB_ServiceCheckSkip (DVB_ServiceInfo *pstService)
{
if ( (pstService->u16TypeEX&TYPE_EX_SKIP_BITMASK)==0)
{
return FALSE;
}
else
{
return TRUE;
}
}
/*******************************************************************************************/
u8 DVB_ServiceCheckAudioChannel (DVB_ServiceInfo *pstService)
{
if ( (pstService->u8Type&0x40)==0)
{
return 0;
}
else
{
return 1;
}
}
/*******************************************************************************************/
EN_AUD_MODE DVB_ServiceCheckAudioMode (DVB_ServiceInfo *pstService)
{
switch ( pstService->u8Type&0x03 )
{
default:
case 0:
return EN_AUD_MODE_LR;
case 1:
return EN_AUD_MODE_LR_MIX;
case 2:
return EN_AUD_MODE_LL;
case 3:
return EN_AUD_MODE_RR;
}
}
/*******************************************************************************************/
bool8 DVB_ServiceSetAudioChannel (EN_SERVICE_TYPE enServiceType, u16 u16SrvIdx, u8 u8AudioChannel)
{
if ( u16SrvIdx>=DVB_ServiceGetTotal(enServiceType) )
{
return FALSE;
}
DVB_ServiceRead(enServiceType, u16SrvIdx, &pgmItem);
if (u8AudioChannel==1)
{
pgmItem.u8Type |= 0x01;
}
else
{
pgmItem.u8Type &= 0xfe;
}
DVB_ServiceUpdate(enServiceType, u16SrvIdx, &pgmItem);
return TRUE;
}
/*******************************************************************************************/
bool8 DVB_ServiceSetAudioMode (EN_SERVICE_TYPE enServiceType, u16 u16SrvIdx, EN_AUD_MODE enAudioMode)
{
if ( u16SrvIdx>=DVB_ServiceGetTotal(enServiceType) )
{
return FALSE;
}
DVB_ServiceRead(enServiceType, u16SrvIdx, &pgmItem);
switch (enAudioMode)
{
case EN_AUD_MODE_LR:
case EN_AUD_MODE_RL:
pgmItem.u8Type = pgmItem.u8Type&0xfc;
break;
case EN_AUD_MODE_LL:
pgmItem.u8Type = (pgmItem.u8Type&0xfc)|0x02;
break;
case EN_AUD_MODE_RR:
pgmItem.u8Type = (pgmItem.u8Type&0xfc)|0x03;
break;
case EN_AUD_MODE_LR_MIX:
pgmItem.u8Type = (pgmItem.u8Type&0xfc)|0x01;
break;
default:
pgmItem.u8Type = pgmItem.u8Type&0xfc;
break;
}
DVB_ServiceUpdate(enServiceType, u16SrvIdx, &pgmItem);
return TRUE;
}
/*******************************************************************************************/
// FOR DB SORTING ======================================================================
extern int qsort_ex ( void *base, void *baseTmp, unsigned num, unsigned width, int (*comp)(unsigned, unsigned), unsigned org_idx, EN_SERVICE_TYPE enSrvType );
static EN_SERVICE_TYPE enSrvType;
static u16* pu16SortedArray=NULL;
static u16* pu16SortedArrayTemp=NULL;
static u8* pu8string1;
static u8* pu8string2;
/*******************************************************************************************/
u16 Address2Idx(unsigned add)
{
if (pu16SortedArray == NULL)
{
return 0;
}
return pu16SortedArrayTemp[((add - (unsigned)pu16SortedArray) / (sizeof(u16)))];
}
/*******************************************************************************************/
//------------------Neal add for string search------------------
bool8 DVB_StringSearch(EN_SERVICE_TYPE _enSrvType,u16*pu16SortIdx,u16 u16ServiceStartIdx,u16 u16ServiceEndIdx,u8* pu8SubString,u16* pu16idx)
{
u8 u16idx;
u8 i;
char acServiceNameTemp[MAX_SERVICE_NAME_LENGTH];
memset (acServiceNameTemp, 0, MAX_SERVICE_NAME_LENGTH);
if(u16ServiceEndIdx>=u16ServiceStartIdx)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -