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

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

?? u110.c

?? linux下打印驅動源代碼 適用于雙步進針打驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
     else {	//字車反向走動			__prn_pmotor_irq_mask();			ENCODE_STATUS(PRN_PRINTING, MOTOR_STAT_WORKRUSH, NCMOTOR);			__prn_cmotor_irq_unmask();		}		break;	case PRN_PAPERFETCH1:		ENCODE_STATUS(PRN_RST0, 0, 0);		wake_up(&prn_wait_queue);		__prn_irq_mask();		break;	default:		if ((PRN_STATUS() == PRN_PAPERFETCH2) &&		    (pmotor_direction == 0) &&		    !(__prn_paper_end()))			pmotor_direction = 1;		if (__prn_paper_end())			ENCODE_STATUS(PRN_PAPERFETCH1, MOTOR_STAT_ACC, NPMOTOR);		else {			ENCODE_STATUS(PRN_STANDBY, 0, 0);			wake_up(&prn_wait_queue);			__prn_irq_mask();		}		break;	}}/******************************************************************* ** ** *******************************************************************/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;static 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);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人18视频日本| 精品午夜久久福利影院| 国产精品日产欧美久久久久| 日韩你懂的电影在线观看| 欧美日韩免费观看一区二区三区| av在线不卡观看免费观看| 成人免费不卡视频| 成人av网在线| 99久精品国产| 色偷偷一区二区三区| 在线观看日韩电影| 欧美人与禽zozo性伦| 69堂成人精品免费视频| 欧美高清视频不卡网| 欧美成人乱码一区二区三区| 欧美mv和日韩mv国产网站| 国产婷婷色一区二区三区 | 亚洲精品高清在线| 亚洲综合一区二区三区| 视频精品一区二区| 韩国精品主播一区二区在线观看| 国产精品中文有码| 日本久久电影网| 91精品国产免费| 久久精品亚洲精品国产欧美 | 亚洲无线码一区二区三区| 午夜精品爽啪视频| 精品亚洲porn| 色综合中文字幕国产 | 亚洲韩国精品一区| 美女视频黄久久| 91在线porny国产在线看| 欧美性大战久久久久久久蜜臀 | 色综合久久88色综合天天| 欧美日韩极品在线观看一区| 精品国产一区二区精华| 中文字幕亚洲在| 天天综合色天天综合色h| 国产精品中文字幕日韩精品| 91成人免费在线视频| 日韩精品一区二区三区四区| 中文字幕视频一区二区三区久| 亚洲国产美国国产综合一区二区 | 国产清纯在线一区二区www| 亚洲欧美色一区| 国产在线一区观看| 欧美日韩一区二区欧美激情 | 欧美色窝79yyyycom| 国产亚洲va综合人人澡精品| 亚洲午夜激情av| 国产成人精品1024| 日韩视频在线观看一区二区| 一区二区免费在线| 成人av在线一区二区三区| 欧美一区二区三区精品| 亚洲免费在线看| 成人性色生活片| 日韩一级大片在线观看| 亚洲免费看黄网站| 成人免费观看男女羞羞视频| 精品欧美乱码久久久久久| 亚洲第一成年网| 色综合婷婷久久| 国产精品久久久久久久久免费桃花 | www.欧美日韩国产在线| 精品毛片乱码1区2区3区| 亚洲大尺度视频在线观看| 99re视频这里只有精品| 国产视频一区在线播放| 麻豆一区二区三| 欧美一级xxx| 丝袜亚洲精品中文字幕一区| 欧美视频一区在线| 亚洲一区在线播放| 91成人国产精品| 亚洲精品欧美二区三区中文字幕| 成人精品国产一区二区4080| 国产精品美女久久久久久久久 | 亚洲午夜激情网站| 欧美在线视频不卡| 亚洲不卡一区二区三区| 91精品麻豆日日躁夜夜躁| 日本vs亚洲vs韩国一区三区二区| 日韩视频免费观看高清完整版在线观看 | 亚洲免费观看在线视频| 91在线国产观看| 一区二区理论电影在线观看| 精品视频色一区| 免费观看日韩av| 欧美精品一区二区三区在线| 国产激情精品久久久第一区二区| 国产性色一区二区| 色婷婷av久久久久久久| 香港成人在线视频| 精品国产乱码久久久久久久久| 国产伦精品一区二区三区在线观看| 久久免费视频色| 91亚洲国产成人精品一区二三| 一区二区三区中文免费| 制服丝袜激情欧洲亚洲| 国产一二精品视频| 中文字幕佐山爱一区二区免费| 在线免费观看日本一区| 免费人成黄页网站在线一区二区| 久久综合色综合88| 99在线精品视频| 日韩一区精品字幕| 国产精品国产三级国产普通话99 | 精品不卡在线视频| 国产91精品免费| 亚洲综合色区另类av| 欧美一级片在线| 成人免费视频视频在线观看免费| 亚洲精品亚洲人成人网| 日韩美女主播在线视频一区二区三区| 国产成人av电影在线播放| 亚洲一区二区在线免费观看视频 | 国产精品久久久久久亚洲毛片| 欧美色综合网站| 成人开心网精品视频| 亚洲va天堂va国产va久| 中文字幕精品一区二区三区精品| 欧美日韩一区二区三区四区| 成人动漫一区二区三区| 日本亚洲免费观看| 一区av在线播放| 国产人久久人人人人爽| 欧美一区二区三区人| 91福利小视频| 99久久久久久| 国产在线一区二区| 蜜臀精品久久久久久蜜臀| 亚洲自拍偷拍欧美| 亚洲欧洲成人av每日更新| 欧美成人免费网站| 欧美一区二区黄色| 欧美色视频在线观看| 99久久精品国产观看| 国产成人精品免费网站| 国产真实乱子伦精品视频| 久久成人麻豆午夜电影| 亚洲国产日韩一级| 一区二区高清视频在线观看| 国产精品久久久久aaaa樱花| 日韩欧美国产1| 欧美成人vr18sexvr| 6080亚洲精品一区二区| 欧美精品色一区二区三区| 色老汉av一区二区三区| 色综合久久综合网欧美综合网| 国产不卡在线视频| 国产成a人亚洲精| 成人性生交大片免费看中文| 国产宾馆实践打屁股91| 国产aⅴ精品一区二区三区色成熟| 精品在线视频一区| 国产在线精品一区二区夜色| 日韩av电影天堂| 日韩av一区二区在线影视| 偷窥少妇高潮呻吟av久久免费| 亚洲国产视频网站| 同产精品九九九| 久久精品99久久久| 国产成人在线视频网址| 国产99一区视频免费| 91日韩一区二区三区| 欧美在线一区二区| 欧美一区二区网站| 精品黑人一区二区三区久久| 久久久久久久久蜜桃| 中文字幕欧美国产| 亚洲制服丝袜av| 久久国产人妖系列| 丰满少妇在线播放bd日韩电影| 99re视频精品| 欧美一级国产精品| 国产嫩草影院久久久久| 亚洲视频一二三| 久久精品国产一区二区三| 国产成人av电影在线| 欧美午夜一区二区三区免费大片| 91麻豆精品久久久久蜜臀 | 亚洲精品乱码久久久久久黑人| 亚洲小说欧美激情另类| 久久激情五月激情| 99久久久久久| 欧美电视剧在线观看完整版| 国产精品区一区二区三区| 亚洲国产精品一区二区久久 | 99re视频精品| 日韩欧美视频在线| 亚洲视频你懂的| 国产在线视频精品一区| 欧美自拍偷拍午夜视频| 久久精品视频免费| 亚洲成人福利片| 成人福利视频在线| 国产精品久久久一区麻豆最新章节| 亚洲精品五月天| 国产91色综合久久免费分享|