Autore Topic: CR LF su linea seriale  (Letto 4233 volte)

Offline Stefano

  • Gamberetto
  • *
  • Post: 6
    • Mostra profilo
CR LF su linea seriale
« il: 24 Febbraio 2011, 09:47:36 »
Ciao a tutti,
ho notato un comportamento strano sulla gestione del CR ricevuto da una linea seriale: essendo certo che sia stato spedito un CR (valore 13 decimale 0D esadecimale) viene letto dalla READ (non LINE_INPUT) di gambas come LF (valore 10 dec. 0A esadecimale).
Ho visto googlando che con il C quando si apre una porta seriale si può settare l'opzione option.c_oflag = ONLCR che a seconda se settata o resettata viene sostituito (credo a livello di driver) il carattere CR con un LF.... come posso arrivare a questo parametro da GAMBAS2 ?
Ho provato la proprietà ENDOFLINE a settarla gb.Windows gb.Mac e gb.Unix ... ma non influisce sulla READ... non ho verificato se influisce su LINE_INPUT come dichiarato ma mi fido.
L'indagine successiva sarebbe quella di scaricarsi i sorgenti del componente gb.net e verificare come viene settato questo flag e nel caso fare una patch.... ma questo comporterebbe una personalizzazione poi di gambas che ad ogni cambio di versione dovrei effettuare ?!

Grazie dell'ascolto.

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: CR LF su linea seriale
« Risposta #1 il: 24 Febbraio 2011, 14:02:06 »
Credo tu stia facendo un pò di confusione.

Sulla seriale non esiste impostazione, tantomeno quella indicata.
Quella che hai visto è una caratteristica dell'applicazione o libreria (scritta in C), che sicuramente effettua di suo conversioni sulla base di quella proprietà.

In gambas lo devi fare tu.

Nel caso di READ, è probabile che faccia conversioni di suo, anche se non dovrebbe, anche leggendo la documentazione a riguardo.

Sicuramente puoi dargli un'occhiata, magari presentando un richiamo al team di gambas.
Le funzioni di lettura implementate, come hai pure tu dichiarato, sono READ e LINE INPUT, e la differenza dovrebbe essere appunto il riconoscimento del CR/LF del secondo, ma READ dovrebbe leggere in modalità binaria, quindi senza alcuna conversione.