Import initial du projet shipheart_appli
This commit is contained in:
@@ -0,0 +1,171 @@
|
||||
//**********************************************************************************************************************************************************************************
|
||||
// Fichier SYSTEME.H
|
||||
//
|
||||
// Contient tous les define liés aux fonctions système...
|
||||
//**********************************************************************************************************************************************************************************/
|
||||
|
||||
// Maximums :
|
||||
#define MAX_NOMBRE_MODULES (32+1) // Nombre maximal de cartes (y compris Compagnon) commandées par ShipHeart. A priori, toutes sont sur le k-bus + Compagnon
|
||||
#define MAX_NOMBRE_DEVICES_OW 32 // Nombre physique de device max (!= de MAX_NOMBRE_ENTREES_OW dans 'entrees.h')
|
||||
#define MAX_TAILLE_UNIQUE_ID 12 // Nombre d'octets de l'Unique ID stocké en ROM du µC
|
||||
#define MAX_TAILLE_TYPE_SOFT 20 // Taille de la chaine de caractère contenant les infos de type de logiciel (EXTENSION ou COMPAGNON)
|
||||
#define MAX_TAILLE_VERSION_SOFT 100 // Taille de la chaine de caractères contenant les infos de version logicielle
|
||||
#define MAX_TAILLE_EEPROM 256 // Taille, en octets, de la zone d'EEPROM utilisée pour stocker des paramètres de configuration. NB : cette dimension a un lien avec le champ 'Eeprom' dans TB_Modules_physiques qui fait 2xMAX_TAILLE_EEPROM pour pouvoir stocker chaque valeur sur 2 caractères alphas codés en hexa.
|
||||
#define MAX_BOUCLES_CALCUL_CRC 3 // Nombre de boucles max pour vérifier la lecture du CRC de l'application
|
||||
#define TAILLE_ADRESSE_MAC 6 // 6 octets stockés directement
|
||||
#define TAILLE_ADRESSE_IP_V4 16 // en caractères, pour stocker sous forme de chaine. Exemple : '123.123.123.123'
|
||||
#define TAILLE_ADRESSE_IP_V6 40 // en caractères, pour stocker sous forme de chaine. Exemple : '0123:0123:0123:0123:0123:0123:0123:0123'
|
||||
#define TAILLE_ADRESSE_IP TAILLE_ADRESSE_IP_V6 // Dans le doute...
|
||||
#define TAILLE_ROM_CODE_OW 8 // Nombre d'octets utilisés par les ROM Codes
|
||||
#define MAX_TAILLE_CRC 20 // Nombre maxi de caractères pour un CRC
|
||||
#define MAX_LONGUEUR_TOKEN_SHA256 32 // Le SHA256 est formé de... 256 bits, soit 32 octets. Attention : la chaine correspondante est formée de 65 caractères (32 x 2 car (hexa codé en Ascii) + NULL de fin)
|
||||
|
||||
#define MAX_LONGUEUR_CHAINE_VERSION_CM 100 // Longueur maxi de la chaine représentant la version de Compute Module (renvoyée dans TB_Systeme.Version_cm)
|
||||
#define MAX_LONGUEUR_NOM_REPERTOIRE_LOCAL 200 // Longueur maxi du nom d'un répertoire local
|
||||
#define MAX_LONGUEUR_NOM_FICHIER 100 // Longueur maxi, y compris NULL de fin de chaine, d'un nom de fichier (SANS répertoire)
|
||||
#define MAX_LONGUEUR_NOM_BATEAU 50 // Nomre maxi de caractères du nom de bateau
|
||||
#define MAX_TAILLE_COMMANDE_SHELL 2000 // Taille maxi d'une commande Shell lancée via 'systeme()'
|
||||
#define MAX_LONGUEUR_URL 256 // Longueur maxi de l'URL (notament en HTTP). A priori, selon retour de AT+SHCONF?, le max serait 512.
|
||||
#define MAX_LONGUEUR_REQUETE_HTTP 512 // Longueur maxi de la requête HTTP (notamment GET). Cette longueur est vérifiable par 'AT+SHREQ=?'
|
||||
#define MAX_TAILLE_FICHIER_UPLOAD 10000000 // En octets. Tout fichier de taille supérieure ne pourra pas être uploadé
|
||||
#define MAX_TAILLE_BUFFER_UPLOAD 1500 // A priori, le modem limite à 1360 mais c'est quelque chose qui peut évoluer en fonction de la version de firmware, vorie en dynamique.
|
||||
#define MAX_TAILLE_FICHIER_DOWNLOAD 10000000 // En octets. Tout fichier de taille supérieure ne pourra pas être downloadé
|
||||
#define MAX_TAILLE_BUFFER_DOWNLOAD 5000
|
||||
#define MAX_NOMBRE_FICHIERS_DOWNLOAD 100 // Nombre maxi de fichiers qui pourront être traités (s'il y en a plus, ils seront traités quand les premiers seront effacés).
|
||||
#define MAX_NOMBRE_PARAMETRES_LISTE_DOWNLOAD 12 // Nombre de paramètres d'une ligne FTPLIST (type commande 'ls -l')
|
||||
#define MAX_TAILLE_BLOC_DATA_CHARGEMENT_CODE 256 // Taille maximale d'un bloc de data lors du chargement de code (nb : c'est cette quantité qui est émise par défaut. Or, le chargement ne fonctionne qu'avec des multiples de 4 octets. Donc, merci de laisser une valeur multiple de 4...!!!!!)
|
||||
#define MAX_TAILLE_FICHIER_JSON 10000 // Taille maximale d'un fichier JSON
|
||||
#define MAX_TAILLE_DESCRIPTION_PACKAGE 4096 // Taille maxi du champ 'Description' d'un fichier JSON de version.
|
||||
#define MAX_REPETITIONS_CHARGEMENT_CODE 5 // Nb max de tentatives de répétitions lorsque le chargement sur une carte ne fonctionne pas
|
||||
|
||||
|
||||
|
||||
// Timings :
|
||||
#define SYSTEME_TEMPO_INIT 0 // En x 10ms
|
||||
#define SYSTEME_TEMPO_ATTENTE_REINIT_PAR_DEFAUT 60 // En x 100ms Temporisation entre la réception d'une demande de réinit (transmise au Compagnon pour action) et l'arrêt "propre" de l'application. NB : sur le compagnon, l'exécution est temporisé de 8s ; il est donc prudent de caler cette tempo là en-dessous de cette valeur...
|
||||
#define SYSTEME_TEMPO_PERIODE_CHECK_NEW_DOWNLOAD 3600 // En secondes En pratique, la tempo est ramenée à 1min après chaque connexion réseau. Cette valeur est donc un max si aucune connexion réseau n'est faite...
|
||||
#define SYSTEME_TEMPO_REPORT_SAUVEGARDE 5 // En secondes Temporisation si une sauvagarde est demandée alors qu'un archivage est déjà en cours (non critique car la test d'archivage en cours sera effectué à la fin de cette tempo et, si besoin, relancée)
|
||||
#define SYSTEME_TEMPO_ATTENTE_DISPO_C_BUS 10 // En x 10ms NB : tempo non critique car attentes multiples jusqu'à ce que C-Bus soit dispo
|
||||
#define SYSTEME_TEMPO_LECTURE_ID_CARTES 1 // En x 10ms NB : Tempo non critique, elle permet juste de ne pas faire des tests en permanence en attendant la réception de tous les ID
|
||||
#define SYSTEME_TIME_OUT_LECTURE_ID_CARTES 10 // En x 100ms SDIR #304
|
||||
#define SYSTEME_TIME_OUT_ANNUAIRE_ONE_WIRE 5 // En x 100ms
|
||||
#define SYSTEME_TEMPO_ATTENTE_CONFIG_CARTES 30 // En x 10ms NB : tempo non critique car permet juste d'éviter de recevoir des commandes UP sur des cartes non configurées (donc générant des retours d'erreur vers le Compagnon). NB : les commandes UP génériques ET avec Haute Priorité passent quand même pendant ce temps...
|
||||
#define SYSTEME_ATTENTE_DEMARRAGE_COMPTEUR_BOUCLE_PRINCIPALE 5 // en secondes. Défini l'attente avant prise en compte des mesures de nb de boucles principales
|
||||
#define SYSTEME_ATTENTE_BOUCLE_PRINCIPALE_TEMPO 1000 // en nanosecondes théoriquement... Cf ci-dessous
|
||||
// Mesures effectuées le 28/04/2018, le 02/09/2020 et le 26/03/2021 sur CM3+ pour ShipHeart :
|
||||
// Valeur Boucles/secondes Load average @1min (première valeur de HTOP)
|
||||
// 0 65 000 3.2 - 3.8 (sur 4.0 max !) (==> mise en commentaires du 'delai_nano_sec')
|
||||
// 1 10 000 - 11000 3.1 - 3.8
|
||||
// 2 9 500 - 11 000 2.3 - 2.6
|
||||
// 5 9 500 - 10 500 2.3 - 2.6
|
||||
// 10 => environ 11 000 boucles/sec. Charge CPU = 40%
|
||||
// 100 => environ 11 000 boucles/sec. Charge CPU = 40%
|
||||
// 1 000 => environ 10 500 boucles/sec. Charge CPU = 39%
|
||||
// 10 000 => environ 9 500 boucles/sec. Charge CPU = 35-38%. Load Average (@1min) = 0.25-0.30 avec pointes à 0.55
|
||||
// 100 000 => environ 4 300 boucles/sec. Charge CPU = 29%
|
||||
// 1 000 000 => environ 800 boucles/sec. Charge CPU = 6% ==> déclenche des erreurs de bus SPI (plusieurs dizaines par jour... d'où ces mesures)
|
||||
// 10 000 000 => environ 90 boucles/sec. Charge CPU = 1%
|
||||
|
||||
// Nouvelles mesures sur CM4 (4Go) le 23/12/2023 :
|
||||
// 1 000 => environ 12 000 boucles/sec (très stable !). Charge CPU = 30-35%. Load average 0.33-0.35 avec des pointes à 0.50
|
||||
// 10 000 => entre 7000 et 11000 (avg = 9500) boucles/sec (assez instable). Charge CPU = 28-35%. Load average 0.60-0.80 avec des pointes à 0.90
|
||||
|
||||
|
||||
|
||||
#define MISE_A_JOUR_TEMPO_INIT 20 // En x 100ms Dans tous les cas, l'init du séquenceur de Mise_à_jour ne se fera que lorsque l'analyse de l'annuaire aura été fait. Cette tempo n'est donc pas critique...
|
||||
#define MISE_A_JOUR_TIME_OUT_HTTP_GET 600 // En x 100ms Time-out de l'échange HTTP GET
|
||||
|
||||
#define CHARGEMENT_CODE_TEMPO_INIT 2 // En x 100ms // Il n'y a aucune raison d'attendre...
|
||||
#define CHARGEMENT_CODE_TEMPO_ATTENTE_EFFACEMENT_FLASH 50 // En x 100ms // Durée théorique env. 1.9s voire 3.4s pour les L151 @12MHz
|
||||
#define CHARGEMENT_CODE_TIME_OUT_ATTENTE_ECRITURE_BLOC 10 // En x 100ms
|
||||
#define CHARGEMENT_CODE_TEMPO_ATTENTE_INTER_BLOCS_COMPAGNON 1 // En x 100ms
|
||||
#define CHARGEMENT_CODE_TEMPO_ATTENTE_INTER_BLOCS_K_BUS 3 // En x 100ms // Tests Ok fait avec 200ms sur ShipBS (lent...) mais 2 noeuds sur K-Bus. Par sécurité, la tempo est laissée à 300ms...
|
||||
#define CHARGEMENT_CODE_TEMPO_ATTENTE_FIN_ACTIVATION 50 // En x 100ms // Durée entre l'envoi des commandes d'activation après chargement et demande de réinitialisation
|
||||
|
||||
|
||||
// Erreurs système :
|
||||
#define ERREUR_SYSTEME_AUCUNE 0
|
||||
#define ERREUR_SYSTEME_CONFIG -1
|
||||
#define ERREUR_SYSTEME_RESEAU -2
|
||||
|
||||
|
||||
|
||||
|
||||
// Types de cartes :
|
||||
#define TYPE_CARTE_INCONNU -1
|
||||
#define TYPE_CARTE_SHIPBASE 0
|
||||
#define TYPE_CARTE_SP812 1
|
||||
#define TYPE_CARTE_SBS 2
|
||||
#define TYPE_CARTE_SP4AC 3
|
||||
#define TYPE_CARTE_SP8DC 4
|
||||
|
||||
#define GENERATION_SHIPBASE_INCONNUE 0
|
||||
#define GENERATION_SHIPBASE_V1 1 // Entre 2020 et 2022, équipés de CM3+
|
||||
#define GENERATION_SHIPBASE_V2 2 // A partir de 2023, équipés de CM4. A noter que la 'hardware_version' reçue du Compagnon doit correspondre à cette évolution.
|
||||
#define GENERATION_SHIPBASE_V3 3 // Les SHipBase V2, équipés de CM5 (début = 08/2026)
|
||||
|
||||
// Adresses IP :
|
||||
#define ADRESSE_IP_INCONNUE "inconnue" // Valeur utilisée par défaut, au démarrage de l'application. Attention, la taille doit être inférieure à TAILLE_ADRESSE_IP - 1.
|
||||
|
||||
|
||||
// Demandes Système :
|
||||
#define SYSTEME_SIGNAL_AUCUN 0 // Valeur par défaut. Les valeurs de signaux ont toute une valeur > 0
|
||||
|
||||
// Valeurs de Mode_validation_maj :
|
||||
#define MODE_VALIDATION_MAJ_AUCUNE 0
|
||||
#define MODE_VALIDATION_MAJ_MANUELLE 1
|
||||
#define MODE_VALIDATION_MAJ_AUTOMATIQUE 2
|
||||
|
||||
// Valeurs de Mode_maj_firmwares :
|
||||
#define MODE_MAJ_FIRMWARES_NORMAL 0
|
||||
#define MODE_MAJ_FIRMWARES_SI_DIFFERENTS 1
|
||||
#define MODE_MAJ_FIRMWARES_TOUJOURS 2
|
||||
|
||||
// Valeurs de Demande_maj_soft :
|
||||
// #define DEMANDE_MAJ_SOFT_AUCUNE 0 // Valeur de repos
|
||||
// #define DEMANDE_MAJ_SOFT_VALIDATION 1 // Vlaidation du fichier dans A_VALIDER qui sera copié dans A_CHARGER
|
||||
// #define DEMANDE_MAJ_SOFT_CHARGEMENT 2 // Idem VALIDATION + demande de reset pour prise en compte immédiate
|
||||
// #define DEMANDE_MAJ_SOFT_ANNULATION -1 // Suppression du fichier présent dans A_VALIDER ou dans A_CHARGER (les 2 sont vidés)
|
||||
|
||||
// Etat de veille
|
||||
#define SYSTEME_VEILLE_AUCUNE 0
|
||||
#define SYSTEME_VEILLE_LEGERE 1
|
||||
#define SYSTEME_VEILLE_PROFONDE 2
|
||||
|
||||
|
||||
// Modes de chargement de code :
|
||||
#define CHARGEMENT_CODE_MODE_EFFACEMENT_FLASH 0
|
||||
#define CHARGEMENT_CODE_MODE_CHARGEMENT_BLOC 1
|
||||
#define CHARGEMENT_CODE_MODE_CHECK_CRC 2
|
||||
#define CHARGEMENT_CODE_MODE_VALIDATION_VERSION 3
|
||||
|
||||
|
||||
// Etat séquenceur Système :
|
||||
#define ETAT_SEQUENCEUR_SYSTEME_INIT 0
|
||||
#define ETAT_SEQUENCEUR_SYSTEME_ATTENTE_ANNUAIRE_K_BUS 1
|
||||
#define ETAT_SEQUENCEUR_SYSTEME_LECTURE_ID_CARTES 2
|
||||
#define ETAT_SEQUENCEUR_SYSTEME_ATTENTE_ANNUAIRE_ONE_WIRE 3
|
||||
#define ETAT_SEQUENCEUR_SYSTEME_CHARGEMENT_CONFIG_CARTES 4
|
||||
#define ETAT_SEQUENCEUR_SYSTEME_ATTENTE_CONFIG_CARTES 5
|
||||
#define ETAT_SEQUENCEUR_SYSTEME_REPOS 10
|
||||
#define ETAT_SEQUENCEUR_SYSTEME_DEMARRAGE_IMPOSSIBLE 20
|
||||
|
||||
|
||||
// Etat séquenceur Chargement de Code :
|
||||
#define ETAT_SEQUENCEUR_CHARGEMENT_CODE_INIT 0
|
||||
#define ETAT_SEQUENCEUR_CHARGEMENT_CODE_REPOS 1
|
||||
#define ETAT_SEQUENCEUR_CHARGEMENT_CODE_LANCEMENT 2
|
||||
#define ETAT_SEQUENCEUR_CHARGEMENT_CODE_LANCEMENT_CARTE 3
|
||||
#define ETAT_SEQUENCEUR_CHARGEMENT_CODE_EFFACEMENT_FLASH 4
|
||||
#define ETAT_SEQUENCEUR_CHARGEMENT_CODE_CHARGEMENT_BLOC 5
|
||||
#define ETAT_SEQUENCEUR_CHARGEMENT_CODE_ATTENTE_INTER_BLOCS 6
|
||||
#define ETAT_SEQUENCEUR_CHARGEMENT_CODE_VERIFICATION_CRC 7
|
||||
#define ETAT_SEQUENCEUR_CHARGEMENT_CODE_FIN_CARTE 8
|
||||
#define ETAT_SEQUENCEUR_CHARGEMENT_CODE_FIN_CHARGEMENT 9
|
||||
#define ETAT_SEQUENCEUR_CHARGEMENT_CODE_FIN_ACTIVATION 10
|
||||
#define ETAT_SEQUENCEUR_CHARGEMENT_CODE_ERREUR 11
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user