FreeCalypso > hg > freecalypso-tools
annotate uptools/atinterf/fcup-atinterf.c @ 957:e030327b6a9a
CHANGES: document -Petmoff addition
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Thu, 08 Jun 2023 00:40:12 +0000 | 
| parents | 13f0fc38cefd | 
| children | 
| rev | line source | 
|---|---|
| 341 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1 #include <sys/types.h> | 
| 345 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 2 #include <sys/time.h> | 
| 341 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3 #include <stdio.h> | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 4 #include <stdlib.h> | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 5 #include <string.h> | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 6 #include <strings.h> | 
| 425 
7eddc2578fdb
fcup-atinterf: added 20 ms serial flush
 Mychaela Falconia <falcon@freecalypso.org> parents: 
345diff
changeset | 7 #include <termios.h> | 
| 341 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 8 #include <unistd.h> | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 9 | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 10 extern int target_fd; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 11 | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 12 FILE *target_rd; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 13 char response[515]; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 14 | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 15 char command[513], message[513]; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 16 int cmd_with_msg; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 17 | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 18 read_command_input(buf) | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 19 char *buf; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 20 { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 21 char *nl; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 22 | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 23 if (!fgets(buf, 513, stdin)) | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 24 return(0); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 25 nl = index(buf, '\n'); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 26 if (!nl) { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 27 printf("Ecommand or message is too long\n"); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 28 exit(1); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 29 } | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 30 *nl = '\0'; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 31 return(1); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 32 } | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 33 | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 34 send_to_target(cmd, term) | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 35 char *cmd; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 36 { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 37 char *endp; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 38 int len, cc; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 39 | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 40 endp = index(cmd, '\0'); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 41 *endp = term; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 42 len = endp - cmd + 1; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 43 cc = write(target_fd, cmd, len); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 44 *endp = '\0'; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 45 if (cc != len) { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 46 printf("Etarget write error\n"); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 47 exit(1); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 48 } | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 49 } | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 50 | 
| 345 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 51 single_char_to_target(ch) | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 52 { | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 53 char buf = ch; | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 54 int cc; | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 55 | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 56 cc = write(target_fd, &buf, 1); | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 57 if (cc != 1) { | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 58 printf("Etarget write error\n"); | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 59 exit(1); | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 60 } | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 61 } | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 62 | 
| 341 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 63 collect_target_response() | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 64 { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 65 char *nl; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 66 | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 67 if (!fgets(response, 515, target_rd)) { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 68 printf("Etarget read error\n"); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 69 exit(1); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 70 } | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 71 nl = index(response, '\n'); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 72 if (!nl) { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 73 printf("Etarget response is too long\n"); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 74 exit(1); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 75 } | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 76 while (nl > response && nl[-1] == '\r') | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 77 nl--; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 78 *nl = '\0'; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 79 } | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 80 | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 81 execute_command() | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 82 { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 83 int c; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 84 | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 85 send_to_target(command, '\r'); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 86 collect_target_response(); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 87 if (strcmp(command, response)) { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 88 printf("Efailed to get echo of command\n"); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 89 exit(1); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 90 } | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 91 if (cmd_with_msg) { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 92 if ((c = getc(target_rd)) != '>') { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 93 ungetc(c, target_rd); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 94 collect_target_response(); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 95 printf("F%s\n", response); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 96 return; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 97 } | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 98 if ((c = getc(target_rd)) != ' ') { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 99 ungetc(c, target_rd); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 100 collect_target_response(); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 101 printf("F%s\n", response); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 102 return; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 103 } | 
| 344 
e0260c2982b6
fcup-atinterf: brown paper bag
 Mychaela Falconia <falcon@freecalypso.org> parents: 
341diff
changeset | 104 send_to_target(message, '\032'); | 
| 341 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 105 collect_target_response(); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 106 if (strcmp(message, response)) { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 107 printf("Efailed to get echo of message\n"); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 108 exit(1); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 109 } | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 110 } | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 111 for (;;) { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 112 collect_target_response(); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 113 if (!strcmp(response, "OK") || !strcmp(response, "ERROR") || | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 114 !strcmp(response, "BUSY") || | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 115 !strcmp(response, "NO CARRIER") || | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 116 !strncmp(response, "+CME ERROR", 10) || | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 117 !strncmp(response, "+CMS ERROR", 10)) { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 118 printf("F%s\n", response); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 119 return; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 120 } | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 121 printf("I%s\n", response); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 122 } | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 123 } | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 124 | 
| 345 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 125 wakeup_at() | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 126 { | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 127 single_char_to_target('A'); | 
| 426 
13f0fc38cefd
fcup-atinterf: 2x 30 ms appears to be sufficient to wake up from deep sleep
 Mychaela Falconia <falcon@freecalypso.org> parents: 
425diff
changeset | 128 usleep(30000); | 
| 345 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 129 single_char_to_target('T'); | 
| 426 
13f0fc38cefd
fcup-atinterf: 2x 30 ms appears to be sufficient to wake up from deep sleep
 Mychaela Falconia <falcon@freecalypso.org> parents: 
425diff
changeset | 130 usleep(30000); | 
| 345 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 131 single_char_to_target('\r'); | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 132 collect_target_response(); | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 133 if (response[0] && strcmp(response, "AT")) { | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 134 badresp: printf("Ebad response to wakeup AT command\n"); | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 135 exit(1); | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 136 } | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 137 collect_target_response(); | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 138 if (strcmp(response, "OK")) | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 139 goto badresp; | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 140 } | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 141 | 
| 341 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 142 main(argc, argv) | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 143 char **argv; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 144 { | 
| 345 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 145 int wakeup_after_sec = 7; | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 146 struct timeval curtime, last_time, timediff; | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 147 | 
| 341 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 148 if (argc < 3 || argc > 4) { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 149 fprintf(stderr, | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 150 "usage: %s ttyport baudrate [wakeup-after-sec]\n", | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 151 argv[0]); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 152 exit(1); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 153 } | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 154 open_serial_port(argv[1]); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 155 set_fixed_baudrate(argv[2]); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 156 if (argc > 3) | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 157 wakeup_after_sec = strtoul(argv[3], 0, 0); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 158 | 
| 425 
7eddc2578fdb
fcup-atinterf: added 20 ms serial flush
 Mychaela Falconia <falcon@freecalypso.org> parents: 
345diff
changeset | 159 usleep(20000); | 
| 
7eddc2578fdb
fcup-atinterf: added 20 ms serial flush
 Mychaela Falconia <falcon@freecalypso.org> parents: 
345diff
changeset | 160 tcflush(target_fd, TCIFLUSH); | 
| 345 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 161 set_serial_nonblock(0); | 
| 341 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 162 target_rd = fdopen(target_fd, "r"); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 163 if (!target_rd) { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 164 perror("fdopen"); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 165 exit(1); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 166 } | 
| 345 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 167 bzero(&last_time, sizeof(struct timeval)); | 
| 341 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 168 | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 169 while (read_command_input(command)) { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 170 if (!strcasecmp(command, "c+m")) { | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 171 cmd_with_msg = 1; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 172 if (!read_command_input(command)) | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 173 break; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 174 if (!read_command_input(message)) | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 175 break; | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 176 } else | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 177 cmd_with_msg = 0; | 
| 345 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 178 if (wakeup_after_sec) { | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 179 gettimeofday(&curtime, 0); | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 180 timersub(&curtime, &last_time, &timediff); | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 181 if (timediff.tv_sec >= wakeup_after_sec) | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 182 wakeup_at(); | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 183 bcopy(&curtime, &last_time, sizeof(struct timeval)); | 
| 
cc207d81c05f
fcup-atinterf: implemented wakeup of sleeping targets
 Mychaela Falconia <falcon@freecalypso.org> parents: 
344diff
changeset | 184 } | 
| 341 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 185 execute_command(); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 186 fflush(stdout); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 187 } | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 188 exit(0); | 
| 
692dbc4c2f07
fcup-atinterf program written, compiles
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 189 } | 
