---
layout: post
status: publish
published: true
title: "#include “BaudRate.java”"
author:
display_name: Siv
login: admin
email: alessandro.sivieri@gmail.com
url: https://launchpad.net/~scattino
author_login: admin
author_email: alessandro.sivieri@gmail.com
author_url: https://launchpad.net/~scattino
excerpt: 'Ebbene sì: il titolo che vedete non è per nulla inventato.
Ma andiamo con ordine. Esiste un sistema operativo: TinyOS. E’ pensato per
reti di sensori, le quali sono costituite da devices che si interfacciano con i
computer tramite porta seriale (travestita da USB, ma poco importa in questo contesto).
Di conseguenza, tale OS viene […]
'
wordpress_id: 3620
wordpress_url: http://sivieri.wordpress.com/?p=2199
date: '2012-07-02 17:31:35 +0000'
date_gmt: '2012-07-02 16:31:35 +0000'
categories:
- PlanetPOuL
tags: []
comments: []
---
Ebbene sì: il titolo che vedete non è per nulla inventato. Ma andiamo con ordine.
Esiste un sistema operativo: TinyOS. E’ pensato per reti di sensori, le quali sono costituite da devices che si interfacciano con i computer tramite porta seriale (travestita da USB, ma poco importa in questo contesto). Di conseguenza, tale OS viene distribuito con un set di librerie in alcuni linguaggi per leggere e deserializzare il più comodamente possibile i messaggi trattati all’interno del sistema stesso, così da poter ricevere i dati ed elaborarli in qualche modo. La struttura standard di una WSN, infatti, prevede che uno dei devices funga da sink e riceva le comunicazioni dell’intera rete, per poi trasferire queste informazioni in un computer (che le salverà in qualche formato). I linguaggi di questo piccolo SDK sono C, C++, Java e Python.
Per poter interfacciare un device di una WSN con un computer a bassa potenza come una Carambola, è necessario utilizzare le versioni C o C++, dato che sia Python che Java non sono tendenzialmente supportati su quel tipo di schede. Ora, mentre sfogliate i sorgenti che leggono le porte seriali, potreste imbattervi nella seguente riga:
#include “../../java/net/tinyos/packet/BaudRate.java”
Tah-da! Un file sorgente C include un file Java al suo interno! Vi lascio qualche momento per rabbrividire adeguatamente della cosa…
Ok, l’idea di fondo è la seguente: esiste una lista riempita in un file Java strutturata come segue:
package net.tinyos.packet;
class BaudRate {
static void init() throws Exception {
Platform.add(Platform.x, “mica”, 19200);
Platform.add(Platform.x, “mica2″, 57600);
…
}
}
Il problema è che tale lista è necessaria anche nella versione C (che deduco essere arrivata dopo quella Java), e anzichè replicare le informazioni, gli sviluppatori hanno deciso di includere il file Java dentro quello C.
La sintassi è adeguatamente simile, e per far funzionare il giochino (come spiegano alcuni commenti del file C) è necessario:
Chiaro, no? Non sono sicuro di riuscire a scendere ulteriormente nel dettaglio delle struct stesse, dato che sono un tantino convolute ed io non scrivo codice C da un po’, ma sono certo che un’occhiata ai sorgenti permetterà ai nerdoni tra voi di capire al volo come funziona il meccanismo!