// Board driver utilities

typedef struct
{
   char state;  // R = run, S = stopped
   char sign;   // + = positive, - = negative
   unsigned char hour;
   unsigned char minute;
   unsigned char second;
   DWORD usec;
} TDTIME;

typedef struct
{
   char state;  // R = run, S = stopped
   unsigned char hour;
   unsigned char minute;
   unsigned char second;
   WORD dayOfYear;
} H0TIME;

typedef struct
{
	DWORD sec;
   DWORD usec;
} TIMESTAMP;

#ifdef __BUILDING_THE_DLL
   #define __EXPORT_TYPE __export
#else
	#define __EXPORT_TYPE __import
#endif

#ifdef __cplusplus
extern "C" {
#endif

/*
   Code de retour des procédures
   -----------------------------
   le code de retour est zéro si tout s'est bien passé
   le code de retour est négatif en cas d'erreur
*/


//-----------------------------------------------------------------------------
// procédure à appeler avant toute utilisation des autres fonctions
int __EXPORT_TYPE OpenBoard(void);

//-----------------------------------------------------------------------------
// procédure à appeler en fin d'utilisation pour libérer les ressources
int __EXPORT_TYPE CloseBoard(void);

//-----------------------------------------------------------------------------
// procédure de lecture de l'état de la carte

int __EXPORT_TYPE GetBoardStatus(WORD *status, WORD *control);

//-----------------------------------------------------------------------------
// procédure de lecture du temps sur la carte SR1602B
// la date et l'heure sont renvoyée dans une structure SYSTEMTIME
// le quantième, les microsecondes et le status de la carte sont également retournés
int __EXPORT_TYPE GetBoardDateTime(SYSTEMTIME *st, WORD *doy, DWORD *micro, WORD *status);

//-----------------------------------------------------------------------------
// procedure de programmation initiale de l'année
// nécessaire lorsque l'année ne figure pas dans le code
// pour une gestion correcte des années bissextiles
int __EXPORT_TYPE SetBoardInitialYear(int year);

//-----------------------------------------------------------------------------
// procedure pour indiquer le type de décodage : IRIG B standard ou code AFNOR ( ou IEEE 1344)
// le code AFNOR contient l'année sur 2 chiffres
int __EXPORT_TYPE SetIrigMode(int mode);

//-----------------------------------------------------------------------------
// procédure de lecture des informations de version de la carte
// la carte renvoie une chaine de 17 caractères avec un zéro final
int __EXPORT_TYPE GetBoardVersion(char *version);

//-----------------------------------------------------------------------------
// procédure de lecture des informations de décompte

int __EXPORT_TYPE GetTD(TDTIME *td, WORD *status);

//-----------------------------------------------------------------------------
// procédure de lecture des informations de décompte étendues

int __EXPORT_TYPE GetTDEx(TDTIME *td, WORD *status);

//-----------------------------------------------------------------------------
// procédure de lecture des informations heure de tir

int __EXPORT_TYPE GetH0(H0TIME *h0, WORD *status);

//-----------------------------------------------------------------------------
// procédure de lecture des informations de datation

int __EXPORT_TYPE GetBoardTimestamp(TIMESTAMP *fm, TIMESTAMP *fd);

//-----------------------------------------------------------------------------
// procédure de validation de l'interruption datation et choix du front de déclenchement

int __EXPORT_TYPE EnableTimestampInterrupt(int edge);

//-----------------------------------------------------------------------------
// procédure de validation de l'interruption periodique et choix du délai

int __EXPORT_TYPE EnablePeriodicInterrupt(WORD count);

//-----------------------------------------------------------------------------
// procédure de dévalidation des interruptions

int __EXPORT_TYPE DisableBoardInterrupts(void);

//-----------------------------------------------------------------------------
// procédure d'attente de l'interruption datation
// les datations sont retournées dans les variables passées en argument

int __EXPORT_TYPE WaitForTimestampInterrupt(TIMESTAMP *fm, TIMESTAMP *fd);

//-----------------------------------------------------------------------------
// procédure d'attente de l'interruption periodique
int __EXPORT_TYPE WaitForPeriodicInterrupt(void);

#ifdef __cplusplus
}
#endif
