Qual è la migliore strategia di connessione della porta seriale

4

Sto sviluppando un programma che esegue il polling di un dispositivo per l'actvity. In passato ho sempre usato un dispositivo USB con un puro driver di periferica USB. L'aspetto positivo era che quel dispositivo era incredibilmente veloce. Il lato negativo è che mi ha limitato alla DLL che il produttore ha distribuito con esso.

Per alcuni motivi fuori dal mio controllo, devo passare a un nuovo dispositivo USB che emuli una porta seriale. In questo caso usa un chip Atmel per quello. Ho anche provato un dispositivo basato su chip FTDI.

Ho tutto questo a posto ma c'è un piccolo inconveniente. La connessione e la disconnessione alla porta seriale sono molto più lente. C'è un ritardo da mezzo a secondo completo di cui gli utenti che conoscono la vecchia situazione lamentano.

La mia strategia è sempre stata quella di essere connesso al dispositivo solo quando avevo bisogno di esserlo. Ma sto iniziando a chiedermi se forse dovrei cambiare strategia e rimanere in contatto tutto il giorno. Ma questo ha l'ovvio inconveniente di dover tenere traccia di se la connessione è ancora attiva e ricollegarla se non lo è.

Sono eccessivamente cauto collegandomi su richiesta o rimango connesso tutto il giorno all'ovvia soluzione? Forse c'è una terza opzione che mi manca qui? Grazie.

    
posta StanB123 31.05.2016 - 20:53
fonte

1 risposta

2

Mantieni aperta la connessione e separa la logica di garantire che la connessione sia aperta dall'utilizzo effettivo della connessione seriale.

In C # fornirei i seguenti metodi per l'utilizzo della connessione seriale:

public T WithSerialConnection<T>(Func<MySerialConnection, T> f);

public void WithSerialConnection(Action<MySerialConnection> act);

MySerialConnection rappresenta una connessione seriale aperta, sostituiscila con la tua classe o con uno stream dalla tua lingua / libreria. f e act ricevono questo come parametro e sono isolati da come apri e chiudi la connessione.

Puoi richiedere che f e act possano essere chiamati più di una volta con lo stesso effetto; cioè dovrebbero essere una specie di puro tranne che per inviare e ricevere byte tramite la porta seriale.
Con questo requisito l'implementazione di WithSerialConnection() può:

  1. all'inizio, supponiamo che la connessione seriale funzioni (che è veloce); e,
  2. solo quando rileva un'eccezione rivela che la connessione non è disponibile ripristina chiudendo e riaprendo la connessione seriale e chiamando nuovamente f o act .
risposta data 01.06.2016 - 12:05
fonte

Leggi altre domande sui tag