/*
   Fichier types.h
   Auteur Bernard Chardonneau

   Structure des données du fichier cyloop, constantes,
   accès aux bits de certaines variables.
*/



// types de données utilisées dans le fichier cyloop

typedef unsigned char   octet;   // entier de 0 à 255
typedef unsigned short  uint16;  // entier de 0 à 65535
typedef unsigned long   uint32;  // entier de 0 à 4294067295
typedef short           int16;   // entier de -32768 à 32767
typedef long            int32;   // entier de -2147483648 à 2147483647


// une contante importante : nombre de secondes par jour
#define secjour      86400

// constantes booléennes
#define  OUI           1
#define  NON           0


// bits du champ caract_gen de la structure desc_cyloop

#define cycle_decl       1  // un début de cycle doit être déclenché par un appel de cyldecl
#define temps_utc        2  // début de cycles calculés en temps universel (UTC ou GMT)
#define cycle_ireg       4  // utilisation cycle de durée irrégulière basé sur le calendrier
#define cycle_annuel     8  // utilisation d'un cycle annuel


// bits du champ etat_cyloop de la structure desc_cyloop

#define heure_ete        1  // heure d'été lors de la dernière mise à jour d'une variable

#define mask_heure_hiver 0xFE // complément du bit heure_ete

// #define mask_cyl_nonfait 0xF9 // complément des bits cylincr_fait et cyladdval_fait


// bits du champ typedon de la structure desc_var

#define cmoy_sep         1  // champ coef_moy distinct pour chaque instant du cycle
#define cpt_cycle_vide   2  // compter les cycles vides dans les calculs de ponderation
#define cumul_donnees    4  // autoriser plusieurs mises à jours à chaque instant du cycle
#define compteur         8  // la variable est un compteur de passages
#define donnees_32bits 0x10 // données sur 4 octets (significatif si compteur)
#define val_float      0x20 // données en virgule flottante (significatif si pas compteur)
#define mem_min_max    0x40 // mémorisation des valeurs min et max des données
#define cpt_toute_don  0x80 // si cumul_donnees les compteur de passage sont mis à jour chaque fois


// structure décrivant l'entête du fichier cyloop (16 octets)

typedef struct
{
    octet  signature [3]; // Pour vérifier de c'est bien un fichier cyloop
    octet  nb_var;        // Nombre de variables mémorisées dans le fichier cyloop
    octet  caract_gen;    // Caractéristiques générales du fichier cyloop
    octet  etat_cyloop;   // Bits d'état du fichier cyloop
    uint16 nb_don_cycle;  // Nombre de données par cycle de mesure
    uint32 deb_cycle;     // Instant de démarrage du cycle courant
    uint32 duree_cycle;   // Durée en secondes du cycle courant
} desc_cyloop;


// structure décrivant une/la variable du fichier cyloop (6 ou 8 octets)

typedef struct
{
    uint16 der_enreg;     // Numéro de la dernière donnée mise à jour dans le cycle actuel
    octet  typedon;       // Caractéristiques de la variable
    octet  ponderation;   // Coefficient de pondération pour les valeurs des cycles précédents
    uint16 extention;     // Champ disponible pour utilisation ultérieure
    uint16 coef_moy;      // Champ optionnel pour calcul valeur moyenne des données
} desc_var;