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

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

?? chip.c

?? STV0299 Minituner driver, for ST chipset
?? C
?? 第 1 頁 / 共 3 頁
字號:
		return CHIPERR_INVALID_HANDLE;
		
	return hChip->Error;
}

/*****************************************************
**FUNCTION	::	CreateMask
**ACTION	::	Create a mask according to its number of bits and position 
**PARAMS IN	::	field	==> Id of the field
**PARAMS OUT::	NONE
**RETURN	::	mask of the field
*****************************************************/
unsigned char CreateMask(char NbBits, char Pos)
{
	int i;
	unsigned char mask=0;
	
	
	/*	Create mask	*/
	for (i = 0; i < NbBits; i++)
	{
		mask <<= 1 ;
		mask +=  1 ;
	}
	  
	mask = mask << Pos;
	
	return mask;
}

/*****************************************************
**FUNCTION	::	ChipAddField
**ACTION	::	Add a field to the field map 
**PARAMS IN	::	hChip	==> Handle to the chip
**				RegId	==> Id of the register which contains the field
**				FieldId	==> Id of the field
**				Name	==> Name of the field
**				Pos		==> Position (number of left shifts from LSB position) in the register 
**				NbBits	==> Size (in bits) of the field
**				Type	==> SIGNED or UNSIGNED
**PARAMS OUT::	NONE
**RETURN	::	Error
*****************************************************/
STCHIP_Error_t ChipAddField(STCHIP_Handle_t hChip,U16 RegId, U32 FieldId,char * Name, char Pos, char NbBits, STCHIP_FieldType_t Type)
{
	STCHIP_Field_t *pField; 
	
	if(hChip != NULL)
	{
		if(RegId < hChip->NbRegs)
		{
			if(FieldId < hChip->NbFields)
			{
				pField=&hChip->pFieldMap[FieldId];
	
				strcpy(pField->Name,Name);	
				pField->Reg = RegId;
				pField->Pos = Pos;
				pField->Bits = NbBits;
				pField->Type = Type;
				if(NbBits)
					pField->Mask = CreateMask(NbBits,Pos);
				else
					hChip->Error = CHIPERR_INVALID_FIELD_SIZE;
			}
			else
				hChip->Error = CHIPERR_INVALID_FIELD_ID;
		}
		else
			hChip->Error = CHIPERR_INVALID_REG_ID;
	}
	else 
		return CHIPERR_INVALID_HANDLE;
	
	return hChip->Error;
}

/*****************************************************
**FUNCTION	::	ChipSetOneRegister
**ACTION	::	Set the value of one register 
**PARAMS IN	::	hChip	==> Handle to the chip
**				reg_id	==> Id of the register
**				Data	==> Data to store in the register
**PARAMS OUT::	NONE
**RETURN	::	Error
*****************************************************/
STCHIP_Error_t ChipSetOneRegister(STCHIP_Handle_t hChip,U16 RegId, unsigned char Data)   
{
//	unsigned char data[2];
	
	if(hChip)
	{
		if(RegId < hChip->NbRegs)
		{
			if(hChip->pRegMap[RegId].Access != STCHIP_ACCESS_R)
			{
				hChip->pRegMap[RegId].Value = Data;
			
				if(hChip->ChipMode != STCHIP_MODE_NOSUBADR)
					ChipSetRegisters(hChip,RegId,1);
				else
					ChipSetRegisters(hChip,hChip->WrStart,hChip->WrSize);
			}
		}
		else
			hChip->Error = CHIPERR_INVALID_REG_ID;
	}
	else
		return CHIPERR_INVALID_HANDLE;
	
	return hChip->Error;
}

/*****************************************************
**FUNCTION	::	ChipGetOneRegister
**ACTION	::	Get the value of one register 
**PARAMS IN	::	hChip	==> Handle to the chip
**				reg_id	==> Id of the register
**PARAMS OUT::	NONE
**RETURN	::	Register's value
*****************************************************/
int ChipGetOneRegister(STCHIP_Handle_t hChip, U16 RegId)         
{
	unsigned char data = 0xFF;
	
	if(hChip)
	{
		if(hChip->ChipMode != STCHIP_MODE_NOSUBADR)
		{
			if(ChipGetRegisters(hChip,RegId,1) == CHIPERR_NO_ERROR)
				data = hChip->pRegMap[RegId].Value;
		}
		else
		{
			if(ChipGetRegisters(hChip,hChip->RdStart,hChip->RdSize) == CHIPERR_NO_ERROR)  
				data = hChip->pRegMap[RegId].Value;
		}
	}
		
	return data;
}

/*****************************************************
**FUNCTION	::	ChipSetRegisters
**ACTION	::	Set values of consecutive's registers (values are taken in RegMap)
**PARAMS IN	::	hChip		==> Handle to the chip
**				FirstReg	==> Id of the first register
**				NbRegs		==> Number of register to write		
**PARAMS OUT::	NONE
**RETURN	::	Error
*****************************************************/
STCHIP_Error_t  ChipSetRegisters(STCHIP_Handle_t hChip,int FirstReg, int NbRegs)
{
	unsigned char data[22],nbdata = 0;
//	char Tstat,Dstat;
	int i;
	
	#ifndef NO_GUI
		Tstat=TraceGetState();
		Dstat=ApplGetState();
	#endif

	if(hChip)
	{
		if(!hChip->Error)
		{
			if(NbRegs < 20)
			{
				if((FirstReg >= 0) && ((FirstReg + NbRegs - 1) < hChip->NbRegs))
				{
					switch(hChip->ChipMode)
					{
						case STCHIP_MODE_SUBADR_16:
							data[nbdata++]=MSB(hChip->pRegMap[FirstReg].Addr);	/* 16 bits sub addresses */
						case STCHIP_MODE_SUBADR_8:
						case STCHIP_MODE_NOSUBADR_RD:
							data[nbdata++]=LSB(hChip->pRegMap[FirstReg].Addr);	/* 8 bits sub addresses */
						case STCHIP_MODE_NOSUBADR:
							for(i=0;i<NbRegs;i++)
								data[nbdata++]=hChip->pRegMap[FirstReg+i].Value;	/* fill data buffer */
						break;
					}	
					
					#ifndef NO_GUI
						if(Tstat&&Dstat)
							TraceWriteFile(TRACE_OUT,hChip->I2cAddr,hChip->pRegMap[FirstReg].Addr,&data[1],NbRegs);
					#endif
						
					#ifndef NO_I2C
							#ifndef NO_GUI
								if(!(Tstat&&TraceGetMode()&&Dstat))
								{
									if(WaitForSingleObject(ChipMutex,2000) == WAIT_OBJECT_0)	/* Wait for other I2C access termination */ 
									{
							#endif
										if(hChip->Repeater && hChip->RepeaterHost && hChip->RepeaterHost->RepeaterFn)
											hChip->RepeaterHost->RepeaterFn(hChip->RepeaterHost,TRUE);	/* Set repeater ON */ 
								
										if(I2cReadWrite(I2C_WRITE,hChip->I2cAddr,data,nbdata) != I2C_OK)	/* write data buffer */
											hChip->Error = CHIPERR_I2C_NO_ACK;
								
										if(hChip->Repeater && hChip->RepeaterHost && hChip->RepeaterHost->RepeaterFn)
											hChip->RepeaterHost->RepeaterFn(hChip->RepeaterHost,FALSE);	/* Set repeater OFF */ 
							#ifndef NO_GUI
										ReleaseMutex(ChipMutex);								/*	Allow other I2C access */  
									}	
								}
							#endif
					#endif  
				}
				else
					hChip->Error = CHIPERR_INVALID_REG_ID;
			}
			else
				hChip->Error = CHIPERR_I2C_BURST;
		}
	}
	else
		return CHIPERR_INVALID_HANDLE;
	
	return hChip->Error;
}

/*****************************************************
**FUNCTION	::	ChipGetRegisters
**ACTION	::	Get values of consecutive's registers (values are writen in RegMap)
**PARAMS IN	::	hChip		==> Handle to the chip
**				FirstReg	==> Id of the first register
**				NbRegs		==> Number of register to read		
**PARAMS OUT::	NONE
**RETURN	::	Error
*****************************************************/
STCHIP_Error_t ChipGetRegisters(STCHIP_Handle_t hChip, int FirstReg, int NbRegs)
{
	unsigned char data[22],nbdata =0;
//	char Tstat,Tmode,Dstat;
	int i;
	
	#ifndef NO_GUI
		Tstat=TraceGetState();
		Tmode=TraceGetMode();
		Dstat=ApplGetState();
	#endif

	if(hChip)
	{
		if(!hChip->Error)
		{
			if((hChip->ChipMode == STCHIP_MODE_NOSUBADR) || (hChip->ChipMode == STCHIP_MODE_NOSUBADR_RD))
			{
				/* no subadress mode only */
				FirstReg = hChip->RdStart;
				NbRegs = hChip->RdSize;
			}
			
			if(NbRegs < 20)
			{
				if((FirstReg >= 0) && ((FirstReg + NbRegs - 1) < hChip->NbRegs))
				{
				#ifndef NO_I2C
					#ifndef NO_GUI
						if(!(Tstat&&Tmode&&Dstat))
						{
							if(WaitForSingleObject(ChipMutex,2000) == WAIT_OBJECT_0)	/* Wait for other I2C access termination */ 
							{
					#endif
								switch(hChip->ChipMode)
								{
									case STCHIP_MODE_SUBADR_16:	
										data[nbdata++]=MSB(hChip->pRegMap[FirstReg].Addr);	/* for 16 bits sub addresses */
									case STCHIP_MODE_SUBADR_8:
										data[nbdata++]=LSB(hChip->pRegMap[FirstReg].Addr);  /* for 8 bits sub addresses	*/
								
										if(hChip->Repeater && hChip->RepeaterHost && hChip->RepeaterHost->RepeaterFn)
											hChip->RepeaterHost->RepeaterFn(hChip->RepeaterHost,TRUE);	/* Set repeater ON */ 
											
										if(I2cReadWrite(I2C_WRITE,hChip->I2cAddr,data,nbdata) != I2C_OK)	/* Write sub address */
											hChip->Error = CHIPERR_I2C_NO_ACK;	
									
										if(hChip->Repeater && hChip->RepeaterHost && hChip->RepeaterHost->RepeaterFn)
											hChip->RepeaterHost->RepeaterFn(hChip->RepeaterHost,FALSE);	/* Set repeater OFF */ 
										
									case STCHIP_MODE_NOSUBADR:
									case STCHIP_MODE_NOSUBADR_RD:
										if(hChip->Repeater && hChip->RepeaterHost && hChip->RepeaterHost->RepeaterFn)
											hChip->RepeaterHost->RepeaterFn(hChip->RepeaterHost,TRUE);	/* Set repeater ON */ 
										
										if(I2cReadWrite(I2C_READ,hChip->I2cAddr,data,NbRegs) != I2C_OK)	/* Read data buffer */ 
											hChip->Error = CHIPERR_I2C_NO_ACK;	
								
										if(hChip->Repeater && hChip->RepeaterHost && hChip->RepeaterHost->RepeaterFn)
											hChip->RepeaterHost->RepeaterFn(hChip->RepeaterHost,FALSE);	/* Set repeater OFF */ 
									break;
								}
					#ifndef NO_GUI
								ReleaseMutex(ChipMutex);								/*	Allow other I2C access */          	
							}
						}
					#endif

					#ifndef NO_GUI
						if((Tstat == TRACE_ON) && (Dstat == APPL_STANDBY))
						{		
							/*	Trace ON and Driver RUNNING	*/
							if(Tmode == TRACE_PLAY)
							/*	Playback mode	*/
								TraceReadFile(TRACE_IN,hChip->I2cAddr,hChip->pRegMap[FirstReg].Addr,data,NbRegs);
							else 
								/*	Record mode	*/
								TraceWriteFile(TRACE_IN,hChip->I2cAddr,hChip->pRegMap[FirstReg].Addr,data,NbRegs);  
						}
					#endif
					
					/*	Update RegMap structure	*/
					for(i=0;i<NbRegs;i++)
						if(!hChip->Error)
							hChip->pRegMap[FirstReg+i].Value = data[i];
						else
							hChip->pRegMap[FirstReg+i].Value = 0xFF; 
				#endif			
				}
				else
					hChip->Error = CHIPERR_INVALID_REG_ID;  
			}
			else 
				hChip->Error = CHIPERR_I2C_BURST;
		}
	}
	else
		return CHIPERR_INVALID_HANDLE;
	
	return hChip->Error;
}


/*****************************************************
**FUNCTION	::	ChipGetRegDefault
**ACTION	::	Return the default value of the register
**PARAMS IN	::	hChip	==>	Handle of the chip
**				RegId	==>	Id of the register
**PARAMS OUT::	NONE
**RETURN	::	default value
*****************************************************/
char ChipGetRegDefault(STCHIP_Handle_t hChip,U16 RegId)
{
	char defval = 0;
	
	if(hChip != NULL)
	{
		if(RegId < hChip->NbRegs)
			defval = hChip->pRegMap[RegId].Default;
		else
			hChip->Error = CHIPERR_INVALID_REG_ID;		
	}
	
	return defval;
}


/*****************************************************
**FUNCTION	::	ChipSetRegDefault
**ACTION	::	Set the default value of the register
**PARAMS IN	::	hChip	==>	Handle of the chip
**				RegId	==>	Id of the register
**				Default	==> Default value
**PARAMS OUT::	NONE
**RETURN	::	Error
*****************************************************/
STCHIP_Error_t ChipSetRegDefault(STCHIP_Handle_t hChip,U16 RegId,U8 Default)
{
	if(hChip != NULL)
	{
		if(RegId < hChip->NbRegs)
			hChip->pRegMap[RegId].Default = Default;
		else
			hChip->Error = CHIPERR_INVALID_REG_ID;		
	}
	else
		return CHIPERR_INVALID_HANDLE;
		
	return hChip->Error;
}

/*****************************************************
**FUNCTION	::	ChipUpdateDefaultValues
**ACTION	::	Get default values in all the registers
**PARAMS IN	::	hChip	==> Handle of the chip	
**PARAMS OUT::	NONE
**RETURN	::	Error
*****************************************************/
STCHIP_Error_t ChipUpdateDefaultValues(STCHIP_Handle_t hChip)
{
	int reg = 0;

	if(hChip != NULL) 
	{
		while((!hChip->Error) && (reg < hChip->NbRegs))
		{
			hChip->pRegMap[reg].Default = ChipGetOneRegister(hChip,reg);     
			reg++;
		}
	}
	else
		return CHIPERR_INVALID_HANDLE;
		
	return hChip->Error;
}

/*****************************************************
**FUNCTION	::	ChipApplyDefaultValues
**ACTION	::	Write default values in all the registers
**PARAMS IN	::	hChip	==> Handle of the chip	
**PARAMS OUT::	NONE
**RETURN	::	Error
*****************************************************/
STCHIP_Error_t ChipApplyDefaultValues(STCHIP_Handle_t hChip)
{
	int reg = 0;

	if(hChip != NULL) 
	{
		if(hChip->ChipMode != STCHIP_MODE_NOSUBADR)   
		{
			while((!hChip->Error) && (reg < hChip->NbRegs))
			{
				ChipSetOneRegister(hChip,reg,hChip->pRegMap[reg].Default);     
				reg++;
			}
		}
		else

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久亚洲精品石原莉奈| 亚洲国产精品尤物yw在线观看| 一区二区三区在线影院| 激情亚洲综合在线| 欧美四级电影在线观看| 国产日产欧美精品一区二区三区| 亚洲国产你懂的| 99久久久精品| 久久综合999| 三级不卡在线观看| 色婷婷综合久久久久中文| 久久久久久久电影| 美脚の诱脚舐め脚责91| 欧美亚洲动漫另类| 亚洲蜜臀av乱码久久精品| 丁香激情综合国产| 日本一区二区免费在线| 久久er99精品| 欧美mv日韩mv亚洲| 蜜桃精品视频在线| 在线观看亚洲成人| 中文字幕视频一区| 成人免费高清在线| 国产精品久久久久久久浪潮网站 | 日韩一区和二区| 亚洲最大的成人av| 在线精品亚洲一区二区不卡| 亚洲色图制服诱惑| 日本精品免费观看高清观看| 综合激情网...| 97久久久精品综合88久久| 国产精品灌醉下药二区| www.激情成人| 亚洲女人的天堂| 日本韩国一区二区三区视频| 亚洲精品欧美专区| 欧美特级限制片免费在线观看| 亚洲国产日韩一级| 在线播放亚洲一区| 蜜臀av性久久久久蜜臀aⅴ| 91精品欧美综合在线观看最新| 视频一区在线播放| 欧美电视剧在线观看完整版| 国产一区二区三区久久悠悠色av| 2020国产精品自拍| 国产福利一区二区三区| 国产人妖乱国产精品人妖| 99久久99久久久精品齐齐| 一区二区三区不卡视频| 日本道在线观看一区二区| 亚洲高清免费视频| 欧美一级艳片视频免费观看| 国内久久精品视频| 国产精品麻豆欧美日韩ww| 色婷婷久久久久swag精品 | 国产精品久久久久久久久图文区 | 久久综合九色综合欧美亚洲| 国产精品91一区二区| 亚洲欧美自拍偷拍| 欧美色图第一页| 麻豆精品国产传媒mv男同| 久久综合色天天久久综合图片| 高清国产一区二区三区| 亚洲视频在线观看三级| 欧美精品久久一区| 国产精品一级在线| 亚洲精品成a人| 日韩欧美高清一区| 国产成人免费在线视频| 亚洲一区av在线| 久久先锋资源网| 欧美午夜精品久久久久久孕妇 | 精品国产一区二区三区四区四| 丁香五精品蜜臀久久久久99网站| 亚洲一区二区在线观看视频 | 成人在线视频首页| 亚洲国产精品一区二区久久恐怖片| 欧美电影免费观看高清完整版| 色哟哟精品一区| 麻豆精品在线播放| 亚洲精品第1页| 国产精品私房写真福利视频| 欧美一区二区三区在线视频 | 国产九色精品成人porny| 亚洲人成精品久久久久久| 日韩精品影音先锋| 欧洲一区二区三区在线| 成人不卡免费av| 精品一区二区在线视频| 亚洲成人福利片| 亚洲精品免费一二三区| 欧美国产视频在线| 欧美不卡123| 91精品久久久久久蜜臀| 欧美性猛交xxxxxx富婆| 99久久综合色| 国产成人超碰人人澡人人澡| 亚洲成人1区2区| 一区二区久久久| 亚洲嫩草精品久久| 亚洲视频中文字幕| 国产精品视频第一区| 亚洲精品在线免费观看视频| 5566中文字幕一区二区电影| 欧美性色综合网| 在线免费亚洲电影| 色偷偷久久人人79超碰人人澡| 国产宾馆实践打屁股91| 国产激情一区二区三区桃花岛亚洲| 日本va欧美va瓶| 日本最新不卡在线| 婷婷开心激情综合| 午夜精品福利在线| 午夜精品免费在线| 午夜精品久久久久久久久| 午夜欧美在线一二页| 亚洲444eee在线观看| 亚洲国产欧美在线| 日韩精品视频网站| 日av在线不卡| 国产一区二区不卡老阿姨| 久久99久久久欧美国产| 韩国女主播成人在线| 国产成人午夜电影网| 91天堂素人约啪| 欧美性大战久久| 91精品久久久久久久91蜜桃| 日韩三级电影网址| 久久一区二区视频| 国产精品女主播av| 一区二区三区四区乱视频| 亚洲一区二区高清| 久久国产成人午夜av影院| 国产成人亚洲综合a∨婷婷| 成人丝袜视频网| 色综合婷婷久久| 制服视频三区第一页精品| 91精品国产福利在线观看| 欧美成人a视频| 国产精品毛片大码女人| 亚洲成人高清在线| 国产在线麻豆精品观看| 9l国产精品久久久久麻豆| 欧洲一区二区三区免费视频| 日韩欧美一区二区三区在线| 精品国产1区二区| 亚洲乱码日产精品bd| 欧美aaa在线| 91麻豆国产在线观看| 在线综合视频播放| 中文字幕免费在线观看视频一区| 亚洲综合无码一区二区| 久久国产剧场电影| 色综合网色综合| 2023国产一二三区日本精品2022| 国产精品成人一区二区艾草 | 欧美videos中文字幕| 日韩理论电影院| 国产中文一区二区三区| 91成人国产精品| 久久精品一区二区三区av| 亚洲成人av一区二区| 91香蕉视频污在线| 欧美巨大另类极品videosbest | 国产精品无码永久免费888| 亚洲国产精品影院| 不卡免费追剧大全电视剧网站| 91精品国产综合久久久久久久久久| 欧美国产精品中文字幕| 视频一区视频二区中文字幕| 97久久人人超碰| 国产蜜臀97一区二区三区| 免费观看在线综合色| 在线观看av一区| 国产精品污网站| 国产成人在线看| 26uuu久久综合| 蜜臀av一区二区三区| 欧美色网一区二区| 18欧美乱大交hd1984| 国产高清久久久| 久久婷婷久久一区二区三区| 天天综合网天天综合色| 91国在线观看| 亚洲美女视频一区| 97久久精品人人澡人人爽| 久久午夜电影网| 狠狠久久亚洲欧美| 欧美成人性战久久| 日本欧美一区二区| 91精品国产欧美一区二区成人 | 日韩欧美国产一二三区| 天使萌一区二区三区免费观看| av不卡一区二区三区| 国产精品美女久久久久久久久久久| 国产又黄又大久久| 26uuu精品一区二区| 精品亚洲国产成人av制服丝袜| 日韩一区二区三区在线观看| 日本亚洲视频在线|