Files
shipheart-appli/sources/modem.h
T

146 lines
12 KiB
C

/**********************************************************************************************************************************************************************************
Fichier MODEM.H
Contient tous les define liés au Modem
**********************************************************************************************************************************************************************************/
// Maximums :
#define MODEM_MAX_REPETITIONS_TEMPO_ATTENTE_CHANGEMENT_ETAT 30 // Cette valeur est à relier à la TEMPO_ATTENTE_ACTIVATION.
// Le produit des deux donne la durée maximale avant de déclarer que le changement d'état attendu du modem a échoué.
// Après essais,la durée à la coupure d'alim est de 1.2s et à l'activation de 6.1s. Donc un maxi de l'ordre de 12-15s parait très bien.
#define MODEM_MAX_REPETITIONS_TEMPO_CHECK_INIT_LIAISON 30 // Cette valeur est à relier à la MODEM_TEMPO_CHECK_INIT_LIAISON.
#define MODEM_MAX_REPETITIONS_PAQUET_UPLOAD 3 // Permet de limiter le nombre de répétitions consécutives d'un même bloc lors d'un Upload.
#define MODEM_MAX_TAILLE_TRAME_FTPLIST 1024 // Cette valeur est liée au modem mais aucune doc (ni commande) ne donne la valeur exacte...
#define MODEM_MAX_NOMBRE_PAQUETS_LIST 5 // On considère qu'au-delà, c'est qu'il y a un souci...
#define MODEM_MAX_TAILLE_TRAME_FTPGET 1024 // Cette valeur est liée au modem mais aucune doc (ni commande) ne donne la valeur exacte...
#define MODEM_MAX_TAILLE_MESSAGE_SMS 170 // A priori, 140 suffit mlais il y a un flou sur les 160
#define MODEM_MAX_TAILLE_NUMERO_EMETTEUR_SMS 18 // De la forme '+33 6 xx xx xx xx'
// Tempos :
#define MODEM_PERIODE_SURVEILLANCE_MODEM 10 // En x 100ms
#define MODEM_TEMPO_APRES_RESET_SOFT 10 // En x 100ms
#define MODEM_TEMPO_ATTENTE_CHANGEMENT_ETAT 5 // En x 100ms Cette tempo est à relier au MAX_REPETITIONS_TEMPO_ATTENTE_ACTIVATION ci-dessus.
#define MODEM_TEMPO_ATTENTE_RESET 120 // En x 100ms Il ne semble pas y avoir de timing précis sur ce sujet mais en essayant avec différentes valeurs, il faut attendre au moins 6-8 secondes pour qu les premières commandes ATE passent correctement...
#define MODEM_TEMPO_CHECK_INIT_LIAISON 10 // En x 100ms Cette tempo n'est pas critique (mais de préférence supérieure aux répétitions x time-out = 900ms) car on boucle plusieurs fois tant qu'on n'a pas reçu un OK suite à la configuration de l'echo. Et si au bout du nombre de rtépétition on n'a pas réussi à établir la liaison, on réinitialise le modem.
#define MODEM_TEMPO_IMPULSION_CHANGEMENT_ETAT 15 // En x 100ms (Tmin = 1s selon datasheet du SIM7070G, page 26)
#define MODEM_TEMPO_IMPULSION_RESET 150 // En x 100ms (Tmin = 12s selon datasheet du SIM7070G, page 23)
#define MODEM_TEMPO_INIT 80 // En x 100ms Durée volontairement longue pour s'assurer qu'aucun changement d'état du modem n'est plus en cours au moment du démarrage effectif (évite de se retrouver à contre-temps et avoir besoin de plusieurs boucles pour se repositionner)
#define MODEM_TIME_OUT_ATTENTE_FIN_INIT 1200 // En x 100ms La valeur de retour de '+APP PDP: 0,ACTIVE' est très variable. Souvent de 600-800ms mais parfois de 20 voire 30s. Dans tous les cas, il est important d'attendre patiemment sous peine d'empiler les erreurs...
// Attention : les valeurs de MODEM_GNSS_PERIODE_ACQUISITION, MODEM_UPLOAD_PERIODE_CHECK
// et MODEM_DOWNLOAD_PERIODE_CHECK sont bien exécutées en secondes. MAIS le temps de traitement
// de chaque tâche (GNSS, Upload et Download) fige les 3 compteurs pendant son exécution. Cela
// implique que sur une période longue, le moment de déclenchement effectif ne peut pas être
// pré-estimé. Ce n'est a priori pas gênant (au contraire car cela mixe les timings de connexion),
// mais cela peut surprendre qu'en demandant un Upload toutes les heures à partir de 12h00, on n'ai
// pas le prochain à 13h00 et ainsi de suite. Ce sera probablement 13h01 ou 13h02 puis... 18h07 par
// exemple.
#define MODEM_GNSS_PERIODE_ACQUISITION_SANS_4G_LTE 120 // En secondes Attention : la valeur réelle est obtenue par : [(MODEM_GNSS_PERIODE_ACQUISITION * 10) / MODEM_PERIODE_SURVEILLANCE_MODEM] x [MODEM_PERIODE_SURVEILLANCE_MODEM x 100ms]
#define MODEM_GNSS_PERIODE_ACQUISITION_AVEC_4G_LTE 300 // En secondes Attention : la valeur réelle est obtenue par : [(MODEM_GNSS_PERIODE_ACQUISITION * 10) / MODEM_PERIODE_SURVEILLANCE_MODEM] x [MODEM_PERIODE_SURVEILLANCE_MODEM x 100ms]
#define MODEM_GNSS_TEMPO_ATTENTE_COUPURE_4G_LTE 20 // En x 100ms Tempo entre la coupure de la 4G-LTE et l'alimentation du GNSS.
#define MODEM_GNSS_TEMPO_ATTENTE_ACTIVATION 50 // En x 100ms Tempo entre l'activation du GNSS et la première commande de lecture de localisation. Si la durée n'est pas suffisante, ce n'est pas grave (on commence alors à interroger le modem mais s'il n'a pas de data, on boucle)
#define MODEM_GNSS_TIME_OUT_ATTENTE_LECTURE 20 // En x 100ms Time-out entre l'envoi de la commande de lecture de la localisation et la réponse (en général, très rapide, quitte à recevoir une trame sans data si elles ne sont pas dispos)
#define MODEM_GNSS_TEMPO_ENTRE_LECTURES 10 // En x 100ms
#define MODEM_HTTP_GET_PERIODE_CHECK 3602 // En secondes Attention : la valeur réelle est obtenue par : [(MODEM_HTTP_GET_PERIODE_CHECK * 10) / MODEM_PERIODE_SURVEILLANCE_MODEM] x [MODEM_PERIODE_SURVEILLANCE_MODEM x 100ms]
#define MODEM_HTTP_GET_REPETITIONS_SHCONN 1 // Il est inutile de répéter plus d'une fois car le délai est très long...
#define MODEM_HTTP_GET_TIME_OUT_SHCONN 200 // En x 100ms Time-out de réponse à une commande de connexion SHCONN.
#define MODEM_HTTP_GET_REPETITIONS_SHREQ 1 // Il est inutile de répéter plus d'une fois car le délai est très long...
#define MODEM_HTTP_GET_TIME_OUT_SHREQ 600 // En x 100ms Time-out de réponse à une commande GET.
#define MODEM_HTTP_GET_REPETITIONS_SHREAD 1 // Il est inutile de répéter plus d'une fois car le délai est très long...
#define MODEM_HTTP_GET_TIME_OUT_SHREAD 600 // En x 100ms Time-out de réponse à une commande GET.
#define MODEM_UPLOAD_PERIODE_CHECK 600 // En secondes Attention : la valeur réelle est obtenue par : [(MODEM_UPLOAD_PERIODE_CHECK * 10) / MODEM_PERIODE_SURVEILLANCE_MODEM] x [MODEM_PERIODE_SURVEILLANCE_MODEM x 100ms]
#define MODEM_UPLOAD_TEMPO_DEMANDE_ENVOI_DATA 0 // En x 100ms Cette tempo permet d'attendre entre plusieurs phases de FTPPUT. Si ce délai est trop court, on génère des erreurs (qui se récupèrent mais qui, finalement, font échouer le transfert du fichier)
#define MODEM_UPLOAD_TEMPO_ATTENTE_ACCEPTATION_DONNEES 20 // En x 100ms Tempo entre la commande de PUT avec la taille du paquet et l'envoi du paquet (mesuré à 100ms environ)
#define MODEM_UPLOAD_TIME_OUT_ENVOI_DONNEES 50 // En x 100ms Tempo entre l'envoi du paquet de données et la recherche d'un autre paquet (mesuré à 125ms environ pour 1360 octets ; l'essentiel de ce temps étant l'émission des données => entre le dernier octet de données et l'Ack du modem, il y a à peine 5-6ms)
#define MODEM_UPLOAD_TEMPO_ATTENTE_FIN_TRANSFERT 500 // En x 100ms Tempo entre l'envoi de la demande de fermeture de port FTP (FTP=2,0) et la réception que le port est bien fermé
#define MODEM_UPLOAD_TEMPO_ATTENTE_OUVERTURE_SESSION 800 // En x 100ms Tempo entre l'envoi de la demande de connexion FTP et l'envoi des données (le time-out du modem est de 75s mais mesuré 1.6s....)
#define MODEM_UPLOAD_TIME_OUT_ATTENTE_GETSIZE 500 // En x 100ms Tempo d'attente après l'envoi de la commande de la commande FTPSIZE (mesurée à 1.2-1.3s). La tempo est remise à 0 dès réception de la réponse.
#define MODEM_DOWNLOAD_PERIODE_CHECK 1200 // En secondes Attention : la valeur réelle est obtenue par : [(MODEM_DOWNLOAD_PERIODE_CHECK * 10) / MODEM_PERIODE_SURVEILLANCE_MODEM] x [MODEM_PERIODE_SURVEILLANCE_MODEM x 100ms]
#define MODEM_DOWNLOAD_TEMPO_DEMANDE_DATA 2 // En x 100ms Cette tempo permet d'attendre un peu entre la réception de la réponse à 'FTPGET=1' et la demande proprement-dite 'FTPGET=2,NB'. Si ce délai est trop court, on génère des erreurs (qui se récupèrent mais qui, finalement, font perdre du temps)
#define MODEM_DOWNLOAD_TEMPO_DEMANDE_LISTE 2 // En x 100ms Cette tempo permet d'attendre un peu entre la réception de la réponse à 'FTPLIST=1' et la demande proprement-dite 'FTPLIST=2,NB'. Si ce délai est trop court, on génère des erreurs (qui se récupèrent mais qui, finalement, font perdre du temps)
#define MODEM_DOWNLOAD_TIME_OUT_ATTENTE_DISPO_DATA 800 // En x 100ms Tempo entre l'envoi de la demande de connexion FTP et l'envoi des données (le time-out du modem est de 75s....)
#define MODEM_DOWNLOAD_TIME_OUT_ATTENTE_INFO 500 // En x 100ms
#define MODEM_DOWNLOAD_TIME_OUT_ATTENTE_LISTE 500 // En x 100ms
#define MODEM_DOWNLOAD_TIME_OUT_ATTENTE_RECEPTION_DATA 500 // En x 100ms
// Fonctionnement GNSS :
#define MODEM_GNSS_MAX_NOMBRE_CYCLES 180 // Nombre de cycles d'acquisition avant d'abandonner. Il vaut mieux que cette valeur x MODEM_GNSS_TEMPO_ENTRE_LECTURES soit < MODEM_GNSS_PERIODE_ACQUISITION
#define MODEM_GNSS_NOMBRE_CYCLES_VALIDES 20 // Nombre de cycles valides (pas forcément consécutifs) sur une même période avant de considérer la période comme terminée. Cette valeur est importante pour avoir une précision suffisante...
// Etat HTTP :
#define MODEM_HTTP_ETAT_REPOS 0
#define MODEM_HTTP_ETAT_DEMANDE 1
#define MODEM_HTTP_ETAT_EN_COURS 2
#define MODEM_HTTP_ETAT_TERMINE 3
// Demande de connexion par l'utilisateur :
#define MODEM_DEMANDE_UTILISATEUR_AUCUNE 0
#define MODEM_DEMANDE_UTILISATEUR_DOWNLOAD 1
#define MODEM_DEMANDE_UTILISATEUR_UPLOAD 2
#define MODEM_DEMANDE_UTILISATEUR_DOWNLOAD_UPLOAD 3
#define MODEM_DEMANDE_UTILISATEUR_TEMPO_MINI 2 // En seconde. Indique la valeur à laquelle sera ramené le compteur de download et/ou upload lors de la demande (NB : si la valeur courante est inférieure, elle ne sera pas modifiée)
// Demandes FTP :
// #define MODEM_DEMANDE_FTP_AUCUNE 0
// #define MODEM_DEMANDE_FTP_GET 1
// #define MODEM_DEMANDE_FTP_PUT 2
// Etats du séquenceur Modem :
#define ETAT_SEQUENCEUR_MODEM_INIT 0
#define ETAT_SEQUENCEUR_MODEM_CHANGEMENT_ETAT_INIT 1
#define ETAT_SEQUENCEUR_MODEM_CHANGEMENT_ETAT_IMPULSION 2
#define ETAT_SEQUENCEUR_MODEM_CHANGEMENT_ETAT_ATTENTE_STATUS 3
#define ETAT_SEQUENCEUR_MODEM_INIT_LIAISON 4
#define ETAT_SEQUENCEUR_MODEM_COMMANDES_INIT 5
#define ETAT_SEQUENCEUR_MODEM_ATTENTE_FIN_INIT 6
#define ETAT_SEQUENCEUR_MODEM_REPOS 7
#define ETAT_SEQUENCEUR_MODEM_GNSS_ACTIVATION 10
#define ETAT_SEQUENCEUR_MODEM_GNSS_ATTENTE_COUPURE_4G_LTE 11
#define ETAT_SEQUENCEUR_MODEM_GNSS_ATTENTE_LECTURE 12
#define ETAT_SEQUENCEUR_MODEM_GNSS_LECTURE 13
#define ETAT_SEQUENCEUR_MODEM_HTTP_GET_LANCEMENT 20
#define ETAT_SEQUENCEUR_MODEM_HTTP_GET_ATTENTE_CONNEXION 21
#define ETAT_SEQUENCEUR_MODEM_HTTP_GET_ATTENTE_RETOUR_REQUETE 22
#define ETAT_SEQUENCEUR_MODEM_HTTP_GET_ATTENTE_RETOUR_DATA 23
#define ETAT_SEQUENCEUR_MODEM_HTTP_GET_CLOTURE 24
#define ETAT_SEQUENCEUR_MODEM_FTP_GET_LANCEMENT 30
#define ETAT_SEQUENCEUR_MODEM_FTP_GET_ATTENTE_INFORMATION 31
#define ETAT_SEQUENCEUR_MODEM_FTP_GET_ATTENTE_LISTE 32
#define ETAT_SEQUENCEUR_MODEM_FTP_GET_RECHERCHE_FICHIER 33
#define ETAT_SEQUENCEUR_MODEM_FTP_GET_DEBUT_FICHIER 34
#define ETAT_SEQUENCEUR_MODEM_FTP_GET_ATTENTE_DISPO_DATA 35
#define ETAT_SEQUENCEUR_MODEM_FTP_GET_ATTENTE_RECEPTION_DATA 36
#define ETAT_SEQUENCEUR_MODEM_FTP_PUT_LANCEMENT 40
#define ETAT_SEQUENCEUR_MODEM_FTP_PUT_ATTENTE_OUVERTURE_SESSION 41
#define ETAT_SEQUENCEUR_MODEM_FTP_PUT_ATTENTE_ACCEPTATION_DONNEES 42
#define ETAT_SEQUENCEUR_MODEM_FTP_PUT_ATTENTE_FIN_TRANSFERT 43
#define ETAT_SEQUENCEUR_MODEM_FTP_PUT_LANCEMENT_CHECK 44
#define ETAT_SEQUENCEUR_MODEM_FTP_PUT_ATTENTE_GETSIZE 45
#define ETAT_SEQUENCEUR_MODEM_FTP_PUT_ATTENTE_FERMETURE_SESSION 46
#define ETAT_SEQUENCEUR_MODEM_DEBUT_IMPULSION_RESET 90
#define ETAT_SEQUENCEUR_MODEM_FIN_IMPULSION_RESET 91