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

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 gli esempi in C, vorrei sapere se secondo voi è possibile accedere
a quegli stessi indirizzi e fare queste cose con Vb, magari con
qualche api che scrive direttamente indirizzi di memoria.
Grazie
void copyright(void)
{
printf("\n======== Winbond 83627EHF Watch Timer Tester (AUTO DETECT)
========\n"\
" Usage : W627E_WD reset_time\n"\
" Ex : W627E_WD 3 => reset system after 3 second\n"\
" W627E_WD 0 => disable watch dog timer\n");
}
//
===========================================================================
void EnableWDT(int interval)
{
unsigned char bBuf;
bBuf = Get_W627EHF_Reg( 0x2D);
bBuf &= (!0x01);
Set_W627EHF_Reg( 0x2D, bBuf); //Enable WDTO
Set_W627EHF_LD( 0x08); //switch to logic device 8
Set_W627EHF_Reg( 0x30, 0x01); //enable timer
bBuf = Get_W627EHF_Reg( 0xF5);
bBuf &= (!0x08);
Set_W627EHF_Reg( 0xF5, bBuf); //count mode is second
Set_W627EHF_Reg( 0xF6, interval); //set timer
}
//
===========================================================================
void DisableWDT(void)
{
Set_W627EHF_LD(0x08); //switch to logic device 8
Set_W627EHF_Reg(0xF6, 0x00); //clear watchdog timer
Set_W627EHF_Reg(0x30, 0x00); //watchdog disabled
}
//
===========================================================================

Visto che hai i sorgenti in C potresti farti delle API su dll in C

 Visto che hai i sorgenti in C potresti farti delle API su dll in C
E' proprio questo il problema, perchè non so programmare C quindi non
saprei come fare

 Visto che hai i sorgenti in C potresti farti delle API su dll in C
E' proprio questo il problema, perch� non so programmare C quindi non
saprei come fare 

saprei come fare
Dovresti sapere dove si trovano (in quale DLL) le funzioni
 Get_W627EHF_Reg
 Set_W627EHF_Reg
 Set_W627EHF_LD
Poi puoi provare a referenziarle come si fa con le API, perch� 
ad esempio  Get_W627EHF_Reg vuole un Char e restituisce un Char, che in VB
significa vuole un Byte e restituisce un Byte.
Potrebbe essere una cosa cos�:
Declare Function Get_W627EHF_Reg Lib "XXXX"  (ByVal Reg as Byte) as Byte
Poi il programma C si pu� tradurre cos�:
void EnableWDT(int interval)
      Sub EnableWDT(Interval as Integer)
unsigned char bBuf;
      Dim bBuf as Byte
bBuf = Get_W627EHF_Reg( 0x2D);
      bBuf = Get_W627EHF_Reg( &h2D)
bBuf &= (!0x01);
      bBuf = bBuf AND (NOT &h1)
Set_W627EHF_Reg( 0x2D, bBuf); //Enable WDTO
      Set_W627EHF_Reg( &h2D, bBuf)   'Enable WDTO
Set_W627EHF_LD( 0x08); //switch to logic device 8
      Set_W627EHF_LD( &h08)  'switch to logic device 8
Set_W627EHF_Reg( 0x30, 01); //enable timer
      Set_W627EHF_Reg( &h30, 01)  'enable timer
bBuf = Get_W627EHF_Reg( 0xF5);
      bBuf = Get_W627EHF_Reg( &hF5)
bBuf &= (!0x08);
      bBuf = bBuf AND (NOT &h08)
Set_W627EHF_Reg( 0xF5, bBuf); //count mode is second
     Set_W627EHF_Reg( &hF5, bBuf)  'count mode is second
Set_W627EHF_Reg( 0xF6, interval); //set timer
     Set_W627EHF_Reg( &hF6, interval) 'set timer
}
     End Sub
void DisableWDT(void)
     Sub DisableWDT()
Set_W627EHF_LD(0x08); //switch to logic device 8
     Set_W627EHF_LD(&h08)  '//switch to logic device 8
Set_W627EHF_Reg(0xF6, 0x00); //clear watchdog timer
     Set_W627EHF_Reg(&hF6, 0)    'clear watchdog timer
Set_W627EHF_Reg(0x30, 0x00); //watchdog disabled
     Set_W627EHF_Reg(&h30, 0)     'watchdog disabled
}
     End Sub
--
ciao
  Stefano

 Set_W627EHF_LD
La cosa si complica.
Guardando su
http://www.ibase-i.com.tw/2009/Manuals/IB93010.pdf
ho visto che referenzia
//===========================================================================
#include "W627EHF.H"
 #include <dos.h>
//===========================================================================
e che usa
void Set_W627EHF_LD( unsigned char LD)
 {
    Unlock_W627EHF();
    outportb(W627EHF_INDEX_PORT, W627EHF_REG_LD);
    outportb(W627EHF_DATA_PORT, LD); Lock_W627EHF(); 
}
La funzione outportb potrebbe funzionare solo in DOS e al massimo in W98, da
W2000 in poi non si possono comandare direttamente le porte di IO ma occorre
farlo tramite drivers, per quello ti avevo detto di cercare le librerie.
Per riuscire ad usare quella istruzioni una strada sarebbe avviare in DOS
tramite floppy (o penna USB, qualcuno ci � riuscito ma non chiedermi di pi�) e
scrivere un programma sotto DOS in QuickBasic che possa accedere direttamente
alle porte di I/O.
Per usare QuickBasic una versione aggiornata si pu� scaricare qui:
http://www.ring-apotheke.com/pkworld/download/compiler/qb71eng.zip
Poi se decidi di usare questa strada ci aggiorniamo.
--
ciao
  Stefano

 > Set_W627EHF_LD
Cioè, tu hai qualche idea su come posso trovare la dll che contiene
queste funzioni?
e questo
#include "W627EHF.H"
Ho guardato nel cd ma non c'è... dici che mi tocca mandare una mail
alla ibase?
Mi sembra assurdo che documentano delle funzioni nel manuale e poi non
ti danno i componenti


ANNULLA TUTTO
L'HO TROVATA LA DLL!!!
Adesso ci do un occhiata poi ci sentiamo
grazie per le dritte, sei stato grande!