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