Newsgroup: it.comp.lang.visual-basic
Titolo: Di nuovo Watchdog scheda madre e VB

Apro un nuovo thread, perchè ho nuovi elementi per il discorso del
watchdog
Riporto la premessa
Ho il watchdog di una scheda madre con l'esempio in c su come si
attiva.
In pratica funziona così, questo watchdog è hardware e si trova su un
circuito separato della scheda madre.
Una volta attivato parte un countdown che va resettato via software
prima che arrivi a zero, se per caso quel countdown arriva a zero
significa che il software si è bloccato e automaticamente la scheda
madre si resetta.
Ho trovato la dll con gli esempi in c++ e anche con un progetto per
visual studio 2003 che pero'  non si compila.
Potete scaricare DLL e sorgenti di esempio da qui
http://daveoui.dyndns.org/MB850V4A.ZIP
Ovvio che senza la scheda madre in mano non ne potete verificare il
funzionamento, ma comunque potete farvi una idea della cosa, gli
esempi riportano anche l'utilizzo del modulo I/O interno della scheda
madre, che pero' a me non interessa.  A me basta fa funzionare il
watchdog.
Se qualcuno mi spiega un attimo come mai non riesco a compilarli ed
eventualmente come posso usare quella DLL da VB gli faccio un
monumento
GRAZIE
:-)


PARDON, LINK SBAGLIATO, QUESTO è QUELLO BUONO
http://82.53.252.98:9000/ESEMPI.zip


http://82.53.252.98:9000/ESEMPI.zip
Ti spiega cosa devi fare nel Readme.pdf, e le funzioni sono nella dll.
Esaminando la DLL  IB_WDT.DLL con Dependency Walker
http://majorgeeks.com/Dependency_Walker_d227.html
effettivamente espone EnableWDT e DisableWDT
che nel pdf chiama
extern "C" __declspec(dllexport) int __stdcall EnableWDT(int);
extern "C" __declspec(dllexport) int __stdcall DisableWDT(int);
extern "C" __declspec(dllexport) int __stdcall InstallDriver(void);
si possono tradurre in Vb con
Declare Function EnableWDT Lib "IB_WDT.DLL" (Value As Long) As Long
Declare Function DisableWDT Lib "IB_WDT.DLL" (Value As Long) As Long
Declare Function InstallDriver Lib "IB_WDT.DLL" () As Long
per� dice che devi installare prima InstallDriver
Il programma avr� righe come questa
Dim Ret as Long
Ret = InstallDriver ()
Ret = DisableWDT (0&)
Dim Tim as Long
Tim = &h100
Ret = EnableWDT (Tim)
su questa falsariga segui quello che dice il .pdf.
o usi il programma che ti ho tradotto l'altra volta dal C.
--
ciao
  Stefano

Dov'e' che li acquisti i componenti Ibase ?
Mi interesserebbe una scheda madre, la MI935
Ciao
RobertoA

 Mi interesserebbe una scheda madre, la MI935
Noi li importiamo direttamente dalla casa madre in Taiwan, prova a 
contattarli e vedi...
In ufficio dovrei avere anche i riferimenti di un distributore... domani te 
li posto qui...
Ciao 

 [varie]
SB sei stato grande un altra volta.
Domani se ho tempo provo poi ti faccio sapere com'e' andata. 

 Ciao
Se vuoi puoi contattare questo distributore:
Comprel
www.comprel.it
0362/496982
inform...@comprel.it

 Domani se ho tempo provo poi ti faccio sapere com'e' andata.
Provato
FUNZIONA GRAZIE GRAZIE GRAZIE
Ho un dubbio, ho provato a passare alla funzione enablewdt il valore 3
anziche &H100 ma ho avuto l'impressione di aver aspettato piu' di 3
secondi
ma &H100 sarebbe 256 in esadecimale?
Poi sto provando a capire la funzione GetWDTInfo
La documentazione dice
Output : return a string that describes the module information
io ho provato a dichiararla cosi
Declare Function GetWDTInfo Lib "IB_WDT.DLL" () As String
poi la chiamo cosi per vedere cosa mi restituisce
MsgBox (GetWDTInfo())
...e mi crasha VB
Immagino che sia perchè no ricevo il valore di ritorno nel modo
corretto, immagino che non sia una stringa ma qualcos'altro.
come devo fare per ricevere il valore di ritorno senza che vb crashi?

...e mi crasha VB
extern "C" __declspec(dllexport) char* __stdcall GetWDTInfo(void);
Declare Function GetWDTInfo Lib "IB_WDT.DLL" () As String
GetWDTInfo � dichiarata correttamente e dovrebbe fornirti il puntatore ad una
stringa terminata con uno 0, prova a vedere se ti crasha anche cos�:
Dim St$
St = GetWDTInfo
If Len(St) then MsgBox St
e vedi se crasha sulla chiamata dell'API.
Naturalmente hai fatto quello che scrive nel parametro 2 sull'installazione del
driver e del file .inf
--
ciao
  Stefano

 Declare Function GetWDTInfo Lib "IB_WDT.DLL" () As String
Mmmmm... � char*, non BSTR, e ho paura che in questo caso VB non faccia 
tutto il "lavoro dietro le quinte" di allocazione e conversione come fa per 
i parametri "ByVal ... As String".
Io proverei cos�:
Declare Function GetWDTInfo Lib "IB_WDT.DLL" () As Long
MsgBox PointerToStringA(GetWDTInfo)
avendo definito:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pTo As 
Any, uFrom As Any, ByVal lSize As Long)
Private Declare Function lstrlenA Lib "kernel32" (ByVal lpString As Long) As 
Long
Private Function PointerToStringA(ByVal lpStringA As Long) As String
    Dim Buffer() As Byte
    Dim nLen As Long
    If lpStringA Then
        nLen = lstrlenA(ByVal lpStringA)
        If nLen Then
            ReDim Buffer(0 To (nLen - 1)) As Byte
            CopyMemory Buffer(0), ByVal lpStringA, nLen
            PointerToStringA = StrConv(Buffer, vbUnicode)
        End If
    End If
End Function
Darei per scontato che la funzione GetWDTInfo ritorni un puntatore ad una 
stringa ANSI e non UNICODE, altrimenti il tutto � leggermente diverso.
Bye
Raf

MsgBox PointerToStringA(GetWDTInfo)
Credevo che potesse funzionare perch� quando si passa o riceve una stringa ad
una funzione in realt� si lavora con un puntatore al buffer di quella stringa,
ma � pi� corretto come hai fatto tu. 
--
ciao
  Stefano


Per la cronaca....
avevo dei malfunzionamenti sul tempo, nel senso che il watchdog partiva e 
funzionava alla grande ma sballava il numero di secondi, passando ad esempio 
1 (che sarebbe dovuto essere 1sec) il timer girava 3 minuti e mezzo circa 
prima di resettare la scheda. La cosa si e' risolta quando ho modificato la 
dichiarazione specificando il parametro come byval, ora funziona bene... e' 
forse leggermente piu' veloce... 30 secondi per lui durano circa 26.... 3 
minuti sono poco piu' di 2 e mezzo.... etc...
dipendera' dal clock interno del chip... cmq ci puo' stare!!!
Per il getinfo non ho ancora provato, appena ho tempo mi ci dedico meglio, 
per ora quello che ho fatto e' piu' che sufficente.
GRAZIE ANCORA A TUTTI!!!