FreeCalypso > hg > freecalypso-tools
annotate uptools/atcmd/smsend_cmgw.c @ 437:2cd705c8116e
loadtools: Mot C155 turns out to have the same flash partition quirks
as the flash chip on TI's D-Sample
c155.config changed to use the fixed 28f640w30b config instead of CFI,
and a bit of C code in fc-loadtool had to be changed too so that
flash erase-program-boot still works.
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Tue, 06 Nov 2018 16:02:23 +0000 | 
| parents | 89fe66cb60f6 | 
| children | dc2fd8e6f42c | 
| rev | line source | 
|---|---|
| 362 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1 /* | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2 * The handling of +CMGW responses and send-after-write for fcup-smsend | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3 * family is implemented here. | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 4 */ | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 5 | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 6 #include <sys/types.h> | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 7 #include <stdio.h> | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 8 #include <stdlib.h> | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 9 #include <string.h> | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 10 #include <strings.h> | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 11 #include "../../rvinterf/include/exitcodes.h" | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 12 #include "resp_parse.h" | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 13 | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 14 extern char at_response[]; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 15 extern int sms_write_mode; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 16 | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 17 struct saw_rec { | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 18 unsigned msgid; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 19 struct saw_rec *next; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 20 }; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 21 | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 22 struct saw_rec *sendafterwr_head, **sendafterwr_tail = &sendafterwr_head; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 23 | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 24 add_sendafterwr_record(msgid) | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 25 unsigned msgid; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 26 { | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 27 struct saw_rec *rec; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 28 | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 29 rec = malloc(sizeof(struct saw_rec)); | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 30 if (!rec) { | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 31 perror("malloc for send-after-write record"); | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 32 exit(ERROR_UNIX); | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 33 } | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 34 rec->msgid = msgid; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 35 rec->next = 0; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 36 *sendafterwr_tail = rec; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 37 sendafterwr_tail = &rec->next; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 38 } | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 39 | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 40 cmgw_callback() | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 41 { | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 42 struct resp_field fields[1]; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 43 int cc; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 44 | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 45 /* skip empty lines */ | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 46 if (!at_response[1]) | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 47 return; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 48 /* if not empty, it MUST be +CMGW */ | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 49 if (strncmp(at_response+1, "+CMGW: ", 7)) { | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 50 fprintf(stderr, "error: response from target is not +CMGW\n"); | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 51 exit(ERROR_TARGET); | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 52 } | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 53 if (sms_write_mode == 2) { | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 54 puts(at_response+1); | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 55 return; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 56 } | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 57 if (parse_structured_response(at_response+8, fields, 1) != 1) { | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 58 malformed: fprintf(stderr, "error: malformed +CMGW response\n"); | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 59 exit(ERROR_TARGET); | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 60 } | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 61 if (fields[0].type != RESP_FIELD_NUMBER) | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 62 goto malformed; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 63 add_sendafterwr_record(fields[0].num); | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 64 } | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 65 | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 66 sendafterwr_process() | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 67 { | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 68 struct saw_rec *rec; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 69 char cmss_cmd[32]; | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 70 | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 71 if (!sendafterwr_head) { | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 72 fprintf(stderr, | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 73 "error: no +CMGW response received from target\n"); | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 74 exit(ERROR_TARGET); | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 75 } | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 76 if (sendafterwr_head->next) | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 77 atinterf_exec_cmd_needok("AT+CMMS=1", 0, 0); | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 78 for (rec = sendafterwr_head; rec; rec = rec->next) { | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 79 sprintf(cmss_cmd, "AT+CMSS=%u", rec->msgid); | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 80 atinterf_exec_cmd_needok(cmss_cmd, 0, 0); | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 81 } | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 82 if (sendafterwr_head->next) | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 83 atinterf_exec_cmd_needok("AT+CMMS=0", 0, 0); | 
| 
89fe66cb60f6
fcup-smsend program put together, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 84 } | 
