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

📄 loadchannels.c

📁 关于嵌入式PCB板UI的程序
💻 C
📖 第 1 页 / 共 4 页
字号:
	if(screenstate == SCREEN_EPG_STATE)
		iArrayCount = MAX_NO_OF_MENU_ELEMENTS_IN_BIG_SCREEN;
	else
		iArrayCount = MAX_EPG_ITEM;
#endif
	
	/*1.clear the list*/
	memset ( astAvailableChannels, 0, ( sizeof ( MENU_DATA_STRUCT ) * iNoOfItemsInScreen ) );

	pstAvailableMenuDataHead = pstAvailableMenuDataTail= &astAvailableChannels[ 0 ];
	pstAvailableMenuDataHead ->Prev = ( MENU_DATA_STRUCT * ) NULL; 
	pstAvailableMenuDataTail ->Next = ( MENU_DATA_STRUCT * ) NULL;
#if 0
	if(PositionProgInfoTop ()==INVALID_LINK)
		return (int)INVALID_LINK;
#endif	
	if(sProgIndex2bRetrieved == INVALID_LINK)
	{
		if((sProgIndex2bRetrieved = ProgramList->HeadProgIndex) == INVALID_LINK)
			return (int)INVALID_LINK;
		iProgNumberBeingRetrieved = 1;
		
	}
	iProgNumber = iProgNumberBeingRetrieved;
	sProgIndex = sProgIndex2bRetrieved;
	sttbx_Print("\n\nProgNo = %d;ProgIndex = %d\n\n",iProgNumber,sProgIndex);
	
	pstProgInfoTemp = CurProgInfo ( &iProgNo);
	iCurrentProgNo = iProgNo;
	if(pstProgInfoTemp == NULL)
		return (int)INVALID_LINK;

	if(iProgNo <= iNoOfItemsInScreen)
	{
		PositionProgInfoTop ();
	}
	else
	{
		PositionProgInfoNeg(iNoOfItemsInScreen-1);
	}
	pstProgInfoTemp = CurProgInfo ( &iProgNo);
/*AL05 Start*/
#if 0
	sprintf ( ( char * ) pstAvailableMenuDataTail -> aucData, "%-16d %-15s %-16s ", 
							iProgNo, 
							pstProgInfoTemp ->cServiceName,
							pstProgInfoTemp ->cServiceProviderName
							);
#else
	memset(networkName, 0, sizeof(networkName));
	sprintf(networkName,"%s",
		pastTransponderInfoTable[pstProgInfoTemp->stProgNo.unShort.sHi16].Xpdr.Terrestrial.acNetworkName);
	
	//sttbx_Print("program name %s,->network index %d name %s\n",pstProgInfoTemp->cServiceName,pstProgInfoTemp->stProgNo.unShort.sHi16,networkName);
		
	sprintf ( ( char * ) pstAvailableMenuDataTail -> aucData, "%-16d %-15s %-16s %-1d %-1d %-20s", 
							iProgNo, 
							pstProgInfoTemp->cServiceName,
							pstProgInfoTemp->cServiceProviderName,
							(pstProgInfoTemp->bFavoriteStatus?1:0),
							(pstProgInfoTemp->bLockedStatus?1:0),
							networkName
							);

#endif
/*AL05 End*/
	if(iProgNo == iCurrentProgNo)
	{
		pstCurAvailableChannel = pstAvailableMenuDataTail;
		iCurrentProgOffset = 0;
	}
	iNoOfAvailableMenuElements = 1;
	while ( iNoOfAvailableMenuElements < iNoOfItemsInScreen )
	{
		if ( ( pstProgInfoTemp = NextProgInfo ( &iProgNo) ) == NULL ) 
			break;
		/*
		 * add the new element to the menu list
		 */
		pstMenuDataTemp = &astAvailableChannels [ iNoOfAvailableMenuElements ];
		pstAvailableMenuDataTail ->Next = pstMenuDataTemp;
		pstMenuDataTemp ->Prev = pstAvailableMenuDataTail;
		pstAvailableMenuDataTail = pstMenuDataTemp;
		pstAvailableMenuDataTail ->Next = ( MENU_DATA_STRUCT * ) NULL;

		++iNoOfAvailableMenuElements;
/*AL05 Start*/
#if 0
		sprintf ( ( char * ) pstAvailableMenuDataTail ->aucData, "%-16d %-15s %-16s ", 
							iProgNo, 
							pstProgInfoTemp ->cServiceName,
							pstProgInfoTemp ->cServiceProviderName);
#else
		memset(networkName, 0, sizeof(networkName));
		sprintf(networkName,"%s",
			pastTransponderInfoTable[pstProgInfoTemp->stProgNo.unShort.sHi16].Xpdr.Terrestrial.acNetworkName);

		sprintf ( ( char * ) pstAvailableMenuDataTail -> aucData, "%-16d %-15s %-16s %-1d %-1d %-20s", 
							iProgNo, 
							pstProgInfoTemp->cServiceName,
							pstProgInfoTemp->cServiceProviderName,
							(pstProgInfoTemp->bFavoriteStatus?1:0),
							(pstProgInfoTemp->bLockedStatus?1:0),
							networkName
							);
		//sttbx_Print("%s\n", pstAvailableMenuDataTail -> aucData);
#endif
/*AL05 End*/
		if(iProgNo == iCurrentProgNo)
		{
			pstCurAvailableChannel = pstAvailableMenuDataTail;
			iCurrentProgOffset = iNoOfAvailableMenuElements -1;
		}
	}
	available_menu_page_last_sel = NEXT_PAGE;
	//return iNoOfAvailableMenuElements;
	return iCurrentProgOffset;
}

#if 0
/*AL05 Start*/
int  getChannelsInChManageDialog(int iNoOfItemsInScreen)
{
	int		iProgNo;
	MENU_DATA_STRUCT	*pstMenuDataTemp;
	PROG_INFO_STRUCT 	*pstProgInfoTemp;
	int 	iCurrentProgNo;
	int 	iCurrentProgOffset = 0;
	
	/*1.clear the list*/
	memset ( astAvailableChannels, 0, ( sizeof ( MENU_DATA_STRUCT ) * iNoOfItemsInScreen ) );

	pstAvailableMenuDataHead = pstAvailableMenuDataTail= &astAvailableChannels[ 0 ];
	pstAvailableMenuDataHead ->Prev = ( MENU_DATA_STRUCT * ) NULL; 
	pstAvailableMenuDataTail ->Next = ( MENU_DATA_STRUCT * ) NULL;

	if(sProgIndex2bRetrieved == INVALID_LINK)
	{
		if((sProgIndex2bRetrieved = ProgramList->HeadProgIndex) == INVALID_LINK)
			return (int)INVALID_LINK;
		iProgNumberBeingRetrieved = 1;
		
	}
	iProgNumber = iProgNumberBeingRetrieved;
	sProgIndex = sProgIndex2bRetrieved;
	sttbx_Print("\n\nProgNo = %d;ProgIndex = %d\n\n",iProgNumber,sProgIndex);
	
	pstProgInfoTemp = CurProgInfo ( &iProgNo);
	iCurrentProgNo = iProgNo;
	if(pstProgInfoTemp == NULL)
		return (int)INVALID_LINK;

	if(iProgNo <= iNoOfItemsInScreen)
	{
		PositionProgInfoTop ();
	}
	else
	{
		PositionProgInfoNeg(iNoOfItemsInScreen-1);
	}
	pstProgInfoTemp = CurProgInfo ( &iProgNo);

	sprintf ( ( char * ) pstAvailableMenuDataTail -> aucData, "%-16d %-15s %-16s %d %d", 
							iProgNo, 
							pstProgInfoTemp->cServiceName,
							pstProgInfoTemp->cServiceProviderName,
							(pstProgInfoTemp->bFavoriteStatus?1:0),
							(pstProgInfoTemp->bLockedStatus?1:0)
							);
	if(iProgNo == iCurrentProgNo)
	{
		pstCurAvailableChannel = pstAvailableMenuDataTail;
		iCurrentProgOffset = 0;
	}
	iNoOfAvailableMenuElements = 1;
	while ( iNoOfAvailableMenuElements < iNoOfItemsInScreen )
	{
		if ( ( pstProgInfoTemp = NextProgInfo ( &iProgNo) ) == NULL ) 
			break;
		/*add the new element to the menu list*/
		pstMenuDataTemp = &astAvailableChannels [ iNoOfAvailableMenuElements ];
		pstAvailableMenuDataTail ->Next = pstMenuDataTemp;
		pstMenuDataTemp ->Prev = pstAvailableMenuDataTail;
		pstAvailableMenuDataTail = pstMenuDataTemp;
		pstAvailableMenuDataTail ->Next = ( MENU_DATA_STRUCT * ) NULL;

		++iNoOfAvailableMenuElements;

		sprintf ( ( char * ) pstAvailableMenuDataTail -> aucData, "%-16d %-15s %-16s %d %d", 
						iProgNo, 
						pstProgInfoTemp->cServiceName,
						pstProgInfoTemp->cServiceProviderName,
						(pstProgInfoTemp->bFavoriteStatus?1:0),
						(pstProgInfoTemp->bLockedStatus?1:0)
						);
		if(iProgNo == iCurrentProgNo)
		{
			pstCurAvailableChannel = pstAvailableMenuDataTail;
			iCurrentProgOffset = iNoOfAvailableMenuElements -1;
		}
	}
	available_menu_page_last_sel = NEXT_PAGE;
	return iCurrentProgOffset;
}
/*AL05 End*/
#endif

int channelPrevKeyFunc(int iNoOfValidItems,int iNoOfItemsInScreen)
{
	int	iOffset;
	int	iProgNo;
	MENU_DATA_STRUCT	*pstMenuDataTemp;
	PROG_INFO_STRUCT 	*pstProgInfoTemp;
	char networkName[MAX_NETWORK_NAME_LENGTH+1];

	if(iNoOfValidItems < iNoOfItemsInScreen)
		return (int)INVALID_LINK;
	
	iOffset = iNoOfValidItems;/*number of valid elements in the menu data linked list*/

	if ( available_menu_page_last_sel == PREV_PAGE )
		iOffset = 1;
	if ( PositionProgInfoNeg ( iOffset ) == INVALID_LINK )
		return (int)INVALID_LINK;

	available_menu_page_last_sel = PREV_PAGE;

	if ( ( pstProgInfoTemp = CurProgInfo ( &iProgNo) ) == NULL ) 
	{
		return (int)INVALID_LINK;
	}

	pstMenuDataTemp = pstAvailableMenuDataTail;
	pstAvailableMenuDataTail ->Prev ->Next = ( MENU_DATA_STRUCT * ) NULL;
	pstAvailableMenuDataTail = pstAvailableMenuDataTail ->Prev;
	
 	pstMenuDataTemp ->Next = pstAvailableMenuDataHead;
	pstAvailableMenuDataHead ->Prev = pstMenuDataTemp;

	pstAvailableMenuDataHead = pstMenuDataTemp;
	pstAvailableMenuDataHead ->Prev = ( MENU_DATA_STRUCT * ) NULL;

	memset ( pstAvailableMenuDataHead ->aucData, 0, sizeof ( pstAvailableMenuDataHead ->aucData ) );

	memset(networkName, 0, sizeof(networkName));
	sprintf(networkName,"%s",
		pastTransponderInfoTable[pstProgInfoTemp->stProgNo.unShort.sHi16].Xpdr.Terrestrial.acNetworkName);

	sprintf ( ( char * ) pstAvailableMenuDataHead ->aucData, "%-16d %-15s %-16s %-1d %-1d %-20s", 
							iProgNo, 
							pstProgInfoTemp->cServiceName,
							pstProgInfoTemp->cServiceProviderName,
							(pstProgInfoTemp->bFavoriteStatus?1:0),
							(pstProgInfoTemp->bLockedStatus?1:0),
							networkName
							);

	return iNoOfValidItems;
}

int  channelNextKeyFunc(int iNoOfValidItems)
{
	int	iOffset;
	int	iProgNo;
	//int	CurProgramStatus;
	MENU_DATA_STRUCT	*pstMenuDataTemp;
	PROG_INFO_STRUCT 	*pstProgInfoTemp;
	char networkName[MAX_NETWORK_NAME_LENGTH+1];

	iOffset = iNoOfValidItems;

	if ( available_menu_page_last_sel == NEXT_PAGE )
		iOffset = 1;

	if ( PositionProgInfoPos ( iOffset ) == INVALID_LINK )
		return (int)INVALID_LINK;

	available_menu_page_last_sel = NEXT_PAGE;

	if ( ( pstProgInfoTemp = CurProgInfo ( &iProgNo) ) == NULL ) 
	{
		return (int)INVALID_LINK;
	}

	/*
	 * cut the head and add it as a new tail
	 */
	pstMenuDataTemp = pstAvailableMenuDataHead;
	pstAvailableMenuDataHead ->Next ->Prev = ( MENU_DATA_STRUCT * ) NULL;
	pstAvailableMenuDataHead = pstAvailableMenuDataHead ->Next;
	
	pstMenuDataTemp ->Prev = pstAvailableMenuDataTail;
	pstAvailableMenuDataTail ->Next = pstMenuDataTemp;

	pstAvailableMenuDataTail = pstMenuDataTemp;
	pstAvailableMenuDataTail ->Next = ( MENU_DATA_STRUCT * ) NULL;

	/*
	 * fill the data now, after cleraing the existing data
	 */
	memset ( pstAvailableMenuDataTail ->aucData, 0, sizeof ( pstAvailableMenuDataTail ->aucData ) );
#if 0
	strcpy(pstAvailableMenuDataTail->aucData,pstProgInfoTemp -> cServiceName);
#else

	memset(networkName, 0, sizeof(networkName));
	sprintf(networkName,"%s",
		pastTransponderInfoTable[pstProgInfoTemp->stProgNo.unShort.sHi16].Xpdr.Terrestrial.acNetworkName);

	sprintf ( ( char * ) pstAvailableMenuDataTail -> aucData, "%-16d %-15s %-16s %-1d %-1d %-20s", 
							iProgNo, 
							pstProgInfoTemp->cServiceName,
							pstProgInfoTemp->cServiceProviderName,
							(pstProgInfoTemp->bFavoriteStatus?1:0),
							(pstProgInfoTemp->bLockedStatus?1:0),
							networkName
							);
#endif
	return iNoOfValidItems;
	
}

void channelSelectKeyFunc(int iItemOffPassed, int iNoOfValidItems )
{
	//int	iProgNo;
	//PROG_INFO_STRUCT 	*pstProgInfoTemp;
	if ( available_menu_page_last_sel == PREV_PAGE )
	{
		PositionProgInfoPos ( iItemOffPassed);
	}
	else
	{
		PositionProgInfoNeg ( iNoOfValidItems - iItemOffPassed - 1 );
	}
	sttbx_Print("\n\nCurent Program No = %d\nCurent Prog Index = %d\n",iProgNumber,sProgIndex);
/*AL05 Start*/
#if 0	
	sProgIndex2bRetrieved = sProgIndex;
	iProgNumberBeingRetrieved = iProgNumber;
	iCurrentProgramNo = iProgNumber;
#endif
/*AL05 End*/
}


/*extend funcs,added by WuLun,2005-5-14*/
int PositionFavoriteProgInfoTop(void)
{	
	//int 	i;
	int 	iValidProgNum;
	int 	iFavoriteProgNum_temp = 1;
	short int sFavoriteProgIndex_temp= ProgramList->HeadProgIndex;

	if((iValidProgNum = ProgramList->NoOfValidPgms)<=0)
	{
		iFavProgNumber = 0;
		sFavProgIndex = INVALID_LINK;
		return (int)INVALID_LINK;
	}
	for(;sFavoriteProgIndex_temp !=INVALID_LINK && astProgInfoTable [sFavoriteProgIndex_temp] .status != ELEMENT_FREE;)
	{
		if(astProgInfoTable[sFavoriteProgIndex_temp].bFavoriteStatus == true)
		{
			iFavProgNumber = iFavoriteProgNum_temp;
			sFavProgIndex = sFavoriteProgIndex_temp;
			return iValidProgNum;
		}
		iFavoriteProgNum_temp++;
		sFavoriteProgIndex_temp = astProgInfoTable[sFavoriteProgIndex_temp].sNextProgIndex;
	}
	iFavProgNumber = 0;
	sFavProgIndex = INVALID_LINK;
	return	( int ) INVALID_LINK;
}

static PROG_INFO_STRUCT  *CurFavoriteProgInfo ( int *piProgramNo )
{
	PROG_INFO_STRUCT	*pstProgramRecord;

	pstProgramRecord	= ( PROG_INFO_STRUCT * ) NULL;
	*piProgramNo = INVALID_LINK;
	
	if ( sFavProgIndex != INVALID_LINK && \
				astProgInfoTable [ sFavProgIndex ] .status != ELEMENT_FREE )
	{
		pstProgramRecord 	= &astProgInfoTable [ sFavProgIndex ];
		*piProgramNo = iFavProgNumber;
	}
	return	pstProgramRecord;
}

static PROG_INFO_STRUCT	*NextFavoriteProgInfo(int *piProgramNo)
{
	SHORT	sLocalProgIndex;
	PROG_INFO_STRUCT	*pstProgramRecord;
	int iFavoriteProgNum_temp = iFavProgNumber;
	short int sFavoriteProgIndex_temp= sFavProgIndex;
	
	pstProgramRecord	= ( PROG_INFO_STRUCT * ) NULL;
	*piProgramNo = INVALID_LINK;
	
	sLocalProgIndex = astProgInfoTable [ sFavoriteProgIndex_temp ].sNextProgIndex;
	for(;;)
	{
		if ( sFavoriteProgIndex_temp != INVALID_LINK && \
				sLocalProgIndex != INVALID_LINK && \
				astProgInfoTable [ sLocalProgIndex ] .status != ELEMENT_FREE )
		{
			if(astProgInfoTable [ sLocalProgIndex ].bFavoriteStatus== true )
			{
				
				sFavProgIndex = sLocalProgIndex;
				++iFavoriteProgNum_temp;
				iFavProgNumber = iFavoriteProgNum_temp;
				pstProgramRecord 	= &astProgInfoTable [ sFavProgIndex ];
				*piProgramNo	= iFavProgNumber;
				return	pstProgramRecord;
			}
			sFavoriteProgIndex_temp = sLocalProgIndex;
			sLocalProgIndex = astProgInfoTable [ sFavoriteProgIndex_temp ] .sNextProgIndex;	
			++iFavoriteProgNum_temp;
		}
		else return pstProgramRecord;
	}
}

static PROG_INFO_STRUCT  	*PrevFavoriteProgInfo ( int *piProgramNo )
{
	SHORT	sLocalProgIndex;
	PROG_INFO_STRUCT	*pstProgramRecord;
	int iFavoriteProgNum_temp = iFavProgNumber;

⌨️ 快捷键说明

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