• Non ci sono risultati.

4.1 Scenario del codice fornito da Calit2

4.1.1 Applicazione

Per verificare il corretto funzionamento del software scaricato è stata compilato ed eseguito su un PC Linux il file start_all.sh contenuto nella cartella scripts. In questo modo il processore del PC implementa la parte di codice che gira anche sul processore GPP della scheda SDR-4000. Il seguente procedimento è stato eseguito su un PC con Sistema Operativo Ubuntu 10.10 e connesso in rete.

4.1.1.1 Istallazione

Le istruzioni che sono state eseguite sono contenute nel file di testo README.

Istruzioni di compilazione:

1. istallare taoorb, che contiene il comando tao_idl e file di libreria; 2. eseguire il make.

Istruzioni d’esecuzione:

1. far partire un nameserver orb, per esempio omniorb nameserver o taoorb nameserver;

58 2. eseguire start_all.sh;

3. per il test del local loopback, eseguire il file

scripts/nc_to_localhost.sh . Il modem invia a se stesso i dati;

4. per il test di due nodi, eseguire su un nodo "scripts/nc_to_remote_radio.sh <ip>", con <ip> l’indirizzo dell’altro nodo.

4.1.1.2 Analisi generale della struttura Software

Prima di eseguire il make nella cartella FM3TR_Calit2_Linux_Port/ :

• Correggere il file Makefile all’indirizzo:

FM3TR_Calit2_Linux_Port/idl/Makefile come segue: tao_idl –Cw CF.idl tao_idl –Cw PortTypes.idl tao_idl –Cw CommonAPI.idl • Decommentare la riga: InitRef:NameService:corbaname::127.0.0.1 Contenuta nel file

etc/omniORB.cfg

Start_all.sh

Nel terminale ci si deve posizionare nella cartella FM3TR_Calit2_Linux_port, contenente tutto il software del progetto di porting della waveform FM3TR, come mostrato in Fig. 4.3.

59

Fig. 4. 3 – Contenuto della cartella FM3TR_Calit2_Linux_port.

Tra tutte le cartelle contenute dentro, si naviga dentro scripts per cercare il file start_all.sh. Al comando ./start_all.sh il file viene lanciato.

All’esecuzione di questo file vengono cancellati ed uccisi i processi che fanno parte di chiamate dello start_all.sh precedenti e che quindi porterebbero ad errori. Viene lanciata un’interfaccia Java per l’utente, attraverso la quale è possibile inviare messaggi di testo e messaggi voce. Come si vede dalla Fig. 4.4 compare a video la stringa Enter radio id (1-255) [1]: che deve essere completata inserendo il numero uno.

60

Fig. 4. 4 – Lancio del file ./start_all.sh.

A questo punto vengono lanciati gli eseguibili del tipo fm3tr_ per ogni componente della waveform che si trovano ognuno nella cartella del componente software corrispondente. Questi cominciano ad eseguire il codice di ogni componente partendo dal file main.cc contenuto nella cartella del componente corrispondente. Questo è vero a parte per i componenti che fanno parte della versione base del codice: CVSD e Voice MAC, per i quali il file di partenza si chiama ResourceLauncher.cc.

L’esecuzione del programma start_all.sh continua e all’istruzione sleep 10 il processo attende 10 secondi e poi esegue il file start_all.py che si trova anch’esso nella cartella scripts. In questi 10 secondi, l’eseguibile di ogni componente esegue il main.cc (o il ResourcLauncher.cc) corrispondente. Nella Fig. 4.5 è mostrato il contenuto della cartella del componente DLC.

61

Fig. 4. 5 – Cartella del component DLC dopo la compilazione.

Main.cc

All’istruzione new Resource viene chiamato il costruttore della classe Resource, descritta nel file Resource.cc che è il file principale di ogni componente, e contenuto nella corrispondente cartella. Quindi in memoria dinamica viene allocato dello spazio per ogni componente.

Attraverso il costruttore Resource vengono chiamati anche i costruttori di ogni porta che possiede il componente. Ogni porta è una classe definita nel file denominato con il nome della porta stessa, contenuto nella cartella del componente corrispondente.

Start_all.py

Questo file ottiene le risorse allocate nella memoria libera dai costruttori Resource dei vari componenti ed invoca la funzione membro della classe Resource, getPort, un numero di volte pari al numero di porte che ha il componente, ottenendo così tutte le porte.

62

Collega le porte di tutti i componenti tra di loro secondo lo schema della waveform. Invoca la funzione membro start della classe Resource per ogni componente, quindi parte l’esecuzione del codice di ogni componente. Nella funzione start vengono anche chiamate le funzione membro start delle porte (classi) che erano state allocate dal costruttore della classe Resource di ogni componente.

Infine stampa a video la stringa started per indicare che tutte le classi definite per ogni componente sono state lanciate.

A questo punto, tutto è pronto per iniziare una comunicazione. Quindi, nella finestra dell’interfaccia Java deve essere settato:

• Radio IP Address: localhost.

• Voice Port: 1234, che corrisponde alla porta del protocollo TCP attraverso la quale l’applicazione Java (voce) è connessa alla waveform.

• Data Port: 1235, che corrisponde alla porta del protocollo TCP attraverso la quale l’applicazione Java (dati) è connessa alla waveform. La porta di ascolto del modem per ricevere le trame FM3TR invece è la 7000.

• Destination Radio ID: 1.

Premendo il tasto Start nella finestra dell’applicazione Java, compare a video “connection accepted from 127.0.0.1” per i due componenti Net Device (Voice e Data). A questo punto per testare il corretto funzionamento della waveform, si deve aprire un altro terminale e lanciare il file nc_to_localhost.sh che si trova nella cartella scripts. Comparirà a video, sul primo terminale

connection accepted from 127.0.0.1 da parte del modem, Fig. 4.6.

Questa è una comunicazione di test all’interno della waveform, avendo chiuso il modem su se stesso. Tramite la finestra dell’applicazione Java si potranno inviare messaggi e controllare che sul piccolo schermo nella finestra compaia il messaggio inviato (me:) e il messaggio ricevuto (localhost/127.0.0.1/1235:). Dal terminale di partenza è possibile controllare che non compaiano messaggi di errore durante l’invio e la ricezione del messaggio.

63

Fig. 4. 6 – Applicazione Java e terminali di lancio dei file ./start_all.sh e ./nc_to_localhost.sh.

Un ulteriore test della waveform può essere fatto se quest’ultima è stata lanciata su due nodi. Per nodo si intende un PC, due nodi sono due PC connessi in rete. Per il test è necessario che un nodo, da terminale, digiti il comando ./start_all.sh e prema Start dall’interfaccia Java; l’altro nodo deve aprire due terminali. Su un terminale deve fare la stessa operazione del primo nodo, mentre sul secondo terminale deve lanciare il file nc_to_remote_radio.sh seguito dall’indirizzo ip dell’altro nodo. Il file nc_to_remote_radio.sh si trova anch’esso nella cartella scripts.

Componente DLC

Dopo l’invocazione della funzione membro start della classe Resource da parte del file start_all.py, viene chiamata anche la funzione tx_task sempre della classe Resource, che viene eseguita fino all’istruzione sem_wait in attesa di un invio di un messaggio di testo. Quindi compare la stringa started del file start_all.py e le altre stringhe dovute alla selezione del tasto tasto START nell’interfaccia Java e al lancio del file nc_to_localhost.sh.

64

Dopo aver inviato un messaggio viene eseguita la funzione membro left_in della classe Resource e poi riprende l’esecuzione del membro tx_task da sem_wait e si blocca poi all’istruzione sem_timedwait nell’attesa di ricevere un messaggio.

Alla ricezione di un messaggio viene eseguita la funzione membro right_in della classe Resource che riceve il messaggio e manda l’ACK di avvenuta ricezione attraverso l’istruzione passPacket della porta right_out. Il messaggio dati ricevuto invece è passato alla porta left_out con la PassPacket. Viene chiamata nuovamente la funzione right_in quando il componente riceve un ACK.

Viene eseguita la funzione membro tx_task da sem_timedwait fino in fondo al ciclo while e poi ricomincia fino a bloccarsi nuovamente all’istruzione sem_wait in attesa di spedire di nuovo un messaggio.

Documenti correlati