FreeCalypso > hg > freecalypso-tools
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 } |