// Deuxième partie de la fonction d'envoi d'un SMS void Reception_SMS_Continue(int handle) { char buffer_SMS_recu[250]; strcpy(buffer_SMS_recu, GSM_Line); Remplissage_SMS(buffer_SMS_recu); if (Verification(expediteur) == 1)// Le SMS provient bien de l'avion { printf("Nouveau message recu de l'avion\n"); /* Stockage du message dans un fichier de log */ Save_SMS_In_Log(); /* Vérification de l'index (pour ne pas en laisser passer un)*/ if (Check_index(index_msg) == 0) /*on a laissé passer qqch*/ { printf("Attention perte d'un ou plusieurs messages...\n"); } printf("Contenu du message :%s\n", data); // Découpage prévu du SMS recu decoupage(data); /* Envoi sur le bus Ivy */ IvySendMsg("16 GPS 3 %s %s %s %s %s %s 0 335297960 31 0", extr_gps_utm_east, extr_gps_utm_north, extr_gps_course, extr_gps_alt, extr_gps_gspeed, extr_gps_climb); IvySendMsg("16 FBW_STATUS 0 1 %s 0",extr_vsupply); /* Suppression du message de la carte SIM */ Suppr_SMS(handle, index_msg); } fflush(stdout); }
// A line of length gsm_buf_len is available in the gsm_buf buffer static void gsm_got_line(void) { if (gsm_status == STATUS_WAITING_DATA) { // Currently receiving a SMS gsm_receive_content(); Suppr_SMS(index_msg); gsm_status = STATUS_DELETE_SMS; } else if (gsm_status == STATUS_IDLE && strncmp(CMTI, gsm_buf, strlen(CMTI)) == 0) { /* A SMS is available */ /* Extracting the index of the message */ char *first_comma = indexn(gsm_buf, ',', MAXLEN_CMTI_ANSWER); if (first_comma) { index_msg = atoi(first_comma + 1); request_for_msg(); gsm_status = STATUS_REQUESTING_MESSAGE; } } else if (waiting_for_reply) { // Other cases // Do we get what we were expecting bool gsm_answer = strncmp(expected_ack, gsm_buf, strlen(expected_ack)) == 0; if (gsm_answer) { waiting_for_reply = false; switch (gsm_status) { case STATUS_CSQ : gsm_send_report_continue(); gsm_status = STATUS_WAITING_PROMPT; break; case STATUS_REQUESTING_MESSAGE: parse_msg_header(); gsm_status = STATUS_WAITING_DATA; break; case STATUS_SEND_AT : gsm_answer = false; Send_CMGF(); gsm_status = STATUS_SEND_CMGF; break; case STATUS_SEND_CMGF : gsm_answer = false; Send_CNMI(); gsm_status = STATUS_SEND_CNMI; break; case STATUS_SEND_CNMI : gsm_answer = false; Send_CPMS(); gsm_status = STATUS_SEND_CPMS; break; case STATUS_SEND_CPMS : gsm_answer = false; gsm_status = STATUS_IDLE; gsm_gsm_send_report_status = MODULES_START; /** Start reporting */ break; case STATUS_DELETE_SMS : gsm_status = STATUS_IDLE; break; default: break; } } else { /** We did not get the expected answer */ /* Let's wait for the next line */ } } }