RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux下IIC子系統(tǒng)和觸摸屏驅(qū)動

嵌入式技術(shù) ? 來源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2022-09-25 08:58 ? 次閱讀

Linux下IIC子系統(tǒng)和觸摸屏驅(qū)動


1.IIC簡介

I2C( Inter-Integrated Circuit)總線是由 PHILIPS 公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。是微電子通信控制領(lǐng)域廣泛采用的一種總線標(biāo)準(zhǔn)。具有接口線少,控制方式簡單,器件封裝形式小,通信速率較高等優(yōu)點(diǎn)。

  • I2C特性

(1)只要求兩條總線線路一條串行數(shù)據(jù)線SDA,一條串行時鐘線SCL;
(2)每個連接到總線的器件都可以通過唯一的地址和一直存在的簡單的主機(jī)/從機(jī)關(guān)系軟件設(shè)定地址,主機(jī)可以作為主機(jī)發(fā)送器或主機(jī)接收器;
(3)它是一個真正的多主機(jī)總線,如果兩個或更多主機(jī)同時初始化數(shù)據(jù)傳輸可以通過沖突檢測和仲裁防止數(shù)據(jù)被破壞;
(4)串行的 8 位雙向數(shù)據(jù)傳輸位速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s,快速模式下可達(dá)400kbit/s,高速模式下可達(dá) 3.4Mbit/s;
(5)片上的濾波器可以濾去總線數(shù)據(jù)線上的毛刺波保證數(shù)據(jù)完整;
(6)連接到相同總線的IC數(shù)量只受到總線的最大電容400pF;
IIC是屬串行通訊總線,同步傳輸、半雙工。

?I2C 總線上的每一個設(shè)備都可以作為主設(shè)備或者從設(shè)備,而且每一個設(shè)備都會對應(yīng)一個唯一的地址(可以從I2C 器件的數(shù)據(jù)手冊得知),主從設(shè)備之間就通過這個地址來確定與哪個器件進(jìn)行通信,在通常的應(yīng)用中,我們把 CPU 帶 I2C 總線接口的模塊作為主設(shè)備,把掛接在總線上的其他設(shè)備都作為從設(shè)備。

IIC時序介紹參考:STM32CubeMx之硬件IIC驅(qū)動EEPROM

2.Linux下IIC驅(qū)動

Linux下編寫IIC驅(qū)動有兩種方式:
1. 將IIC驅(qū)動當(dāng)做普通字符類設(shè)備來實(shí)現(xiàn)驅(qū)動注冊;
2. 利用Linux下IIC驅(qū)動框架(IIC子系統(tǒng))完成注冊;
第一種方式操作簡單,只需要會基本的字符設(shè)備驅(qū)動框架即可完成對IIC驅(qū)動注冊;但可移植性較差;第二種方式則操作比較復(fù)雜,需要掌握IIC子系統(tǒng)框架注冊流程,但可移植性強(qiáng)。

2.1 IIC子系統(tǒng)驅(qū)動模型

pYYBAGMtpqCAGyGtAAF4DwVPbG4674.png#pic_center

??從上圖可以看出,IIC框架注意分為三層:適配器層、設(shè)備層和驅(qū)動層。三層之間關(guān)系可以簡化如下關(guān)系:

poYBAGMtpqCAErncAADiSY30FIA272.png#pic_center

?適配器層主要實(shí)現(xiàn)IIC硬件接口配置、產(chǎn)生IIC實(shí)現(xiàn),該代碼一般由芯片廠商提供。
設(shè)備層主要是通過調(diào)用獲取適配器的函數(shù)獲取IIC硬件資源(得到IIC時序的相關(guān)接口函數(shù)),根據(jù)IIC模塊手冊和硬件原理圖確定模塊的設(shè)備地址,完成IIC設(shè)備層注冊。
驅(qū)動層通過設(shè)備名字完成和設(shè)備層匹配,獲取設(shè)備資源,注冊設(shè)備驅(qū)動,實(shí)現(xiàn)應(yīng)用層相關(guān)接口函數(shù)。

2.2 IIC子系統(tǒng)相關(guān)接口函數(shù)

2.2.1 設(shè)備層接口函數(shù)

IIC設(shè)備層注冊步驟:

  1. 調(diào)用獲取適配器函數(shù)i2c_get_adapter根據(jù)IIC總線編號獲取IIC適配器資源;
  2. 填充struct i2c_board_info 結(jié)構(gòu)體,調(diào)用i2c_new_device注冊IIC設(shè)備;
  3. 注銷設(shè)備時調(diào)用IIC設(shè)備注銷函數(shù)i2c_unregister_device;
  • 獲取適配器資源i2c_get_adapter
struct i2c_adapter *i2c_get_adapter(int nr)
函數(shù)功能: 獲取適配器資源
形參: nr --IIC總線編號
返回值: 成功返回適配器資源結(jié)構(gòu)體指針
  • struct i2c_board_info結(jié)構(gòu)體
    ??在struct i2c_board_info結(jié)構(gòu)體中,需要關(guān)系的參數(shù)是 設(shè)備名字type 和 設(shè)備地址addr,若有中斷資源,則可填入 中斷號irqr。
struct i2c_board_info {
	char		type[I2C_NAME_SIZE];//名字,驅(qū)動層和設(shè)備層匹配參數(shù)
	unsigned short	flags;//設(shè)備地址位數(shù),一般不填或填0表示7位地址
	unsigned short	addr;//IIC設(shè)備地址
	void		*platform_data;//私有數(shù)據(jù)
	struct dev_archdata	*archdata;
	struct device_node *of_node;
	int		irq;//中斷號
};
  • 注冊設(shè)備i2c_new_device
struct i2c_client *i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
函數(shù)功能: 注冊IIC設(shè)備層
形參: adap–IIC適配器資源
??? info --IIC設(shè)備板級資源信息
返回值: 注冊成功返回IIC信息結(jié)構(gòu)體指針
  • 注銷設(shè)備 i2c_unregister_device
void i2c_unregister_device(struct i2c_client *client)
函數(shù)功能: 注銷IIC設(shè)備層
形參: client–IIC信息結(jié)構(gòu)體指針,IIC注冊函數(shù)返回值;

2.2.2 驅(qū)動層接口函數(shù)

IIC驅(qū)動層注冊步驟:

  1. 填充驅(qū)動層結(jié)構(gòu)體struct i2c_driver ,調(diào)用驅(qū)動注冊函數(shù)i2c_add_driver ;
  2. 注銷驅(qū)動時調(diào)用注銷函數(shù)i2c_del_driver ;
  3. 驅(qū)動層結(jié)構(gòu)體struct i2c_driver
  4. 在struct i2c_driver結(jié)構(gòu)體中我們必須實(shí)現(xiàn)的有資源匹配函數(shù)probe、資源釋放函數(shù)remove、結(jié)構(gòu)體struct device_driver中的設(shè)備名name、資源匹配結(jié)構(gòu)體id_table。
truct i2c_driver {
int (*probe)(struct i2c_client *, const struct i2c_device_id *);//資源匹配函數(shù)
	int (*remove)(struct i2c_client *);//資源釋放函數(shù)
	struct device_driver driver;//驅(qū)動相關(guān)結(jié)構(gòu)體信息
	const struct i2c_device_id *id_table;//資源匹配結(jié)構(gòu)體
};
  • 驅(qū)動注冊和注銷函數(shù)
//驅(qū)動注冊函數(shù)
#define i2c_add_driver(driver)
//驅(qū)動注銷函數(shù)
void i2c_del_driver(struct i2c_driver *);

2.2.3 IIC讀寫字符串函數(shù)

//讀取多個數(shù)據(jù)函數(shù),成功返回讀取到的字節(jié)數(shù),注意,改函數(shù)最大多32字節(jié)
s32 i2c_smbus_read_i2c_block_data(const struct i2c_client *client,u8 command, u8 length, u8 *values);
//寫入多個數(shù)據(jù)函數(shù),成功返回0,注意,改函數(shù)最大多32字節(jié)
s32 i2c_smbus_write_i2c_block_data(const struct i2c_client *client,u8 command, u8 length,const u8 *values);

3.電容屏ft5x06驅(qū)動注冊

FT5x06系列集成電路單片機(jī)電容式觸控面板控制器集成電路與一個內(nèi)置的8位微控制器單元(MCU)他們采用互電容的方法,支持多點(diǎn)觸控功能。結(jié)合共同電容觸摸面板,FT5x06友好的輸入功能,可應(yīng)用于許多便攜式設(shè)備,如手機(jī),MIDs,上網(wǎng)本和筆記本個人電腦

  • FT5X06內(nèi)核架構(gòu)
pYYBAGMtpqGAOloYAADORQm_-dQ593.png#pic_center

?? FT5X06支持I2C、SPI、UART三種接口。本次我們采用IIC協(xié)議完成驅(qū)動注冊。
?? FT5X06的I2C接口時序:

poYBAGMtpqGAOSIdAADsiFGunuI448.png#pic_center

3.1 FT5X06驅(qū)動注冊

硬件平臺:tiny4412
開發(fā)平臺:ubuntu18.04
交叉編譯器:arm-linux-gcc
內(nèi)核:linux3.5

3.1.1 根據(jù)原理圖要到IIC硬件資源信息

??要實(shí)現(xiàn)IIC子系統(tǒng)的設(shè)備和驅(qū)動層注冊,必要參數(shù)為:IIC總線編號、設(shè)備名字、設(shè)備地址。
??根據(jù)Tiny4412的開發(fā)板原理圖,可知觸摸屏接口采用的是I2C1總線,中斷檢測腳為GPX1_6。

pYYBAGMtpqGALXrJAACcdgtDocU731.png#pic_centerpoYBAGMtpqKAZ_ujAAGAhG-bUPA930.png#pic_center

??由于本身tiny4412的內(nèi)核中已自帶觸摸屏驅(qū)動,所以FT5X06的設(shè)備地址可根據(jù)mach-tiny4412.c的板級注冊中找到:

pYYBAGMtpqKAW4rWAAJgnZqtf50913.png#pic_centerpoYBAGMtpqKANfLUAAEbyx9Q5CE686.png#pic_center

3.1.2 裁剪內(nèi)核,卸載自帶的觸摸屏驅(qū)動

由于本身tiny4412的內(nèi)核中已自帶觸摸屏驅(qū)動,所以若想自己編寫該驅(qū)動則需要先卸載內(nèi)核中的觸摸屏驅(qū)動,才能實(shí)現(xiàn)自己的驅(qū)動文件注冊。即需要完成內(nèi)核裁剪,卸載自帶的觸摸屏驅(qū)動。
打開linux3.5內(nèi)核的配置界面,找到ft5x06的驅(qū)動位置,將其卸載。

[wbyq@wbyq linux-3.5]$ make menuconfig
Device Drivers  --->
Input device support  ---> 
    Touchscreens  --->
       FocalTech ft5x0x TouchScreen driver
pYYBAGMtpqOAbWYfAAGFLmbXSu4027.png#pic_center

??最后重新編譯內(nèi)核,燒寫內(nèi)核,重新啟動開發(fā)板。

3.1.3 注冊IIC設(shè)備層

#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include 
#include 
#include 

static struct i2c_board_info ft5x06_info=
{
	I2C_BOARD_INFO("ft5x06",0x38),
	//.irq=	
};
static struct i2c_client *client;

static int __init wbyq_ft5x06_dev_init(void)
{
	ft5x06_info.irq=gpio_to_irq(EXYNOS4_GPX1(6));//中斷號
	struct i2c_adapter *adap=i2c_get_adapter(1);//獲取適配器編號
	client=i2c_new_device(adap,&ft5x06_info);
	i2c_put_adapter(adap);
	if(client==NULL)return -ENODEV;
	printk("ft5x06設(shè)備層注冊成功n");
    return 0;
}
static void __exit wbyq_ft5x06_dev_cleanup(void)
{
	/*注銷設(shè)備層*/
	i2c_unregister_device(client);
	printk("ft5x06設(shè)備層注銷成功n");
	
}
module_init(wbyq_ft5x06_dev_init);//驅(qū)動入口函數(shù)
module_exit(wbyq_ft5x06_dev_cleanup);//驅(qū)動出口函數(shù)

MODULE_LICENSE("GPL");//驅(qū)動注冊協(xié)議
MODULE_AUTHOR("it_ashui");
MODULE_DESCRIPTION("Exynos4 eeprom_dev Driver");

3.1.4 注冊IIC驅(qū)動層

??注冊IIC驅(qū)動層,完成FT5X06中斷注冊。初始化工作,初始化等待隊(duì)列頭,注冊雜項(xiàng)設(shè)備。實(shí)現(xiàn)ioctl函數(shù)接口和poll函數(shù)接口。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include 
#include 
#include 
#define TOUCH_GETXY 0X80
static struct work_struct ft5x06_work;
static struct i2c_client *i2c_client;
struct Touch_xy
{
	int x;
	int y;
	int stat;
};
static struct Touch_xy touchxy;
DECLARE_WAIT_QUEUE_HEAD(ft5x06_q);//等待隊(duì)列頭
static void ft5x06_work_func(struct work_struct *work)
{	
	u8 val_data[8];
	u32 x,y;
	u32 stat;
	i2c_smbus_read_i2c_block_data(i2c_client,0,8,val_data);
	x=(val_data[3]&0Xf)<<8|val_data[4];
	y=(val_data[5]&0Xf)<<8|val_data[6];
	stat=val_data[2]&0xf;
	if(stat)
	{
		touchxy.x=x;
		touchxy.y=y;
		touchxy.stat=1;
	}
	else
	{
		touchxy.stat=0;
	}
	wake_up(&ft5x06_q);//喚醒進(jìn)程
	//printk("(x,y):%d,%dn",x,y);	
}
static irqreturn_t  ft5x06_irq_work(int irq, void *dev)
{
	schedule_work(&ft5x06_work);
	return IRQ_HANDLED;
}

static int ft5x06_open(struct inode *inode, struct file *fp)
{
	printk("open函數(shù)調(diào)用成功");
	return 0;
}
static long ft5x06_ioctl(struct file *fp, unsigned int cmd, unsigned long data)
{
	int ret;
	switch(cmd)
	{
		case TOUCH_GETXY:
			ret=copy_to_user((void *)data,&touchxy,sizeof(touchxy));
			if(ret)return -1;
		default:
				return -1;
	}
	return 0;
}
static unsigned int ft5x06_poll(struct file *filp, struct poll_table_struct *p)
{
	int mask=0;
	poll_wait(filp,&ft5x06_q, p);
	if(touchxy.stat)mask|=POLLIN;
	return mask;
}
static int ft5x06_release(struct inode *inode, struct file *fp)
{
	printk("release函數(shù)調(diào)用成功");
	return 0;
}
static struct file_operations  ft5x06_fops=
{
	.open			=ft5x06_open,
	.unlocked_ioctl	=ft5x06_ioctl,
	.poll			=ft5x06_poll,
	.release		=ft5x06_release
};
static struct miscdevice ft5x06_misc=
{
	.minor=MISC_DYNAMIC_MINOR,
	.name="ft5x06",
	.fops=&ft5x06_fops
};

static int ft5x06_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
	int ret;
	i2c_client=client;
	printk("資源匹配成功addr=%#x,irq=%dn",client->addr,client->irq);
	/*初始化工作*/
	INIT_WORK(&ft5x06_work, ft5x06_work_func);
	/*注冊中斷*/
	ret=request_irq(client->irq,ft5x06_irq_work,IRQF_TRIGGER_RISING|IRQF_TRIGGER_FALLING,"ft5x06",NULL);
	if(ret)
	{
		printk("中斷注冊失敗n");
		return ret;
	}
	/*注冊雜項(xiàng)設(shè)備*/
	misc_register(&ft5x06_misc);
	return 0;
}
static int eeprom_remove(struct i2c_client *client)
{
	printk("eeprom 驅(qū)動層資源釋放成功n");
	misc_deregister(&ft5x06_misc);
	free_irq(client->irq,NULL);
	return 0;
}
static struct i2c_device_id id_table[]=
{
		{"ft5x06",0},
		{}
};

static struct i2c_driver ft5x06_driver=
{
	.probe=ft5x06_probe,
	.remove=eeprom_remove,
	.driver=
	{
		.name="ft5x06_drv",
	},
	.id_table=id_table,
};
static int __init wbyq_eeprom_drv_init(void)
{
	int ret;
	ret=i2c_add_driver(&ft5x06_driver);
	if(ret)return ret;
	printk("ft5x06驅(qū)動層注冊成功n");
    return 0;
}
/*驅(qū)動釋放*/
static void __exit wbyq_eeprom_drv_cleanup(void)
{
	/*注銷設(shè)備層*/
	i2c_del_driver(&ft5x06_driver);
	printk("ft5x06驅(qū)動層注銷成功n");

}
module_init(wbyq_eeprom_drv_init);//驅(qū)動入口函數(shù)
module_exit(wbyq_eeprom_drv_cleanup);//驅(qū)動出口函數(shù)

MODULE_LICENSE("GPL");//驅(qū)動注冊協(xié)議
MODULE_AUTHOR("it_ashui");
MODULE_DESCRIPTION("Exynos4 platform_drv Driver");

3.1.5 編寫應(yīng)用層函數(shù)

??通過幀緩沖框架完成LCD應(yīng)用編程,實(shí)現(xiàn)畫點(diǎn)函數(shù)。打開觸摸屏驅(qū)動,獲取觸摸屏坐標(biāo),調(diào)用畫點(diǎn)函數(shù),繪制實(shí)時坐標(biāo)位置。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define TOUCH_GETXY 0X80
struct Touch_xy
{
	int x;
	int y;
	int stat;
};
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;

/*LCD畫點(diǎn)函數(shù)*/
static unsigned char *lcd_p=NULL;//屏幕緩存地址
static struct fb_fix_screeninfo fb_fix;//固定參數(shù)結(jié)構(gòu)體
static struct fb_var_screeninfo fb_var;//可變參數(shù)結(jié)構(gòu)體
void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2,u32 c);
static inline void LCD_DrawPoint(int x,int y,int c)
{
	//獲取要繪制的點(diǎn)的地址
	unsigned int *p= (unsigned int *)(lcd_p+y*fb_fix.line_length+x*fb_var.bits_per_pixel/8);
	*p=c;//寫入顏色值
}

int main()
{
	/*1.打開設(shè)備*/
	int fd=open("/dev/fb0", 2);
	if(fd<0)
	{
		printf("打開設(shè)備失敗n");
	}
	/*2.獲取固定參數(shù)*/
	memset(&fb_fix,0, sizeof(fb_fix));
 	ioctl(fd,FBIOGET_FSCREENINFO,&fb_fix);
	printf("屏幕緩存大小:%dn",fb_fix.smem_len);
	printf("一行的字節(jié)數(shù):%dn",fb_fix.line_length);
	/*3.獲取屏幕可變參數(shù)*/
	memset(&fb_var,0, sizeof(fb_var));
	ioctl(fd,FBIOGET_VSCREENINFO,&fb_var);
	printf("屏幕尺寸:%d*%dn",fb_var.xres,fb_var.yres);
	printf("顏色位數(shù):%dn",fb_var.bits_per_pixel);
	/*4.將屏幕緩沖區(qū)映射到進(jìn)程空間*/
	lcd_p=mmap(NULL,fb_fix.smem_len,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
	close(fd);
	if(lcd_p==(void *)-1)
	{
		printf("內(nèi)存映射失敗n");
		return 0;
	}
	memset(lcd_p,0xff,fb_fix.smem_len);//將屏幕清空為白色
	
	fd=open("/dev/ft5x06",2);
	if(fd<0)
	{
		printf("設(shè)備打開失敗n");
		return 0;
	}
	struct pollfd fds=
	{
		.fd=fd,
		.events=POLLIN,
		
	};
	int ret;
	struct Touch_xy touchxy;
	int x1,y1;
	while(1)
	{
		ret=poll(&fds,1,-1);
		ioctl(fd,TOUCH_GETXY,&touchxy);
		if((x1-touchxy.x >=25|| touchxy.x-x1>=25) || (y1-touchxy.y >=25|| touchxy.y-y1>=25))
		{
			x1=touchxy.x;
			y1=touchxy.y;
		}
		if(x1!=touchxy.x || touchxy.y!=y1)
		{
			LCD_DrawLine(touchxy.x, touchxy.y, x1, y1,0);
			x1=touchxy.x;
			y1=touchxy.y;
		}		
	}	
AA:	
	//取消映射
	munmap(lcd_p,fb_fix.smem_len);
	return 0;
}
/*
函數(shù)功能:畫直線
參    數(shù):
x1,y1:起點(diǎn)坐標(biāo)
x2,y2:終點(diǎn)坐標(biāo) 
*/
void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2,u32 c)
{
	u16 t; 
	int xerr=0,yerr=0,delta_x,delta_y,distance; 
	int incx,incy,uRow,uCol; 
	delta_x=x2-x1; //計算坐標(biāo)增量 
	delta_y=y2-y1; 
	uRow=x1; 
	uCol=y1; 
	if(delta_x>0)incx=1; //設(shè)置單步方向 
	else if(delta_x==0)incx=0;//垂直線 
	else {incx=-1;delta_x=-delta_x;} 
	if(delta_y>0)incy=1; 
	else if(delta_y==0)incy=0;//水平線 
	else{incy=-1;delta_y=-delta_y;} 
	if( delta_x>delta_y)distance=delta_x; //選取基本增量坐標(biāo)軸 
	else distance=delta_y; 
	for(t=0;t<=distance+1;t++ )//畫線輸出 
	{  
		LCD_DrawPoint	(uRow,uCol,c);//畫點(diǎn)
		xerr+=delta_x ; 
		yerr+=delta_y ; 
		if(xerr>distance) 
		{ 
			xerr-=distance; 
			uRow+=incx; 
		} 
		if(yerr>distance) 
		{ 
			yerr-=distance; 
			uCol+=incy; 
		} 
	}  
}  

poYBAGMtpqSAMNGnAAjfVKBOLu0369.png#pic_center

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 觸摸屏
    +關(guān)注

    關(guān)注

    42

    文章

    2301

    瀏覽量

    116115
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11292

    瀏覽量

    209318
  • IIC
    IIC
    +關(guān)注

    關(guān)注

    11

    文章

    300

    瀏覽量

    38311
收藏 人收藏

    評論

    相關(guān)推薦

    ARM觸摸屏驅(qū)動系統(tǒng)設(shè)計

    介紹了基于飛思卡爾芯片i.MX27 和嵌入式linux 系統(tǒng)觸摸屏硬件的連接設(shè)計和軟件的驅(qū)動設(shè)計.
    發(fā)表于 05-02 10:56 ?2728次閱讀

    關(guān)于Linux設(shè)備驅(qū)動中input子系統(tǒng)的介紹

    對于輸入類設(shè)備如鍵盤、鼠標(biāo)、觸摸屏之類的Linux驅(qū)動,內(nèi)核提供input子系統(tǒng),使得這類設(shè)備的處理變得非常便捷??傮w上來講,input子系統(tǒng)
    發(fā)表于 01-09 16:06 ?2696次閱讀

    技術(shù)干貨:WinCE 7.0觸摸屏驅(qū)動

    在嵌入式系統(tǒng)中較為常用的是四線電阻式觸摸屏,通過檢測x軸和y軸的電壓,來確定觸點(diǎn)的位置。一般觸摸屏系統(tǒng)結(jié)構(gòu)為:觸摸屏->
    發(fā)表于 12-09 13:43 ?3857次閱讀

    Linux輸入子系統(tǒng)上報觸摸屏坐標(biāo)

    ??在 Linux 中,輸入子系統(tǒng)是由輸入子系統(tǒng)設(shè)備驅(qū)動層、輸入子系統(tǒng)核心層(Input Core)和輸入
    的頭像 發(fā)表于 09-25 08:56 ?2474次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>下</b>輸入<b class='flag-5'>子系統(tǒng)</b>上報<b class='flag-5'>觸摸屏</b>坐標(biāo)

    Linux驅(qū)動分析之input子系統(tǒng)

    Linux內(nèi)核為了能夠處理各種不同類型的輸入設(shè)備,比如: 觸摸屏 ,鼠標(biāo) , 鍵盤 , 操縱桿等設(shè)備 ,設(shè)計并實(shí)現(xiàn)了Linux 輸入子系統(tǒng) ,它為驅(qū)
    發(fā)表于 02-01 10:38 ?533次閱讀

    基于觸摸屏驅(qū)動Linux內(nèi)核輸入子系統(tǒng)研究

    基于觸摸屏驅(qū)動Linux 內(nèi)核輸入子系統(tǒng)研究華明, 徐造林( 東南大學(xué) 計算機(jī)科學(xué)與工程學(xué)院, 江蘇 南京 210 096)摘要: Li nux 是目前最為優(yōu)秀的開源
    發(fā)表于 03-20 16:04

    嵌入式Linux觸摸屏在漆包線檢測系統(tǒng)中的應(yīng)用

    本文針對嵌入式Linux觸摸屏在漆包線檢測系統(tǒng)中的應(yīng)用,介紹了本系統(tǒng)觸摸屏的具體接口電路,嵌入式Lin
    發(fā)表于 07-27 15:47 ?29次下載

    基于MeeGo的電容式觸摸屏驅(qū)動設(shè)計

    本文基于Nokia和Intel公司合作開發(fā)的開源操作系統(tǒng)MeeGo,采用基于內(nèi)核對象的Linux輸入子系統(tǒng)來設(shè)計觸摸屏驅(qū)動。該方案極大地方
    發(fā)表于 05-25 10:55 ?1378次閱讀
    基于MeeGo的電容式<b class='flag-5'>觸摸屏</b><b class='flag-5'>驅(qū)動</b>設(shè)計

    基于有限狀態(tài)機(jī)的Linux多點(diǎn)觸摸屏驅(qū)動設(shè)計劉斌

    基于有限狀態(tài)機(jī)的Linux多點(diǎn)觸摸屏驅(qū)動設(shè)計_劉斌
    發(fā)表于 03-15 08:00 ?0次下載

    基于嵌入式linux系統(tǒng)的AD7873觸摸屏驅(qū)動系統(tǒng)設(shè)計詳解

    Linux 和飛思卡爾i.MX27芯片以及AD7873 觸摸屏芯片的驅(qū)動程序,并成功移植到內(nèi)核中,實(shí)現(xiàn)了家庭控制器系統(tǒng)觸摸技術(shù)
    發(fā)表于 09-18 16:57 ?1689次閱讀
    基于嵌入式<b class='flag-5'>linux</b><b class='flag-5'>系統(tǒng)</b><b class='flag-5'>下</b>的AD7873<b class='flag-5'>觸摸屏</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>系統(tǒng)</b>設(shè)計詳解

    Linux觸摸屏驅(qū)動

    對于觸摸屏驅(qū)動,我們主要需要掌握觸摸屏驅(qū)動代碼和應(yīng)用層測試代碼。下面講的是基于Mini2440的觸摸屏驅(qū)
    發(fā)表于 04-26 14:45 ?2520次閱讀

    Android的觸摸屏進(jìn)行校準(zhǔn)的方法詳細(xì)說明

    本文記錄了的Android觸摸屏驅(qū)動的過程 我采用的觸摸屏校準(zhǔn)方法利用到了tslib-1.4。tslib的移植方法,網(wǎng)上有很多介紹,這里就不贅述了。 有過linux
    發(fā)表于 08-12 17:33 ?1次下載
    Android的<b class='flag-5'>觸摸屏</b>進(jìn)行校準(zhǔn)的方法詳細(xì)說明

    英創(chuàng)信息技術(shù)EM9280 Linux觸摸屏應(yīng)用開發(fā)簡介

    提供對于4線制電阻式觸摸屏的支持,在定制的Linux內(nèi)核中已完全實(shí)現(xiàn)了該觸摸屏驅(qū)動支持。 在EM9280中,觸摸屏作為輸入設(shè)備其設(shè)備文件為
    的頭像 發(fā)表于 01-16 09:39 ?1912次閱讀
    英創(chuàng)信息技術(shù)EM9280 <b class='flag-5'>Linux</b><b class='flag-5'>觸摸屏</b>應(yīng)用開發(fā)簡介

    AD7877輸入觸摸屏控制器Linux驅(qū)動

    AD7877輸入觸摸屏控制器Linux驅(qū)動
    發(fā)表于 04-20 14:25 ?2次下載
    AD7877輸入<b class='flag-5'>觸摸屏</b>控制器<b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動</b>

    Linux驅(qū)動開發(fā)-編寫FT5X06觸摸屏驅(qū)動

    這篇文章介紹在Linux如何編寫FT5X06系列芯片驅(qū)動,完成觸摸屏驅(qū)動開發(fā), FT5X06是一個系列,當(dāng)前使用的具體型號是FT5206
    的頭像 發(fā)表于 09-17 15:27 ?5891次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動</b>開發(fā)-編寫FT5X06<b class='flag-5'>觸摸屏</b><b class='flag-5'>驅(qū)動</b>
    RM新时代网站-首页