• Non ci sono risultati.

4.11 Proof of Concept Terminale progettato e realizzato

4.11.5 Software applicativo del terminale

Il codice sviluppato consente di simulare il comportamento di un terminale a bordo di un veicolo dedicato al rilevamento e alla storicizzazione di dati di posizione rilevati tramite periferica GPS. Le funzioni supportate sono:

- inizializzazione di un nuovo tipo di terminale all’interno del database MI System, con associati al tipo una struttura dati creata dinamicamente destinata a contenere il tipo di dati che verrà effettivamente trasmesso.

- inizializzazione di una istanza di terminale di un tipo riconosciuto. Tale operazione è preliminare all’invio di dati vero e proprio e consente di associare i dati poi trasmessi al singolo terminale della flotta

- invio di una sequenza di dati di posizione rilevati tramite GPS

Le funzioni dimostrano la totale dinamicità del sistema immaginato, per cui una volta abilitata dal software di gestione una categoria di terminali all’accesso è il terminale stesso che può autoinizializzarsi e fornire dinamicamente la struttura dei dati che saranno inviati, e successivamente inviarli in maniera automatica.

Nel seguito è descritta la implementazione del software realizzato.

Nella prima parte del codice troviamo le inclusioni delle stesse librerie che sono state utilizzate nel prototipo di software di gestione del Database. In seguito vi è la definizione di numerosi parametri utili per l'esecuzione del software, ad esempio per apertura della socket di comunicazione con Gpsd e per l'interazione con il database PostgreSQL.

Si passa quindi alla definizione di alcune funzioni di seguito elencate per meglio chiarire alcune funzionalità:

- gpsd_talk_row: riceve informazioni dalla socket ‘gestita’ da Gpsd - gpsd_connect: connesione alla socket ‘gestita’ da Gpsd

- gpsd_init: inizializzazione della connessione vera e propria e verifica del fix GPS

- gps_get_timestamp: richiede a gpsd data e ora dell'ultimo ricevimento di dati validi dalla periferica GPS

- gps_get_position: interrogare la periferica GPS sulla posizione corrente e la salva

- write_log: scrive sui log, in questo software infatti sono previsti un log per gli errori ed un altro log per le comunicazioni di normale funzionamento del software

- exit_nicely: chiude correttamente la connessione al database nel caso in cui il programma debba essere terminato

- db_init: inizializza la connessione al database PostgreSQL

In seguito si ha il programma principale, per il quale è stata scelta una modalità di funzionamento leggermente differente rispetto al software di gestione database per consentire

all'utente di selezionare quale operazione eseguire. In questo caso infatti si è scelto di operare sul numero di parametri inseriti dall'utente:

- nessun parametro: non vi è nessuna interazione con il database, il software si limita a stampare a video una sequenza di dati ricavati dalla periferica GPS

- un parametro: vengono scritte sul database dieci rilevazioni consecutive di posizione GPS associandole nel database terminale il cui ID è passato come parametro

- due parametri: viene inizializzato un nuovo terminale che ha come tipo e seriale i due parametri passati

- tre parametri (di cui il primo deve essere la parola "new"): viene inizializzato un nuovo tipo di terminale con nome e formato della struttura dati da associare passati come parametro

Dunque all’avvio un primo controllo sul numero di parametri e si prepara la stringa di chiamata del software, per inserirla eventualmente nel file di log, qualora sopravvenga un errore; si inizializzano a seconda dei parametri passati il database, il GPS o entrambi, e a seconda del numero di parametri passati si procede con operazioni diverse.

Nel caso in cui non vi sia alcun parametro, viene inizializzata soltanto la connessione con Gpsd, in quanto non vi sarà interazione con il database, viene verificato se la periferica GPS è in grado di fornire una posizione, e si stampano infine a video dieci posizioni consecutive ricevute dalla periferica stessa.

In Figura 4.9 è presentato l’output a video nel caso appena descritto. Osservando il timestamp si nota che il tempo di attesa tra un dato e l'altro è impostato a due secondi, e ciò è stato fatto perché il periodo di update del GPS è pari a un secondo, ed è necessario quindi attendere un tempo più lungo per essere sicuri di ottenere dati aggiornati.

Dallo screenshot si può anche rilevare la modalità con cui si controlla se l’ultimo dato disponibile è aggiornato, infatti normalmente gpsd rende disponibile sempre lo stesso dato finché non ne riceve uno nuovo. È possibile però richiedere al demone un timestamp, cioè una stringa che contiene data e ora di ricevimento dell’ultimo dato che è disponibile. Salvando ogni volta questa informazione è possibile confrontarla con quella che abbiamo ricevuto la volta precedente, e capire se il dato presente via socket è aggiornato e quindi la periferica non è stata spostata, oppure è lo stesso già rilevato ad esempio a causa della perdita del fix GPS.

In Figura 4.10 è possibile vedere la risposta del sistema ad una chiamata con un parametro:

Figura 4.10: Terminale GPS: inserimento dati

Per quanto riguarda il caso con un parametro, visivamente è molto simile al precedente, la differenza sta nel fatto che in tal caso è stata anche inizializzata la connessione al database MI System via rete, e sono stati scritti dieci dati GPS di posizione ricevuti nella tabella creata dinamicamente in precedenza.

In Figura 4.11 è mostrato lo screenshot relativo alla chiamata con due parametri:

Figura 4.11: Terminale GPS: inizializzazione nuovo terminale

In questo caso il software si collega al database MI System e richiede la attivazione di una nuova istanza di un tipo di terminale in precedenza creato sempre dinamicamente. La nuova istanza di terminale viene inizializzata e le viene associato il nome o seriale richiesto e attribuito il primo identificativo di istanza disponibile del tipo richiesto che viene poi ritornato.

Infine in Figura 4.12 è presente lo screenshot del caso di utilizzo con tre parametri:

Figura 4.12: Terminale GPS: inizializzazione nuovo tipo di terminale

In quest’ultimo caso si vede come un nuovo tipo di terminale venga inizializzato all’interno del database assegnandogli il primo ID di tipo libero, ed associando a questo dinamicamente una struttura dati adatta a contenere il tipo di dati che verranno poi inviati.