{ -------------------------------------------------------------------- *
*                                                                      *
*   3333   CCCC      CCCC  OOOO  N     N  CCCC  EEEEE  PPPP  TTTTTTT   *
*       3 C         C     O    O NN    N C      E      P   P    T      *
*       3 C         C     O    O N N   N C      E      P   P    T      *
*   3333  C         C     O    O N  N  N C      EEEE   PPPP     T      *
*       3 C         C     O    O N   N N C      E      P        T      *
*       3 C         C     O    O N    NN C      E      P        T      *
*   3333   CCCC      CCCC  OOOO  N     N  CCCC  EEEEE  P        T      *
*                                                                      *
*     UNITE D'INTERFACE POUR DLL/Win32 Module TC/USB-16IO (8E/6S/1C)   *
*                                                                      *
*  (c)2012 3C CONCEPT S.A.                							   *
*	V 1.00 : 29/11/2006 : Release							           *
*   V 1.01 : 23/08/2012 : DB : Correction Fonction Close:			   *
*						  Procedure->Function						   *	 
*   V 1.02 : 05/05/2017 : JT : Ajout fonctions latch		           *
*                                                                      *
* -------------------------------------------------------------------- *
* Fichier a inclure dans le programme principal pour utiliser TCUSB16IO.DLL
* A utiliser avec la directive $INCLUDE TCUSB16IO.INC
*}

const
  maxmodule   = 8;   { N° des modules de 1 à 8 }

{ Codes d'erreur générés par les fonctions de base ci-dessous,
  les fonctions opérant sur bit (BITINPUT, BITOUTPUT, BITREADBACK) ne retournent
  pas de code erreur }

  erNoError   = 0;   { OK }
  erNumSerie  = 1;   { Numero de serie incorrect }
  erModule    = 2;   { N° de module incorrect }
  erNoModule  = 3;   { Pas de module TC/USB-16IO détecté }
  erNoInit    = 4;   { Module non initialisé }
  erWrite     = 5;
  erRead      = 6;
  erClose     = 7;   { erreur à la fermeture }

{*************************************************************************************}
{********************** OPERATIONS DE BASE *******************************************}
{*************************************************************************************}

function TCUSB16IO_Refresh(NModule:integer):integer;stdcall;external 'TCUSB16IO.DLL';

{ Actualise les données (Entrées + Sorties + Compteurs) du module indiqué
  A utiliser apres toute fonction sur les sorties et avant toutes fonction sur les entrées et compteurs  }

{*************************************************************************************}

function TCUSB16IO_Open(NModule:integer;var NumSerie:PChar):integer;stdcall;external 'TCUSB16IO.DLL';

{ Initialise le driver, affecte le numéro de série du module au numéro de module
  spécifié (1 à 8) et remet à 0 les sorties. si numéro de série est vide alors ouvre le premier module détecté.
  A utiliser avant tout autre appel a une fonction TCUSB16IO_xxx
  Fermer la session par TCUSB16IO_Close }

{*************************************************************************************}

function TCUSB16IO_OpenN(NModule:integer;var NumSerie:DWord):integer;stdcall;external 'TCUSB16IO.DLL';

{ Initialise le driver, affecte le numéro de série du module au numéro de module
  spécifié (1 à 8) et remet à 0 les sorties. si numéro de série=0 alors ouvre le premier module détecté.
  A utiliser avant tout autre appel a une fonction TCUSB16IO_xxx
  Fermer la session par TCUSB16IO_Close }

{*************************************************************************************}

function TCUSB16IO_OpenN_InitOutput(NModule:integer;var Numserie:DWord;Data:Byte):integer;stdcall;external 'TCUSB16IO.DLL';

{ Initialise le driver, affecte le numéro de série du module au numéro de module
  spécifié (1 à 8) et met les sorties à Data. si numéro de série=0 alors ouvre le premier module détecté.
  A utiliser avant tout autre appel a une fonction TCUSB16IO_xxx
  Fermer la session par TCUSB16IO_Close }

{*************************************************************************************}

function TCUSB16IO_Close(NModule:integer):integer;stdcall;external 'TCUSB16IO.DLL';

{ Termine la session et ferme le driver (indispensable à la fin du programme) }

{*************************************************************************************}

function TCUSB16IO_Input(NModule:integer;var Data:DWord):integer;stdcall;external 'TCUSB16IO.DLL';

{ Lecture des entrées du module indiqué, le retour se fait par
  parametre dans la variable Data (32 bits), un code erreur correspond a la valeur
  retournee par la fonction }

{*************************************************************************************}

function TCUSB16IO_Output(NModule:integer;Data:Byte):integer;stdcall;external 'TCUSB16IO.DLL';

{ Envoi sur les sorties du module indiqué la valeur
  contenue dans la variable Data (8 bits), un code erreur correspond a la valeur
  retournee par la fonction }

{*************************************************************************************}
{********************** OPERATIONS SUR BITS ******************************************}
{*************************************************************************************}

function TCUSB16IO_BitInput(NModule,Entree:integer):integer;stdcall;external 'TCUSB16IO.DLL';

{ Lecture de l'état d'une entrée (1 à 11) du module spécifié }

{*************************************************************************************}

procedure TCUSB16IO_BitOutput(NModule,Sortie,etat:integer);stdcall;external 'TCUSB16IO.DLL';

{ Place la sortie (1 à 6) du module spécifiée dans l'état indiqué (0 ou 1) }

{*************************************************************************************}

function TCUSB16IO_BitReadBack(NModule,Sortie:integer):integer;stdcall;external 'TCUSB16IO.DLL';

{ Relecture de l'état d'une sortie (1 à 6) du module spécifié }

{*************************************************************************************}

function TCUSB16IO_Counter(NModule,Entree:integer;var Data:byte):integer;stdcall;external 'TCUSB16IO.DLL';

{ Lecture du compteur de l'entrée spécifiée du module indiqué, le retour se fait par
  parametre dans la variable Data (8 bits), un code erreur correspond a la valeur
  retournee par la fonction }

{*************************************************************************************}

function TCUSB16IO_Config(NModule:integer;Data:Byte):integer;stdcall;external 'TCUSB16IO.DLL';
{ Regle  sur le module spécifié:
  1) sur les bits 1 à 3, la valeur du filtre numérique sur les entrées Codeurs A,B,Z (0 à 6)
  0:24Mhz , 1:12Mhz, 2:6Mhz, 3:1.5Mhz, 4:750Khz, 5:375Khz, 6:187.5Khz
  2) La validité du TOPZ bit 4 à 1 ou 0
  un code erreur correspond a la valeur retournee par la fonction }

{*************************************************************************************}

function TCUSB16IO_Pos(NModule:integer;var Data:Integer):integer;stdcall;external 'TCUSB16IO.DLL';
{ Lecture du codeur du module indiqué, le retour se fait par parametre dans la variable Data (32 bits signé),
  un code erreur correspond a la valeur retournee par la fonction }

{*************************************************************************************}

function TCUSB16IO_ResetPos(NModule:integer):integer;stdcall;external 'TCUSB16IO.DLL';
{ Remise à zéro du codeur du module indiqué,
  un code erreur correspond a la valeur retournee par la fonction }

{*************************************************************************************}

function TCUSB16IO_ConfigLatch(NModule:integer; Data:byte):Integer;stdcall;external 'TCUSB16IO.DLL';
{ Configure sur le module spécifié :
	1)	sur les bits 1 à 3 de data, le mode de latch 1 du codeur possible sur l’entrée 7 
	(de 0 à 3 avec 0:Pas de latch, 1 : Latch sur front montant de l’entrée 7, 
	2 : Latch sur front descendant de l’entrée 7, 3 : Latch sur changement d’état de l’entrée 7)
	2)	sur les bits 5 à 7 de data, le mode de latch 2 du codeur possible sur l’entrée 8 
	(de 0 à 3 avec 0:Pas de latch, 1 : Latch sur front montant de l’entrée 8, 
	2 : Latch sur front descendant de l’entrée 8, 3 : Latch sur changement d’état de l’entrée 8)
  Un code erreur correspond à la valeur retournée par la fonction
}

{*************************************************************************************}
function TCUSB16IO_Latch(NModule:integer;Latch:byte;var Data:Integer):integer;stdcall;external 'TCUSB16IO.DLL';
{ Lecture de la valeur du latch spécifié (de 1 à 2) du codeur du module spécifié. Le retour se fait par paramètre 
  dans la variable Data (32 bits signés).
  Un code erreur correspond à la valeur retournée par la fonction
}

{*************************************************************************************}

procedure TCUSB16IO_WdgRun(NModule:integer);stdcall;external 'TCUSB16IO.DLL';

{ Arme la surveillance du chien de garde sur le module spécifié }

{*************************************************************************************}

procedure TCUSB16IO_WdgStop(NModule:integer);stdcall;external 'TCUSB16IO.DLL';

{ Désactive la surveillance du chien de garde sur le module spécifié }

{*************************************************************************************}

procedure TCUSB16IO_WdgRearm(NModule:integer);stdcall;external 'TCUSB16IO.DLL';

{ Rearmement du chien de garde sur le module spécifié }

{*************************************************************************************}

procedure TCUSB16IO_ResetPort(NModule:integer);stdcall;external 'TCUSB16IO.DLL';

{ Reinitialise le port USB du module }

{*************************************************************************************}

procedure TCUSB16IO_CyclePort(NModule:integer);stdcall;external 'TCUSB16IO.DLL';

{ Deconnecte et reconnecte le port USB du module }

{*************************************************************************************}

function TCUSB16IO_Version(NModule:integer;var Data1:Byte;var Data2:Byte):integer;stdcall;external 'TCUSB16IO.DLL';

{ Lecture de la version du firmware du module indiqué et de la DLL, le retour se fait par parametre dans les variables Data1 (module) et Data2 (DLL) (8 bits non signé),
  un code erreur correspond a la valeur retournee par la fonction }

{ Fin TCUSB16IO.INC }

