Home Tecnica Programmazione Programmare in C sull'N900

In evidenza

SMAU a Bologna con Research to Business

SMAU a Bologna con Research to Business

Il 6 e 7 giugno il Roadshow Smau Business torna a far tappa al Padiglione 33 della Fiera di Bologna e...
Gli articolisti del Portale

Gli articolisti del Portale

Abbiamo deciso di dare più visibilità a tutti coloro che hanno pubblicato articoli per noi, questo perché...
SMAU festeggia il suo quinto anno nel NordEst a Padova

SMAU festeggia il suo quinto anno nel NordEst a Padova

Il 18 e 19 aprile al padiglione 5 di Padova Fiere si terrà la prossima tappa di SMAU Business Roadshow. All'evento...
SMAU risale l’Italia e arriva a Roma

SMAU risale l’Italia e arriva a Roma

Il 21 e 22 marzo nella Nuova Fiera di Roma si terrà la prossima tappa di SMAU Business Roadshow. L'evento...

Bandi di Concorso

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Avviso per incarico ad ingegnere informatico alla Provincia di Bergamo

Nell'ambito del progetto denominato "SOS badanti: la rete provinciale di sportelli per assistenti e collaboratori familiari” nell'ambito del programma "SAP - Servizi alla Persona" è stato pubblicato la Provincia di Bergamo ha pubblicato l'avviso per il reclutamento di una unità per incarico di...

21 Mag 2012 - Letture:1

Esperto di servizi e tecnologie cloud al Digit PA

Procedura comparativa per il conferimento di un incarico di collaborazione coordinata e continuativa per un profilo senior di “Esperto di servizi e tecnologie cloud”, nell’ambito del progetto europeo “Open Dai” presso l' Ente nazionale per la digitalizzazione della Pubblica Amministrazione...

18 Apr 2012 - Letture:34

Selezione per addetto servizi informatici all'Autorità Portuale di Brindisi

Avviso di selezione pubblica per titoli e prova orale per l’assunzione di n. 1 “addetto ai servizi informatici”, a tempo pieno ed determinato triennale, previo periodo di prova, da inquadrare nell’Area Amministrativa. (Inquadramento al III Livello del C.C.N.L. dei Lavoratori...

12 Feb 2012 - Letture:435

Concorso pubblico per informatico alla Corte dei Conti

E' indetto un concorso pubblico, per   esami,   per   il reclutamento di tre unità di informatici da inquadrare nella III area, fascia retributiva F1, da destinare agli Uffici della Corte dei Conti con sede in Roma. Requisiti: laurea triennale in scienze e...

05 Feb 2012 - Letture:306

Istruttore informatico L.68/1999 al Comune di Potenza

Concorso pubblico, per esami, per la copertura di n. 2 posti di Istruttore Informatico, categoria C, posizione economica C1, a tempo pieno e indeterminato, con riserva assoluta alle categorie dilavoratori di cui all'art. 1 della legge n. 68/1999 (norme per...

21 Gen 2012 - Letture:244

Senior Business Consultant presso Lombardia Informatica

Selezione per figura Senior Business Consultant presso Lombardia Informatica. Il collaboratore dovrà fornire consulenza strategica e di business sulle tematiche verticali della Socio-Sanità. Requisiti di ammissione: Laurea in Ingegneria, Economia e Commercio o Scienze dell’Informazione; Percorsi di formazione professionale in ambito sanitario e socio-sanitario, su...

11 Gen 2012 - Letture:284

Bando progetto TAG (Toscana Area Giovani) per giovani talenti digitali

UPI Toscana ha indetto un avviso pubblico per la selezione di 20 giovani (2 per ciascuna delle 10 province della Toscana), da impiegare come formatori all'interno del Progetto TAG (Toscana Area Giovani). Il bando è finalizzato a valorizzare al meglio i...

03 Gen 2012 - Letture:271

I più attivi

Dati e punteggi dell'ultimo anno

Giovanna Casamassima Giovanna Casamassima
47 articoli
16,501 punti totali
Rodolfo Giometti Rodolfo Giometti
49 articoli
5,153 punti totali
Vittorio D'Aversa Vittorio D'Aversa
33 articoli
3,445 punti totali
Fulvio Lucchetti Fulvio Lucchetti
9 articoli
0,279 punti totali
Luigi Carbone Luigi Carbone
10 articoli
0,262 punti totali

Ci hanno visitato

Oggi:1324
Ieri:2110
Totali (14/04/09):1170499

I nostri numeri

Articoli pubblicati: 552
Iscritti al portale: 768
Iscritti all'Elenco: 184
Iscritti ML Discussioni: 351
Iscritti ML Articoli: 30
Iscritti ML Lavoro: 166
 

SUN Wiki Publisher: scrivere facilmente su Wikipedia

Personalmente uso parecchio Mediawiki (il motore di Wikipedia); lo ritengo un ot...

Cluster VMWARE

In questo articolo vediamo come realizzare un cluster di macchine virtuali con u...

Grep e Strings due giganti di Linux

Il tempo libero serve anche a sperimentare e quando si ha la passione per la com...

Boot from SAN

Intendiamoci, non è l’ultima briciola tecnologica caduta da un banchetto alla NA...

Controllare MAME con Wiimote su N900!

Ecco un'altra dimostrazione delle potenzialità di questo telefono (se vogliamo c...

Linutop4 PC

Il produttore francese Linutop, con sede a Parigi, ha annunciato il nuovo modell...

Installare Linux su una USB key: ecco come!

L’installazione  e l'avvio di una distribuzione Linux Live da un supporto U...

Virtualizzazione di Windows XP o altri SO su Ubuntu con Qemu

I pc odierni sono sempre più potenti e molto spesso sotto sfruttati, la virtua...

Android-x86: quando il drone sbarca sui PC

Chi pensa che Andoird abbia vita bere farà bene a ricredersi perché, oltre alle ...

Installare strace su Android

Quando si programma è importante avere buoni tool di debug e uno dei più importa...

Linutop OS 4.0: Internet, Chiosco Multimediale e non solo!

Presentata negli ultimi giorni nella capitale francese la nuova distribuzione LI...

OpenWRT: la distribuzione piccola e versatile

In queste ultime settimane ho avuto modo di vedere da vicino OpenWRT, una distri...

Aggiungere programmi all'N900 con Maemo SDK

Abbiamo già visto come sia facile installare nuove applicazioni sul Nokia N900, ...

Compilare un programma C per Android

Essendo un programmatore C (uso anche altri linguaggi, ma il C e quello che uso ...

Il settore danneggiato e l'acquisizione forense

Se si deve acquisire un hard disk in maniera forense, ossia con tutti i crismi n...

Installazioni di Linux su sistemi non convenzionali

Un'ottica convenzionale vede l'informatica come un insieme di applicazioni e sis...

Multistrap: come ti creo un rootfs Debian dal nulla

Una volta c'era debootstrap, un tool fantastico che permetteva di creare un root...

ettercap: il man-in-the-middle facile

Troppo spesso mi rendo conto che molti considerano la rete aziendale o quella ...

Generare un file da 10GB in 2 millisecondi!

Chi ha a che fare con le macchine virtuali o deve generare delle immagini di fil...

Cifratura wireless: TKIP vs AES

Una delle domande più frequenti di chi intende implementare una rete Wireless è...

TurnKey Linux: accendi e vai!

Quanto tempo occorre per installare e configurare una macchina LAMP (Linux, Apac...

Openembedded: la distribuzione «ristretta» per Linux

Quando le risorse di un sistema sono limitate non è possibile usare una distribu...

Gobby: l'editor collaborativo

Quante volte vi sarà capitato di dover dire come modificare un file di testo ad ...

(in)sicurezza informatica

L'incremento nell'uso del computer ha portato con se una diversa concezione di s...

Architettura di una trading room

La trading room o sala mercati è il luogo dove vengono effettuate le operazioni ...

Universal USB Installer 1.8.04 e Ubuntu Linux 10.10

Rilasciata il 10.10(.2010) la nuova versione di Ubuntu Linux (la data corrispond...

L'SMS autoprodotto!

Tempo fa sulla mailing list di CFI ho provato a lanciare l'idea di effettuare un...

Maemo extras: ancora più applicazioni per l'N900

Finalmente, grazie a Nokia, abbiamo a disposizione un esemplare dell'N900 su c...

Integrazione Webmaster Tool. Google Analytics, le ultime novità

Google non finisce mai di stupirci, ma soprattutto è inarrestabile sull'implemen...

Il telefono… la tua voce!

Era lo slogan pubblicitario della Telecom di un po’ di anni fa. Certo, al concet...

Verificare spazio su disco su UNIX

Nella gestione si sistemi informativi capita spesso di accedere a postazioni ser...

Forno a microonde: analisi emissioni EME

Nell'immaginario collettivo c'è una forte paura per i danni che posso generare s...

I dati e le loro anomalie nascoste

La motivazione per questo articolo nasce dalla crescente problematica di gestion...

Socat: quando i dati passano via rete

Lavorando coi sistemi embedded molte volte mi capita di dovermi arrangiare su di...

Anomalie di partizionamento hard disk: un esperienza personale

Nonostante le decine di installazioni delle varie distribuzioni Linux eseguite s...

Server Linux: tutti i trucchi per farlo al meglio

Volete fare un server Linux per la vostra impresa, ufficio o semplicemente per c...

Lion desktop: finalmente una distribuzione mirata alle aziende!

Chi è abituato a lavorare con Linux, ed in particolare ha provato a lavorare con...

Geexbox: la mini distro MediaCenter Linux

Geexbox è un piccolo ma potente sistema operativo orientato alla riproduzione di...

"Impronte digitali" anche per le macchine fotografiche

Da www.hwupgrade.it: Una ricerca della Binghamton University ha messo a punto u...

Sabayon Linux 5.4 (32 e 64 bit)

E' stata rilasciata online la nuova versione 5.4 di Sabayon Linux, una tra ...

XMount finalmente liberi di virtualizzare!

Cosa succede dopo che abbiamo acquisito un disco in bitstream su file immagine? ...

munin: come ti controllo il server aziendale

In questi ultimi tempi il server che mantiene il nostro portale è sottoposto ad ...

Arduracing: come realizzare una robot-car intelligente con Arduino

Arduracing è un progetto realizzato con Arduino in collaborazione con il Lucccal...

Come gestire una presentazione con il Wiimote

Capitandomi spesso si tenere conferenze e workshop mi trovo sempre il problema d...

GNU readline: un tool indispensabile per la linea di comando

Chiunque di voi abbia avuto a che fare con la linea di comando avrà senz'altro a...

Mageia 1 alpha1 è tra noi

Finalmente è stata rilasciata la tanto attesa versione alpha1 principalmente riv...

Il NAS D-Link DNS-343

Grazie alla D-Link azienda produttrice di apparecchiature di rete e non solo v...

Google +1: il «nemico» del «mi piace» di Facebook

Il tanto atteso nemico del "mi piace" targato Facebook è arrivato, il colosso de...

Nvidia 295.33, ecco i nuovi driver per linux versione 3.3

L'annuncio è di qualche giorno fa, Nvidia rilascia i nuovi driver 295.33 con sup...

Intervista esclusiva a Mageia Linux

La Presidente dell'Associazione MAGEIA.ORG, Anne Nicolas, in questa intervi...

Cloud Money

Discorrendo con un collega di cloud computing, si è finito, come al solito, a pa...

Generare un file pieno di 0xff

Per generare in file da 16Kbyte pieno di zeri su di un sistema UNIX/GNU-Linux si...

PyGTK su N900

Come programmatore avere un cellulare che in pratica è un computer (oramai il 10...

SL4A e il drone parla più lingue

Chi come me non ama Java si sentirà a disagio volendo programmare una qualsiasi ...

Come saltare il proxy «blocca-tutto» aziendale

Mi capita spesso, ma non sempre, di andare da dei miei clienti e non potermi con...

LIM: la lavagna multimediale con il wiimote

LIM sta per Lavagna Interattiva Multimediale, ed è un progetto che, tramite l'...

busybox & Android: la command line facile

Nei precedenti articoli abbiamo visto due tecniche per aggiungere nuovi programm...

Demolinux: l'automazione industriale con Linux

Qualche tempo fa il mio ex istituto superiore mi aveva chiesto di fare una picco...

Git in Eclipse

Chi mi conosce sa la mia avversione (del tutto personale, ci tengo a sottolinear...

Gimp, OpenOffice & C. su N900? Semplice con Debian!

Che Maemo fosse versatile me ne sono accorto subito, ma l'idea di poter installa...

Programmare in C sull'N900 Stampa E-mail
(1 voto, media 5.00 di 5)
Area Tecnica - Programmazione
Scritto da Rodolfo Giometti   
Lunedì 06 Dicembre 2010 10:48
Articolo letto 1287 volte

pb_ss01In questo articolo vedremo come sia semplice programmare in C sull'N900. In particolare vedremo come realizzare una semplice applicazione basata sulle librerie GTK.

Quello che rende la cosa molto interessante non è tanto la programmazione in se, ma il supporto ad essa che il sistema Maemo (e l'SDK relativo) ci dà.

Vedremo il come realizzare la nostra applicazione sia semplice come se la scrivessimo per un normale PC e vedremo anche come i tool di test/debug di Maemo ci permettono di provare la nostra applicazione su di un sistema virtualizzato.

Per chi mi leggesse per la prima volta e non avesse ancora l'SDK di Maemo installato sul proprio PC può leggere questo articolo dove descrivo come installarlo.

Il programma

Come dicevo il programma di esempio che useremo è molto semplice, ma ovviamente il discorso si applica pari pari anche ad applicazioni più complesse. Girando un po' su internet ho trovato questa semplice applicazione che riporto di seguito e leggermente modificata da me per adattarla agli scopi del presente articolo:

#include <gtk/gtk.h>

static int ptimer = 0;
int pstat = TRUE;

gint progress(gpointer data)
{
        gfloat pvalue;

        pvalue = gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR (data));

        pvalue += 0.01;
        if ((pvalue >= 1.0) || (pstat == FALSE)) {
                 pvalue = 0.0;
                 pstat = TRUE;
        }

        gtk_progress_bar_update(GTK_PROGRESS_BAR (data), pvalue);


        return TRUE;

}

void restart(void)
{  
        pstat = FALSE;  
}

void destroy(GtkWidget *widget, gpointer data)
{
        gtk_main_quit();
}

int main (int argc, char *argv[])
{
        GtkWidget *window, *button, *label, *table, *pbar;

        gtk_init (&argc, &argv);


        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

        gtk_signal_connect(GTK_OBJECT(window), "delete_event",
        GTK_SIGNAL_FUNC(destroy), NULL);

        gtk_container_border_width(GTK_CONTAINER (window), 10);


        table = gtk_table_new(3, 2, TRUE);

        gtk_container_add (GTK_CONTAINER(window), table);

        label = gtk_label_new("Progress Bar");

        gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 2, 0, 1);
        gtk_widget_show(label);

        pbar = gtk_progress_bar_new ();
        gtk_table_attach_defaults(GTK_TABLE(table), pbar, 0, 2, 1, 2);
        gtk_widget_show(pbar);

        ptimer = gtk_timeout_add(100, progress, pbar);


        button = gtk_button_new_with_label ("Reset");

        gtk_signal_connect (GTK_OBJECT (button), "clicked",
        GTK_SIGNAL_FUNC(restart), NULL);
        gtk_table_attach_defaults(GTK_TABLE(table), button, 0, 1, 2, 3);
        gtk_widget_show(button);

        button = gtk_button_new_with_label ("Cancel");

        gtk_signal_connect(GTK_OBJECT (button), "clicked",
        GTK_SIGNAL_FUNC(destroy), NULL);
        gtk_table_attach_defaults(GTK_TABLE(table), button, 1, 2, 2, 3);
        gtk_widget_show (button);

        gtk_widget_show(table);

        gtk_widget_show(window);

        gtk_main ();

        return 0;

}

Essa non fa altro che creare una barra che aumenta nel tempo e che è possibile resettare con il pulsante Reset. Con il pulsante Cancel, invece, si esce semplicemente dall'applicazione.

Se volete ripetere i miei passi salvate il programma nel file progress_bar.c. Quindi, per compilarlo, dovrete usare anche il seguente Makefile:

TARGET = progress_bar

CFLAGS := $(shell pkg-config --cflags gtk+-2.0)
LDLIBS := $(shell pkg-config --libs gtk+-2.0)

all : $(TARGET)

clean:
        rm -rf *~
        rm -rf $(TARGET)

Su di un normale PC, una volta compilato il tutto (potreste avere bisogno di installare i file di sviluppo per le GTK - sulla mia Ubuntu questi stanno nel pacchetto libgtk2.0-dev), si otterrebbe quanto riportato in figura.

pb_ss01

Usare l'SDK di Maemo

Ora però vediamo come si può testare il tutto con l'SDK di Maemo (e quindi andhe del nostro N900). Prima di tutto facciamo login dentro scratchbox (Ripeto: vedete questo articolo se non lo avete già installato):

$ /scratchbox/login

Welcome to Scratchbox, the cross-compilation toolkit!

Use 'sb-menu' to change your compilation target.
See /scratchbox/doc/ for documentation.

[sbox-FREMANTLE_X86: ~] >

Se il prompt che ottenete non vi dice che state usando la piattaforma X86, selezionatela con il comando:

> sb-conf se FREMANTLE_X86

A questo punto se prendete i file progress_bar.c e Makefile creati prima e li compilate otterrete:

> make
cc -DMAEMO_CHANGES -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12      progress_bar.c  -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0   -o progress_bar

Verifichiamo il file eseguibile ottenuto:

> file progress_bar
progress_bar: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.0.0, dynamically linked (uses shared libs), not stripped

Perfetto! Ora per eseguirlo possiamo usare l'X server del nostro PC oppure (meglio) possiamo usare l'ambiente grafico che l'SDK ci mette a disposizione e che simula il desktop dell'N900! Per fare questo basta aprire un'altro terminale e lanciare il comando:

$ Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac

Questo comando lancia uno speciale Xserver chiamato, appunto, Xephyr; poi, dentro scratchbox, date i due comandi:

> export DISPLAY=:2
> af-sb-init.sh start

Se è tutto configurato bene dovreste ottenere quanto segue nella finestra di Xephyr.

pb_ss02

Ora lanciamo la nostra applicazione:

> ./progress_bar

e il risultato è qui sotto.

pb_ss03

Proprio come se lo lanciassimo sull'N900!

La prova finale su N900

Ora proviamo il nostro programma sull'N900 per verificare che funzioni anche lì. Basterà cambiare piattaforma dentro scratchbox:

> sb-conf se FREMANTLE_ARMEL

quindi ricompilare per ARM:

> make clean
rm -rf *~
rm -rf progress_bar
> make
cc -DMAEMO_CHANGES -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12      progress_bar.c  -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0   -o progress_bar
> file progress_bar
progress_bar: ELF 32-bit LSB executable, ARM, version 1 (SYSV), for GNU/Linux 2.6.14, dynamically linked (uses shared libs), not stripped

e, alla fine, trasferire l'eseguibile sull'N900 per la prova:

> scp progress_bar Questo indirizzo e-mail è protetto dallo spam bot. Abilita Javascript per vederlo. :
Questo indirizzo e-mail è protetto dallo spam bot. Abilita Javascript per vederlo. 's password:
progress_bar                                  100% 9599     9.4KB/s   00:00

Poi entriamo dentro l'N900 con SSH e lanciamo il programma:

Nokia-N900:~# ./progress_bar

Come evidenziato dalla figura qui sotto il risultato finale è esattamente quello che ci aspettavamo!

pb_ss04

 
 

In primo piano

Simons Voss: un mondo senza chiavi

Simons Voss: un mondo senza chiavi

Il sistema di gestione e di controllo degli accessi 3060 si presenta come un’alternativa con enormi vantaggi...
Pubblicità mirata dei prodotti

Pubblicità mirata dei prodotti

Hai un prodotto o un servizio da pubblicizzare? Fallo su consulenti-ict.it! Pubblicizzare un prodotto...
Recensioni sul Portale

Recensioni sul Portale

Hai un prodotto hardware/software o un libro riguardante uno dei temi dell'ICT? Vuoi farlo conoscere...

Offerte di lavoro

Visualizza Topic »

Eventi

Non ci sono eventi in programma
Novembre 2005
D L M M G V S
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 1 2 3
Dicembre 2005
D L M M G V S
27 28 29 30 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Sondaggi

busyCaricamento Sondaggio...