Newsgroup: it.comp.reti.locali
Titolo: Che usb server 'non bloccante' ?

Su un pc in lan con altri ho collegato un gps che viene visto dal computer 
come com10 (ad esempio)
Sul pc fisicamente collegato al gps, il programma di log dati parte e legge 
correttamente i dati provenienti dal gps
Vorrei fare la stessa lettura anche contemporaneamente dal pc2 e pc3 che 
sono in rete col pc1
Ho pensato di usare uno scatolotto che permette di condividere delle 
periferiche usb in rete locale tipo questo
http://www.digicom.it/digisit/prodotti.nsf/itprodottiidx/UsbServer4P
 
Ma la cosa non funziona perche' i pc2 e pc3 pur 'vedendo' la periferica 
remota, non riescono a connetrvisi se il pc1 la sta gia' usando
Il problema mi sembra essere la contemporaneita' dell'utilizzo della 
periferica, se e' connesso il pc2, gli altri due non posson accedere al gps
Avrei bisogno di un server usb 'non bloccante' che permettesse ai tre pc di 
collegarsi al gps, nello stesso momento
Sapete dirmi se esiste qualcosa di questo tipo?
Ciao e grazie
RobertoA
 
 

 Sapete dirmi se esiste qualcosa di questo tipo?
 
Non credo, proprio perchè non è possibile effettuare accessi
"contemporanei" ad un dato device USB; credo che la soluzione al tuo
problema possa essere di tipo diverso, in pratica potresti creare un
programma che (es.) si interfacci con la USB ed allo stesso tempo si
metta in ascolto su una porta TCP (o UDP se preferisci); a questo punto
le utenze remote potranno connettersi a questa porta e leggere i dati
GPS in tempo "quasi" reale; in tal caso il programma in questione sarà
il solo ad accedere alla USB e provvederà poi a serializzare le letture
e metterle a disposizione dei clients che si connetteranno tramite TCP;
considerando che parli di un paio di PC, l'eventuale discrepanza tra le
letture potrà essere di qualche millisecondo e non dovrebbe creare
eccessivi problemi
 

 programma che (es.)  
 
E chi lo crea il programmillo...:)
 
 

 ha scritto nel messaggio 
news:mn.9d187dc1c...@alientech.it...

E allora che ve lo chiedo a fare?
Siete voi i sienziatti 
 
 

 E chi lo crea il programmillo...:)
 
Credo ci siano le seguenti possibilità
 
* Trova un "multiplexer" del genere già fatto e lo adatta
 
* Contatta qualcuno che lo scriva per lui
 
* Se lo scrive da solo
 
tutto sommato un coso del genere non è difficilissimo da mettere
insieme; un esempio in pseudocodice potrebbe essere questo
 
// logging messaggi
void logger() {
  increasethreadcount();
  while (FALSE == stopsignal()) {
    message = waitonqueue(q_logger);
    if (NULL != message)
      logmessage(message);
  }
  while (0 != queuecount(q_logger)) {
    message = pop(q_logger);
    logmessage(message);
  }
  decreasethreadcount();
}
 
// lettura serializzata dati GPS
void readgps() {
  increasethreadcount();
  while (FALSE == stopsignal()) {
    gpsinfo = readgps();
    lock(lk_info);
    writeinfo(gpsinfo);
    unlock(lk_info);
    push(q_log, "readgps " + gpsinfo);
    sleep(wait_msec);
  }
  decreasethreadcount();
}
 
// gestione connessioni clients
void serveclient(n) {
  increasethreadcount();
  while (FALSE == stopsignal()) {
    client = waitonqueue(q_requests);
    if (NULL != client) {
      push(q_log, "thread " + n + ", client " + client->IP);
      accept(client->socket);
      lock(lk_info);
      gpsinfo = readinfo();
      unlock(lk_info);
      send(client->socket, gpsinfo);
      close(client->socket);
    }
  }
  decreasethreadcount();
}
 
// main, qui inizia e finisce tutto
int main(void) {
  setstop(FALSE);
  createqueue(q_logger);
  push(q_log, "starting");
  createqueue(q_requests);
  startthread(logger());
  startthread(readgps());
  for (t=0; t<11; t++)
    startthread(serveclient(t));
  push(q_log, "listening");
  srv_socket = listen(addr, port);
  while (FALSE = breaksignal()) {
    client = createclient();
    client->socket = waitconnect(srv_socket);
    if (NULL != client->socket) {
      fillclientdata(client);
      push(q_requests, client);
    }
  }
  push(q_log, "exiting");
  setstop(TRUE);
  while (0 != getthreadcount()) {
    sleep(stop_msec);
  }
  destroyqueue(q_requests);
  destroyqueue(q_logger);
  return(0);
}
 
il coso in questione usa semplicemente una coppia di code FIFO ed una 
dozzina
di threads per servire le richieste; un thread è dedicato al logging dei 
messaggi, un
altro all'aggiornamento delle info GPS e gli altri a servire le richieste 
dei clients; un
programmatore con un minimo di esperienza non dovrebbe avere grossi problemi 
nel
tradurre quanto sopra in qualcosa di funzionante :)
 
 

 sono in rete col pc1
Prova a cercare questo software in rete. GnssSurfer. credo faccia al caso 
tuo.
-- 
Massimo Ghio
per scrivermi metti il cognome 
 
 

 caso tuo.
 
Ti riferisci a 
http://igs.bkg.bund.de/ntrip/download
 per caso ?
 
 

 
"Massimo Ghio" <mas...@geometraXXXX.it> ha scritto nel messaggio 
news:jfjvu3$7la$1...@tdi.cu.mi.it...

Grazie per l'aiuto, ma la lettura gps l'ho inserita solo come esempio della 
possibilita' di leggere un dispositivo usb da parte di piu' computer