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

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

?? u110_bak.c

?? linux下打印驅(qū)動源代碼 適用于雙步進針打驅(qū)動
?? C
?? 第 1 頁 / 共 3 頁
字號:
 **成功為0,否則為-1 ** *******************************************************************/static int arca_prn_reset(void){	unsigned long x;	int r;	__save_and_cli(x);	cmotor_direction = 0;	pmotor_direction = 1;	cstep_coil  = 0;	cstep_const = 0;	cstep_acc   = 0;	cstep_dec   = 0;	pstep_const = 0;	pstep_acc   = 0;	pstep_dec   = 0;	r = arca_prn_home_position();	__restore_flags(x);	return r;}/******************************************************************* ** ** *******************************************************************/static int arca_prn_blackmark(void){	bm_timeout = 0;	ENCODE_STATUS(PRN_BLACKMARK, MOTOR_STAT_ACC, NPMOTOR);	__prn_pmotor_irq_unmask();	return 0;}/******************************************************************* ** ** *******************************************************************/static int arca_prn_newline(void){	ENCODE_STATUS(PRN_NEWLINE, MOTOR_STAT_ACC, NPMOTOR);	__prn_pmotor_irq_unmask();	return 0;}/******************************************************************* ** ** *******************************************************************/static int arca_prn_paper_forward(unsigned int steps){	if (steps > 24) {		pmotor_steps = steps - 24;		ENCODE_STATUS(PRN_PAPERFETCH2, MOTOR_STAT_ACC, NPMOTOR);	} else {		pmotor_steps = steps;		ENCODE_STATUS(PRN_PAPERFETCH2, MOTOR_STAT_COIL, NPMOTOR);	}	__prn_pmotor_irq_unmask();	return 0;}/******************************************************************* ** ** *******************************************************************/static int arca_prn_paper_fallback(unsigned int steps){	if (steps > 24) {		pmotor_steps = steps - 24;		ENCODE_STATUS(PRN_PAPERFETCH2, MOTOR_STAT_ACC, NPMOTOR);	} else {		pmotor_steps = steps;		ENCODE_STATUS(PRN_PAPERFETCH2, MOTOR_STAT_COIL, NPMOTOR);	}	pmotor_direction = 0;	__prn_pmotor_irq_unmask();	return 0;}/******************************************************************* ** For module ** *******************************************************************/struct prn_dev {	int opened;	void *private;};static struct prn_dev prn;static unsigned char prn_dev_minor = 3;//從設(shè)備號為3static struct timer_list prn_timer;static int arca_prn_open(struct inode *inode, struct file *filp);static int arca_prn_release(struct inode *inode, struct file *filp);static int arca_prn_ioctl(struct inode *inode, struct file *filp,			  unsigned int cmd, unsigned long arg);static ssize_t arca_prn_write(struct file *filp, const char *buf,			      size_t count, loff_t *ppos);static struct file_operations arca_prn_fops ={	write:   arca_prn_write,	ioctl:   arca_prn_ioctl,	open:    arca_prn_open,	release: arca_prn_release};/******************************************************************* ** Motor state mechanism ** *******************************************************************/static void prn_decode_motor_state(unsigned char status, unsigned char motor){	switch (motor) {	case NCMOTOR:		switch (status) {		case MOTOR_STAT_STOP:			prn_cmotor_stop(cmotor_direction);			break;		case MOTOR_STAT_ACC:			prn_cmotor_acc(cmotor_direction);			break;		case MOTOR_STAT_CONST:			prn_cmotor_const(cmotor_direction);			break;		case MOTOR_STAT_COIL:			__prn_cmotor_data2irq_unmask();			prn_cmotor_coil(cmotor_direction);			break;		case MOTOR_STAT_DEC:						prn_cmotor_dec(cmotor_direction);			break;		case MOTOR_STAT_WORKRUSH:			prn_cmotor_work_rush(cmotor_direction);			break;		case MOTOR_STAT_HOLDRUSH:			prn_cmotor_hold_rush(cmotor_direction);			break;		}		break;	case NPMOTOR:		switch (status) {		case MOTOR_STAT_STOP:			prn_pmotor_stop(pmotor_direction);			break;		case MOTOR_STAT_ACC:			prn_pmotor_acc(pmotor_direction);			break;		case MOTOR_STAT_CONST:			prn_pmotor_const(pmotor_direction);			break;		case MOTOR_STAT_COIL:			prn_pmotor_coil(pmotor_direction);			break;		case MOTOR_STAT_DEC:			prn_pmotor_dec(pmotor_direction);			break;		case MOTOR_STAT_STEP:						prn_pmotor_step(pmotor_direction);			break;					}		break;	}}/******************************************************************* ** ** *******************************************************************/static void arca_prn_interrupt(int irq, void *dev_id, struct pt_regs *regs){	switch (PRN_STATUS()) {	case PRN_BLACKMARK:	case PRN_NEWLINE:	case PRN_PRINTING:	case PRN_PAPERFETCH0:	case PRN_PAPERFETCH1:	case PRN_PAPERFETCH2:		prn_decode_motor_state(MOTOR_STATUS(), MOTOR_NUM());		break;	default:		__prn_irq_mask();		break;	}}/******************************************************************* ** ** *******************************************************************/static int arca_prn_open(struct inode *inode, struct file *filp){	if (prn.opened) {		printk(KERN_INFO "arca_prn: The device BUSY\n");		return -EBUSY;	}	prn.opened = 1;	if ( (filp->f_flags & O_ACCMODE) == O_RDONLY )		printk(KERN_INFO "arca_prn: Need use WR to access this device.\n");	return 0;}/******************************************************************* ** ** *******************************************************************/static int arca_prn_release(struct inode *inode, struct file *filp){	prn.opened = 0;	return 0;}/******************************************************************* ** ** *******************************************************************/static int arca_prn_ioctl(struct inode *inode, struct file *filp,			  unsigned int cmd, unsigned long arg){	sigset_t orig_sigmask;	int rc = 0;	if (PRN_STATUS() != PRN_STANDBY)		if ((PRN_STATUS() != PRN_RST1) || (cmd != PRNIORESET))			return -EFAULT;	if (__prn_paper_end() && (PRN_STATUS() != PRN_RST1)) {		ENCODE_STATUS(PRN_PAPERFETCH1, MOTOR_STAT_ACC, NPMOTOR);		__prn_cmotor_irq_mask();		__prn_pmotor_irq_unmask();		return -EFAULT;	}	switch (cmd) {	case PRNIOPOWEROFF:		REG8(PRN_PMOTOR_PORT1) = 127;		REG8(PRN_PMOTOR_PORT2) = off_i | motor_steps[pmotor_step % 4];		REG8(PRN_CMOTOR_PORT1) = 127;		REG8(PRN_CMOTOR_PORT2) = off_i | motor_steps[cmotor_step % 4];		return rc;	case PRNIORESET:		ENCODE_STATUS(PRN_RST1, 0, 0);		if (arca_prn_reset())			return -EIO;		ENCODE_STATUS(PRN_STANDBY, 0, 0);		return rc;	case PRNIOBLKMARK:		arca_prn_blackmark();		break;	case PRNIONEWLINE:		arca_prn_newline();		break;	case PRNIOPAPERFW:		arca_prn_paper_forward(arg);		break;	case PRNIOPAPERFB:		arca_prn_paper_fallback(arg);		break;	default:		break;	}	orig_sigmask = current->blocked;	sigaddsetmask(&current->blocked,~_DONT_BLOCK);	recalc_sigpending(current);	interruptible_sleep_on(&prn_wait_queue);	current->blocked = orig_sigmask;	if (signal_pending(current)) {		ENCODE_STATUS(PRN_STANDBY, 0, 0);		recalc_sigpending(current);		return -EFAULT;	}	recalc_sigpending(current);	if (PRN_STATUS() == PRN_RST0)		return -EFAULT;	ENCODE_STATUS(PRN_STANDBY, 0, 0);	return rc;}/******************************************************************* ** ** *******************************************************************/static ssize_t arca_prn_write(struct file *filp, const char *buf,			      size_t count, loff_t *ppos){	sigset_t orig_sigmask;	__prn_irq_mask();  /* Add for security -- spark 2004.12.23 */	if (PRN_STATUS() != PRN_STANDBY)		return -EFAULT;	if (__prn_paper_end()) {		ENCODE_STATUS(PRN_PAPERFETCH1, MOTOR_STAT_ACC, NPMOTOR);		__prn_cmotor_irq_mask();		__prn_pmotor_irq_unmask();		return -EFAULT;	}	if (copy_from_user(prn_buffer, buf, count))		return -EFAULT;	prn_line_max_steps = count >> 2;	old_val = 0;	ENCODE_STATUS(PRN_PRINTING, MOTOR_STAT_WORKRUSH, NCMOTOR);	__prn_cmotor_irq_unmask();	orig_sigmask = current->blocked;	sigaddsetmask(&current->blocked,~_DONT_BLOCK);	recalc_sigpending(current);	interruptible_sleep_on(&prn_wait_queue);	current->blocked = orig_sigmask;	if (signal_pending(current)) {		ENCODE_STATUS(PRN_STANDBY, 0, 0);		recalc_sigpending(current);		return -EFAULT;	}	recalc_sigpending(current);	ENCODE_STATUS(PRN_STANDBY, 0, 0);	return count;}/******************************************************************* ** ** *******************************************************************/static unsigned char trigger_count = 0;static void prn_timer_routine(unsigned long dummy){	if ((PRN_STATUS() == PRN_RST0) && (!__prn_paper_end())) 	{		trigger_count ++;		if (trigger_count >= 3) 		{			dprintk("Find paper, enable interrupt.\n");			trigger_count = 0;			if (arca_prn_reset()) 				   ENCODE_STATUS(PRN_RST0, 0, 0);			else 				  {				   ENCODE_STATUS(PRN_PAPERFETCH0, MOTOR_STAT_ACC,NPMOTOR);				   __prn_pmotor_irq_unmask();			    }		 }  }	if ((__prn_paper_end()) && (PRN_STATUS() == PRN_STANDBY))		ENCODE_STATUS(PRN_RST0, 0, 0);	if (__prn_paper_end())		trigger_count = 0;	if ((PRN_STATUS() == PRN_STANDBY) || (PRN_STATUS() == PRN_RST0) ||	    (PRN_STATUS() == PRN_RST1)) {		REG8(PRN_PMOTOR_PORT1) = 127;		REG8(PRN_PMOTOR_PORT2) = off_i | motor_steps[pmotor_step % 4];		REG8(PRN_CMOTOR_PORT1) = 127;		REG8(PRN_CMOTOR_PORT2) = off_i | motor_steps[cmotor_step % 4];	}	init_timer(&prn_timer);	prn_timer.expires = jiffies + PRN_TIMER;	prn_timer.data = 0;	prn_timer.function = prn_timer_routine;	add_timer(&prn_timer);}/******************************************************************* ** ** *******************************************************************/static int __init arca_prn_init(void){	int result;	prn.opened = 0;	__prn_irq_mask();	if (request_irq(PRN_IRQ, arca_prn_interrupt,			SA_INTERRUPT, "arca_prn", &prn)) {		printk(KERN_INFO "arca_prn: IRQ %d is in used.\n", PRN_IRQ);		free_irq(PRN_IRQ, &prn);		return -ENODEV;	}	result = arca_register_chrdev(prn_dev_minor, "arca_prn",				      &arca_prn_fops, &prn);	__prn_pin_init();	if (__prn_paper_end()) 		ENCODE_STATUS(PRN_RST0, 0, 0);	else {		if (arca_prn_reset())			ENCODE_STATUS(PRN_RST1, 0, 0);		else			ENCODE_STATUS(PRN_STANDBY, 0, 0);	}	init_timer(&prn_timer);	prn_timer.expires = jiffies + PRN_TIMER;	prn_timer.data = 0;	prn_timer.function = prn_timer_routine;	add_timer(&prn_timer);		printk("arca_prn: Arca printer driver launched \n");	return 0;}/******************************************************************* ** ** *******************************************************************/static void __exit arca_prn_exit(void){	free_irq(PRN_IRQ, &prn);	del_timer(&prn_timer);	arca_unregister_chrdev(prn_dev_minor, "arca_prn");}MODULE_AUTHOR ("Seeger Chin <lqin@arca.com.cn>");MODULE_DESCRIPTION ("Arca printer driver");MODULE_LICENSE("ARCANDA");MODULE_PARM (debug, "i");module_init(arca_prn_init);module_exit(arca_prn_exit);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丝袜美腿亚洲色图| 九色|91porny| 久久精品综合网| 欧美日韩一区二区三区不卡| 国产精品自拍毛片| 天天亚洲美女在线视频| 国产精品剧情在线亚洲| 日韩视频免费直播| 欧洲精品一区二区| 不卡一二三区首页| 麻豆精品视频在线| 亚洲成人三级小说| 亚洲免费av高清| 国产精品天美传媒| 久久夜色精品一区| 日韩一区和二区| 欧美少妇xxx| 色呦呦国产精品| 成人高清在线视频| 国产成人午夜视频| 黑人巨大精品欧美一区| 青青草原综合久久大伊人精品 | 蜜臀av国产精品久久久久| 亚洲人亚洲人成电影网站色| 久久精品人人做人人综合| 日韩欧美国产电影| 日韩丝袜情趣美女图片| 7777女厕盗摄久久久| 欧美吞精做爰啪啪高潮| 色视频成人在线观看免| 99久久精品国产精品久久| 风间由美一区二区三区在线观看| 国产在线播放一区三区四| 美女一区二区久久| 美女免费视频一区| 美脚の诱脚舐め脚责91 | 中文字幕一区二区在线观看| 国产亚洲人成网站| 国产午夜精品一区二区三区嫩草 | 国产精品久久久久永久免费观看| 久久精品人人爽人人爽| 国产亚洲一区二区在线观看| 精品国产成人在线影院| 欧美精品一区二区三区蜜桃| 久久免费的精品国产v∧| 久久久天堂av| 国产精品天干天干在线综合| 136国产福利精品导航| 亚洲色欲色欲www在线观看| 亚洲人吸女人奶水| 午夜精品爽啪视频| 男女性色大片免费观看一区二区 | 91丨九色丨国产丨porny| 91女厕偷拍女厕偷拍高清| 91美女在线看| 欧美日韩国产欧美日美国产精品| 欧美精品乱码久久久久久按摩| 欧美一级二级三级乱码| 久久久久99精品国产片| 国产精品二三区| 亚洲自拍偷拍网站| 久久福利视频一区二区| 成人性视频网站| 欧美在线看片a免费观看| 日韩一区二区三区观看| 国产日韩一级二级三级| 亚洲狼人国产精品| 蜜桃久久久久久| 成人免费精品视频| 欧美色中文字幕| 欧美精品一区二区三区蜜桃视频| 国产精品美女久久久久久久久 | 亚洲精品五月天| 日韩高清不卡一区二区三区| 国产一区二区在线观看免费| 亚洲人成网站在线| 韩国三级电影一区二区| 亚洲视频一区在线| 一区二区三区精品在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产在线视频精品一区| 色综合久久久久综合体| 欧美tickling挠脚心丨vk| 国产精品久久三| 奇米综合一区二区三区精品视频| 国产.欧美.日韩| 欧美伦理电影网| 中文字幕制服丝袜一区二区三区| 亚洲成人av一区二区| 国产精品一区二区不卡| 欧美视频完全免费看| 中文字幕欧美三区| 日韩av不卡一区二区| 99久久综合色| 久久综合久色欧美综合狠狠| 亚洲一线二线三线视频| 国产成人丝袜美腿| 91精品欧美久久久久久动漫| 中文字幕在线观看一区二区| 美女脱光内衣内裤视频久久网站 | 国产精品嫩草影院av蜜臀| 午夜天堂影视香蕉久久| 成人激情电影免费在线观看| 91精品国产综合久久香蕉的特点| 成人免费在线观看入口| 国产一区二三区好的| 日韩欧美在线123| 亚洲午夜电影在线观看| 91网址在线看| 亚洲欧美在线视频| 国产精品一二一区| 精品久久久久久无| 性感美女久久精品| 在线区一区二视频| |精品福利一区二区三区| 国产成人免费在线观看不卡| 日韩色在线观看| 五月婷婷综合网| 在线影视一区二区三区| 中文字幕在线不卡一区二区三区| 国产69精品久久久久777| 精品播放一区二区| 久久99在线观看| 日韩欧美高清一区| 日韩精品免费视频人成| 欧美日韩电影一区| 五月综合激情网| 这里只有精品99re| 日韩激情一区二区| 3751色影院一区二区三区| 亚洲电影你懂得| 欧美日韩一级大片网址| 香蕉成人伊视频在线观看| 欧美色欧美亚洲另类二区| 亚洲一区二区3| 欧美日韩国产一区| 婷婷综合五月天| 欧美一区二区视频网站| 日本成人中文字幕在线视频| 日韩视频免费观看高清完整版 | 美女在线一区二区| 日韩三级av在线播放| 捆绑调教一区二区三区| 精品国产在天天线2019| 国产精品亚洲成人| 欧美国产欧美综合| 一本色道a无线码一区v| 亚洲最大的成人av| 欧美日本乱大交xxxxx| 日本sm残虐另类| 欧美精品一区二区蜜臀亚洲| 国产成人精品免费视频网站| 亚洲色欲色欲www在线观看| 欧美日韩亚洲另类| 日韩精品成人一区二区在线| 精品奇米国产一区二区三区| 国产成都精品91一区二区三| 国产精品久久久久久亚洲伦| 在线观看日产精品| 麻豆成人久久精品二区三区红 | 中文在线一区二区| 91免费在线视频观看| 亚洲亚洲精品在线观看| 91精品国产91久久综合桃花| 国产美女在线观看一区| 一区在线播放视频| 欧美日韩mp4| 国产又黄又大久久| 最新热久久免费视频| 欧美日韩一区二区三区免费看 | 亚洲欧洲性图库| 欧美肥妇bbw| 国产精品456露脸| 一区二区三国产精华液| 日韩三级视频在线观看| 成人黄色免费短视频| 亚洲成av人片在线观看无码| 久久亚区不卡日本| 91福利在线导航| 国产精品一区在线观看你懂的| 综合网在线视频| 欧美电影免费观看高清完整版在线 | 91电影在线观看| 美女一区二区在线观看| 亚洲理论在线观看| 国产性天天综合网| 欧美日韩aaa| 91香蕉视频在线| 国产真实乱子伦精品视频| 一区二区三区中文字幕| 久久你懂得1024| 7799精品视频| 色香蕉成人二区免费| 国产一区二区在线观看免费| 日日夜夜精品视频天天综合网| 国产精品全国免费观看高清 | 日本一区二区视频在线观看| 欧美高清视频不卡网| 色综合网站在线| 国产成人亚洲综合a∨婷婷|