⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isdn_ttyfax.c

📁 linux-2.6.15.6
💻 C
📖 第 1 页 / 共 2 页
字号:
	/* BUF? - Readonly buffersize readout  */	if (!strncmp(p[0], "BUF?", 4)) {		p[0] += 4;#ifdef ISDN_TTY_FAX_STAT_DEBUG		printk(KERN_DEBUG "isdn_tty: Fax FBUF? (%d) \n", (16 * m->mdmreg[REG_PSIZE]));#endif		p[0]++;		sprintf(rs, "\r\n %d ", (16 * m->mdmreg[REG_PSIZE]));		isdn_tty_at_cout(rs, info);		return 0;	}	/* CIG=string - local fax station id string for polling rx */	if (!strncmp(p[0], "CIG", 3)) {		int i, r;		p[0] += 3;		switch (*p[0]) {			case '?':				p[0]++;				sprintf(rs, "\r\n\"%s\"", f->pollid);				isdn_tty_at_cout(rs, info);				break;			case '=':				p[0]++;				if (*p[0] == '?') {					p[0]++;					sprintf(rs, "\r\n\"STRING\"");					isdn_tty_at_cout(rs, info);				} else {					if (*p[0] == '"')						p[0]++;					for (i = 0; (*p[0]) && i < (FAXIDLEN - 1) && (*p[0] != '"'); i++) {						f->pollid[i] = *p[0]++;					}					if (*p[0] == '"')						p[0]++;					for (r = i; r < FAXIDLEN; r++) {						f->pollid[r] = 32;					}					f->pollid[FAXIDLEN - 1] = 0;#ifdef ISDN_TTY_FAX_STAT_DEBUG					printk(KERN_DEBUG "isdn_tty: Fax local poll ID rx \"%s\"\n", f->pollid);#endif				}				break;			default:				PARSE_ERROR1;		}		return 0;	}	/* CQ=n - copy qlty chk, 0= no chk, 1=only 1D chk, 2=1D+2D chk */	if (!strncmp(p[0], "CQ", 2)) {		p[0] += 2;		switch (*p[0]) {			case '?':				p[0]++;				sprintf(rs, "\r\n%d", f->cq);				isdn_tty_at_cout(rs, info);				break;			case '=':				p[0]++;				if (*p[0] == '?') {					p[0]++;					sprintf(rs, "\r\n0,1,2");					isdn_tty_at_cout(rs, info);				} else {					par = isdn_getnum(p);					if ((par < 0) || (par > 2))						PARSE_ERROR1;					f->cq = par;#ifdef ISDN_TTY_FAX_STAT_DEBUG					printk(KERN_DEBUG "isdn_tty: Fax FCQ=%d\n", par);#endif				}				break;			default:				PARSE_ERROR1;		}		return 0;	}	/* CR=n - can receive? 0= no data rx or poll remote dev, 1=do receive data or poll remote dev */	if (!strncmp(p[0], "CR", 2)) {		p[0] += 2;		switch (*p[0]) {			case '?':				p[0]++;				sprintf(rs, "\r\n%d", f->cr);	/* read actual value from struct and print */				isdn_tty_at_cout(rs, info);				break;			case '=':				p[0]++;				if (*p[0] == '?') {					p[0]++;					sprintf(rs, "\r\n0,1");		/* display online help */					isdn_tty_at_cout(rs, info);				} else {					par = isdn_getnum(p);					if ((par < 0) || (par > 1))						PARSE_ERROR1;					f->cr = par;#ifdef ISDN_TTY_FAX_STAT_DEBUG					printk(KERN_DEBUG "isdn_tty: Fax FCR=%d\n", par);#endif				}				break;			default:				PARSE_ERROR1;		}		return 0;	}	/* CTCRTY=value - ECM retry count */	if (!strncmp(p[0], "CTCRTY", 6)) {		p[0] += 6;		switch (*p[0]) {			case '?':				p[0]++;				sprintf(rs, "\r\n%d", f->ctcrty);				isdn_tty_at_cout(rs, info);				break;			case '=':				p[0]++;				if (*p[0] == '?') {					p[0]++;					sprintf(rs, "\r\n0-255");					isdn_tty_at_cout(rs, info);				} else {					par = isdn_getnum(p);					if ((par < 0) || (par > 255))						PARSE_ERROR1;					f->ctcrty = par;#ifdef ISDN_TTY_FAX_STAT_DEBUG					printk(KERN_DEBUG "isdn_tty: Fax FCTCRTY=%d\n", par);#endif				}				break;			default:				PARSE_ERROR1;		}		return 0;	}	/* DCC=vr,br,wd,ln,df,ec,bf,st - DCE capabilities parms */	if (!strncmp(p[0], "DCC", 3)) {		char *rp = &f->resolution;		int i;		p[0] += 3;		switch (*p[0]) {			case '?':				p[0]++;				strcpy(rs, "\r\n");				for (i = 0; i < 8; i++) {					sprintf(rss, "%c%s", rp[i] + 48,						(i < 7) ? "," : "");					strcat(rs, rss);				}				isdn_tty_at_cout(rs, info);				break;			case '=':				p[0]++;				if (*p[0] == '?') {					isdn_tty_at_cout("\r\n(0,1),(0-5),(0-2),(0-2),(0-3),(0-2),(0),(0-7)", info);					p[0]++;				} else {					for (i = 0; (((*p[0] >= '0') && (*p[0] <= '9')) || (*p[0] == ',')) && (i < 8); i++) {						if (*p[0] != ',') {							if ((*p[0] - 48) > maxdccval[i]) {								PARSE_ERROR1;							}							rp[i] = *p[0] - 48;							p[0]++;							if (*p[0] == ',')								p[0]++;						} else							p[0]++;					}#ifdef ISDN_TTY_FAX_STAT_DEBUG					printk(KERN_DEBUG "isdn_tty: Fax FDCC capabilities DCE=%d,%d,%d,%d,%d,%d,%d,%d\n",					       rp[0], rp[1], rp[2], rp[3], rp[4], rp[5], rp[6], rp[7]);#endif				}				break;			default:				PARSE_ERROR1;		}		return 0;	}	/* DIS=vr,br,wd,ln,df,ec,bf,st - current session parms */	if (!strncmp(p[0], "DIS", 3)) {		char *rp = &f->resolution;		int i;		p[0] += 3;		switch (*p[0]) {			case '?':				p[0]++;				strcpy(rs, "\r\n");				for (i = 0; i < 8; i++) {					sprintf(rss, "%c%s", rp[i] + 48,						(i < 7) ? "," : "");					strcat(rs, rss);				}				isdn_tty_at_cout(rs, info);				break;			case '=':				p[0]++;				if (*p[0] == '?') {					isdn_tty_at_cout("\r\n(0,1),(0-5),(0-2),(0-2),(0-3),(0-2),(0),(0-7)", info);					p[0]++;				} else {					for (i = 0; (((*p[0] >= '0') && (*p[0] <= '9')) || (*p[0] == ',')) && (i < 8); i++) {						if (*p[0] != ',') {							if ((*p[0] - 48) > maxdccval[i]) {								PARSE_ERROR1;							}							rp[i] = *p[0] - 48;							p[0]++;							if (*p[0] == ',')								p[0]++;						} else							p[0]++;					}#ifdef ISDN_TTY_FAX_STAT_DEBUG					printk(KERN_DEBUG "isdn_tty: Fax FDIS session parms=%d,%d,%d,%d,%d,%d,%d,%d\n",					       rp[0], rp[1], rp[2], rp[3], rp[4], rp[5], rp[6], rp[7]);#endif				}				break;			default:				PARSE_ERROR1;		}		return 0;	}	/* DR - Receive Phase C data command, initiates document reception */	if (!strncmp(p[0], "DR", 2)) {		p[0] += 2;		if ((info->faxonline & 16) &&	/* incoming connection */		    ((f->phase == ISDN_FAX_PHASE_B) || (f->phase == ISDN_FAX_PHASE_D))) {#ifdef ISDN_TTY_FAX_STAT_DEBUG			printk(KERN_DEBUG "isdn_tty: Fax FDR\n");#endif			f->code = ISDN_TTY_FAX_DR;			cmd.driver = info->isdn_driver;			cmd.arg = info->isdn_channel;			cmd.command = ISDN_CMD_FAXCMD;			isdn_command(&cmd);			if (f->phase == ISDN_FAX_PHASE_B) {				f->phase = ISDN_FAX_PHASE_C;			} else if (f->phase == ISDN_FAX_PHASE_D) {				switch (f->fet) {					case 0:	/* next page will be received */						f->phase = ISDN_FAX_PHASE_C;						isdn_tty_fax_modem_result(7, info);	/* CONNECT */						break;					case 1:	/* next doc will be received */						f->phase = ISDN_FAX_PHASE_B;						break;					case 2:	/* fax session is terminating */						f->phase = ISDN_FAX_PHASE_E;						break;					default:						PARSE_ERROR1;				}			}		} else {			PARSE_ERROR1;		}		return 1;	}	/* DT=df,vr,wd,ln - TX phase C data command (release DCE to proceed with negotiation) */	if (!strncmp(p[0], "DT", 2)) {		int i, val[] =		{4, 0, 2, 3};		char *rp = &f->resolution;		p[0] += 2;		if (!info->faxonline & 1)	/* not outgoing connection */			PARSE_ERROR1;		for (i = 0; (((*p[0] >= '0') && (*p[0] <= '9')) || (*p[0] == ',')) && (i < 4); i++) {			if (*p[0] != ',') {				if ((*p[0] - 48) > maxdccval[val[i]]) {					PARSE_ERROR1;				}				rp[val[i]] = *p[0] - 48;				p[0]++;				if (*p[0] == ',')					p[0]++;			} else				p[0]++;		}#ifdef ISDN_TTY_FAX_STAT_DEBUG		printk(KERN_DEBUG "isdn_tty: Fax FDT tx data command parms=%d,%d,%d,%d\n",		       rp[4], rp[0], rp[2], rp[3]);#endif		if ((f->phase == ISDN_FAX_PHASE_B) || (f->phase == ISDN_FAX_PHASE_D)) {			f->code = ISDN_TTY_FAX_DT;			cmd.driver = info->isdn_driver;			cmd.arg = info->isdn_channel;			cmd.command = ISDN_CMD_FAXCMD;			isdn_command(&cmd);			if (f->phase == ISDN_FAX_PHASE_D) {				f->phase = ISDN_FAX_PHASE_C;				isdn_tty_fax_modem_result(7, info);	/* CONNECT */			}		} else {			PARSE_ERROR1;		}		return 1;	}	/* ECM=n - Error mode control 0=disabled, 2=enabled, handled by DCE alone incl. buff of partial pages */	if (!strncmp(p[0], "ECM", 3)) {		p[0] += 3;		switch (*p[0]) {			case '?':				p[0]++;				sprintf(rs, "\r\n%d", f->ecm);				isdn_tty_at_cout(rs, info);				break;			case '=':				p[0]++;				if (*p[0] == '?') {					p[0]++;					sprintf(rs, "\r\n0,2");					isdn_tty_at_cout(rs, info);				} else {					par = isdn_getnum(p);					if ((par != 0) && (par != 2))						PARSE_ERROR1;					f->ecm = par;#ifdef ISDN_TTY_FAX_STAT_DEBUG					printk(KERN_DEBUG "isdn_tty: Fax FECM=%d\n", par);#endif				}				break;			default:				PARSE_ERROR1;		}		return 0;	}	/* ET=n - End of page or document */	if (!strncmp(p[0], "ET=", 3)) {		p[0] += 3;		if (*p[0] == '?') {			p[0]++;			sprintf(rs, "\r\n0-2");			isdn_tty_at_cout(rs, info);		} else {			if ((f->phase != ISDN_FAX_PHASE_D) || (!info->faxonline & 1))				PARSE_ERROR1;			par = isdn_getnum(p);			if ((par < 0) || (par > 2))				PARSE_ERROR1;			f->fet = par;			f->code = ISDN_TTY_FAX_ET;			cmd.driver = info->isdn_driver;			cmd.arg = info->isdn_channel;			cmd.command = ISDN_CMD_FAXCMD;			isdn_command(&cmd);#ifdef ISDN_TTY_FAX_STAT_DEBUG			printk(KERN_DEBUG "isdn_tty: Fax FET=%d\n", par);#endif			return 1;		}		return 0;	}	/* K - terminate */	if (!strncmp(p[0], "K", 1)) {		p[0] += 1;		if ((f->phase == ISDN_FAX_PHASE_IDLE) || (f->phase == ISDN_FAX_PHASE_E))			PARSE_ERROR1;		isdn_tty_modem_hup(info, 1);		return 1;	}	/* LID=string - local fax ID */	if (!strncmp(p[0], "LID", 3)) {		int i, r;		p[0] += 3;		switch (*p[0]) {			case '?':				p[0]++;				sprintf(rs, "\r\n\"%s\"", f->id);				isdn_tty_at_cout(rs, info);				break;			case '=':				p[0]++;				if (*p[0] == '?') {					p[0]++;					sprintf(rs, "\r\n\"STRING\"");					isdn_tty_at_cout(rs, info);				} else {					if (*p[0] == '"')						p[0]++;					for (i = 0; (*p[0]) && i < (FAXIDLEN - 1) && (*p[0] != '"'); i++) {						f->id[i] = *p[0]++;					}					if (*p[0] == '"')						p[0]++;					for (r = i; r < FAXIDLEN; r++) {						f->id[r] = 32;					}					f->id[FAXIDLEN - 1] = 0;#ifdef ISDN_TTY_FAX_STAT_DEBUG					printk(KERN_DEBUG "isdn_tty: Fax local ID \"%s\"\n", f->id);#endif				}				break;			default:				PARSE_ERROR1;		}		return 0;	}	/* MDL? - DCE Model       */	if (!strncmp(p[0], "MDL?", 4)) {		p[0] += 4;#ifdef ISDN_TTY_FAX_STAT_DEBUG		printk(KERN_DEBUG "isdn_tty: FMDL?\n");#endif		isdn_tty_at_cout("\r\nisdn4linux", info);		return 0;	}	/* MFR? - DCE Manufacturer */	if (!strncmp(p[0], "MFR?", 4)) {		p[0] += 4;#ifdef ISDN_TTY_FAX_STAT_DEBUG		printk(KERN_DEBUG "isdn_tty: FMFR?\n");#endif		isdn_tty_at_cout("\r\nisdn4linux", info);		return 0;	}	/* MINSP=n - Minimum Speed for Phase C */	if (!strncmp(p[0], "MINSP", 5)) {		p[0] += 5;		switch (*p[0]) {			case '?':				p[0]++;				sprintf(rs, "\r\n%d", f->minsp);				isdn_tty_at_cout(rs, info);				break;			case '=':				p[0]++;				if (*p[0] == '?') {					p[0]++;					sprintf(rs, "\r\n0-5");					isdn_tty_at_cout(rs, info);				} else {					par = isdn_getnum(p);					if ((par < 0) || (par > 5))						PARSE_ERROR1;					f->minsp = par;#ifdef ISDN_TTY_FAX_STAT_DEBUG					printk(KERN_DEBUG "isdn_tty: Fax FMINSP=%d\n", par);#endif				}				break;			default:				PARSE_ERROR1;		}		return 0;	}	/* PHCTO=value - DTE phase C timeout */	if (!strncmp(p[0], "PHCTO", 5)) {		p[0] += 5;		switch (*p[0]) {			case '?':				p[0]++;				sprintf(rs, "\r\n%d", f->phcto);				isdn_tty_at_cout(rs, info);				break;			case '=':				p[0]++;				if (*p[0] == '?') {					p[0]++;					sprintf(rs, "\r\n0-255");					isdn_tty_at_cout(rs, info);				} else {					par = isdn_getnum(p);					if ((par < 0) || (par > 255))						PARSE_ERROR1;					f->phcto = par;#ifdef ISDN_TTY_FAX_STAT_DEBUG					printk(KERN_DEBUG "isdn_tty: Fax FPHCTO=%d\n", par);#endif				}				break;			default:				PARSE_ERROR1;		}		return 0;	}	/* REL=n - Phase C received EOL alignment */	if (!strncmp(p[0], "REL", 3)) {		p[0] += 3;		switch (*p[0]) {			case '?':				p[0]++;				sprintf(rs, "\r\n%d", f->rel);				isdn_tty_at_cout(rs, info);				break;			case '=':				p[0]++;				if (*p[0] == '?') {					p[0]++;					sprintf(rs, "\r\n0,1");					isdn_tty_at_cout(rs, info);				} else {					par = isdn_getnum(p);					if ((par < 0) || (par > 1))						PARSE_ERROR1;					f->rel = par;#ifdef ISDN_TTY_FAX_STAT_DEBUG					printk(KERN_DEBUG "isdn_tty: Fax FREL=%d\n", par);#endif				}				break;			default:				PARSE_ERROR1;		}		return 0;	}	/* REV? - DCE Revision */	if (!strncmp(p[0], "REV?", 4)) {		p[0] += 4;#ifdef ISDN_TTY_FAX_STAT_DEBUG		printk(KERN_DEBUG "isdn_tty: FREV?\n");#endif		strcpy(rss, isdn_tty_fax_revision);		sprintf(rs, "\r\nRev: %s", isdn_getrev(rss));		isdn_tty_at_cout(rs, info);		return 0;	}	/* Phase C Transmit Data Block Size */	if (!strncmp(p[0], "TBC=", 4)) {	/* dummy, not used */		p[0] += 4;#ifdef ISDN_TTY_FAX_STAT_DEBUG		printk(KERN_DEBUG "isdn_tty: Fax FTBC=%c\n", *p[0]);#endif		switch (*p[0]) {			case '0':				p[0]++;				break;			default:				PARSE_ERROR1;		}		return 0;	}	printk(KERN_DEBUG "isdn_tty: unknown token=>AT+F%s<\n", p[0]);	PARSE_ERROR1;}intisdn_tty_cmd_PLUSF_FAX(char **p, modem_info * info){	if (TTY_IS_FCLASS2(info))		return (isdn_tty_cmd_FCLASS2(p, info));	else if (TTY_IS_FCLASS1(info))		return (isdn_tty_cmd_FCLASS1(p, info));	PARSE_ERROR1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -