亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chip.c

?? STV0299 Minituner driver, for ST chipset
?? C
?? 第 1 頁 / 共 3 頁
字號:
#include "gen_macros.h"

#include <stdlib.h>
#include <string.h>

#include "i2c.h"
#include "chip.h"

#ifndef NO_GUI
	#include "Pnl_Trace.h"
	#include "Appl.h"
	static HANDLE ChipMutex = NULL;   
#endif


typedef struct node 
{
	STCHIP_Handle_t hChip;
	struct node *pNextNode;
}NODE;

static NODE *pFirstNode = NULL;

/* List routines	*/
static NODE *AppendNode(STCHIP_Handle_t hChip)
{
	NODE *pNode = pFirstNode;
	
	if(pNode == NULL)
	{   /* Allocation of the first node	*/
		pNode = calloc(1,sizeof(NODE));
		pFirstNode = pNode;
	}
	else
	{   /* Allocation of a new node */
		while(pNode->pNextNode != NULL)	/* Search of the last node	*/
			pNode = pNode->pNextNode;
			
		pNode->pNextNode = calloc(1,sizeof(NODE));	/* Memory allocation */
		
		if(pNode->pNextNode != NULL)				/* Check allocation */
			pNode = pNode->pNextNode;
		else
			pNode = NULL;
	}
	
	if(pNode != NULL)	/* if allocation ok	*/
	{
		/*	Fill the node	*/
		pNode->hChip = hChip;
		pNode->pNextNode = NULL;	
	}
	
	return pNode;
}
#if (0)
static NODE *FindNode(NODE* pSearchNode)
{
	NODE *pNode = pFirstNode;
	
	if(pNode == NULL)
	{
		while((pNode != pSearchNode) && (pNode->pNextNode != NULL))
			pNode = pNode->pNextNode;
			
		if(pNode != pSearchNode)
			pNode = NULL;
	}
	
	return pNode;
}
#endif
static void DeleteNode(NODE *pNode)
{
	NODE *pPrevNode = pFirstNode;
	
	if(pNode != NULL)
	{
		if(pNode == pFirstNode) 
		{
			/* Delete the first node	*/
			pFirstNode = pNode->pNextNode;
		}
		else
		{
			/* Delete a non-first node	*/
			while(pPrevNode->pNextNode != pNode)	/* search the node before the node to delete */
				pPrevNode = pPrevNode->pNextNode;
				
			if(pNode->pNextNode == NULL)
				pPrevNode->pNextNode = NULL;		/* the node to delete is the last */
			else	
				pPrevNode->pNextNode = pPrevNode->pNextNode->pNextNode;	/* the node to delete is not the last */
		}
		
		free(pNode);	/* memory deallocation */
	}
}


/*****************************************************
**FUNCTION	::	ChipGetFirst
**ACTION	::	Retrieve the first chip handle
**PARAMS IN	::	NONE
**PARAMS OUT::	NONE
**RETURN	::	STCHIP_Handle_t if ok, NULL otherwise
*****************************************************/
STCHIP_Handle_t	ChipGetFirst(void)
{
	if((pFirstNode != NULL) && (pFirstNode->hChip != NULL))
		return pFirstNode->hChip;	
	else
		return NULL;
}

/*****************************************************
**FUNCTION	::	ChipFindNode
**ACTION	::	Find that node that contains the chip 
**PARAMS IN	::	NONE
**PARAMS OUT::	NONE
**RETURN	::	STCHIP_Handle_t if ok, NULL otherwise
*****************************************************/
NODE *ChipFindNode(STCHIP_Handle_t hChip)
{
	NODE *pNode = pFirstNode;
	
	if(pNode != NULL)
	{
		while((pNode->hChip != hChip) && (pNode->pNextNode != NULL))
			pNode = pNode->pNextNode;
		
		if(pNode->hChip != hChip)
			pNode = NULL;	
		
	}
	
	return pNode;
}

/*****************************************************
**FUNCTION	::	ChipGetNext
**ACTION	::	Retrieve the handle of the next chip
**PARAMS IN	::	hPrevChip	==> handle of the previous chip
**PARAMS OUT::	NONE
**RETURN	::	STCHIP_Handle_t if ok, NULL otherwise
*****************************************************/
STCHIP_Handle_t	ChipGetNext(STCHIP_Handle_t hPrevChip)
{
	NODE *pNode;
	
	pNode = ChipFindNode(hPrevChip);
	if((pNode != NULL) && (pNode->pNextNode != NULL))
		return pNode->pNextNode->hChip;
	else
		return NULL; 
}

/*****************************************************
**FUNCTION	::	ChipGetHandleFromName
**ACTION	::	Retrieve the handle of chip with its name
**PARAMS IN	::	Name	==> name of the chip
**PARAMS OUT::	NONE
**RETURN	::	STCHIP_Handle_t if ok, NULL otherwise
*****************************************************/
STCHIP_Handle_t ChipGetHandleFromName(char *Name)
{
	STCHIP_Handle_t hChip;
	
	hChip = ChipGetFirst();
	while((hChip != NULL) && (strcmp(hChip->Name,Name) != 0))
	{
		hChip = ChipGetNext(hChip);
	}
	
	return hChip;
}

#ifndef NO_GUI 
	/*****************************************************
	**FUNCTION	::	ChipToHtmlFile
	**ACTION	::	Create an Html file of the register map 
	**PARAMS IN	::	hChip	==> chip handle
	**				FileName==> name of the html file
	**PARAMS OUT::	NONE
	**RETURN	::	CHIPERR_NO_ERROR if ok, CHIPERR_INVALID_HANDLE otherwise
	*****************************************************/
	STCHIP_Error_t ChipToHtmlFile(STCHIP_Handle_t hChip,char *FileName)
	{
		FILE	*hHtmlFile;
	
		S32		r=0,
				f=0,
				nbBits;
			
		U32		color;
			
		char	string[300];
	
		if(hChip)
		{
			/* HTML file creation */
			hHtmlFile = fopen (FileName, "w+");  									/* Open/Create Html file */
			/* HTML header */
			fprintf(hHtmlFile,"<html>\r\n");

			/* HTML document head */
			fprintf(hHtmlFile,"\t<head>\r\n");
			fprintf(hHtmlFile,"\t\t<title>%s</title>\r\n",hChip->Name);					/* Name of the HTML document */
			fprintf(hHtmlFile,"\t\t<style type=\"text/css\">\r\n");					/* HTML font style */
			fprintf(hHtmlFile,"\t\t\ttd {font-family:arial; font-size:8pt;}\r\n");
			fprintf(hHtmlFile,"\t\t</style>\r\n");
			fprintf(hHtmlFile,"\t</head>\r\n");

			/* HTML document body */
			fprintf(hHtmlFile,"\r\n\t<body>\r\n");

			/* Table */
			fprintf(hHtmlFile,"\t\t<table border=\"1\" bgcolor=\"#BBBBBB\">\r\n");	/* table with dark grey background */
			fprintf(hHtmlFile,"\t\t\t<tr>\r\n");									/* Heading row */ 
			fprintf(hHtmlFile,"\t\t\t\t<th>Name</th>\r\n");    
			fprintf(hHtmlFile,"\t\t\t\t<th>Address</th>\r\n");    
			fprintf(hHtmlFile,"\t\t\t\t<th>Bit8</th>\r\n");    
			fprintf(hHtmlFile,"\t\t\t\t<th>Bit7</th>\r\n");    
			fprintf(hHtmlFile,"\t\t\t\t<th>Bit6</th>\r\n");    
			fprintf(hHtmlFile,"\t\t\t\t<th>Bit5</th>\r\n");    
			fprintf(hHtmlFile,"\t\t\t\t<th>Bit4</th>\r\n");    
			fprintf(hHtmlFile,"\t\t\t\t<th>Bit3</th>\r\n");    
			fprintf(hHtmlFile,"\t\t\t\t<th>Bit2</th>\r\n");    
			fprintf(hHtmlFile,"\t\t\t\t<th>Bit1</th>\r\n");    
			fprintf(hHtmlFile,"\t\t\t\t<th>Value</th>\r\n"); 
			fprintf(hHtmlFile,"\t\t\t</tr>\r\n");    

			for(r=0;r<hChip->NbRegs;r++)												
			{
				/* fill rows */
				fprintf(hHtmlFile,"\t\t\t<tr>\r\n");
				fprintf(hHtmlFile,"\t\t\t\t<td>%s</td>\r\n",hChip->pRegMap[r].Name);	/* register name */
				fprintf(hHtmlFile,"\t\t\t\t<td bgcolor=\"#EEEEEE\">0x%02x</td>\r\n",hChip->pRegMap[r].Addr);	/* register address */
	
				color = 0xBBBBBB;

				nbBits = 8;
	
				do
				{
					/* Fill columns with fields data */
					if((hChip->pFieldMap[f].Bits + hChip->pFieldMap[f].Pos) != nbBits)
						fprintf(hHtmlFile,"\t\t\t\t<td bgcolor=\"red\" colspan=\"%d\"></td>\r\n",nbBits-(hChip->pFieldMap[f].Bits + hChip->pFieldMap[f].Pos));	/* empty fields at the beginning of the register */
		
					nbBits = hChip->pFieldMap[f].Pos;
		
					if(hChip->pFieldMap[f].Bits>1)
						fprintf(hHtmlFile,"\t\t\t\t<td bgcolor=\"#%06x\" align=\"center\" colspan=\"%d\">%s</td>\r\n",color,hChip->pFieldMap[f].Bits,hChip->pFieldMap[f].Name); /* Field with size > 1 bit */
					else
						fprintf(hHtmlFile,"\t\t\t\t<td bgcolor=\"#%06x\" align=\"center\">%s</td>\r\n",color,hChip->pFieldMap[f].Name);	/* Field with size = 1 bit */
		
					f++;															/* Next field */
		
					if(color == 0xBBBBBB)											/* change from dark grey to light grey */
						color = 0xEEEEEE;
					else
						color = 0xBBBBBB;
				}while(hChip->pFieldMap[f].Reg == r);
	
				if(nbBits)
					fprintf(hHtmlFile,"\t\t\t\t<td bgcolor=\"red\" colspan=\"%d\"></td>\r\n",nbBits);	/* empty fields at the end of the register */

				fprintf(hHtmlFile,"\t\t\t\t<td bgcolor=\"#EEEEEE\">0x%02x</td>\r\n",hChip->pRegMap[r].Value);	/* register value */
				fprintf(hHtmlFile,"\t\t\t</tr>\r\n");
			}

			fprintf(hHtmlFile,"\t\t</table>\r\n");
			fprintf(hHtmlFile,"\t</body>\r\n");
			fprintf(hHtmlFile,"</html>\r\n");

			fclose(hHtmlFile);
		}
		else
			return CHIPERR_INVALID_HANDLE;
		
		return CHIPERR_NO_ERROR;
	}
#endif

/*****************************************************
**FUNCTION	::	ChipOpen
**ACTION	::	Open a new chip
**PARAMS IN	::	Name	==> Name of the chip
**				I2cAddr	==> I2C address of the chip
**				NbRegs	==> number of register in the chip
**				NbFields==> number of field in the chip
**PARAMS OUT::	NONE
**RETURN	::	Handle to the chip, NULL if an error occur
*****************************************************/
STCHIP_Handle_t ChipOpen(STCHIP_Info_t *hChipOpenParams)
{
	STCHIP_Handle_t hChip;
	
	#ifndef NO_GUI
		char mutex_name[20];
	#endif
	
	hChip = calloc (1,sizeof(STCHIP_Info_t));					/* Allocation of the chip structure	*/
	
	if((hChip != NULL) && (hChipOpenParams != NULL))
	{
		hChip->pRegMap = calloc(hChipOpenParams->NbRegs,sizeof(STCHIP_Register_t));		/* Allocation of the register map	*/
		
		if(hChip->pRegMap != NULL)
		{
			hChip->pFieldMap = calloc(hChipOpenParams->NbFields,sizeof(STCHIP_Field_t));	/* Allocation of the field map	*/
			
			if(hChip->pFieldMap != NULL)
			{
				if((ChipGetHandleFromName(hChipOpenParams->Name)==NULL) && (AppendNode(hChip)!=NULL)) 
				{
					hChip->I2cAddr = hChipOpenParams->I2cAddr;
					strcpy(hChip->Name,hChipOpenParams->Name);
					hChip->NbRegs = hChipOpenParams->NbRegs;
					hChip->NbFields = hChipOpenParams->NbFields;
					hChip->ChipMode = hChipOpenParams->ChipMode;
					hChip->Repeater = hChipOpenParams->Repeater;
					hChip->RepeaterHost = hChipOpenParams->RepeaterHost;
					hChip->RepeaterFn = hChipOpenParams->RepeaterFn;
					hChip->WrStart  = hChipOpenParams->WrStart;
				    hChip->WrSize   = hChipOpenParams->WrSize;     
				    hChip->RdStart  = hChipOpenParams->RdStart;     
				    hChip->RdSize   = hChipOpenParams->RdSize;     
					hChip->Error = CHIPERR_NO_ERROR;
					hChip->pData = hChipOpenParams->pData;
					
					#ifndef NO_GUI
						if(ChipMutex == NULL)
						{
							sprintf(mutex_name,"I2C_%04x",Appl.Cfg.PPortAdr);	//Create mutex name
							ChipMutex = CreateMutex(NULL,FALSE,mutex_name);		//Create mutex or use existing one
						}
					#endif
				}
				else
				{
					free(hChip->pFieldMap);
					free(hChip->pRegMap);
					free(hChip);
					hChip = NULL;	
				}
			}
			else
			{
				free(hChip->pRegMap);
				free(hChip);
				hChip = NULL;
			}
		}
		else
		{
			free(hChip);
			hChip = NULL;	
		}
	}
	
	return hChip;
}

/*****************************************************
**FUNCTION	::	ChipClose
**ACTION	::	Close a chip
**PARAMS IN	::	hChip	==> handle to the chip
**PARAMS OUT::	NONE
**RETURN	::	CHIPERR_NO_ERROR if ok, CHIPERR_INVALID_HANDLE otherwise
*****************************************************/
STCHIP_Error_t	ChipClose(STCHIP_Handle_t hChip)
{
	STCHIP_Error_t error = CHIPERR_NO_ERROR;
	NODE *node = NULL;
	
	if(hChip != NULL)
	{
		node = ChipFindNode(hChip);
		
		#ifndef NO_GUI
			if(node == pFirstNode)
			{
				CloseHandle(ChipMutex);
				ChipMutex = NULL;
			}
		#endif
		
		DeleteNode(node);
		free(hChip->pFieldMap);
		free(hChip->pRegMap);
		free(hChip);
	}
	else
		error = CHIPERR_INVALID_HANDLE;
	
	return error; 
}

/*****************************************************
**FUNCTION	::	ChipAddReg
**ACTION	::	Add a new register to the register map
**PARAMS IN	::	hChip	==>	Handle to the chip
**				Id		==> Id of the register
**				Name	==> Name of the register
**				Address	==> I2C address of the register
**				Default	==> Default value of the register
**PARAMS OUT::	NONE
**RETURN	::	Error
*****************************************************/
STCHIP_Error_t ChipAddReg(STCHIP_Handle_t hChip,U16 RegId,char * Name,U16 Address,U8 Default,STCHIP_Access_t Access)
{
	STCHIP_Register_t *pReg;
	
	if(hChip != NULL)
	{	
		if((RegId >= 0) && (RegId < hChip->NbRegs))
		{
			pReg=&hChip->pRegMap[RegId];
	
			pReg->Addr	= Address;
			pReg->Default	= Default;
			pReg->Value	= Default;
			pReg->Access = Access;
			strcpy(pReg->Name,Name);
		}
		else
			hChip->Error = CHIPERR_INVALID_REG_ID;
	}
	else

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品高清在线| 欧美mv日韩mv| 久久精品一区蜜桃臀影院| 国产婷婷色一区二区三区在线| 亚洲免费在线视频一区 二区| 首页综合国产亚洲丝袜| 粉嫩13p一区二区三区| 91精品国产综合久久国产大片| 国产精品人成在线观看免费| 久久爱www久久做| 欧美日韩高清一区二区三区| 1024成人网| 国产v综合v亚洲欧| 日韩欧美的一区| 婷婷久久综合九色国产成人| 99精品视频免费在线观看| 26uuu另类欧美| 久久精品理论片| 4438成人网| 亚洲第一福利一区| 欧美性xxxxx极品少妇| 国产精品久久久久久久久动漫| 国产精品自拍网站| 精品国产亚洲一区二区三区在线观看| 亚洲国产乱码最新视频| 日本丰满少妇一区二区三区| 国产精品第五页| 成人不卡免费av| 国产精品美女一区二区在线观看| 国产精品99久久久久久久女警 | 日本一区二区综合亚洲| 日本不卡高清视频| 欧美福利视频一区| 日韩精品一区第一页| 欧美日韩美女一区二区| 亚洲午夜精品在线| 9191精品国产综合久久久久久| 亚洲国产精品视频| 欧美日韩夫妻久久| 久久精品国产色蜜蜜麻豆| 精品少妇一区二区三区免费观看| 免费观看成人av| 久久久久久99久久久精品网站| 国模娜娜一区二区三区| 久久精品亚洲一区二区三区浴池| 国产精品一区久久久久| 欧美激情艳妇裸体舞| 色综合一个色综合| 天天射综合影视| 亚洲精品一线二线三线无人区| 国产一区二区不卡| 亚洲图片激情小说| 欧美亚洲国产一区二区三区 | 国产米奇在线777精品观看| 精品国产伦一区二区三区观看体验 | 美女视频免费一区| 国产偷v国产偷v亚洲高清| 国产福利91精品一区| 一区二区三区在线视频免费| 欧美高清www午色夜在线视频| 久久av老司机精品网站导航| 国产精品九色蝌蚪自拍| 欧美天堂一区二区三区| 免费观看久久久4p| 国产精品超碰97尤物18| 欧美精品在线一区二区| 福利一区二区在线| 婷婷综合另类小说色区| 国产清纯美女被跳蛋高潮一区二区久久w | 国产精品亚洲第一| 亚洲国产人成综合网站| 精品久久久久久久人人人人传媒| 国产精品一二三区在线| 亚洲免费观看视频| 亚洲精品一线二线三线| 精品污污网站免费看| 免费观看久久久4p| 一区二区三区中文字幕电影| 2023国产精品| 欧美日韩一区视频| 国产91丝袜在线观看| 天天操天天综合网| 亚洲欧美在线视频观看| 亚洲综合精品久久| 91美女片黄在线观看| 国产精品视频yy9299一区| 国产麻豆精品95视频| 一区二区在线观看不卡| 精品国产乱码久久| 欧美日韩高清不卡| 91浏览器打开| 国产ts人妖一区二区| 久久国产精品一区二区| 亚洲成人综合视频| 一片黄亚洲嫩模| 亚洲欧洲精品一区二区三区不卡| 精品理论电影在线观看| 欧美视频在线观看一区二区| 97se亚洲国产综合自在线不卡 | 91精品久久久久久久99蜜桃| 99视频精品免费视频| 日韩国产精品久久久| 亚洲视频免费看| 国产精品白丝在线| 国产精品午夜在线观看| 久久精品一级爱片| 26uuu亚洲综合色| 精品国产一区二区三区av性色| 欧美一区二区三区爱爱| 欧美精品高清视频| 欧美日韩高清一区二区不卡| 欧美在线免费观看亚洲| 色一情一乱一乱一91av| 成人免费av资源| 成人福利视频在线看| 成人午夜大片免费观看| 粉嫩av亚洲一区二区图片| 国产福利不卡视频| 波多野结衣在线aⅴ中文字幕不卡| 国产馆精品极品| 国产99久久久久久免费看农村| 国产美女视频91| 成人福利在线看| 色呦呦日韩精品| 欧美三区在线观看| 欧美福利视频一区| 精品久久久久一区二区国产| 久久久久久久电影| 中文字幕在线视频一区| 亚洲你懂的在线视频| 亚洲国产成人av网| 美女在线视频一区| 国产一区二区伦理片| 99免费精品在线| 欧美午夜在线一二页| 国产精品久久久久久久岛一牛影视| 欧美韩日一区二区三区四区| 精品国产一区二区三区四区四| 91精品国产综合久久香蕉的特点| 欧美一区二区三区在| 精品粉嫩超白一线天av| 免费人成精品欧美精品| 香蕉久久夜色精品国产使用方法| 日韩精品亚洲一区| 国产女人aaa级久久久级| 日韩二区三区四区| 在线日韩一区二区| 亚洲欧洲美洲综合色网| 成人午夜激情视频| 亚洲精品一区在线观看| 日韩在线观看一区二区| 91国模大尺度私拍在线视频| 国产精品美女视频| 国产91精品精华液一区二区三区| 欧美日本在线播放| 亚洲成人在线网站| 欧美日韩一区二区三区四区| 亚洲欧美色综合| 99视频精品在线| 国产精品美女视频| 丁香五精品蜜臀久久久久99网站| 国产亚洲欧洲一区高清在线观看| 麻豆91精品91久久久的内涵| 日韩午夜激情视频| 免费成人av在线| 91麻豆精品国产91久久久使用方法| 夜夜精品视频一区二区| 色婷婷av一区二区三区gif| 亚洲人成亚洲人成在线观看图片| 成人在线视频首页| 自拍偷拍亚洲综合| 在线观看国产日韩| 一区二区国产视频| 在线免费一区三区| 亚洲国产一区二区三区| 欧美亚洲高清一区二区三区不卡| 一区二区三区四区五区视频在线观看| 99久久精品情趣| 亚洲视频狠狠干| 欧美性videosxxxxx| 日韩不卡一二三区| 久久男人中文字幕资源站| 成人一区在线看| 亚洲人成在线播放网站岛国| 欧美性生活一区| 免费看黄色91| 久久精品视频免费| av资源网一区| 亚洲国产成人高清精品| 日韩三级精品电影久久久 | 亚洲精品免费在线观看| 欧美系列一区二区| 人人狠狠综合久久亚洲| 欧美va亚洲va在线观看蝴蝶网| 国产精品一区二区三区网站| 中文字幕制服丝袜一区二区三区| 色久综合一二码| 久久精品国产精品亚洲红杏| 国产精品伦一区| 欧美欧美午夜aⅴ在线观看|