Funzione sms.IsSMSPresent( nella libreira sim900, cosa restituisce

Salve volevo farvi una domanda che potrebbe risultare banale ma non riesco a capire una parte di codice
molto utilizzata in rete per interfacciarsi con un modulo gsm (in particolare il modulo sim900), il codice usa la libreia arduino sim900.h …

Sulla rete ho trovato questo codice per la lettura degli sms, non inserisco tutto il codice in quanto sto cercando di capire la definizione di due funzioni, di questa libreria e la logica di come utilizzarle corettamente …

void loop() 
{
  char inSerial[50];
  char position;
  if (started)
  {
     // -- Righe commentate poichè utilizzate per nei test
     // strcpy(Mittente,"3380000000");
     // if (SerialRead(smsbuffer))
     // ------------------------------------------------------
    // Legge se ci sono messaggi disponibili sulla SIM Card
    // e li visualizza sul Serial Monitor.
    position = sms.IsSMSPresent(SMS_ALL); // Valore da 1..20
    if (position) 
    {
      // Leggo il messaggio SMS e stabilisco chi sia il mittente
      sms.GetSMS(position, Mittente, smsbuffer, 160);
      Serial.print("Comando Ricevuto [tel. "+String(Mittente)+String("]: ") + String(smsbuffer));

in particolare non capisco questa funzione position = sms.IsSMSPresent(SMS_ALL); // Valore da 1…20,
la funzione da come ho capito riceve la lista di tutti gli sms presenti in memoria della SIM, in quanto ha in ingresso la costante SMS_ALL, ora pero dal codice, la variabile, position è dichiarata come un int e non come un array o una lista, in pratica se la funzione IsSMSpresent( … restituisce una lista, cioè tutti i messaggi all’interno della sim, questo varibile non doveva restituire una lista come dato di ritorno e non un int o un char?
Infatti nella funzione sms.GetSMS( …, position è usata come una variabile intera, invece che come una lista.
a seguire della funzione sms.IsSMSPresent( … non doveva esserci un ciclo for eac, per analizzare i messaggi 1 a 1.
In pratica come viene valorizata questa variabile position dopo il metodo IsSMSpresent(?

So inoltre che alla funzione è possibile passare diverse configurazioni tipo UNREAD, READ, ALL ….
In base a queste configurazioni position come viene valorizzato al ritorno della funzione?

Grazie in anticipo delle risposte Francesco

Essendo il tuo primo post Ti invitiamo a presentarti QUI
(dicci quali conoscenze hai di elettronica e di programmazione) e a leggere il regolamento QUI
se non lo hai già fatto.

Comunque benvenuto sul forum.

Attilio

Come dici, position è un char (sostanzialmente un intero piccolo, tra 0 e 127), per cui la funzione non può ritornare una lista, ma solo un indice.

Non conosco la libreria, ma mi sento di speculare che la funzione ritorni l'indice del primo messaggio disponibile del tipo richiesto. Essendo il tipo in questo caso SMS_ALL, direi che essenzialmente la funzione ti dice se c'è un qualunque messaggio. Passando invece gli altri valori che citi, probabilmente puoi verificare la presenza di (almeno) un messaggio del tipo richiesto: UNREAD ti ritornerebbe l'indice del primo messaggio ancora non letto, READ del primo già letto, e così via... SMS_ALL non fa distinzioni, e ritorna il primo che capita.

Ripeto che non conosco la libreria, ma mi sembra abbastanza plausibile come funzionamento,

grazie SukkoPera per la risposta, pero non capisco cosa sucederebbe se arivassero 2 messaggi nuovi non letti quale dei due scelga, o se uso ALL e ci sono ad esempio 4 messaggi?

Mi viene da pensare che dia la precedenza (in base alla tua risposta) all'ultimo messaggio ricevuto o sbaglio, magari confrontando il timestamp di ricezione del messaggio, o sbaglio?

Per la presentazione la stavo scrivendo propio ora spero che sia dettagliata :smiley:

Questo dipende dal funzionamento interno della libreria (e/o del modulo GSM), e su due piedi non posso prevederlo. Potrebbe essere il più recente o quello nella posizione minore o... boh? Ti suggerirei di leggere la documentazione del modulo GSM, in corrispondenza del corrispondente comando AT sicuramente spiegherà i criteri. Oppure di modificare il codice in modo da non fare assunzioni su tale ordine.

in pratica dovrei fare delle prove e vedere come si comporta ...
mi sa che hai ragione perche se tutto dipende dalla prima posizione, alla fine dipende anche dal mio modulo

Per togliermi tutti i dubbi in pratica dovrei costruirmi un for each e scandire tutti gli sms nella sim e magari estrapolare quello che mi serve ad ok.

perche se mi ritorna un messaggio qaulsiasi non mi risulta di un utilità ... per il mio progetto.

Ripeto: o leggi la documentazione (cosa da cui non dovresti prescindere comunque!), o fai dei test, o strutturi il software senza fare assunzioni.