Italian Leggere obd2

Fulvio75

Well-Known Member
Licensed User
Ho provato... C'è qualche cosa che non mi torna, all'avvio dell'app ed effettuata la connessione all'adattatore bt obd2 lancio i comandi sopra citati e monitorando la sub new message (buffer).... Entra.
Dopo di che se lancio nuovi comandi tipo atz, atrv per il voltaggio ecc.ecc non entra più in new message(buffer)..... Cosa cambia? Può essere che non trova più il carattere di fine msg > il monitoraggio di ingresso lo effettuo dopo aver trovato >
 

Fulvio75

Well-Known Member
Licensed User
problema, chi mi spiega questo fatto?
dichiaro il

Public Manager As BluetoothManager

in un modulo per avere tutto sempre a disposizione in qualunque activity, inizializzo il tutto in activity A.

Passo ad activity B e vedo il Manager anche li perchè è in un modulo convinto che tutto funzioni ma ecco il problema, lancio un PID da activity B, il Manager lo invia all'adattatore BT che lo riceve ma l'evento AStream_NewData ritorna la risposta solo se torno in Activity A
perchè?
 

Star-Dust

Expert
Licensed User
Longtime User
Fulvio gli eventi vengono sollevati nel modulo/servizio/attività dov'è dichiarato, non dove lo utilizzi
 

Fulvio75

Well-Known Member
Licensed User
Fulvio gli eventi vengono sollevati nel modulo/servizio/attività dov'è dichiarato, non dove lo utilizzi
Quindi tutte le volte che cambio activity mi tocca scollegare l'adattatore BT e rifare tutto nella nuova activity?:(
 

Fulvio75

Well-Known Member
Licensed User
Public Manager As BluetoothManager è una classe che dichiaro nel modulo BT

da activity A chiamo l'inizializzazione BT.Manager... quindi BT.manager prende sempre come riferimento activity A per gli eventi an suo interno? in questo caso AStream_NewData quando riceve i dati?
 

Star-Dust

Expert
Licensed User
Longtime User
Quindi tutte le volte che cambio activity mi tocca scollegare l'adattatore BT e rifare tutto nella nuova activity?:(
Ci sono altri modi per sollevare l'evento in un modulo diverso. Ad esempio con CallSub
 

Star-Dust

Expert
Licensed User
Longtime User
Public Manager As BluetoothManager è una classe che dichiaro nel modulo BT

da activity A chiamo l'inizializzazione BT.Manager... quindi BT.manager prende sempre come riferimento activity A per gli eventi an suo interno? in questo caso AStream_NewData quando riceve i dati?
Si
 

Fulvio75

Well-Known Member
Licensed User
Altra delucidazione... Gli eventi come il AStream_NewData che viene generato alla ricezione dei dati, non funzionano nei moduli di codice? Vanno solo nei moduli di classe?
 

Fulvio75

Well-Known Member
Licensed User
Funzionano nei luoghi dell'annuncio AStream.Initialize

ho provato in tutti i modi, come faccio a dirgli che non deve più utilizzare quella activity A ma la activity B?
Prende sempre come riferimento Activity A, chiamo initialize della classe in activity A e si setta sulla A poi passo alla activity B e AStream_NewData non da nulla, non viene richiamato.
Ritorno in Activity A e viene chiamato, ho provato anche a impostare la classe su Null ma non funziona.
 

Fulvio75

Well-Known Member
Licensed User
La dichiarazione della classe connessione as classeconnessione è in modulo.
Activity A chiama modulo.connessione
Activity B chiama modulo.connessione ovviamente quando passo a tale Activity, ma AStream_NewData si genera solo quando torno in Activity A
 

Star-Dust

Expert
Licensed User
Longtime User
Ciao Fulvio,
Per modulo intendi il modulo di codice ? Perché esistono 4 tipi di moduli in b4a: di activity, di classe, di codice, e di servizio.

Se è un modulo di codice, il comportamento è differente rispetto a B4J e B4I per il modo in cui è stato implementato nel framework e quindi va usato/gestito diversamente dal solito
 

Star-Dust

Expert
Licensed User
Longtime User
Allora la questione è che il modulo di codice in B4A è la stessa cosa che scrivi nell'activity chiamante. Per passare l'evento al modulo devi fare cosi

ACTIVITY:
private Sub AStream_NewData (Buffer() As Byte)
    ' Per modulo di codice
    Modulocodice.AStream_NewData (Buffer)

    ' Per altra activity, classe o servizio
    ' mCallBack è il chiamante - Activity, classe o servizio
    ' il nome della sub chiamata deve contenere sempre _ (underscore) nel nome
    ' If SubExists(mCallBack,mEventName & "_NewData") Then CallSub2(mCallBack,mEventName & "_NewData",Buffer)
End Sub

Nel modulo di codice
B4X:
private Sub AStream_NewData (Buffer() As Byte)
    'Log("Data: " & Buffer.Length)
End Sub
 

Fulvio75

Well-Known Member
Licensed User
Allora la questione è che il modulo di codice in B4A è la stessa cosa che scrivi nell'activity chiamante. Per passare l'evento al modulo devi fare cosi

ACTIVITY:
private Sub AStream_NewData (Buffer() As Byte)
    ' Per modulo di codice
    Modulocodice.AStream_NewData (Buffer)

    ' Per altra activity, classe o servizio
    ' mCallBack è il chiamante - Activity, classe o servizio
    ' il nome della sub chiamata deve contenere sempre _ (underscore) nel nome
    ' If SubExists(mCallBack,mEventName & "_NewData") Then CallSub2(mCallBack,mEventName & "_NewData",Buffer)
End Sub

Nel modulo di codice
B4X:
private Sub AStream_NewData (Buffer() As Byte)
    'Log("Data: " & Buffer.Length)
End Su
[/QUOTE]

Public ELM327Connection As ConnectionRef

Le Activity A e B chiamano questa classeche si trova in un nodulo di codice l'evento AStream_NewData si genera solo quando torno in A anche se il send viene effettuato in B
 

Attachments

  • ConnectionRef.bas
    9.5 KB · Views: 60

Star-Dust

Expert
Licensed User
Longtime User
Questa è una classe non è un modulo di codice.... Fulvio ti vorremo tanto aiutare ma devi dare informazioni corrette altrimenti non sono efficace le risposte

Hai dichiarato BluetoothAdmin su Activity e il resto all'interno della classe?
DeviceProperty non è una classe che conosco, a quale libreria si riferisce?
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Ho visto grosso modo il codice, è molto articolato non è possibile capirci qualcosa con solo questa parte. Non riesco ad aiutarti.

Comunque per spostare un evento su una classe diversa o un Activity questi sono i comandi
B4X:
  ' mCallBack è il chiamante - Activity, classe o servizio
  ' il nome della sub chiamata deve contenere sempre _ (underscore) nel nome
  If SubExists(mCallBack,"Evento_NewData") Then CallSub(mCallBack,"Evento_NewData") ' Evento senza parametri
  If SubExists(mCallBack,"Evento_NewData") Then CallSub2(mCallBack,"Evento_NewData",Buffer) ' Un parametro
  If SubExists(mCallBack,"Evento_NewData") Then CallSub3(mCallBack,"Evento_NewData",Buffer, String2) ' Due parametri
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Aggiungerei leggendo il codice che ci sono errori importanti nella gestione dei Wait For e nella sub ECUResponse_Time
 
Top