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

📄 dvb_db.c

📁 DVB软件,基于CT216软件的开发源程序.
💻 C
📖 第 1 页 / 共 4 页
字号:
		}
	}
	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 + -