int send_modem(const char * cmd) { int err = 0; size_t cur = 0; ssize_t written; size_t len = strlen(cmd); if(open_modem() == -1) return -1; //AT_ERROR_GENERIC; LOGD("%s: AT> %s", logtime(), cmd); /* the main string */ while (cur < len) { do { written = write (fd_smd, cmd + cur, len - cur); } while (written < 0 && errno == EINTR); if (written < 0) return -1;// AT_ERROR_GENERIC; cur += written; } /* the \r */ do { written = write (fd_smd, "\r" , 1); } while ((written < 0 && errno == EINTR) || (written == 0)); if (written < 0) { LOGE("%s: send_modem: write failure", logtime()); return -1; //AT_ERROR_GENERIC; } return written; }
void act_CONNECT(void) { if (acctlog && (acctfp = fopen(acctlog,"a")) != NULL) { fprintf(acctfp,"%s: Calling site %s.\n", cdate(), remote_ip); fclose(acctfp); } txtotal = rxtotal = 0; dial_status = 0; force_dynamic = 0; no_redial_delay = 0; if (open_modem() == 2) no_redial_delay = 2; }
int read_modem(char* response, size_t responseLen) { if(open_modem() == -1) return -1; char *pread=response; while( pread<response+responseLen){ if(read(fd_smd, pread, 1)<=0) break; if((*pread=='\n' || *pread=='\r') && pread==response) continue; if(*pread=='\r') break; pread++; } *pread=0; if(pread!=response) LOGD("%s: MODEM> %s", logtime(), response); else LOGD("%s MODEM>", logtime()); return pread-response; }
int main(int argc, char *argv[]) { int ret_val = -1; int tries = 0; unsigned char settings[2]; parse_command_line(argc, argv); while (ret_val != 0 && tries < 1) { tries++; ret_val = open_modem(); } tries = 0; if (ret_val && !ignore_errors) { printf ("Error opening modem, please run the program again\n"); return finish_up(-1); } ret_val = -1; printf("Step 1 Find the modem\n"); while (ret_val != 0 && tries < 1) { tries++; ret_val = find_modem(); } tries = 0; if (ret_val && !ignore_errors) { printf ("Error finding modem, please run the program again\n"); return finish_up(-1); } ret_val = -1; // Steps 2-4 Get the modem settings while (tries < 3) { printf("Step %d get the modem settings\n", tries + 2); tries++; ret_val = settings_modem(settings); } tries = 0; if (ret_val && !ignore_errors) { printf ("Error getting modem settings, please run the program again\n"); return finish_up(-1); } ret_val = -1; if (settings[0] != 0x03 || settings[1] != 0x03) { if (debug) printf("Looks like modem needs resetting\n"); reboot_modem(); settings_modem(settings); settings_modem(settings); } ret_val = -1; // Step 5 Update basis printf("Step 5 updating the basis\n"); while (ret_val != 0 && tries < 2) { tries++; ret_val = update_basis(); } tries = 0; ret_val = -1; // Step 6 Update Modem printf("Step 6 updating the modem\n"); while (ret_val != 0 && tries < 1) { tries++; ret_val = update_modem(); } tries = 0; if (ret_val && !ignore_errors) { printf ("Error updating modem, please run the program again\n"); return finish_up(-1); } ret_val = -1; // Step 7 Get modem settings printf("Step 7 getting the modem settings\n"); while (tries < 1) { tries++; ret_val = settings_modem(settings); } tries = 0; if (ret_val && !ignore_errors) { printf ("Error getting modem settings, please run the program again\n"); return finish_up(-1); } ret_val = -1; // Step 8 Get basis settings printf("Step 8 getting the basis settings\n"); while (ret_val != 0 && tries < 2) { tries++; ret_val = settings_basis(settings); } tries = 0; if (ret_val && !ignore_errors) { printf ("Error getting basis settings, please run the program again\n"); return finish_up(-1); } ret_val = -1; // Step 9 and 10 Get modem settings while (tries < 2) { printf("Step %d, getting the modem settings\n", tries + 9); tries++; ret_val = settings_modem(settings); } tries = 0; if (ret_val && !ignore_errors) { printf ("Error getting modem settings, please run the program again\n"); return finish_up(-1); } ret_val = -1; // Step 11 Set basis filter printf("Step 11 setting the basis filter\n"); while (ret_val != 0 && tries < 1) { tries++; ret_val = set_filter_basis(); } tries = 0; if (ret_val && !ignore_errors) { printf ("Error setting basis filter, please run the program again\n"); return finish_up(-1); } ret_val = -1; // Step 12 Set modem filter printf("Step 12 setting the modem filter\n"); while (ret_val != 0 && tries < 1) { tries++; ret_val = set_filter_modem(); } tries = 0; if (ret_val && !ignore_errors) { printf ("Error setting modem filter, please run the program again\n"); return finish_up(-1); } ret_val = -1; // Step 13 Reboot basis printf("Step 13 rebooting basis \n"); while (ret_val != 0 && tries < 1) { tries++; ret_val = reboot_basis(); } tries = 0; if (ret_val && !ignore_errors) { printf ("Error rebooting basis, please run the program again\n"); return finish_up(-1); } ret_val = -1; // Step 14 Reboot modem printf("Step 14, rebooting the modem \n"); while (ret_val != 0 && tries < 1) { tries++; ret_val = reboot_modem(); } tries = 0; if (ret_val && !ignore_errors) { printf ("Error rebooting modem, please run the program again\n"); return finish_up(-1); } return finish_up(0); }