Newsgroup: it.comp.lang.visual-basic
Titolo: E' muto?

Con del codice VB6 gestivo una connessione bluethoot per l'invio di sms
Nel codice anche pause di attesa della risposta del cellulare e 
individuazione della stringa di risposta, del tipo:
...
ComRisposta=COM1.Input  '(in Mscomm1_OnComm())
...
Wait 3  'attesa
If InStr(ComRisposta, ">") > 0 Then
'se trova il prompt (">") nella risposta procede
oppure
Wait 6
If InStr(ComRisposta, "OK" & vbCrLf) > 0 Then
'comunica che sms è stato inviato
Cambiato il cellulare mi aspettavo un analogo funzionamento...
ebbene, dopo aver vagliato i motivi del non funzionamento, dopo aver 
fatto comunque funzionare il tutto eliminando le "interrogazioni" al 
buffer, il buffer di risposta di COM1.Input rimane desolantemente una 
stringa vuota. Ora si, funziona tutto, ma non c'è dialogo e il cellulare 
lavora, ma sembra muto. Per avere completezza nel codice e un normale 
interfacciamento con l'utente, sarebbe opportuno "intercettare le 
risposte", ad esempio per sapere, o meglio per far sapere, se 
effettivamente l'sms è partito.
Qualche suggerimento?
-- 
Gulp®

Il 11/08/11 18.42, Gulp® ha scritto:
....naturalmente la configurazione è quella "standard":
COM1.CommPort = PortaBT
COM1.Settings = "19200,n,8,1"
COM1.InputLen = 0
COM1.RThreshold = 1
-- 
Gulp®

COM1.RThreshold = 1
Sei sicuro che il telefono risponda qualcosa?
Hai provato a mettere in polling la porta per vedere se c'č qualche carattere?
--
ciao
  Stefano

    Stefano
-- 
Gulp®

Il 11/08/11 19.43, SB ha scritto:
Una delle cose che capto a livello di evento, non di errore è;
"Modifica della linea DSR" dopo di che tutto funziona...
-- 
Gulp®

 dell'input della porta.
SysInternals Portmon, dovresti riuscire a vedere qualcosa.
Consiglio aggiuntivo: scarica direttamente tutta la suite,
c'è tanta roba che prima o poi userai, fìdati :-).
http://technet.microsoft.com/en-us/sysinternals/bb842062
Bye, G.

 interruzioni nel codice per controllare eventi od errori tra cui ad es.
Mettere in polling significa non usare l'evento ma mettere la porta in 
ascolto
Esempio:
  Main.MsComm1.InputMode = comInputModeBinary 'per vedere tutti i caratteri
  t& = Timer + 15
  Main.MsComm1.Output = "ATDT" & "," & N$ & ";" & vbCrLf
'questo è il polling
  Do: DoEvents
    If Main.MsComm1.InBufferCount > 0 Then st$ = st$ + Main.MsComm1.Input
    If Timer > t& Then GoTo UNL 'overflow
  Loop While InStr(st$, "OK") = 0
--
 ciao
    Stefano

 SysInternals Portmon, dovresti riuscire a vedere qualcosa.
A me l'ascolto della porta da parte di Portmon disturba la comunicazione 
BT: l'sms non parte piï¿œ.
-- 
Gulpï¿œ

Accontentandomi di un ciclo che duri solo fino alla verifica di una 
qualche lunghezza della variabile st impostata variant.
MSDN:
"Se l'argomento nomevariabile è Variant, Len lo considera come String e 
restituisce sempre il numero di caratteri contenuti."
Per brevità ho fatto così:
Dim st
Com1.InputMode = comInputModeBinary
  Do: DoEvents
     If COM1.InBufferCount > 0 Then st = st + COM1.Input
   Loop While Len(st) > 0 'InStr(st$, "OK") = 0
st = CStr(st)
MsgBox st
Se esce dal loop significa che st ha una qualche lunghezza.
Ebbene l'uscita dal loop avviene ma st rimane desolantemente vuota!!
-- 
Gulp®

 Ebbene l'uscita dal loop avviene ma ss rimane desolantemente vuota!!
-- 
Gulp®

st = CStr(st)
MsgBox St ,T
--
ciao
  Stefano


Ho "scoperto" che COM1.InBufferCount=0
ma come fa a partire l'sms se non c'è dialogo tra il cell ed il PC?
-- 
Gulp®

 ma come fa a partire l'sms se non c'č dialogo tra il cell ed il PC?
possibile che esegua supinamente gli "ordini" senza proferir parola? :)
-- 
Gulp®

 possibile che esegua supinamente gli "ordini" senza proferir parola? :)
  ...che sia un problema di lingua..o meglio di alfabeto? Ascii Byte 
stringhe?
a proposito è corretto ch$ = COM1.Input dopo che hai impostato
COM1.InputMode = comInputModeBinary o ch$ è comunque Variant e quindi va 
bene?
Trattandosi di matrice di byte è corretta l'impostazione precedente
COM1.InputLen = 1
Ti do ancora la configurazione iniziale:
COM1.CommPort = PortaBT
COM1.Settings = "19200,n,8,1"
COM1.InputLen = 1    'prima era 0
COM1.RThreshold = 1
COM1.InputMode = comInputModeBinary
-- 
Gulp®

 possibile che esegua supinamente gli "ordini" senza proferir parola? :)
  ...che sia un problema di lingua..o meglio di alfabeto? Ascii Byte 
stringhe?
a proposito � corretto ch$ = COM1.Input dopo che hai impostato
COM1.InputMode = comInputModeBinary o ch$ � comunque Variant e quindi va 
bene?
Trattandosi di matrice di byte � corretta l'impostazione precedente
COM1.InputLen = 1 ?
Ti do ancora la configurazione iniziale:
COM1.CommPort = PortaBT
COM1.Settings = "19200,n,8,1"
COM1.InputLen = 1    'prima era 0
COM1.RThreshold = 1
COM1.InputMode = comInputModeBinary
-- 
Gulp�

possibile che esegua supinamente gli "ordini" senza proferir parola? :)
Dipende dal protocollo, hai detto che vedi una "Modifica della linea DSR",
quindi potrebbe semplicemente implementare un protocollo hardware basato su DTR
e DSR, perchè la seriale virtuale bluetooth ha anche i DSR/DTR.
http://goo.gl/DpvGG
http://www.quatech.com/ManualsDriversFirmware/manuals/SS-BLT-100Manual.pdf
Mi sembra strano che non invii nemmeno un carattere, ma dipende dal protocollo,
devi cercare della documentazione in proposito.
--
ciao
  Stefano

COM1.InputMode = comInputModeBinary
Se fai il polling devi mettere
COM1.RThreshold = 0
altrimenti si genera l'evento OnComm
http://msdn.microsoft.com/en-us/library/aa259423.aspx
Configurazione iniziale:
COM1.CommPort = PortaBT
COM1.Settings = "19200,n,8,1"
COM1.InputLen = 1
COM1.RThreshold = 0
COM1.InputMode = 0 
--
ciao
  Stefano

 e DSR, perch� la seriale virtuale bluetooth ha anche i DSR/DTR.
Penso quindi che la documentazione da controllare sia quella del telefonino.
Se comunque il protocollo fosse questo... sarei notevolmente imbarazzato 
a causa di evidente inesperienza sui protocolli...
Comunque per il momento grazie della collaborazione, qua non si finisce 
mai di imparare!!
Vista la tua competenza, ti chiedo, se dovessi vedere un 3d riaperto 
sull'argomento di intervenire ancora. Grazie molte
Egidio
-- 
Gulp�

sull'argomento di intervenire ancora. Grazie molte
Leggi l'altra risposta sopra, l'evento OnComm vuota il buffer e se tu avevi
Rthreshold = 1 poi logicamente non vedevi i caratteri, prova il settaggio che ti
ho consigliato in quel post.
--
ciao
  Stefano

 ho consigliato in quel post.
Ho provato ma niente! Buffer vuoto. o pi� precisamente messaggio con 
stringa vuota.
-- 
Gulp�

Il 12/08/11 18.24, SB ha scritto:
Io la cosa l'ho messa così, per cortesia dai un'ultima occhiata...
Private Sub ComConfig()
Dim St$, T%, ch$
'configura la porta COM di BlueTooth per la comunicazione col cellulare
On Error GoTo Cferror
COM1.CommPort = PortaBT
COM1.Settings = "19200,n,8,1"
COM1.InputLen = 1 '0
COM1.RThreshold = 0 ' 1
COM1.PortOpen = True
'------------------------------ prove
Wait 3
Do: DoEvents
      If COM1.InBufferCount > 0 Then
          ch = COM1.Input:
             If Len(ch) Then
                 T = Asc(ch)   'per verifica
                 St = St & ch
            End If
       End If
    Loop While Len(St) > 0
St = CStr(St)
MsgBox St, T
'--------------------------------
Exit Sub
-- 
Gulp®

stringa vuota.
Allora per toglierti ogni dubbio potresti mettere nel loop la .DSRHolding, in
modo da verificare effettivamente che cambi, anche se il DSR nei modem di solito
indica la disponibilità a iniziare la comunicazione, attenzione che a un DSR si
risponde con un DTR, cioè cambiando la  .DTREnable
Magari dopo che hai modificato la DTREnable trasmette qualcosa.
http://msdn.microsoft.com/en-us/library/aa259407%28v=VS.60%29.aspx
http://msdn.microsoft.com/en-us/library/aa259408%28v=VS.60%29.aspx
Controlla che anche CTSHolding  e RTSEnable siano a posto, perchè la BT
implementa anche queste
http://msdn.microsoft.com/en-us/library/aa259424%28v=VS.60%29.aspx
--
ciao
  Stefano

Exit Sub
--
ciao
  Stefano

 implementa anche queste
Ho controllato: COM1.DSRHolding è False !!!!!
Ho messo
COM1.DTREnable = True
COM1.RTSEnable = True
Ma ancora niente... che disperazione!!
Eppure l'sms parte. ("Eppur si muove...")
Ciao Stefano e grazie ancora.
-- 
Gulp®

T O M B O L A !
Occorreva lavorare sulla sincronizzazione impostando la proprietà 
Handshaking che di default è impostata su comNone.
Con la configurazione della porta che ti posto qui sotto, finalmente 
sono riuscito a "ridare la parola al muto" :) per cui posso finalmente 
tornare a gestire gli "OK" e i ">".
Ah, per ricevere l'ultimo OK, ho dovuto mettere COM1.EOFEnable = True.
E' stata dura,ma studiando....
COM1.CommPort = PortaBT
COM1.Settings = "19200,n,8,1"
COM1.InputLen = 0
COM1.RThreshold = 1
COM1.EOFEnable = True
COM1.Handshaking = comRTS
COM1.RTSEnable = True
COM1.PortOpen = True
Grazie comunque del tuo contributo.E' servito molto.
Ciao
Egidio
-- 
Gulp®

Grazie comunque del tuo contributo.E' servito molto.
L'importante č che tu abbia risolto il problema.
--
ciao
  Stefano