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

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

?? qt60xx0.c

?? qprox公司的芯片qt60xx0的驅動程序
?? C
字號:
/*============================================================================
    Project     QT60xx0 Example Code
    File        qt60xx0.c
    Function    Driver code for QT60xx0 - 24 Key QMatrix Touch IC
    Requires    Silicon Labs C8051F310 target
    Originated	D Spokes
    
    (c) Quantum Research Group
============================================================================*/
#include "C8051F310.H"
#include "common.h"
#include "qt60xx0.h"
#include "i2c.h"

/* DEFINES */
#define LEN_QT_SETUP		123			/* setup table lenghth */
#define NUM_QT_KEYS			24
#define NUM_QT_KEY_BYTES	3

#define QT_REV_OFFSET		0
#define QT_KEYS_OFFSET		1
#define QT_CALIBRATE_OFFSET	125
#define QT_UNLOCK_OFFSET	130
#define QT_SETUP_OFFSET		131

#define QT_COMMAND_CODE		0x55

/* TYPES */
struct param_def {
	UINT8 Offset;
	UINT8 Position;
	UINT8 Mask;
	};

/* LOCAL DATA */
xdata UINT8 QtSetupBlock[LEN_QT_SETUP]; /* setup image */
xdata UINT8 QtAddress = 117;	/* assumes default device address */
xdata UINT8 QtKeys[NUM_QT_KEY_BYTES];


/* CONSTANTS */
code struct param_def ParamDef[] = {
	/* NTHR	*/		{ 0,	0,	0x0f	},
	/* NDRIFT */	{ 0,	4,	0x0f	},
	/* PDRIFT */	{ 24,	0,	0x0f	},
	/* NDIL	*/		{ 48,	0,	0x0f	},
	/* FDIL	*/		{ 48,	4,	0x0f	},
	/* NRD	*/		{ 72,	0,	0xff	},
	/* WAKE	*/		{ 96,	3,	0x01	},
	/* BL	*/		{ 96,	4,	0x03	},
	/* AKS	*/		{ 96,	6,	0x01	},
	/* SSYNC */		{ 96,	7,	0x01	},
	/* SLEEP */		{ 120,	0,	0x07	},
	/* MSYNC */		{ 120,	6,	0x01	},
	/* AWAKE */		{ 121,	0,	0xff	},
	/* DHT */		{ 122,	0,	0xff	}
	}; /* used to insert / extract fields in setup image */

code UINT8 QtCommand = QT_COMMAND_CODE; /* used to pass command byte to I2c driver */


/*---------------- Function Header -------------------------------------------

	FUNCTION	SetQtAddress
	PURPOSE		Specifies the device address on the I2c bus
	
	INPUTS:		Address: specifies device address
	OUTPUTS:	None
	----------------------------------------------------------------------------*/
void SetQtAddress ( UINT8 Address )
{
	QtAddress = Address;
}

/*---------------- Function Header -------------------------------------------

	FUNCTION	ReadQtKeys
	PURPOSE		Reads QT60xx0 key values
	
	INPUTS:		None
	OUTPUTS:	Returns true if function executed normally
	
----------------------------------------------------------------------------*/
UINT8 ReadQtKeys ( void )
{
	return (I2cRead( QtAddress, QT_KEYS_OFFSET, QtKeys, NUM_QT_KEY_BYTES) == 0) ? 1 : 0;
}

/*---------------- Function Header -------------------------------------------

	FUNCTION	GetQtKeys
	PURPOSE		Returns the requested key states
	
	INPUTS:		Index: specifies key byte in range 0..2
				
	OUTPUTS:	Returns QT key-byte
	----------------------------------------------------------------------------*/
UINT8 GetQtKeys ( UINT8 Index )
{
	return ( QtKeys[Index] );
}

/*---------------- Function Header -------------------------------------------

	FUNCTION	CalibrateQt
	PURPOSE		Sends Calibrate instruction to QT60xx0
	
	INPUTS:		None
	OUTPUTS:	Returns true if function executed normally
	
----------------------------------------------------------------------------*/
UINT8 CalibrateQt ( void )
{
	/* Send calibrate command to QT via I2c */
	return (I2cWrite( QtAddress, QT_CALIBRATE_OFFSET, &QtCommand, 1) == 0) ? 1 : 0;
}

/*---------------- Function Header -------------------------------------------

	FUNCTION	ReadQtSetup
	PURPOSE		Reads QT701 setup info into driver database
	
	INPUTS:		None
	OUTPUTS:	Returns true if function executed normally
	
----------------------------------------------------------------------------*/
UINT8 ReadQtSetup ( void )
{
	return (I2cRead( QtAddress, QT_SETUP_OFFSET, QtSetupBlock, LEN_QT_SETUP) == 0) ? 1 : 0;
}

/*---------------- Function Header -------------------------------------------

	FUNCTION	GetQtSetup
	PURPOSE		Returns the requested setup value from the driver's Setup image
	
	INPUTS:		Key: defines QT key number in range 0..23
				Param: defines parameter to return
	OUTPUTS:	Returns setup value
	----------------------------------------------------------------------------*/
UINT8 GetQtSetup ( UINT8 Key, UINT8 Param )
{
	UINT8 Index;
	
	/* calculate index into Setup image aarray */
	Index = ParamDef[Param].Offset;
	if ( Param <= QT_PARAM_SSYNC )
		Index += Key;

	/* access required value */
	return (QtSetupBlock[Index] >> ParamDef[Param].Position) & ParamDef[Param].Mask;
}

/*---------------- Function Header -------------------------------------------

	FUNCTION	SetQtSetup
	PURPOSE		Writes the specified setup value to the driver's Setup image
				Optionally writes the entire setup to QT60xx0
	INPUTS:		Key: defines QT key number in range 0..23
				Param: defines parameter to write
				Value: new value for specified parameter
				WriteFlag: control flag for Write QT60xx0 setups block
	OUTPUTS:	Returns true if function executed normally

-----------------------------------------------------------------------------*/
UINT8 SetQtSetup ( UINT8 Key, UINT8 Param, UINT8 Value, UINT8 WriteFlag )
{
	UINT8 RetVal = true; /* function return value */
	UINT8 Temp; 
	UINT8 Index; 

	/* calculate index into Setup image aarray */
	Index = ParamDef[Param].Offset;
	if ( Param <= QT_PARAM_SSYNC )
		Index += Key;

	/* only process data if a valid index has been specified */
	if ( (Index < LEN_QT_SETUP) && (Key < NUM_QT_KEYS) )
	{
		/* overwrite relevant bit-field within Setup image using ParamDef array */
		Temp = (Value & ParamDef[Param].Mask) << ParamDef[Param].Position;
		QtSetupBlock[Index] &= ~(ParamDef[Param].Mask << ParamDef[Param].Position);
		QtSetupBlock[Index] += Temp;

		if ( WriteFlag )	/* if required, write complete Setup image to QT device */
		{
			/* first, unlock the setup data area for writing */
			if ( I2cWrite (QtAddress, QT_UNLOCK_OFFSET, &QtCommand, 1) )
				RetVal = false; /* fail if I2C returned non-zero status */
			else
			{	/* if the unlock was successful, write the setup image */
				if ( I2cWrite (QtAddress, QT_SETUP_OFFSET, QtSetupBlock, LEN_QT_SETUP) )
					RetVal = false; /* fail if I2C returned non-zero status */
			}
		}
	}
	else
		RetVal = false; /* fail if illegal parameter was specified */
		
	return RetVal; /* completed */
}

/*---------------- Function Header -------------------------------------------

	FUNCTION	RestoreDefaultQtSetup
	PURPOSE		Restores driver's Setup image to factory defaults
				and writes the default setup to QT60xx0
	INPUTS:		None
	OUTPUTS:	Returns true if function executed normally

----------------------------------------------------------------------------*/
UINT8 RestoreDefaultQtSetup ( void )
{
	UINT8 i; 

	/* write default values to key parameters for all keys */
	for (i = 0; i < NUM_QT_KEYS; i++)
	{
		QtSetupBlock[i]		 = QT_DEF_NTHR + (QT_DEF_NDRIFT << 4);
		QtSetupBlock[i + 24] = QT_DEF_PDRIFT;
		QtSetupBlock[i + 48] = QT_DEF_NDIL + (QT_DEF_FDIL << 4);
		QtSetupBlock[i + 72] = QT_DEF_NRD;
		QtSetupBlock[i + 96] = QT_DEF_BL << 4;
	}

	/* write global parameters */
	QtSetupBlock[120]		 = QT_DEF_SLEEP;
	QtSetupBlock[121]		 = QT_DEF_AWAKE;

	/* set DHT default by calling SetQtSetup() also writes device */
	return ( SetQtSetup(0, QT_PARAM_DHT, QT_DEF_DHT, true) );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av中文字幕不卡| 9色porny自拍视频一区二区| 亚洲视频免费在线观看| 久久精品人人做| 国产日产欧美一区| 国产精品毛片高清在线完整版 | 91小视频免费观看| 不卡区在线中文字幕| 国内精品久久久久影院薰衣草| 麻豆成人av在线| 国内外成人在线| 国产成人精品免费| 9i看片成人免费高清| 欧美伊人久久久久久久久影院 | 久久先锋影音av鲁色资源| 91精品国产91综合久久蜜臀| 亚洲精品在线一区二区| 国产午夜精品理论片a级大结局| 国产亚洲综合在线| 亚洲激情校园春色| 日本成人在线一区| 国产一区欧美一区| 播五月开心婷婷综合| 欧美日韩在线免费视频| 911精品产国品一二三产区 | 成人听书哪个软件好| 99久久99久久综合| 制服.丝袜.亚洲.另类.中文| 国产亚洲一二三区| 亚洲电影你懂得| 国产精品白丝jk白祙喷水网站| av电影一区二区| 欧美一区二区三区电影| 国产精品久久二区二区| 亚洲va欧美va国产va天堂影院| 狠狠色丁香婷婷综合| 在线免费观看日韩欧美| 精品国产91久久久久久久妲己| 中文字幕中文在线不卡住| 日韩av不卡一区二区| 不卡视频免费播放| 欧美成va人片在线观看| 亚洲精品日韩一| 国产精品亚洲午夜一区二区三区 | 亚洲成人在线观看视频| 国产成人免费网站| 6080国产精品一区二区| 成人免费在线视频| 久久国产尿小便嘘嘘尿| 欧美日韩精品一区二区三区蜜桃| 国产色一区二区| 久久爱www久久做| 欧美优质美女网站| 国产精品久久国产精麻豆99网站| 久久国产人妖系列| 欧美一区二区三区四区视频| 一区二区三区在线不卡| youjizz久久| 国产女主播一区| 国产成人一区二区精品非洲| 欧美日韩www| 亚洲一区二区三区四区的| 成人妖精视频yjsp地址| 国产色产综合产在线视频| 美女视频网站黄色亚洲| 91精品国产一区二区三区蜜臀| 亚洲色图丝袜美腿| 99精品国产99久久久久久白柏| 日本一区二区三区免费乱视频| 国产乱子伦一区二区三区国色天香| 制服丝袜av成人在线看| 首页综合国产亚洲丝袜| 7777精品伊人久久久大香线蕉| 亚洲国产精品久久人人爱蜜臀 | 另类的小说在线视频另类成人小视频在线 | 亚洲图片欧美视频| 色视频一区二区| 一区二区国产盗摄色噜噜| 日本乱人伦aⅴ精品| 亚洲一级二级在线| 91精品久久久久久久91蜜桃| 日韩avvvv在线播放| 日韩女优av电影| 激情五月婷婷综合网| 久久婷婷色综合| www.性欧美| 亚洲国产日韩一区二区| 69p69国产精品| 国模娜娜一区二区三区| 国产色爱av资源综合区| 色一情一伦一子一伦一区| 亚洲国产综合色| 欧美videos大乳护士334| 国产精品一区二区三区网站| 国产亚洲自拍一区| 在线精品视频小说1| 男女视频一区二区| 欧美激情中文不卡| 色先锋aa成人| 看片网站欧美日韩| 中文字幕一区二区三区四区| 欧美丝袜自拍制服另类| 久久97超碰国产精品超碰| 国产人妖乱国产精品人妖| 在线观看一区日韩| 激情都市一区二区| 亚洲一区自拍偷拍| 精品国产乱码久久久久久闺蜜| av电影天堂一区二区在线| 亚洲va中文字幕| 国产精品午夜在线观看| 欧美日韩中文字幕精品| 国产在线播放一区二区三区 | 欧洲一区在线观看| 极品销魂美女一区二区三区| 中文字幕中文字幕在线一区 | 久久99精品国产| 夜夜爽夜夜爽精品视频| 久久影院视频免费| 欧美性受xxxx| 99在线精品观看| 国内久久精品视频| 亚洲一区二区三区视频在线| 国产亚洲一区二区三区四区| 欧美日韩国产a| 99精品国产99久久久久久白柏| 麻豆精品国产91久久久久久| 夜夜操天天操亚洲| 中文字幕中文字幕在线一区 | 国产一区二区在线看| 一区二区三区免费看视频| 久久精品日产第一区二区三区高清版 | 99re热这里只有精品视频| 久久 天天综合| 日本欧美一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在 | 在线观看视频91| 不卡大黄网站免费看| 国产精品538一区二区在线| 免费三级欧美电影| 麻豆精品在线看| 久久99蜜桃精品| 捆绑调教美女网站视频一区| 奇米色777欧美一区二区| 亚洲国产你懂的| 亚洲sss视频在线视频| 一区二区三区精品| 亚洲乱码国产乱码精品精98午夜| 欧美经典三级视频一区二区三区| 久久久亚洲国产美女国产盗摄| 日韩一级大片在线| 欧美成人一区二区三区片免费| 日韩一区二区三| 日韩美女主播在线视频一区二区三区| 欧美日本乱大交xxxxx| 欧美日韩高清不卡| 欧美美女直播网站| 这里只有精品99re| 欧美大片免费久久精品三p| 欧美成人精精品一区二区频| 精品盗摄一区二区三区| 精品国产凹凸成av人网站| 久久久欧美精品sm网站| 国产午夜精品一区二区 | 69av一区二区三区| 精品国产在天天线2019| 久久久国产午夜精品| 国产精品国产三级国产普通话99| 亚洲欧美另类图片小说| 夜夜嗨av一区二区三区网页| 日韩有码一区二区三区| 久久精品国产一区二区| 丁香婷婷深情五月亚洲| 色噜噜夜夜夜综合网| 精品视频全国免费看| 欧美tickling网站挠脚心| 国产精品国产自产拍高清av| 亚洲另类在线制服丝袜| 免费人成在线不卡| 国产麻豆精品视频| 日本高清视频一区二区| 91精品久久久久久久久99蜜臂| 久久久综合视频| 一区二区三区久久| 狠狠色丁香婷综合久久| 91久久久免费一区二区| 日韩一级免费观看| 亚洲欧美日韩综合aⅴ视频| 免费在线成人网| 99re热视频这里只精品 | 99国产精品一区| 日韩欧美国产综合| 一区二区三区欧美久久| 国产一区二区中文字幕| 欧美午夜一区二区| 国产精品久久二区二区| 久久99精品国产麻豆不卡| 欧美三区在线视频| 国产精品久久午夜夜伦鲁鲁| 强制捆绑调教一区二区|