Newsgroup: it.lavoro.informatica
Titolo: [OT] Libreria TCP/IP per software embedded

Stavolta l'OT lo faccio io ;-)
Comunque è abbastanza leggero, state tranquilli; riguarda quel progetto a 
cui sto lavorando, di cui avevo anche parlato qui in passato, quello dei 
dispositivi embedded che spediscono dati via GPRS a un server centrale. Sto 
chiedendo anche in altri posti, ma so che qui ci sono un sacco di persone 
competenti, quindi ci provo :-)
Ho a che fare con un modulo GSM/GPRS Telit, che fondamentalmente funziona 
come un modem qualsiasi, si raggiunge tramite una porta seriale RS232 e si 
comanda con un set esteso di comandi AT. Per usarlo, occorre che 
l'applicazione che lo controlla disponga di uno stack TCP/IP (con PPP) suo, 
da avviare dopo aver stabilito la connessione GPRS; in effetti, funziona 
perfettamente se lo faccio trattare da Windows come se fosse un normalissimo 
modem connesso ad una porta seriale, a patto di dargli i suoi comandi 
particolari invece di farlo semplicemente telefonare ad un ISP.
I dispositivi veri e propri saranno basati su microcontrollori che includono 
nel kit di sviluppo le proprie librerie TCP/IP, quindi non ci dovrebbero 
essere grossi problemi; però non li ho ancora sottomano, e intanto vorrei 
collaudare l'aggeggio (e il protocollo di comunicazione client/server che 
sto creando) simulandoli con un programma.
Il problema: mi serve uno stack TCP/IP (compreso PPP!) da usare su una porta 
seriale dopo aver stabilito la connessione GPRS. Per una serie di ragioni 
non voglio fare affidamento sul sistema operativo, vorrei che sia il 
programma ad occuparsi di tutto, dall'apertura della connessione in poi. 
Purtroppo non credo che Windows consenta ad un programma di fare una cosa 
simile usando le sue API (o magari sbaglio?), quindi mi servirebbe una 
libreria esterna. L'ideale sarebbe qualcosa in .NET (l'ambiente in cui sto 
sviluppando il server), ma non credo ci siano cose così a basso livello; una 
libreria in C o C++ andrebbe benissimo.
Se qualcuno ha qualche suggerimento, è il benvenuto :-)
Massimo

 (cut)
Per quanto riguarda il tuo problema premetto tre cose:
- degli internals di Windows so poco o niente, come del resto del
Windows in generale;
- .NET l'ho utilizzato per qualche tempo, un po su .NET framework, un
po' di piů su Mono, e non te lo raccomanderei comunque (ma non so
esattamente cosa stai facendo, dunque la mia valutazione conta poco);
- La soluzione che sto per proporti non so se lavora su Windows
(addattabile sicuramente lo č, se hai tempo di farlo) e (scusa!) non ho
tempo e vogli di indagare dato che di Windows non mi occupo. Lo lascio a
te. ;-)
Detto questo, quello che mi viene in mente che potrebbe fare a caso tuo
č questo:
http://www.sics.se/~adam/lwip/
Facci sapere se funziona, cosě lasciamo una traccia qui anche per quelli
che nel futuro avranno lo stesso problema e consulteranno i motori di
ricerca per cercare le soluzioni. :-)

 
http://www.sics.se/~adam/lwip/
Ottima segnalazione, grazie. Gli darò una bella occhiata :-)
Massimo

 in poi.
La tua domanda mi ha suscitato molta curiosità :-)
Ci ho pensato un po' su, ho fatto qualche ricerca, e di librerie che 
potresti usare su win32 ho trovato lo stack tcp/ip 
http://www.gnetlibrary.org
.
Il protocollo PPP invece nulla, al limite una reference implementation 
http://www.samba.org/ppp
 che funziona solo su unix.
Riflettendo sul fatto che alla fine devi fare un test veloce del modulo 
GPRS e del protocollo client/server imho, se non ti fa troppo schifo, 
potresti usare eCos 
http://ecos.sourceware.org
Hai a disposizione tutto, stack TCP/IP derivato da FreeBSD e protocollo PPP.
Usare PPP non dovrebbe essere difficile, guarda qua 
http://ecos.sourceware.org/docs-latest/ref/ppp-using.html
Non hai visual studio lo so, ma con vim, gcc e gdb dovresti cavartela, 
sono molto documentati.
Ciao

 Non hai visual studio lo so,
...?
E questo chi te l'ha detto?
In effetti, io proprio con Visual Studio sto lavorando...
Massimo

In effetti, io proprio con Visual Studio sto lavorando...
 :-) La regola d'oro del newsgroup, che io per primo sto ignorando, e'
di leggere i post a meta' mattina, con la mente fresca :-)
Rileggi quello che ha scritto partendo da "se usi eCos" :-)
Ciao
	Steve
-- 
Legge di Flon
Non c'e' linguaggio in cui sia difficile scrivere cattivi programmi.
FAQ del gruppo : 
http://aledeniz.blogspot.com/2006/11/le-faq-di-itlavoroinformatica.html

 In effetti, io proprio con Visual Studio sto lavorando...
Si lo so che stai sviluppando con Visual Studio, come ha detto Steve 
intendevo che non hai Visual C++ su eCos :-)
Ciao

 simile usando le sue API
Se non vuoi fare affidamento sul sistema operativo non devi usare le
sue API.
Ad ogni modo Perl può usare le API di Windows.
Ciao
Oreste


 manutenzione è molto facile , non ha problemi di portabilità.
Perl come Python va benissimo se vuole usare le Win32 RAS API.
Ma ha detto che non vuole usare stack tcp/ip del sistema operativo (su 
cui sta sviluppando il server in .Net).
E poi c'è il discorso delle performance di codice nativo rispetto ad un 
interprete con VM, eventuale JIT compiler, ecc..
Imho eCos e similari sono l'ambiente più vicino a quello che Massimo 
troverà con il dispositivo reale.
Ciao

 Rileggi quello che ha scritto partendo da "se usi eCos" :-)
Aaaaahhhhh, ecco :-))))
In effetti, al momento mi era completamente sfuggito che si parlasse di un 
sistema operativo autonomo ;-)
Massimo

sue API.
Ribadisco: di cosa stai parlando, esattamente?
Massimo

Hai ragione, avevo letto il post troppo velocemente, in effetti il
problema non si risolve perchè avresti comunque bisogno di una routine
scritta con un linguaggio di basso livello od un componente
preconfezionato di un linguaggio ad alto livello per lo stack tcp/ip.
Deve essere la mia passione per Perl a farmi scrivere in fretta.
Sorry
Oreste


Sorry, si è trattato di una lettura troppo rapida da parte mia. Avevo
saltato una parte.
Dimmi se il link seguente ti può servire:
http://www.iniche.com/nichestack.php
Oreste



http://www.iniche.com/nichestack.php
Molto carino, ma lo vendono solo insieme ai loro SDK per piattaforme 
embedded...
Massimo