SlideShare a Scribd company logo
1 of 29
L
      JavaComm:
         o
      controllare dispositivi seriali in Java


                                   Stefano Sanna
                           http://www.gerdavax.it
Stefano Sanna, JavaComm
                                                    1
Macomer, 28 Gennaio 2006
Parliamo di...

       Porte seriali: tante applicazioni interessanti!
   ●




       L'API JavaComm
   ●


            La libreria
        –

            Uso in ambiente Linux e Windows
        –

            Applicazioni
        –


       Trucchetti... :-)
   ●




       Conclusioni
   ●



Stefano Sanna, JavaComm
                                                         2
Macomer, 28 Gennaio 2006
Porte seriali
       L'interfaccia seriale RS-232 è uno standard molto
   ●


       diffuso. Alcune delle applicazioni più conosciute:
            Connessione remota attraverso modem wired e
        –
            wireless
            GPS, Loran, bussole
        –

            Programmazione microcontrolli
        –

            Controllo motori passo-passo
        –

            Strumenti di misura (multimetri, sensori...)
        –

            Registratori di cassa, POS, controllo accessi (RFID)
        –

            Lettura dati stazioni meteorologiche
        –

            Interfaccia economica per giocattoli costosi (LEGO
        –
            Mindstorm RIS 1.0-2.0)
Stefano Sanna, JavaComm
                                                                   3
Macomer, 28 Gennaio 2006
Ancora porte seriali! :-)
       L'adozione di nuovi standard di connettività wired
   ●


       (USB) e wireless (IrDA, Bluetooth) non ha reso
       obsoleta la porta seriale!

       Appositi layer di emulazione permettono di
   ●


       riciclare protocolli, driver e applicazioni sui nuovi
       sistemi di trasporto:
            USBSerial: emulazione seriale su bus USB
        –

            IrCOMM: emulazione seriale su link infrarosso
        –

            RFCOMM: emulazione seriale su link Bluetooth
        –




Stefano Sanna, JavaComm
                                                               4
Macomer, 28 Gennaio 2006
JavaComm
       E' una libreria opzionale che fornisce una API per
   ●


       l'accesso completo alle porte seriali (RS-232) e
       parziale alle parallele (IEEE-1284)

       Principali caratteristiche:
   ●


            Astrazione rispetto all'API del sistema operativo
        –

            Discovery delle porte disponibili
        –

            Modello ad eventi per dati disponibili e ownership
        –

            Accesso a basso livello:
        –
             ● Segnali EIA232 standard DTR, CD, CTS, RTS, DSR


             ● Opzioni hardware e software flow-control




Stefano Sanna, JavaComm
                                                                 5
Macomer, 28 Gennaio 2006
Piattaforme supportate
       Implementazione ufficiale Sun:
   ●


            2.X: Solaris e Windows              (e Linux???)
        –

            3.0: Solaris e Linux                (e Windows???)
        –


       Implementazioni di terze parti per Windows, Linux,
   ●


       PocketPC (Windows CE), Mac OS, SCO Open
       Server, BSD, HP-UX, Unixware, Digital/UNIX:
            RXTX:
        –
             ● http://www.rxtx.org (open source, multipiattaforma)


            SerialIO:
        –
             ● http://www.serialio.com (26 piattaforme!)




Stefano Sanna, JavaComm
                                                                     6
Macomer, 28 Gennaio 2006
Architettura JavaComm
                              Applicazione



                                     JavaComm API



                                                     Native
                           Java Virtual Machine     Library




                           Sistema operativo

                                Hardware
Stefano Sanna, JavaComm
                                                              7
Macomer, 28 Gennaio 2006
Installazione di JavaComm
       Una generica distribuzione è costituita da tre
   ●


       elementi principali:

            Uno o più file jar contenenti il bytecode dell'API Java
        –


            Una o più librerie contenenti il codice nativo
        –
            utilizzato dalla VM per accedere alle porte seriali
            rese disponibili dal sistema operativo

            Un file di property contenente i riferimenti al driver
        –
            da utilizzare, alla libreria nativa nonché altri
            parametri utili al funzionamento dell'interfaccia

Stefano Sanna, JavaComm
                                                                      8
Macomer, 28 Gennaio 2006
Installazione su Linux
       Il pacchetto è costituito da tre file principali:
   ●


            comm.jar: contiene le classi Java. Deve essere
        –
            incluso del CLASSPATH dell'applicazione

            libLinuxSerialParallel.so: è il file della libreria
        –
            nativa. Deve essere copiato nella directory /usr/lib/
            oppure caricato dalla VM attraverso il parametro
            -Djava.library.path (percorso ove si trova il file)

            javax.comm.properties: è il file contente le
        –
            property. Deve essere copiato nella directory lib/ del
            JRE o nella stessa directory contenente il file
            comm.jar
Stefano Sanna, JavaComm
                                                                     9
Macomer, 28 Gennaio 2006
Installazione su Windows
       Il pacchetto (versione 2.X) è costituito da tre file:
   ●


            comm.jar: contiene le classi Java. Deve essere
        –
            copiato nella directory libext del JRE

            comm.dll: è la libreria a caricamento dinamico
        –
            nativa. Deve essere copiata nella directory bin
            del JRE

            javax.comm.properties: è il file contenente le
        –
            property. Deve essere copiato nella directory lib
            del JRE



Stefano Sanna, JavaComm
                                                                 10
Macomer, 28 Gennaio 2006
Seriali in ambiente Java ME
       E' possibile accedere alle porte seriali anche in
   ●


       ambiente Java ME. In particolare:
            CDC/PersonalProfile (+ PersonalJava):
        –

                 grazie a JNI è possibile utilizzare librerie di terze
             ●


                 parti (ad esempio, Telio/SerialCE per PocketPC) con
                 modalità analoghe alla versione standard
            CLDC/MIDP:
        –
             ● il Generic Connection Framework fornisce lo


               schema “comm:com0;baudrate=19200...” e
               l'interfaccia CommConnection
             ● non tutti i dispositivi supportano l'accesso alle porte


               seriali! Esistono estensioni per PocketPC e PalmOS

Stefano Sanna, JavaComm
                                                                         11
Macomer, 28 Gennaio 2006
Panoramica sulla libreria
       javax.comm
   ●


            CommPortIdentifier:
        –
             ● fornisce funzionalità ad alto livello per


               l'enumerazione delle porta disponibili
            CommPort, SerialPort, ParallelPort:
        –
             ● forniscono una astrazione e le relative


               specializzazioni per l'accesso alle porte
            CommPortOwnershipListener,
        –
            SerialPortEventListener, ParallelPortEventListener
             ● forniscono un meccanismo asincrono per la gestione


               dello stato delle porte e data buffering


Stefano Sanna, JavaComm
                                                                12
Macomer, 28 Gennaio 2006
Gestione eventi
       CommPortOwnershipListener
   ●


            riceve eventi sull'assegnazione esclusiva di una
        –
            porta di comunicazione.
       SerialPortEventListener,
   ●


       ParallelPortEventListener
            ricevono eventi (SerialPortEvent, ParallelPortEvent)
        –
            sui dati in arrivo nelle rispettive porte: cambio stato
            delle linee, presenza di dati nel buffer...), compresa
            l'informazione sulle transizioni di stato:

            SerialPortEvent(SerialPort src,
               int eventtype, boolean oldvalue,
                                     boolean newvalue)
Stefano Sanna, JavaComm
                                                                      13
Macomer, 28 Gennaio 2006
Tipo eventi (SerialPortEvent)
       BI: Break interrupt
   ●


       CD: Carrier detect
   ●


       CTS: Clear to send
   ●


       DATA_AVAILABLE: Data available at the serial port
   ●


       DSR: Data set ready
   ●


       FE: Framing error
   ●
                                Permette di scrivere un driver
                              asincrono per la ricezione dei dati
       OE: Overrun error
   ●


       OUTPUT_BUFFER_EMPTY: Output buffer is empty
   ●


       PE: Parity error
   ●


       RI: Ring indicator
   ●




Stefano Sanna, JavaComm
                                                                    14
Macomer, 28 Gennaio 2006
Elencare le porte disponibili
       La classe CommPortIdentifier fornisce una
   ●


       enumerazione delle porte disponibili nel sistema:


   Enumeration en = CommPortIdentifier.getPortIdentifiers();


   while (en.hasMoreElements()) {
       CommPortIdentifier id = (CommPortIdentifier)
                                             en.nextElement();
       System.out.println("Port found: " + id.getName());
   }



Stefano Sanna, JavaComm
                                                                 15
Macomer, 28 Gennaio 2006
Aprire una porta seriale...
        La classe SerialPort modella una porta seriale,
   ●


        della quale è possibile avere controllo pressoché
        completo:

   CommPortIdentifier portID =
            CommPortIdentifier.getPortIdentifier(“/dev/ttyS0”);


   SerialPort port =
            (SerialPort) portID.open(“MyApplication”, 5000);



         Nome convenzionale della             Tempo massimo di attesa
       applicazione che chiede la porta    per avere ownership della porta

Stefano Sanna, JavaComm
                                                                        16
Macomer, 28 Gennaio 2006
Impostare i parametri di porta
       Attraverso il metodo setSerialParams() è
   ●


       possibile impostare la velocità e il formato dei
       dati: bit di dati, bit di stop, bit di parità
       Le velocità valide sono quelle standard: 300, 1200,
   ●


       2400, 4800, 9600, 19200, 38400, 57600, 115200
       Gli altri parametri sono identificati da costanti:
   ●


            DATABITS_5, DATABITS_6, DATABITS_7,
        –
            DATABITS_8
            PARITY_EVEN, PARITY_MARK, PARITY_NONE,
        –
            PARITY_ODD, PARITY_SPACE
            STOPBITS_1, STOPBITS_1_5, STOPBITS_2
        –



Stefano Sanna, JavaComm
                                                         17
Macomer, 28 Gennaio 2006
Applicazioni
       JavaComm permette di implementare alcune
   ●


       interessanti funzionalità nelle applicazioni Java:

            Lettura posizione da GPS
        –


            Invio/ricezione di SMS attraverso cellulare
        –


            Accesso alla rubrica del cellulare
        –


            Interfacciamento a display LCD
        –


            Interfaccia multifunzione I/O
        –

Stefano Sanna, JavaComm
                                                            18
Macomer, 28 Gennaio 2006
Lettura posizione da GPS
       I ricevitori GPS dotati di interfaccia RS-232, USB o
   ●


       Bluetooth inviano stringhe di testo contenenti le
       informazioni di localizzazione
       Lo standard NMEA 0183 stabilisce il formato delle
   ●


       sentence inviate al calcolatore:
            GPRMC
        –
             ● Recommended Minimum Specific GPS/TRANSIT Data


            GPGGA
        –
             ● Global Positioning System Fix Data


            GPGSV
        –
             ● GPS Satellites in View




Stefano Sanna, JavaComm
                                                              19
Macomer, 28 Gennaio 2006
Stampa delle sentence NMEA
   port.setSerialPortParams(4800, SerialPort.DATABITS_8,
                  SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);


   BufferedReader buffer = new BufferedReader(
                new InputStreamReader(port.getInputStream()));


   String sentence;


   while((sentence = buffer.readLine()) != null) {
         System.out.println(sentence);
   }




Stefano Sanna, JavaComm
                                                                    20
Macomer, 28 Gennaio 2006
Un questione di parsing...
   $GPGGA,164922.982,3859.4108,N,00856.1785,E,1,04,3.4,127.9,M
     ,47.6,M,0.0,0000*7A



                           Latitudine   Longitudine               Altitudine
                                                      Satelliti

   $GPGSA,A,3,20,23,11,24,,,,,,,,,4.4,3.4,2.8*3A
   $GPGSV,3,1,10,11,83,014,42,20,59,273,44,01,52,071,47,19,36,
     172,45*71
   $GPGSV,3,2,10,23,24,192,35,14,20,041,40,17,19,316,41,24,17,
     299,35*7F
   $GPGSV,3,3,10,25,14,103,35,28,10,272,00*72
   $GPRMC,164922.982,A,3859.4108,N,00856.1785,E,0.068674,,2701
     06,,*17

Stefano Sanna, JavaComm
                                                                         21
Macomer, 28 Gennaio 2006
Trucchetti... [per Linux] :-)
       JavaComm è efficace per il controllo di porte seriali
   ●


       standard. La libreria risulta insufficiente per:
            controllare periferiche connesse via USB e Bluetooth
        –

            accedere alle porte seriali su piattaforme per le quali
        –
            non sia stato fatto il porting della libreria nativa
       Come fareTM?
   ●




       Con alcuni accorgimenti è possibile avere:
   ●




            Accesso a dispositivi Bluetooth senza JSR 82
        –

            Accesso a dispositivi USB senza Java-USB
        –

            ... accesso a seriali senza JavaComm! :-)
        –
Stefano Sanna, JavaComm
                                                                  22
Macomer, 28 Gennaio 2006
javax.comm.properties
       Il file di property contiene le informazioni sulle
   ●


       porte seriali alle quali la VM ha accesso:

       ...
       # Implementation specific driver
       driver=com.sun.comm.LinuxDriver

       # Paths to server-side serial port devices
       serpath0 = /dev/ttyS0
       serpath1 = /dev/ttyS1
       ...

       Se il sistema operativo esporta altre interfacce
   ●


       seriali... è sufficiente aggiungerle nella lista!
Stefano Sanna, JavaComm
                                                            23
Macomer, 28 Gennaio 2006
javax.comm.properties
       Aggiungiamo due porte rfcomm e una usbserial:
   ●




       ...
       # Implementation specific driver
       driver=com.sun.comm.LinuxDriver

       # Paths to          server-side serial port devices
       serpath0 =          /dev/ttyS0
       serpath1 =          /dev/ttyS1
       serpath2 =          /dev/rfcomm0
       serpath3 =          /dev/rfcomm1
       serpath4 =          /dev/ttyUSB0
       ...



Stefano Sanna, JavaComm
                                                             24
Macomer, 28 Gennaio 2006
RFCOMM senza JSR 82
       Utilizzando Bluez, lo stack Bluetooth ufficiale in
   ●


       ambiente Linux, è possibile avere il binding di
       porte seriali rfcomm su specifici servizi SPP:

       rfcomm bind        0 00:11:22:AA:BB:CC       1
       Sul file /etc/bluetooth/rfcomm.conf si può avere il
   ●


       binding automatico:

       rfcomm0 {
           bind yes;
           device 00:11:22:AA:BB:CC;
           channel 1;
       }
Stefano Sanna, JavaComm
                                                             25
Macomer, 28 Gennaio 2006
Seriali senza JavaComm (Linux)
       Nel caso non sia possibile installare JavaComm (o
   ●


       non si voglia installare), è possibile utilizzare le
       utility native del sistema operativo e sfruttare il
       filesystem di Unix:

            creare il device opportuno (ttySx, rfcomm, usbserial)
        –


            impostare i parametri con setserial
        –


            accedere al device seriale come ad un normale file
        –


       Da verificare per device non standard...
   ●



Stefano Sanna, JavaComm
                                                                    26
Macomer, 28 Gennaio 2006
Conclusioni
       JavaComm permette di scrivere applicazioni Java
   ●


       che si interfacciano ad hardware specializzato:
       GPS, modem, controller, sensori...

       Con qualche accorgimento è possibile accedere a
   ●


       porte USB, IrDA e Bluetooth: in ambiente Linux,
       con un po' di tuning, è possibile avere accesso in
       modo semplice a porte USBSerial e RFCOMM

       L'altalena del supporto ai diversi sistemi operativi
   ●


       non facilita l'attività di porting...


Stefano Sanna, JavaComm
                                                              27
Macomer, 28 Gennaio 2006
Bibliografia
       JavaComm API
   ●


            Sun Microsystems
        –
            http://java.sun.com/products/javacomm

       Java Cookbook
   ●


            Ian F. Darwin
        –
            O'Reilly (ISBN: 0-596-00701-9)

       JavaComm: introduzione alla libreria; interfacciare
   ●


       un display LCD e un telefono cellulare
            Stefano Sanna
        –
            DEV n. 113 e 114, Gruppo Editoriale Infomedia
Stefano Sanna, JavaComm
                                                             28
Macomer, 28 Gennaio 2006
JavaComm
        controllare dispositivi seriali in Java
                                                 (Versione 1.1)
                           (C) 2006 Stefano Sanna (gerdavax@tiscali.it)




  è garantito il permesso di copiare, distribuire e/o modificare questo documento seguendo i
  termini della Licenza per Documentazione Libera GNU, Versione 1.1 o ogni versione
  successiva pubblicata dalla Free Software Foundation. Una copia della licenza in lingua
  italiana è disponibile presso:  http://www.softwarelibero.it/gnudoc/fdl.it.html
  Realizzato in ambiente Linux con OpenOffice 2.0
  Tutti i marchi commerciali sono di proprietà dei rispettivi titolari e sono stati citati in questa presentazione
  a solo scopo illustrativo.




Stefano Sanna, JavaComm
                                                                                                                     29
Macomer, 28 Gennaio 2006

More Related Content

Similar to JavaComm

Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open sourceLinux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open sourceMario Rossano
 
Programma il futuro: una scelta open source
Programma il futuro: una scelta open sourceProgramma il futuro: una scelta open source
Programma il futuro: una scelta open sourceMarco Ferrigno
 
Elementidi informatica
Elementidi informaticaElementidi informatica
Elementidi informaticagiu89
 
Programma il futuro : una scelta Open Source
Programma il futuro : una scelta Open SourceProgramma il futuro : una scelta Open Source
Programma il futuro : una scelta Open SourceNaLUG
 
Software libero nei sistemi embedded
Software libero nei sistemi embeddedSoftware libero nei sistemi embedded
Software libero nei sistemi embeddedDaniele Costarella
 
(in)Sicurezze delle reti wireless 802.11b
(in)Sicurezze delle reti wireless 802.11b(in)Sicurezze delle reti wireless 802.11b
(in)Sicurezze delle reti wireless 802.11bAlfredo Morresi
 
J2Me Il Micro Mondo Java
J2Me Il Micro Mondo JavaJ2Me Il Micro Mondo Java
J2Me Il Micro Mondo JavaAntonio Terreno
 
Hardware Libero - Linux Day 2007
Hardware Libero - Linux Day 2007Hardware Libero - Linux Day 2007
Hardware Libero - Linux Day 2007pino_otto
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, javaMatteo Baccan
 
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...LeonardoIurada
 
Marco Signorelli 19 09 2008 Ordine Degli Avvocati Di Bergamo
Marco Signorelli   19 09 2008 Ordine Degli Avvocati Di BergamoMarco Signorelli   19 09 2008 Ordine Degli Avvocati Di Bergamo
Marco Signorelli 19 09 2008 Ordine Degli Avvocati Di BergamoAndrea Rossetti
 
Il web service e i sistemi embedded - Tesi - cap2
Il web service e i sistemi embedded - Tesi - cap2Il web service e i sistemi embedded - Tesi - cap2
Il web service e i sistemi embedded - Tesi - cap2pma77
 
Introduzione al java
Introduzione al javaIntroduzione al java
Introduzione al javaGiovanni Pace
 
Power point sistemi operativi , luca marcella 3° e
Power point sistemi operativi , luca marcella 3° ePower point sistemi operativi , luca marcella 3° e
Power point sistemi operativi , luca marcella 3° eLuca Marcella
 
Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Marco Loregian
 
Transmission Error Detector per Wi-Fi su kernel Linux 4.0
Transmission Error Detector per Wi-Fi su kernel Linux 4.0Transmission Error Detector per Wi-Fi su kernel Linux 4.0
Transmission Error Detector per Wi-Fi su kernel Linux 4.0Gabriele Di Bernardo
 
Asynchronous Java ME and XML
Asynchronous Java ME and XMLAsynchronous Java ME and XML
Asynchronous Java ME and XMLAndrea Castello
 
Presentazione Netportal1
Presentazione Netportal1Presentazione Netportal1
Presentazione Netportal1guest92d4f237
 

Similar to JavaComm (20)

Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open sourceLinux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
Linux Day 2014 - Napoli - Programma Il Futuro: una scelta open source
 
Programma il futuro: una scelta open source
Programma il futuro: una scelta open sourceProgramma il futuro: una scelta open source
Programma il futuro: una scelta open source
 
Elementidi informatica
Elementidi informaticaElementidi informatica
Elementidi informatica
 
Programma il futuro : una scelta Open Source
Programma il futuro : una scelta Open SourceProgramma il futuro : una scelta Open Source
Programma il futuro : una scelta Open Source
 
Software libero nei sistemi embedded
Software libero nei sistemi embeddedSoftware libero nei sistemi embedded
Software libero nei sistemi embedded
 
(in)Sicurezze delle reti wireless 802.11b
(in)Sicurezze delle reti wireless 802.11b(in)Sicurezze delle reti wireless 802.11b
(in)Sicurezze delle reti wireless 802.11b
 
J2Me Il Micro Mondo Java
J2Me Il Micro Mondo JavaJ2Me Il Micro Mondo Java
J2Me Il Micro Mondo Java
 
Hardware Libero - Linux Day 2007
Hardware Libero - Linux Day 2007Hardware Libero - Linux Day 2007
Hardware Libero - Linux Day 2007
 
Webbit 2004: Tiger, java
Webbit 2004: Tiger, javaWebbit 2004: Tiger, java
Webbit 2004: Tiger, java
 
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
 
Marco Signorelli 19 09 2008 Ordine Degli Avvocati Di Bergamo
Marco Signorelli   19 09 2008 Ordine Degli Avvocati Di BergamoMarco Signorelli   19 09 2008 Ordine Degli Avvocati Di Bergamo
Marco Signorelli 19 09 2008 Ordine Degli Avvocati Di Bergamo
 
Il web service e i sistemi embedded - Tesi - cap2
Il web service e i sistemi embedded - Tesi - cap2Il web service e i sistemi embedded - Tesi - cap2
Il web service e i sistemi embedded - Tesi - cap2
 
Introduzione al java
Introduzione al javaIntroduzione al java
Introduzione al java
 
Power point sistemi operativi , luca marcella 3° e
Power point sistemi operativi , luca marcella 3° ePower point sistemi operativi , luca marcella 3° e
Power point sistemi operativi , luca marcella 3° e
 
Java AWT
Java AWTJava AWT
Java AWT
 
Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3
 
Cesvip 20110127
Cesvip 20110127Cesvip 20110127
Cesvip 20110127
 
Transmission Error Detector per Wi-Fi su kernel Linux 4.0
Transmission Error Detector per Wi-Fi su kernel Linux 4.0Transmission Error Detector per Wi-Fi su kernel Linux 4.0
Transmission Error Detector per Wi-Fi su kernel Linux 4.0
 
Asynchronous Java ME and XML
Asynchronous Java ME and XMLAsynchronous Java ME and XML
Asynchronous Java ME and XML
 
Presentazione Netportal1
Presentazione Netportal1Presentazione Netportal1
Presentazione Netportal1
 

More from Stefano Sanna

Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Stefano Sanna
 
Android Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldAndroid Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldStefano Sanna
 
Android Things Linux Day 2017
Android Things Linux Day 2017 Android Things Linux Day 2017
Android Things Linux Day 2017 Stefano Sanna
 
Android Things in action
Android Things in actionAndroid Things in action
Android Things in actionStefano Sanna
 
Introduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconIntroduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconStefano Sanna
 
Augmented Smartphone
Augmented SmartphoneAugmented Smartphone
Augmented SmartphoneStefano Sanna
 
Bluetooth Low Energy
Bluetooth Low EnergyBluetooth Low Energy
Bluetooth Low EnergyStefano Sanna
 
Google TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidGoogle TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidStefano Sanna
 
Enlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVEnlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVStefano Sanna
 
NFC: tecnologia e applicazioni
NFC: tecnologia e applicazioniNFC: tecnologia e applicazioni
NFC: tecnologia e applicazioniStefano Sanna
 
Android - Programmazione Avanzata
Android -  Programmazione AvanzataAndroid -  Programmazione Avanzata
Android - Programmazione AvanzataStefano Sanna
 
HCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsHCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsStefano Sanna
 
Android & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioniAndroid & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioniStefano Sanna
 
Application Store: opportunita' e trappole
Application Store: opportunita' e trappoleApplication Store: opportunita' e trappole
Application Store: opportunita' e trappoleStefano Sanna
 
Android Bluetooth Hacking
Android Bluetooth HackingAndroid Bluetooth Hacking
Android Bluetooth HackingStefano Sanna
 
Free Software e Open Hardware
Free Software e Open HardwareFree Software e Open Hardware
Free Software e Open HardwareStefano Sanna
 
Playing with Mobile 2.0
Playing with Mobile 2.0Playing with Mobile 2.0
Playing with Mobile 2.0Stefano Sanna
 

More from Stefano Sanna (20)

Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018Mobile Security su Android - LinuxDay 2018
Mobile Security su Android - LinuxDay 2018
 
Android Things, from mobile apps to physical world
Android Things, from mobile apps to physical worldAndroid Things, from mobile apps to physical world
Android Things, from mobile apps to physical world
 
Android Things Linux Day 2017
Android Things Linux Day 2017 Android Things Linux Day 2017
Android Things Linux Day 2017
 
Android Things in action
Android Things in actionAndroid Things in action
Android Things in action
 
Introduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeaconIntroduzione alla tecnologia iBeacon
Introduzione alla tecnologia iBeacon
 
Augmented Smartphone
Augmented SmartphoneAugmented Smartphone
Augmented Smartphone
 
Bluetooth Low Energy
Bluetooth Low EnergyBluetooth Low Energy
Bluetooth Low Energy
 
Google TV: la nuova frontiera Android
Google TV: la nuova frontiera AndroidGoogle TV: la nuova frontiera Android
Google TV: la nuova frontiera Android
 
Enlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TVEnlarge your screen: introducing the Google TV
Enlarge your screen: introducing the Google TV
 
Introduzione ad NFC
Introduzione ad NFCIntroduzione ad NFC
Introduzione ad NFC
 
NFC: tecnologia e applicazioni
NFC: tecnologia e applicazioniNFC: tecnologia e applicazioni
NFC: tecnologia e applicazioni
 
Android - Programmazione Avanzata
Android -  Programmazione AvanzataAndroid -  Programmazione Avanzata
Android - Programmazione Avanzata
 
HCIM08 - Mobile Applications
HCIM08 - Mobile ApplicationsHCIM08 - Mobile Applications
HCIM08 - Mobile Applications
 
Android & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioniAndroid & Bluetooth: hacking e applicazioni
Android & Bluetooth: hacking e applicazioni
 
Application Store: opportunita' e trappole
Application Store: opportunita' e trappoleApplication Store: opportunita' e trappole
Application Store: opportunita' e trappole
 
Android Bluetooth Hacking
Android Bluetooth HackingAndroid Bluetooth Hacking
Android Bluetooth Hacking
 
Android
AndroidAndroid
Android
 
Free Software e Open Hardware
Free Software e Open HardwareFree Software e Open Hardware
Free Software e Open Hardware
 
Playing with Mobile 2.0
Playing with Mobile 2.0Playing with Mobile 2.0
Playing with Mobile 2.0
 
Sun SPOT
Sun SPOTSun SPOT
Sun SPOT
 

JavaComm

  • 1. L JavaComm: o controllare dispositivi seriali in Java Stefano Sanna http://www.gerdavax.it Stefano Sanna, JavaComm 1 Macomer, 28 Gennaio 2006
  • 2. Parliamo di... Porte seriali: tante applicazioni interessanti! ● L'API JavaComm ● La libreria – Uso in ambiente Linux e Windows – Applicazioni – Trucchetti... :-) ● Conclusioni ● Stefano Sanna, JavaComm 2 Macomer, 28 Gennaio 2006
  • 3. Porte seriali L'interfaccia seriale RS-232 è uno standard molto ● diffuso. Alcune delle applicazioni più conosciute: Connessione remota attraverso modem wired e – wireless GPS, Loran, bussole – Programmazione microcontrolli – Controllo motori passo-passo – Strumenti di misura (multimetri, sensori...) – Registratori di cassa, POS, controllo accessi (RFID) – Lettura dati stazioni meteorologiche – Interfaccia economica per giocattoli costosi (LEGO – Mindstorm RIS 1.0-2.0) Stefano Sanna, JavaComm 3 Macomer, 28 Gennaio 2006
  • 4. Ancora porte seriali! :-) L'adozione di nuovi standard di connettività wired ● (USB) e wireless (IrDA, Bluetooth) non ha reso obsoleta la porta seriale! Appositi layer di emulazione permettono di ● riciclare protocolli, driver e applicazioni sui nuovi sistemi di trasporto: USBSerial: emulazione seriale su bus USB – IrCOMM: emulazione seriale su link infrarosso – RFCOMM: emulazione seriale su link Bluetooth – Stefano Sanna, JavaComm 4 Macomer, 28 Gennaio 2006
  • 5. JavaComm E' una libreria opzionale che fornisce una API per ● l'accesso completo alle porte seriali (RS-232) e parziale alle parallele (IEEE-1284) Principali caratteristiche: ● Astrazione rispetto all'API del sistema operativo – Discovery delle porte disponibili – Modello ad eventi per dati disponibili e ownership – Accesso a basso livello: – ● Segnali EIA232 standard DTR, CD, CTS, RTS, DSR ● Opzioni hardware e software flow-control Stefano Sanna, JavaComm 5 Macomer, 28 Gennaio 2006
  • 6. Piattaforme supportate Implementazione ufficiale Sun: ● 2.X: Solaris e Windows (e Linux???) – 3.0: Solaris e Linux (e Windows???) – Implementazioni di terze parti per Windows, Linux, ● PocketPC (Windows CE), Mac OS, SCO Open Server, BSD, HP-UX, Unixware, Digital/UNIX: RXTX: – ● http://www.rxtx.org (open source, multipiattaforma) SerialIO: – ● http://www.serialio.com (26 piattaforme!) Stefano Sanna, JavaComm 6 Macomer, 28 Gennaio 2006
  • 7. Architettura JavaComm Applicazione JavaComm API Native Java Virtual Machine Library Sistema operativo Hardware Stefano Sanna, JavaComm 7 Macomer, 28 Gennaio 2006
  • 8. Installazione di JavaComm Una generica distribuzione è costituita da tre ● elementi principali: Uno o più file jar contenenti il bytecode dell'API Java – Una o più librerie contenenti il codice nativo – utilizzato dalla VM per accedere alle porte seriali rese disponibili dal sistema operativo Un file di property contenente i riferimenti al driver – da utilizzare, alla libreria nativa nonché altri parametri utili al funzionamento dell'interfaccia Stefano Sanna, JavaComm 8 Macomer, 28 Gennaio 2006
  • 9. Installazione su Linux Il pacchetto è costituito da tre file principali: ● comm.jar: contiene le classi Java. Deve essere – incluso del CLASSPATH dell'applicazione libLinuxSerialParallel.so: è il file della libreria – nativa. Deve essere copiato nella directory /usr/lib/ oppure caricato dalla VM attraverso il parametro -Djava.library.path (percorso ove si trova il file) javax.comm.properties: è il file contente le – property. Deve essere copiato nella directory lib/ del JRE o nella stessa directory contenente il file comm.jar Stefano Sanna, JavaComm 9 Macomer, 28 Gennaio 2006
  • 10. Installazione su Windows Il pacchetto (versione 2.X) è costituito da tre file: ● comm.jar: contiene le classi Java. Deve essere – copiato nella directory libext del JRE comm.dll: è la libreria a caricamento dinamico – nativa. Deve essere copiata nella directory bin del JRE javax.comm.properties: è il file contenente le – property. Deve essere copiato nella directory lib del JRE Stefano Sanna, JavaComm 10 Macomer, 28 Gennaio 2006
  • 11. Seriali in ambiente Java ME E' possibile accedere alle porte seriali anche in ● ambiente Java ME. In particolare: CDC/PersonalProfile (+ PersonalJava): – grazie a JNI è possibile utilizzare librerie di terze ● parti (ad esempio, Telio/SerialCE per PocketPC) con modalità analoghe alla versione standard CLDC/MIDP: – ● il Generic Connection Framework fornisce lo schema “comm:com0;baudrate=19200...” e l'interfaccia CommConnection ● non tutti i dispositivi supportano l'accesso alle porte seriali! Esistono estensioni per PocketPC e PalmOS Stefano Sanna, JavaComm 11 Macomer, 28 Gennaio 2006
  • 12. Panoramica sulla libreria javax.comm ● CommPortIdentifier: – ● fornisce funzionalità ad alto livello per l'enumerazione delle porta disponibili CommPort, SerialPort, ParallelPort: – ● forniscono una astrazione e le relative specializzazioni per l'accesso alle porte CommPortOwnershipListener, – SerialPortEventListener, ParallelPortEventListener ● forniscono un meccanismo asincrono per la gestione dello stato delle porte e data buffering Stefano Sanna, JavaComm 12 Macomer, 28 Gennaio 2006
  • 13. Gestione eventi CommPortOwnershipListener ● riceve eventi sull'assegnazione esclusiva di una – porta di comunicazione. SerialPortEventListener, ● ParallelPortEventListener ricevono eventi (SerialPortEvent, ParallelPortEvent) – sui dati in arrivo nelle rispettive porte: cambio stato delle linee, presenza di dati nel buffer...), compresa l'informazione sulle transizioni di stato: SerialPortEvent(SerialPort src, int eventtype, boolean oldvalue, boolean newvalue) Stefano Sanna, JavaComm 13 Macomer, 28 Gennaio 2006
  • 14. Tipo eventi (SerialPortEvent) BI: Break interrupt ● CD: Carrier detect ● CTS: Clear to send ● DATA_AVAILABLE: Data available at the serial port ● DSR: Data set ready ● FE: Framing error ● Permette di scrivere un driver asincrono per la ricezione dei dati OE: Overrun error ● OUTPUT_BUFFER_EMPTY: Output buffer is empty ● PE: Parity error ● RI: Ring indicator ● Stefano Sanna, JavaComm 14 Macomer, 28 Gennaio 2006
  • 15. Elencare le porte disponibili La classe CommPortIdentifier fornisce una ● enumerazione delle porte disponibili nel sistema: Enumeration en = CommPortIdentifier.getPortIdentifiers(); while (en.hasMoreElements()) { CommPortIdentifier id = (CommPortIdentifier) en.nextElement(); System.out.println("Port found: " + id.getName()); } Stefano Sanna, JavaComm 15 Macomer, 28 Gennaio 2006
  • 16. Aprire una porta seriale... La classe SerialPort modella una porta seriale, ● della quale è possibile avere controllo pressoché completo: CommPortIdentifier portID = CommPortIdentifier.getPortIdentifier(“/dev/ttyS0”); SerialPort port = (SerialPort) portID.open(“MyApplication”, 5000); Nome convenzionale della Tempo massimo di attesa applicazione che chiede la porta per avere ownership della porta Stefano Sanna, JavaComm 16 Macomer, 28 Gennaio 2006
  • 17. Impostare i parametri di porta Attraverso il metodo setSerialParams() è ● possibile impostare la velocità e il formato dei dati: bit di dati, bit di stop, bit di parità Le velocità valide sono quelle standard: 300, 1200, ● 2400, 4800, 9600, 19200, 38400, 57600, 115200 Gli altri parametri sono identificati da costanti: ● DATABITS_5, DATABITS_6, DATABITS_7, – DATABITS_8 PARITY_EVEN, PARITY_MARK, PARITY_NONE, – PARITY_ODD, PARITY_SPACE STOPBITS_1, STOPBITS_1_5, STOPBITS_2 – Stefano Sanna, JavaComm 17 Macomer, 28 Gennaio 2006
  • 18. Applicazioni JavaComm permette di implementare alcune ● interessanti funzionalità nelle applicazioni Java: Lettura posizione da GPS – Invio/ricezione di SMS attraverso cellulare – Accesso alla rubrica del cellulare – Interfacciamento a display LCD – Interfaccia multifunzione I/O – Stefano Sanna, JavaComm 18 Macomer, 28 Gennaio 2006
  • 19. Lettura posizione da GPS I ricevitori GPS dotati di interfaccia RS-232, USB o ● Bluetooth inviano stringhe di testo contenenti le informazioni di localizzazione Lo standard NMEA 0183 stabilisce il formato delle ● sentence inviate al calcolatore: GPRMC – ● Recommended Minimum Specific GPS/TRANSIT Data GPGGA – ● Global Positioning System Fix Data GPGSV – ● GPS Satellites in View Stefano Sanna, JavaComm 19 Macomer, 28 Gennaio 2006
  • 20. Stampa delle sentence NMEA port.setSerialPortParams(4800, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); BufferedReader buffer = new BufferedReader( new InputStreamReader(port.getInputStream())); String sentence; while((sentence = buffer.readLine()) != null) { System.out.println(sentence); } Stefano Sanna, JavaComm 20 Macomer, 28 Gennaio 2006
  • 21. Un questione di parsing... $GPGGA,164922.982,3859.4108,N,00856.1785,E,1,04,3.4,127.9,M ,47.6,M,0.0,0000*7A Latitudine Longitudine Altitudine Satelliti $GPGSA,A,3,20,23,11,24,,,,,,,,,4.4,3.4,2.8*3A $GPGSV,3,1,10,11,83,014,42,20,59,273,44,01,52,071,47,19,36, 172,45*71 $GPGSV,3,2,10,23,24,192,35,14,20,041,40,17,19,316,41,24,17, 299,35*7F $GPGSV,3,3,10,25,14,103,35,28,10,272,00*72 $GPRMC,164922.982,A,3859.4108,N,00856.1785,E,0.068674,,2701 06,,*17 Stefano Sanna, JavaComm 21 Macomer, 28 Gennaio 2006
  • 22. Trucchetti... [per Linux] :-) JavaComm è efficace per il controllo di porte seriali ● standard. La libreria risulta insufficiente per: controllare periferiche connesse via USB e Bluetooth – accedere alle porte seriali su piattaforme per le quali – non sia stato fatto il porting della libreria nativa Come fareTM? ● Con alcuni accorgimenti è possibile avere: ● Accesso a dispositivi Bluetooth senza JSR 82 – Accesso a dispositivi USB senza Java-USB – ... accesso a seriali senza JavaComm! :-) – Stefano Sanna, JavaComm 22 Macomer, 28 Gennaio 2006
  • 23. javax.comm.properties Il file di property contiene le informazioni sulle ● porte seriali alle quali la VM ha accesso: ... # Implementation specific driver driver=com.sun.comm.LinuxDriver # Paths to server-side serial port devices serpath0 = /dev/ttyS0 serpath1 = /dev/ttyS1 ... Se il sistema operativo esporta altre interfacce ● seriali... è sufficiente aggiungerle nella lista! Stefano Sanna, JavaComm 23 Macomer, 28 Gennaio 2006
  • 24. javax.comm.properties Aggiungiamo due porte rfcomm e una usbserial: ● ... # Implementation specific driver driver=com.sun.comm.LinuxDriver # Paths to server-side serial port devices serpath0 = /dev/ttyS0 serpath1 = /dev/ttyS1 serpath2 = /dev/rfcomm0 serpath3 = /dev/rfcomm1 serpath4 = /dev/ttyUSB0 ... Stefano Sanna, JavaComm 24 Macomer, 28 Gennaio 2006
  • 25. RFCOMM senza JSR 82 Utilizzando Bluez, lo stack Bluetooth ufficiale in ● ambiente Linux, è possibile avere il binding di porte seriali rfcomm su specifici servizi SPP: rfcomm bind 0 00:11:22:AA:BB:CC 1 Sul file /etc/bluetooth/rfcomm.conf si può avere il ● binding automatico: rfcomm0 { bind yes; device 00:11:22:AA:BB:CC; channel 1; } Stefano Sanna, JavaComm 25 Macomer, 28 Gennaio 2006
  • 26. Seriali senza JavaComm (Linux) Nel caso non sia possibile installare JavaComm (o ● non si voglia installare), è possibile utilizzare le utility native del sistema operativo e sfruttare il filesystem di Unix: creare il device opportuno (ttySx, rfcomm, usbserial) – impostare i parametri con setserial – accedere al device seriale come ad un normale file – Da verificare per device non standard... ● Stefano Sanna, JavaComm 26 Macomer, 28 Gennaio 2006
  • 27. Conclusioni JavaComm permette di scrivere applicazioni Java ● che si interfacciano ad hardware specializzato: GPS, modem, controller, sensori... Con qualche accorgimento è possibile accedere a ● porte USB, IrDA e Bluetooth: in ambiente Linux, con un po' di tuning, è possibile avere accesso in modo semplice a porte USBSerial e RFCOMM L'altalena del supporto ai diversi sistemi operativi ● non facilita l'attività di porting... Stefano Sanna, JavaComm 27 Macomer, 28 Gennaio 2006
  • 28. Bibliografia JavaComm API ● Sun Microsystems – http://java.sun.com/products/javacomm Java Cookbook ● Ian F. Darwin – O'Reilly (ISBN: 0-596-00701-9) JavaComm: introduzione alla libreria; interfacciare ● un display LCD e un telefono cellulare Stefano Sanna – DEV n. 113 e 114, Gruppo Editoriale Infomedia Stefano Sanna, JavaComm 28 Macomer, 28 Gennaio 2006
  • 29. JavaComm controllare dispositivi seriali in Java (Versione 1.1) (C) 2006 Stefano Sanna (gerdavax@tiscali.it) è garantito il permesso di copiare, distribuire e/o modificare questo documento seguendo i termini della Licenza per Documentazione Libera GNU, Versione 1.1 o ogni versione successiva pubblicata dalla Free Software Foundation. Una copia della licenza in lingua italiana è disponibile presso: http://www.softwarelibero.it/gnudoc/fdl.it.html Realizzato in ambiente Linux con OpenOffice 2.0 Tutti i marchi commerciali sono di proprietà dei rispettivi titolari e sono stati citati in questa presentazione a solo scopo illustrativo. Stefano Sanna, JavaComm 29 Macomer, 28 Gennaio 2006