comparison uptools/atcmd/smdump.c @ 353:3bcc56883b17

fcup-smdump: -d delete-after-dump option implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 05 Feb 2018 17:35:49 +0000
parents 02d6c8469535
children ac311a48630e
comparison
equal deleted inserted replaced
352:02d6c8469535 353:3bcc56883b17
11 #include "../../rvinterf/include/exitcodes.h" 11 #include "../../rvinterf/include/exitcodes.h"
12 #include "resp_parse.h" 12 #include "resp_parse.h"
13 13
14 extern char at_response[]; 14 extern char at_response[];
15 15
16 struct delafter {
17 unsigned msgid;
18 struct delafter *next;
19 };
20
21 int delete_after_flag;
22 struct delafter *delafter_head, **delafter_tail = &delafter_head;
23
16 int pdu_state; 24 int pdu_state;
17 char *msgtype; 25 char *msgtype;
18 u_char pbname_gsm[40]; 26 u_char pbname_gsm[40];
19 unsigned pbname_len, header_len; 27 unsigned pbname_len, header_len;
20 u_char pdu_bin[176]; 28 u_char pdu_bin[176];
29
30 add_delafter_record(msgid)
31 unsigned msgid;
32 {
33 struct delafter *rec;
34
35 rec = malloc(sizeof(struct delafter));
36 if (!rec)
37 return;
38 rec->msgid = msgid;
39 rec->next = 0;
40 *delafter_tail = rec;
41 delafter_tail = &rec->next;
42 }
21 43
22 validate_pbname_7bit() 44 validate_pbname_7bit()
23 { 45 {
24 unsigned n; 46 unsigned n;
25 47
51 fields[3].type != RESP_FIELD_NUMBER) 73 fields[3].type != RESP_FIELD_NUMBER)
52 goto malformed; 74 goto malformed;
53 if (fields[2].type != RESP_FIELD_STRING && 75 if (fields[2].type != RESP_FIELD_STRING &&
54 fields[2].type != RESP_FIELD_EMPTY) 76 fields[2].type != RESP_FIELD_EMPTY)
55 goto malformed; 77 goto malformed;
56 /* we'll handle the message number when we add delete after dump */ 78 if (delete_after_flag)
79 add_delafter_record(fields[0].num);
57 switch (fields[1].num) { 80 switch (fields[1].num) {
58 case 0: 81 case 0:
59 case 1: 82 case 1:
60 msgtype = "Received"; 83 msgtype = "Received";
61 break; 84 break;
122 cmgl_pdu(); 145 cmgl_pdu();
123 else 146 else
124 cmgl_header(); 147 cmgl_header();
125 } 148 }
126 149
150 delete_after_process()
151 {
152 struct delafter *rec;
153 char cmgd_cmd[32];
154
155 for (rec = delafter_head; rec; rec = rec->next) {
156 sprintf(cmgd_cmd, "AT+CMGD=%u", rec->msgid);
157 atinterf_exec_cmd_needok(cmgd_cmd, 0, 0);
158 }
159 }
160
127 main(argc, argv) 161 main(argc, argv)
128 char **argv; 162 char **argv;
129 { 163 {
130 int c; 164 int c;
131 extern int optind; 165 extern int optind;
132 166
133 while ((c = getopt(argc, argv, "B:np:RX:")) != EOF) 167 while ((c = getopt(argc, argv, "B:dnp:RX:")) != EOF) {
134 if (!atinterf_cmdline_opt(c)) { 168 if (atinterf_cmdline_opt(c))
169 continue;
170 else if (c == 'd')
171 delete_after_flag = 1;
172 else {
135 /* error msg already printed */ 173 /* error msg already printed */
136 exit(ERROR_USAGE); 174 exit(ERROR_USAGE);
137 } 175 }
176 }
138 if (argc != optind) { 177 if (argc != optind) {
139 fprintf(stderr, "usage: %s [options]\n", argv[0]); 178 fprintf(stderr, "usage: %s [options]\n", argv[0]);
140 exit(ERROR_USAGE); 179 exit(ERROR_USAGE);
141 } 180 }
142 atinterf_init(); 181 atinterf_init();
148 atinterf_exec_cmd_needok("AT+CMGL=4", 0, cmgl_callback); 187 atinterf_exec_cmd_needok("AT+CMGL=4", 0, cmgl_callback);
149 if (pdu_state) { 188 if (pdu_state) {
150 fprintf(stderr, "error: wrong state at the end of +CMGL\n"); 189 fprintf(stderr, "error: wrong state at the end of +CMGL\n");
151 exit(ERROR_TARGET); 190 exit(ERROR_TARGET);
152 } 191 }
153 /* delete-after-dump will go here */ 192 if (delete_after_flag)
193 delete_after_process();
154 exit(0); 194 exit(0);
155 } 195 }