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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? i2c-tomega8.c

?? linux下S3C2410的I2C總線的驅(qū)動
?? C
?? 第 1 頁 / 共 3 頁
字號:
	case 2:		/* SEEK_END */		file->f_pos = iccd->memsize + offset;		break;	default:		return -EINVAL;	}	if (file->f_pos < 0)		file->f_pos = 0;	else if (file->f_pos >= iccd->memsize)		file->f_pos = iccd->memsize - 1;	return file->f_pos;}static ssize_t mega8_iccard_read (struct file *file, char *buf, size_t count,                            loff_t *offset){	ICCARD_DEV_INFO *iccd= (ICCARD_DEV_INFO*)file->private_data;	struct i2c_client *client = &mega8_client;	I2C_ICCard buffer;	size_t total_retlen=0;	int ret=0;	int len;		if (*offset + count > iccd->memsize)		count = iccd->memsize- *offset;	while (count) {		if (count > MAX_ICCARD_RWBUFFER) 			len = MAX_ICCARD_RWBUFFER;		else			len = count;		buffer.cmd=CMD_ICC_READ;		iccarddev.iccard_data.address = buffer.iccard_addr = *offset;		iccarddev.iccard_data.cnt = buffer.iccard_cnt = len;		iccarddev.lasterrcode = ICC_FAILED_WAITING;				ret = i2c_master_send(client, (const char*)&buffer, ICCARD_COUNT_OFFSET);		if(ret<0){			iccarddev.lasterrcode=ICC_FAILED_READERR;			break;		}retry: 		if(iccarddev.lasterrcode==ICC_FAILED_WAITING){			interruptible_sleep_on(&(iccarddev.wq));			if (signal_pending(current))				return -ERESTARTSYS;			goto retry;		}		else if(iccarddev.lasterrcode==ICC_FAILED_NULL){	//read successfully			*offset += buffer.iccard_cnt;			copy_to_user(buf, (char *)iccarddev.iccard_data.buffer, buffer.iccard_cnt);			if (copy_to_user(buf, (char *)iccarddev.iccard_data.buffer, buffer.iccard_cnt)) {				return -EFAULT;			}else{				total_retlen += buffer.iccard_cnt;				count -= buffer.iccard_cnt;				buf += buffer.iccard_cnt;			}		}		else{			//read error			break;		}	}		return total_retlen;}static ssize_t mega8_iccard_write(struct file * file, const char * buf, size_t count,                             loff_t *offset){	ICCARD_DEV_INFO *iccd= (ICCARD_DEV_INFO*)file->private_data;	struct i2c_client *client = &mega8_client;	I2C_ICCard buffer;	size_t total_retlen=0;	int ret=0;	int len;		if (*offset + count > iccd->memsize)		count = iccd->memsize- *offset;	while (count) {		if (count > MAX_ICCARD_RWBUFFER) 			len = MAX_ICCARD_RWBUFFER;		else			len = count;		buffer.cmd=CMD_ICC_WRITE;		iccarddev.iccard_data.address = buffer.iccard_addr = *offset;		iccarddev.iccard_data.cnt = buffer.iccard_cnt = len;		iccarddev.lasterrcode = ICC_FAILED_WAITING;		if (copy_from_user(buffer.iccard_buf, buf, len)) {			return -EFAULT;		}		ret = i2c_master_send(client, (const char*)&buffer, ICCARD_COUNT_OFFSET + len);		if(ret<0){			iccarddev.lasterrcode=ICC_FAILED_READERR;			break;		}retry: 		if(iccarddev.lasterrcode==ICC_FAILED_WAITING){			interruptible_sleep_on(&(iccarddev.wq));			if (signal_pending(current))				return -ERESTARTSYS;			goto retry;		}		else if(iccarddev.lasterrcode==ICC_FAILED_NULL){	//write successfully			*offset += buffer.iccard_cnt;			total_retlen += buffer.iccard_cnt;			count -= buffer.iccard_cnt;			buf += buffer.iccard_cnt;		}		else{			//write error			break;		}	}		return total_retlen;}static int mega8_iccard_release (struct inode *inode, struct file *file){	mega8_device_release (DTYPE_ICCARD);	atomic_inc (&atom_cnt);	return 0;}static int iccard_sle4442_read_manufacture_info (unsigned char *buf){	int ret = -1;	int count = 32;	struct i2c_client *client = &mega8_client;//(struct i2c_client *)file->private_data;	I2C_ICCard buffer;	while(count!=0){		buffer.cmd=CMD_ICC_READ;		iccarddev.iccard_data.address=buffer.iccard_addr=0;		iccarddev.iccard_data.cnt=buffer.iccard_cnt=count;		iccarddev.lasterrcode=ICC_FAILED_WAITING;				ret = i2c_master_send(client, (const char*)&buffer, ICCARD_COUNT_OFFSET);		if(ret<0){			iccarddev.lasterrcode=ICC_FAILED_READERR;		}retry: 		if(iccarddev.lasterrcode==ICC_FAILED_WAITING){			interruptible_sleep_on_timeout (&(iccarddev.wq), HZ);			if (signal_pending(current))				return -ERESTARTSYS;			goto retry;		}		else if(iccarddev.lasterrcode==ICC_FAILED_NULL){	//read successfully			memcpy (buf, (char*)iccarddev.iccard_data.buffer, buffer.iccard_cnt);			ret = 0;			break;		}		else{			//read error			ret = -1;			break;		}	}	return ret;}static int do_verification_sle4442 (unsigned char *password ){	int ret = -1;	int count = 3;	struct i2c_client *client = &mega8_client;//(struct i2c_client *)file->private_data;	I2C_ICCard iccard_verifybuffer;	while(count!=0){		iccard_verifybuffer.cmd=CMD_ICC_VERIFY;		iccarddev.iccard_data.cnt=iccard_verifybuffer.iccard_pwdcnt=3;		memcpy (iccard_verifybuffer.iccard_pwdbuf, password, 3);		iccarddev.lasterrcode=ICC_FAILED_WAITING;				ret = i2c_master_send(client, (const char*)&iccard_verifybuffer, ICCARD_COUNT_PWD_OFFSET+iccard_verifybuffer.iccard_pwdcnt);		if(ret<0){			iccarddev.lasterrcode=ICC_FAILED_VERIFYERR;		}retry: 		if(iccarddev.lasterrcode==ICC_FAILED_WAITING){			interruptible_sleep_on_timeout(&(iccarddev.wq), HZ);			DPRINTK ("do verify 4442 retry out\n");			if (signal_pending(current))				return -ERESTARTSYS;			goto retry;		}else if(iccarddev.lasterrcode == ICC_FAILED_NULL){			//verify successfully			DPRINTK ("do verify 4442 success\n");			ret = 0;			break;		}else{			DPRINTK ("do verify 4442 fail\n");			ret = -1;			break;		}	}	return ret;}static int verify_sle4442 (unsigned char *input){	unsigned char manuinfo[32];	unsigned char passwd[3];	/* read manufacture info */#if 0	if (iccard_sle4442_read_manufacture_info (manuinfo))		return -1;#endif	/* generate password according to the manufacture info */	/* FIXME: here, we need generate password but not copy first 3 byte to it */	passwd[0]=input[0];	passwd[1]=input[1];	passwd[2]=input[2];	/* verify it */	if (do_verification_sle4442 (passwd))		return -1;	/* success */	DPRINTK ("verify sle4442 successfully\n");	return 0;}static int select_card_type ( unsigned char cardtype){	I2C_control i2c_ctrl;	int ret;	i2c_ctrl.cmd = CMD_ICC_TYPESEL;	i2c_ctrl.ctrl = (unsigned char)cardtype;	iccarddev.lasterrcode=ICC_FAILED_WAITING;	ret = i2c_master_send(&mega8_client, (const char*)&i2c_ctrl, sizeof(i2c_ctrl));	if (ret < 0){		DPRINTK("set ic card type failed!.\n");		return ret;	}	ret = 0;retry: 	if(iccarddev.lasterrcode==ICC_FAILED_WAITING){		interruptible_sleep_on_timeout (&(iccarddev.wq), HZ);		if (signal_pending(current))			return -ERESTARTSYS;		goto retry;	}else if(iccarddev.lasterrcode!=ICC_FAILED_NULL){		//select error		ret = -1;	}	DPRINTK ("select_card_type return :%d\n", ret);	return ret;}static int valid_iccard_dev (unsigned char minor){	int i;	for (i = 0; i < DEVNM_SIZE; i ++){		if (minor == iccarddevinfo[i].minor)			return i;	}	return -1;}static int mega8_iccard_open (struct inode *inode, struct file *file){/*	if (!mega8_kbd_client->adapter)		return -ENODEV;	if (mega8_kbd_client->adapter->inc_use)		mega8_kbd_client->adapter->inc_use (mega8_kbd_client->adapter);*/	unsigned char dev_minor = MINOR(inode->i_rdev);	int cardindex = valid_iccard_dev (dev_minor);	DPRINTK ("minor:%d\n", dev_minor);	if (!inode || cardindex < 0)		return -ENODEV;	if (!atomic_dec_and_test (&atom_cnt)){		DPRINTK ("iccard busy\n");		atomic_inc (&atom_cnt);		return -EBUSY;	}	iccarddev.lasterrcode=ICC_FAILED_NULL;	init_waitqueue_head(&(iccarddev.wq));	DPRINTK( "iccard opened\n");	mega8_device_request (DTYPE_ICCARD);	/*Select Card Type */	if (select_card_type(dev_minor))		goto erropen;#if 0	/* If using sle4442 card, do verification */	if ( dev_minor == ICCARD_TYPE_SLE4442 ){		unsigned char passwd[]={0xab, 0xcd, 0xef};		DPRINTK ("begin verify\n");		if (verify_sle4442(passwd))			goto erropen;	}#endif	file->private_data = iccarddevinfo + cardindex;	return 0;erropen:	mega8_device_release (DTYPE_ICCARD);	atomic_inc (&atom_cnt);	return -ENODEV;}static int mega8_iccard_ioctl (struct inode *inode, struct file *file, 	unsigned int cmd, unsigned long arg){	I2C_control i2c_ctrl;	int ret;	ICCARD_DEV_INFO *iccd= (ICCARD_DEV_INFO*)file->private_data;	switch(cmd){	case ICCARD_IOCTL_LASTERR:		*((unsigned char*)arg)=iccarddev.lasterrcode;		return 0;	case ICCARD_IOCTL_SELCARD:		return select_card_type((unsigned char)arg);	case ICCARD_IOCTL_4442VERIFY:		if (iccd->minor != ICCARD_4442_MINOR)			return -1;		return verify_sle4442((unsigned char*)arg);	}	return 0;}///ENODEV#ifdef CONFIG_DEVFS_FSstatic void reg_dev_files (devfs_handle_t i2c_root){	int i;	for (i = 0; i < DEVNM_SIZE; i ++){		iccard_devfs_handle[i] = devfs_register (i2c_root, iccarddevinfo[i].devname,				DEVFS_FL_DEFAULT, iccardmajor, iccarddevinfo[i].minor,				S_IFCHR | S_IRUSR | S_IWUSR,				&mega8_iccard_fops, NULL);		DPRINTK ("Registered '%s' as minor %d\n", iccarddevinfo[i].devname,				iccarddevinfo[i].minor);	}}#endif#ifdef CONFIG_DEVFS_FSstatic devfs_handle_t mega8_iccard_init (devfs_handle_t i2c_root)#elsestatic int mega8_iccard_init ()#endif{	int ret;//	I2C_control i2c_ctrl;	ret = register_chrdev(0, ICCARD_NAME, &mega8_iccard_fops);	if (ret < 0) {		DPRINTK(ICCARD_NAME" can't be registered\n");#ifdef CONFIG_DEVFS_FS		return NULL;#else		return ret;#endif	}	iccardmajor = ret;#ifdef CONFIG_DEVFS_FS	reg_dev_files (i2c_root);#endif	//set default ic-card is AT24C16/*	i2c_ctrl.cmd=CMD_ICC_TYPESEL;	i2c_ctrl.ctrl=ICCARD_TYPE_AT24C16;	ret=i2c_master_send(&mega8_client, (const char*)&i2c_ctrl, sizeof(i2c_ctrl));	if(ret<0){		DPRINTK("set ic card type failed!.\n");	}*/	atomic_set (&atom_cnt, 1);#ifdef CONFIG_DEVFS_FS	return iccard_devfs_handle[0];#else	return 0;#endif}static void mega8_iccard_exit (void){	int i;#ifdef	CONFIG_DEVFS_FS	for ( i = 0; i < DEVNM_SIZE; i++){		if (iccard_devfs_handle[i]){			devfs_unregister(iccard_devfs_handle[i]);			iccard_devfs_handle[i] = NULL;		}	}#endif	unregister_chrdev(iccardmajor, ICCARD_NAME);}#endif	//#ifdef CONFIG_I2C_MEGA8_IC_CARD/******************I2C_ICCARD*****************/#define PS2_DEVICE_NULL			0#define PS2_DEVICE_KBD			1#define PS2_DEVICE_MOUSE		2typedef struct{	wait_queue_head_t wq;	spinlock_t lock;	unsigned char data;	int waiting;	int ps2device;	int ndata;}PS2_DEV;#define KBD_BAT		0xaa		/* in */#define KBD_SETLEDS	0xed		/* out */#define KBD_ECHO	0xee		/* in/out */#define KBD_BREAK	0xf0		/* in */#define KBD_TYPRATEDLY	0xf3		/* out */#define KBD_SCANENABLE	0xf4		/* out */#define KBD_DEFDISABLE	0xf5		/* out */#define KBD_DEFAULT	0xf6		/* out */#define KBD_ACK		0xfa		/* in */#define KBD_DIAGFAIL	0xfd		/* in */#define KBD_RESEND	0xfe		/* in/out */#define KBD_RESET	0xff		/* out */#define KBD_READID	0xf2		/* out */#define MOUSE_DATAENABLE		0xf4	//out#ifdef CONFIG_I2C_MEGA8_PS2_0static PS2_DEV ps2dev0;static ps2_handle_event ps2_hdevent0=NULL;#define PS20_SET_WAITING()		ps2dev0.waiting=1#define PS20_CLR_WAITING()		ps2dev0.waiting=0/*********************************************************\	send a data to ps2 device via i2c\*********************************************************/int mega8_PS20_Send(unsigned char data){	int ret;	I2C_control i2c_ctrl;	i2c_ctrl.cmd=CMD_PS2_0;	i2c_ctrl.ctrl=data;	ret=i2c_master_send(&mega8_client, (const char*)&i2c_ctrl, sizeof(i2c_ctrl));	if(ret<0){		DPRINTK("ps2 0 send  failed!.\n");		return -1;	}	return 0;}#define mega8_PS20_FlushData()		ps2dev0.ndata=0;/*********************************************************\	wait ps2 send back data via i2c\*********************************************************/int mega8_PS20_WaitData(unsigned char *data, long timeout){	if(ps2dev0.ndata==1){		*data=ps2dev0.data;		ps2dev0.ndata=0;	//	ps2dev0.waiting=0;		return 0;	}	if(timeout==0){		interruptible_sleep_on(&ps2dev0.wq);		*data=ps2dev0.data;		ps2dev0.ndata=0;		return 0;	}	if(interruptible_sleep_on_timeout(&ps2dev0.wq, timeout)==0){		*data=0;		ps2dev0.ndata=0;		return -1;	}	*data=ps2dev0.data;	ps2dev0.ndata=0;	return 0;}static void mega8_ps2_raw0(unsigned char data){	ps2dev0.ndata=1;	if(ps2dev0.waiting){		ps2dev0.data=data;		wake_up_interruptible(&(ps2dev0.wq));		return;	}#ifdef DEBUG	if(ps2dev0.ps2device==PS2_DEVICE_KBD){		//send data into keyboard		DPRINTK("keyboard receive data=0x%x\n", data);	}	else if(ps2dev0.ps2device==PS2_DEVICE_MOUSE){		DPRINTK("mouse receive data=0x%x\n", data);	}#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品2024| 日本欧美韩国一区三区| 岛国一区二区在线观看| 欧美国产国产综合| 成人午夜激情视频| 一区二区三区电影在线播| 欧美性猛交xxxxxx富婆| 日本美女视频一区二区| 久久久久久免费毛片精品| 成人免费毛片aaaaa**| 亚洲丝袜精品丝袜在线| 欧美麻豆精品久久久久久| 毛片不卡一区二区| 国产精品伦理在线| 精品视频1区2区| 久久国产免费看| 国产精品三级视频| 欧美绝品在线观看成人午夜影视| 免费观看91视频大全| 日本一区二区三区高清不卡| 在线精品视频一区二区三四| 美女脱光内衣内裤视频久久影院| 国产欧美视频一区二区三区| 欧美伊人久久大香线蕉综合69| 日本欧美在线观看| 国产精品久久综合| 制服丝袜亚洲色图| 成人av午夜电影| 日韩av中文字幕一区二区 | 国产在线精品一区二区| 中文字幕av一区二区三区| 欧美久久高跟鞋激| 成人免费福利片| 久久99国产精品成人| 亚洲在线免费播放| 久久久久久夜精品精品免费| 欧美三区在线视频| 成人av网在线| 国产一区二区三区蝌蚪| 亚洲国产精品久久人人爱| 国产欧美日韩在线视频| 欧美一区二视频| 91麻豆精品在线观看| 国模冰冰炮一区二区| 伊人婷婷欧美激情| 中文字幕亚洲一区二区va在线| 欧美成人午夜电影| 欧美日韩中文国产| 99re在线视频这里只有精品| 国产美女精品人人做人人爽| 日韩av网站免费在线| 国产美女精品人人做人人爽| 免费在线一区观看| 亚洲成人动漫在线免费观看| 亚洲欧洲性图库| 中文无字幕一区二区三区| 精品国产伦一区二区三区免费| 欧美美女一区二区| 欧美性生活一区| 色综合色狠狠综合色| 成人久久视频在线观看| 国产精品一二三四五| 国产在线精品一区二区不卡了| 久久精品国产99| 久久av资源站| 国内精品久久久久影院薰衣草| 免费成人深夜小野草| 青青草一区二区三区| 日韩影院精彩在线| 日本vs亚洲vs韩国一区三区二区| 日日骚欧美日韩| 日韩高清在线观看| 日韩专区中文字幕一区二区| 亚洲第一综合色| 亚洲成人7777| 免费在线一区观看| 国产自产v一区二区三区c| 老司机精品视频导航| 久久狠狠亚洲综合| 国产精品一卡二卡| 成人毛片视频在线观看| 972aa.com艺术欧美| 在线看日本不卡| 欧美精品日韩综合在线| 精品久久久久久久久久久久包黑料 | 亚洲成人av一区二区三区| 亚洲成人第一页| 美女视频一区二区| 国内精品在线播放| 成+人+亚洲+综合天堂| 99re成人在线| 在线不卡中文字幕播放| 精品国产污污免费网站入口 | 亚洲免费观看高清完整版在线观看熊| 国产精品区一区二区三区| 亚洲欧美在线视频观看| 亚洲影视在线观看| 日韩和的一区二区| 极品美女销魂一区二区三区免费| 国产精品一区二区果冻传媒| 91影视在线播放| 欧美欧美欧美欧美| 亚洲精品一区二区三区影院 | 亚洲午夜成aⅴ人片| 日韩成人av影视| 激情综合五月天| 91美女片黄在线| 日韩一卡二卡三卡国产欧美| 国产亚洲精久久久久久| 精品亚洲国产成人av制服丝袜| 成人免费视频caoporn| 欧美精品一二三| 久久精品人人做人人综合| 亚洲美女免费在线| 精品一区中文字幕| 色综合亚洲欧洲| 日韩欧美一级二级三级久久久| 国产精品久久久久婷婷| 日本成人在线看| 成人久久18免费网站麻豆| 91精品国产一区二区三区蜜臀| 国产三级精品视频| 天天爽夜夜爽夜夜爽精品视频| 韩国成人福利片在线播放| 欧亚一区二区三区| 国产拍揄自揄精品视频麻豆| 五月婷婷激情综合| 波多野结衣中文一区| 精品国产乱码久久久久久浪潮| 亚洲欧美成人一区二区三区| 激情六月婷婷久久| 欧美日韩视频在线观看一区二区三区| 久久久亚洲精华液精华液精华液| 天天做天天摸天天爽国产一区| 91丝袜美女网| 久久久久国产精品厨房| 日韩国产欧美在线播放| 91麻豆高清视频| 久久久91精品国产一区二区三区| 亚洲成av人片www| 色噜噜久久综合| 欧美极品少妇xxxxⅹ高跟鞋| 久久国产精品99精品国产| 欧美日韩高清在线| 亚洲主播在线观看| 色先锋aa成人| 最近日韩中文字幕| 国产91丝袜在线播放0| 2023国产精华国产精品| 日韩电影在线一区| 欧美日韩一二三| 成人v精品蜜桃久久一区| 2019国产精品| 久国产精品韩国三级视频| 精品视频免费看| 亚洲成av人片在线| 欧美日韩国产天堂| 亚洲国产精品天堂| 欧美人与z0zoxxxx视频| 亚洲国产精品一区二区www在线 | 欧美日韩视频在线第一区| 一区二区三区日本| 日本乱人伦aⅴ精品| 亚洲精品国产无天堂网2021| 色综合久久88色综合天天免费| 国产精品久久久久国产精品日日| 国产a精品视频| 国产精品高潮呻吟| 99这里只有久久精品视频| 国产精品久久久久影院亚瑟 | 在线播放/欧美激情| 天天综合天天综合色| 欧美一级久久久久久久大片| 男男成人高潮片免费网站| 精品免费一区二区三区| 国产一区二区电影| 国产精品视频麻豆| 97精品久久久久中文字幕| 一区二区三区欧美视频| 欧美电影一区二区| 激情深爱一区二区| 欧美国产日韩a欧美在线观看 | 亚洲黄色小视频| 精品视频一区三区九区| 蜜臂av日日欢夜夜爽一区| 久久精品一区八戒影视| 99久久久久久| 日韩电影在线免费看| 久久女同互慰一区二区三区| 成人黄色小视频在线观看| 一区二区三区高清| 日韩欧美中文字幕精品| 国产91高潮流白浆在线麻豆| 又紧又大又爽精品一区二区| 8v天堂国产在线一区二区| 欧美日韩一区二区三区在线看 | 国产精品综合二区| 亚洲天堂2016| 欧美一区国产二区| av在线不卡免费看|