Ciao a tutti e spero di ricevere da voi un aiuto in merito a questo problema:
Sto cercando di creare un codice in C che si collega ad una centrale di allarme, mandi dei comandi ad essa attraverso la porta rs232 e in base al comando inviato (sfruttando una DLL esterna) questa risponde con una serie di informazioni che devo alla fine mettere su un file di testo che devo poi importare su un DB.
Ma andiamoci per step:
1) il collegamento alla centrale, andata a buon fine
2) riconoscimento DLL, andata a buon fine
3) la centrale per adesso mi risponde con uno "0" e cioè che il collegamento è andato a buon fine.
Per mandare un altro comando non ci sono problemi ma non so come recepirli e prima guardare a video e poi successivamente scrivere in un file di testo.
#include <wtypes.h>
#include <stdio.h>
typedef unsigned char (__stdcall *myFunct)(unsigned long int,unsigned char,unsigned
char,unsigned char,unsigned char*,unsigned char,unsigned char*);
void main(void);
void main(void)
{
unsigned char *buffer;
buffer=malloc(32768 * sizeof(char));
unsigned char pin[7]={""};
unsigned char seriale,retry,pinlen,response,baudrate;
unsigned long comando;
unsigned char dummy;
HINSTANCE modulo;
myFunct ftrue;
seriale=3;
comando=0x0000201;
pinlen=0;
retry=1;
baudrate=3;
modulo=LoadLibrary("BisKyo300.dll");
ftrue=( myFunct)GetProcAddress(modulo,"PanelConnection");
response=(*ftrue)(comando,seriale,retry,baudrate,pin,pinlen,buffer);
printf ("result = %d\n",response);
FreeLibrary(modulo);
}
la risposta a fine esecuzione è:
result = 0
Process returned 1 (0x1) execution time : 0.780 s
Press any key to continue.
le specifiche della DLL sono le seguenti:
Nome Funzione: PanelConnection
Index: 1
In ingresso:
Descrizione Parametro Tipo di Dato
Codice comando azione da intraprendere DOUBLE WORD
Numero porta seriale (1 - COM1 ... 4 - COM4)
tipo: Byte
Numero di ritentativi in caso di errore di comunicazione (result = 3)
Tipo: Byte
Velocità di Trasmissione
0 = 1200 baud
1 = 2400 baud
2 = 4800 baud
Tipo: Byte
Codice PIN : puntatore al 1° carattere della stringa contenente il codice pin
(Necessario solo se il comando corrisponde ad una scrittura:
nel caso di comando di lettura, può essere non inizializzato)
Tipo: PChar
Len Pin: lunghezza stringa contenente il codice PIN
(Necessario solo se il comando corrisponde ad una scrittura:
nel caso di comando di lettura, può essere lasciato a 0)
Tipo: Byte
Puntatore al primo elemento dell'array di byte necessario per raccogliere
le informazioni di ritorno o contenenti le informazioni da inviare alla centrale.
Tale Array deve essere allocato dalla procedura chiamante
e deve avere una capacità di 32 Kbytes
Tipo: PChar
Risultato (Tipo Byte):
0: Operazione andata a buon fine
1: Codice utente non valido
2: Errore apertura porta seriale
3: Errore di comunicazione
4: Comando sconosciuto
5: Tipo centrale non riconosciuto
6: Versione firmware non riconosciuta
7: Aree inserite, impossibile aprire sessione di programmazione
8: Sessione di programmazione già aperta
9: Dati forniti per la scrittura non validi
10: Errore chiusura sessione di programmazione
11: Codice utente non abilitato
12: Nessun dato disponibile per la lettura
13: Inclusione/Esclusione zone - Attivazione/Disattivazione uscite: operazione non autorizzata
(zona non escludibile, uscita non attivabile, codice utente non autorizzato)
DESCRIZIONE DEI COMANDI IN LETTURA
Comando $0000 0201
Descrizione Comando Lettura Configurazione dei dispositivi sul bus BPI/Stato Periferiche.
Numero di bytes in Lettura
66 (Kyo 300 - 1.10)
74 (Kyo 300 - 1.20)
48 (Kyo 100 - 1.20)
Tempo approx. esecuzione comando 0.4 sec.
In ritorno lo stream di bits relativo al tempo reale dello stato delle periferiche. Le periferiche sono:
Byte
Descrizione
1 1 Lettori dall'indirizzo 0 all'indirizzo 7, 8 bits bit = 1 presente bit = 0 assente
2 2 Lettori dall'indirizzo 8 all'indirizzo 15, 8 bits bit = 1 presente bit = 0 assente
3 Lettori dall'indirizzo 16 all'indirizzo 23, 8 bits bit = 1 presente bit = 0 assente
4 Lettori dall'indirizzo 24 all'indirizzo 31, 8 bits bit = 1 presente bit = 0 assente
5 3 Lettori dall'indirizzo 0 all'indirizzo 7, 8 bits bit = 1 vivo bit = 0 morto
6 4 Lettori dall'indirizzo 8 all'indirizzo 15, 8 bits bit = 1 vivo bit = 0 morto
7 Lettori dall'indirizzo 16 all'indirizzo 23, 8 bits bit = 1 vivo bit = 0 morto
8 Lettori dall'indirizzo 24 all'indirizzo 31, 8 bits bit = 1 vivo bit = 0 morto
9 5 Lettori dall'indirizzo 0 all'indirizzo 7, 8 bits bit = 1 periferica in sabotaggio bit = 0 periferica ok
10 6 Lettori dall'indirizzo 8 all'indirizzo 15, 8 bits bit = 1 periferica in sabotaggio bit = 0 periferica ok
11 Lettori dall'indirizzo 16 all'indirizzo 23, 8 bits bit = 1 periferica in sabotaggio bit = 0 periferica ok
12 Lettori dall'indirizzo 24 all'ind...
e cosi via
grazie a tutti anticipatamente