Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include <u.h>
2
#include <libc.h>
3
#include <bio.h>
4
 
5
#include "modem.h"
6
 
7
int
8
initfaxmodem(Modem *m)
9
{
10
	m->fax = 1;
11
	m->phase = 'A';
12
	m->valid = 0;
13
 
14
	return Eok;
15
}
16
 
17
static int
18
parameters(long a[], char *s)
19
{
20
	char *p;
21
	int i;
22
 
23
	i = 0;
24
	if((p = strchr(s, ':')) == 0)
25
		return 0;
26
	p++;
27
	while(s = strchr(p, ',')){
28
		a[i++] = strtol(p, 0, 10);
29
		p = s+1;
30
	}
31
	if(p)
32
		a[i++] = strtol(p, 0, 10);
33
 
34
	return i;
35
}
36
 
37
int
38
fcon(Modem *m)
39
{
40
	verbose("fcon: %s", m->response);
41
	if(m->fax == 0 || m->phase != 'A')
42
		return Rrerror;
43
	m->phase = 'B';
44
	return Rcontinue;
45
}
46
 
47
int
48
ftsi(Modem *m)
49
{
50
	char *p, *q;
51
 
52
	verbose("ftsi: %s", m->response);
53
	if((p = strchr(m->response, '"')) == 0 || (q = strrchr(p+1, '"')) == 0)
54
		return Rrerror;
55
	while(*++p == ' ')
56
		;
57
	*q = 0;
58
	if((m->valid &  Vftsi) == 0){
59
		strncpy(m->ftsi, p, sizeof(m->ftsi)-1);
60
		m->valid |= Vftsi;
61
	}
62
	return Rcontinue;
63
}
64
 
65
int
66
fdcs(Modem *m)
67
{
68
	verbose("fdcs: %s", m->response);
69
	parameters(m->fdcs, m->response);
70
	m->valid |= Vfdcs;
71
	return Rcontinue;
72
}
73
 
74
int
75
fcfr(Modem *m)
76
{
77
	verbose("fcfr: %s", m->response);
78
	if(m->fax == 0)
79
		return Rrerror;
80
	/* ???? */
81
	return Rcontinue;
82
}
83
 
84
int
85
fpts(Modem *m)
86
{
87
	verbose("fpts: %s", m->response);
88
	if(m->fax == 0)
89
		return Rrerror;
90
	parameters(m->fpts, m->response);
91
	m->valid |= Vfpts;
92
	return Rcontinue;
93
}
94
 
95
int
96
fet(Modem *m)
97
{
98
	char *p;
99
 
100
	verbose("fet: %s", m->response);
101
	if(m->fax == 0 || (p = strchr(m->response, ':')) == 0)
102
		return Rrerror;
103
	m->fet = strtol(p+1, 0, 10);
104
	m->valid |= Vfet;
105
	return Rcontinue;
106
}
107
 
108
int
109
fhng(Modem *m)
110
{
111
	char *p;
112
 
113
	verbose("fhng: %s", m->response);
114
	if(m->fax == 0 || (p = strchr(m->response, ':')) == 0)
115
		return Rrerror;
116
	m->fhng = strtol(p+1, 0, 10);
117
	m->valid |= Vfhng;
118
	return Rhangup;
119
}