Newsgroup: it.comp.java
Titolo: java e scheda di acquisizione A/D..... HELP

Ripropongo a tutto il ng quello che ho chiestoa uno di voi, che cercherà di
informaesi x me... intanto se qualcuno ha la risposta.... PERDONATE LA
LUNGHEZZA DEL MESSAGGIO...
PREMESSA:
la mia tesi consiste nel mettere in piedi un SERVER DATI, che metta a
disposizione a client delle risorse: cioè ipotiza un server su un pc a cui
sarà connessa scheda ACQUISIZIONE A/D D/A, che rende segnali analogici in e
out disponibili a client, FILE dati (segnali memorizzati in teoria) in
lettura e scrittura, e BYPASS da client (un'altro client o altro server
invia dati che mette a disposzione ad altri attrverso il server). La
caratteristica di questo server deve essere uno pseudo REAL TIME: ovviamente
ci saranno i ritardi dovuti a rete e bufferizzazione, ma tutto deve
funzionare rapidamente (un po come gli streaming audio/video di una video
conferenza)..... il prof si è "limitato" a chiedere che la scheda possa
campionare fino "all'audio" (8 KSample). Questo mi sta facendo costruire il
server usando come punti fissi il + veloce UDP, l'idea che c'è dietroa al
protocollo RTP (cioè con i pacchetti invio posizione campioni, per
ricostruire nel buffer in rx.... con aggiunte idee x limitare perdita
pacchetti, usando un controllo dei loss packets ... sempre preso da RTP),
una politica multithread (mi sembra una buona idea x come lo sto
impostando.... per inciso credo di aver appena realizzato un gestore di
thread per ridefinire mediamente il tempo che ohni thread  usa il sistema e
dare + o - risorse... appena posso lo posto sul ng).
Ora dopo essermi digerito un po di letture di SUN e NATIONAL INSTRUMENTS,
prima di tutto devo far funzionare il tutto su dati file.... e quello che
farò da stanotte..... poi in seguito, al limite anche con qualche ritocco,
permettere al server di  usare la scheda di acqu.
PROBLEMA:
Come legare la scheda al mio soft java?
1. usare le JNI.... mi sono documentato un po in proposito.... mi sembrano
potenti e con un po di peccati dovrei poterle usare... in coppia al mio VC5
x generare la DLL.
2. usare per queste le NIDAQ, le librerie che dà la NI per la scheda
Qui nascono i dubbi: la prima idea era di far funzionare la scheda in
acquisizione continua a dobbioo buffer (e questo è in un punto fermo.. sarà
così) e di FARE UN CHECK SISTEMATICO USANDO SEMPRE LE NATIVE REALIZZATE, per
vedere quando aveva dati da darmi e a quel punto passarmeli. Un
collaboratore del prof mi dice che la scheda gestisce i messaggi, una
politica degli eventi: leggendo bene la documentazione scheda, ha
addirittura 2 modi x gestire eventi.
L'evento in questione è ovviamente "buffer pronto per trasferimento" : la
scheda può o MANDARE UN MESSAGGIO ALLA CODA DI WINDOWS CHE DOVREI
RACCOGLIERE oppure FARE UNA CHIAMATA TRAMITE UN PUNTATORE A FUNZIONE AD UNA
FUNZIONE.
Il secondo modo mi sembra + efficiente (a dire il vero lo sostiene anche la
document) in termini di latenza evento-notifica.
Provo a esporti i miei dubbi su quello che dovrei fare:
1. quando in generale un hardware puo' chiamre una funzione ad un indirizzo
dopo un evento, tecnicamente, chi la esegue? il driver della scheda?
2. quando java carica una DLL, questa è in memoria, e le funzioni che
contiene hanno un indirizzo che rimane disponibile fino alla morte del prg
java caller, che possono quindi essere passate attraverso punt a funzione?
3. se è così, la mia idea era:
- nel prg java, lancio un thread, che contiene nel run la sola chiamata a
una native.
- questa prima configura scheda (con info prese alttrove o passate... nn è
importante), poi attiva evento pasandogli un indirizzo di una funzione che
fa parte della DLL (famo UPDATE() )
- qundo scheda riempie buffer, c'è evento, IL DRIVER ESEGUE LA FUNZIONE
UPDATE() che ha trasferisce i dati su un oggetto globale che altri threads
java possono usare (se ho capito bene attraverso JNI posso fare queste cose
dalle native)
- se è come penso io quindi, in realtà il thread della scheda puo' anke
addormentarsi, e risvegliarsi solo quando tutto va chiuso e lui deve fare
operazioni di chiusura su scheda.
Grazie, Piero.

 dalle native)
Scusa, ma quanti dati sono? non è semplicemente un numero?

1. la scheda nn usa ne parallela ne seriale... è dentro connessa al pci
2. devo fare acquisizione continua.. nn certo di un solo valore!