annotate uptools/atcmd/atinterf.c @ 927:4e243402f453

rvinterf/lowlevel: use libprint for backslash-escape output
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 23 May 2023 03:59:42 +0000
parents f0e9bb28b4d6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
348
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 * This module implements the interface functions to the AT command phone or
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * modem to be used by the rest of the FreeCalypso User Phone tools suite.
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 */
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 #include <sys/types.h>
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 #include <stdio.h>
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 #include <stdlib.h>
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 #include <string.h>
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 #include <strings.h>
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 #include <unistd.h>
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 #include "../../rvinterf/include/exitcodes.h"
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 static char atinterf_pathname[] = "/opt/freecalypso/bin/fcup-atinterf";
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 static char rvtat_pathname[] = "/opt/freecalypso/bin/fcup-rvtat";
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 static char shell_pathname[] = "/bin/sh";
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 char *target_ttyport, *target_baud, *external_prog;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 int rvtat_mode, no_target_mode;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 static char *backend_prog, *backend_argv[6];
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 FILE *cpipeF, *rpipeF;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 char at_response[514];
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 atinterf_cmdline_opt(opt)
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 extern char *optarg;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 switch (opt) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 case 'B':
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 target_baud = optarg;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 return(1);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 case 'n':
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 no_target_mode = 1;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 return(1);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 case 'p':
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 target_ttyport = optarg;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 return(1);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 case 'R':
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 rvtat_mode = 1;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 return(1);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 case 'X':
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 external_prog = optarg;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 return(1);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 return(0);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 static void
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 preen_port_baud_config()
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 if (!target_ttyport && target_baud) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 fprintf(stderr, "error: -B option invalid without -p\n");
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 exit(ERROR_USAGE);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 if (rvtat_mode)
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 return;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 if (!target_ttyport) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 target_ttyport = getenv("FC_GSM_DEVICE");
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 if (!target_ttyport) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 fprintf(stderr,
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 "error: no FC GSM device target specified\n");
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 exit(ERROR_USAGE);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 if (!target_baud)
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 target_baud = "115200";
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 static void
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 setup_be_native_at()
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 backend_prog = atinterf_pathname;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 backend_argv[0] = "fcup-atinterf";
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 backend_argv[1] = target_ttyport;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 backend_argv[2] = target_baud;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 backend_argv[3] = 0;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 static void
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 setup_be_rvtat()
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 char **ap;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 backend_prog = rvtat_pathname;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 ap = backend_argv;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 *ap++ = "fcup-rvtat";
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 if (target_ttyport) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 *ap++ = "-p";
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 *ap++ = target_ttyport;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 if (target_baud) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 *ap++ = "-B";
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 *ap++ = target_baud;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 *ap = 0;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 static void
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 setup_be_external()
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 backend_prog = shell_pathname;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 backend_argv[0] = "sh";
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 backend_argv[1] = "-c";
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 backend_argv[2] = external_prog;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 backend_argv[3] = 0;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 atinterf_init()
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 int cpipe[2], rpipe[2], rc;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112
350
9ffaeb6fea1a uptools/atcmd/atinterf.c: logic inversion error
Mychaela Falconia <falcon@freecalypso.org>
parents: 348
diff changeset
113 if (no_target_mode)
348
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114 return(0);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 if (external_prog)
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 setup_be_external();
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117 else {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 preen_port_baud_config();
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 if (rvtat_mode)
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120 setup_be_rvtat();
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121 else
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 setup_be_native_at();
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 if (pipe(cpipe) < 0 || pipe(rpipe) < 0) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 perror("pipe");
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 exit(ERROR_UNIX);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 rc = vfork();
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 if (rc < 0) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130 perror("vfork for launching back end");
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131 exit(ERROR_UNIX);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 if (!rc) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134 /* we are in the child - prepare to exec the BE */
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135 dup2(cpipe[0], 0);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 dup2(rpipe[1], 1);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137 close(cpipe[0]);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138 close(cpipe[1]);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139 close(rpipe[0]);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140 close(rpipe[1]);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141 /* do the exec */
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142 execv(backend_prog, backend_argv);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143 perror(backend_prog);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
144 _exit(1);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146 close(cpipe[0]);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147 close(rpipe[1]);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
148 cpipeF = fdopen(cpipe[1], "w");
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149 if (!cpipeF) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
150 perror("fdopen");
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151 exit(ERROR_UNIX);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153 rpipeF = fdopen(rpipe[0], "r");
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154 if (!rpipeF) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155 perror("fdopen");
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
156 exit(ERROR_UNIX);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
157 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
158 return(0);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
159 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
160
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
161 atinterf_exec_cmd(command, message, callback)
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
162 char *command, *message;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
163 void (*callback)();
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
164 {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
165 char *nl;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
166
351
f0e9bb28b4d6 uptools/atcmd/atinterf.c: no target debug mode implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 350
diff changeset
167 if (no_target_mode) {
f0e9bb28b4d6 uptools/atcmd/atinterf.c: no target debug mode implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 350
diff changeset
168 puts(command);
f0e9bb28b4d6 uptools/atcmd/atinterf.c: no target debug mode implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 350
diff changeset
169 if (message)
f0e9bb28b4d6 uptools/atcmd/atinterf.c: no target debug mode implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 350
diff changeset
170 puts(message);
f0e9bb28b4d6 uptools/atcmd/atinterf.c: no target debug mode implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 350
diff changeset
171 strcpy(at_response, "FOK");
f0e9bb28b4d6 uptools/atcmd/atinterf.c: no target debug mode implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 350
diff changeset
172 return(0);
f0e9bb28b4d6 uptools/atcmd/atinterf.c: no target debug mode implemented
Mychaela Falconia <falcon@freecalypso.org>
parents: 350
diff changeset
173 }
348
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
174 if (message) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
175 fputs("c+m\n", cpipeF);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
176 fprintf(cpipeF, "%s\n", command);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
177 fprintf(cpipeF, "%s\n", message);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
178 } else
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
179 fprintf(cpipeF, "%s\n", command);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
180 fflush(cpipeF);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
181 for (;;) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
182 if (!fgets(at_response, sizeof at_response, rpipeF)) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
183 fprintf(stderr,
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
184 "error reading AT response from back end\n");
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
185 exit(ERROR_RVINTERF);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
186 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
187 nl = index(at_response, '\n');
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
188 if (!nl) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
189 fprintf(stderr,
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
190 "error: back end response is too long or unterminated\n");
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
191 exit(ERROR_RVINTERF);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
192 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
193 *nl = '\0';
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
194 switch (at_response[0]) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
195 case 'E':
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
196 fprintf(stderr, "error from back end: %s\n",
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
197 at_response + 1);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
198 exit(ERROR_RVINTERF);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
199 case 'F':
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
200 return(0);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
201 case 'I':
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
202 if (callback)
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
203 callback();
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
204 continue;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
205 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
206 fprintf(stderr, "error: invalid response from back end\n");
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
207 exit(ERROR_RVINTERF);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
208 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
209 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
210
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
211 atinterf_exec_cmd_needok(command, message, callback)
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
212 char *command, *message;
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
213 void (*callback)();
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
214 {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
215 atinterf_exec_cmd(command, message, callback);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
216 if (strcmp(at_response+1, "OK")) {
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
217 fprintf(stderr, "AT error: %s\n", at_response+1);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
218 exit(ERROR_TARGET);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
219 }
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
220 return(0);
64dcbabd48ca uptools/atcmd framework started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
221 }