// 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);
}
示例#2
0
文件: gsm.c 项目: 2seasuav/paparuzzi
// 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 */
    }
  }
}