Module GSM
Ce document détaille l’implémentation du module GSM dans le système d’exploitation PaxOS.
Le module gère la communication avec un modem GSM/GPRS, permettant des fonctionnalités comme l’envoi/réception de SMS, la gestion des appels (émission/réception) et des MMS.
1. contacts.cpp
/ contacts.hpp
Ce module gère les informations de contact.
Les contacts sont stockés dans un fichier JSON (/apps/contacts/list.json
) et chargés en mémoire pour un accès rapide.
Structures de données
Contacts::contact
: Représente un contact unique avec les champsname
(std::string) etphone
(std::string).
Fonctions
Contacts::load()
: Charge les contacts depuis le fichierlist.json
dans le vecteurcontactList
. Gère les erreurs d’analyse JSON.Contacts::save()
: Sauvegarde lacontactList
dans le fichierlist.json
au format JSON.Contacts::listContacts()
: Retourne une copie de lacontactList
.Contacts::addContact(contact c)
: Ajoute un nouveau contact à lacontactList
.Contacts::deleteContact(std::string name)
: Supprime le contact avec le nom donné de lacontactList
.Contacts::editContact(std::string name, contact c)
: Modifie le contact correspondant au nom donné en mettant à jour ses informations avec l’objetcontact
fourni.Contacts::getContact(std::string name)
: Retourne l’objetcontact
associé au nom donné. Retourne un contact vide s’il n’est pas trouvé.Contacts::getByNumber(std::string number)
: Retourne l’objetcontact
associé au numéro donné. Retourne un contact vide s’il n’est pas trouvé.
2. conversation.cpp
/ conversation.hpp
Ce module gère les données de conversation, y compris le chargement et la sauvegarde des messages pour chaque conversation.
Structures de données
Conversations::Message
: Représente un message unique avec les champsmessage
(std::string),who
(bool indiquant l’expéditeur – false pour soi, true pour l’autre) etdate
(std::string).Conversations::Conversation
: Représente une conversation avec unnumber
spécifique (std::string) et un vecteur demessages
(std::vector<Message>
).
Fonctions
Conversations::loadConversation(const storage::Path &filePath, Conversation &conv)
: Charge une conversation depuis le fichier JSON spécifié. Gère les erreurs de fichier et d’analyse JSON.Conversations::saveConversation(const storage::Path &filePath, const Conversation &conv)
: Sauvegarde une conversation dans le fichier JSON spécifié. Limite le nombre de messages sauvegardés àMAX_MESSAGES
(40), en gardant les plus récents. Crée les répertoires nécessaires s’ils n’existent pas.
3. gsm.cpp
/ gsm.hpp
Ce module fournit les fonctionnalités GSM principales, en interagissant directement avec le modem GSM.
Il gère les appels, SMS, MMS, l’état du réseau et le niveau de batterie.
Constantes
BAUDRATE
: Débit par défaut pour la communication série (921600).MESSAGES_LOCATION
: Répertoire de stockage des données de messages (apps/messages/data
).MESSAGES_IMAGES_LOCATION
: Répertoire de stockage des images MMS (apps/messages/images
).MESSAGES_NOTIF_LOCATION
: Fichier stockant les notifications de messages non lus (apps/messages/unread.txt
).MAX_MESSAGES
: Nombre maximum de messages stockés par conversation (40).
Structures de données
GSM::Request
: Représente une requête à exécuter par le module GSM, avec unefunction
(std::function<void(void)>
) et unepriority
(enum).GSM::Key
: Représente une clé à surveiller dans les réponses du modem GSM, avec unkey
(std::string) et unefunction
(std::function<void()>
) à exécuter quand la clé est trouvée.GSM::State
: Représente l’état actuel du module GSM (état des appels, échec d’appel, numéro appelant).GSM::Message
: Représente un message SMS, avecnumber
,message
etdate
.GSM::ExternalEvents
: Espace de noms contenant les callbacks pour les appels entrants, nouveaux messages et erreurs de message.GSM::Stream::Chunk
: Utilisé pour le streaming de données MMS ; contient un pointeur de données et une taille. (ESP_PLATFORM uniquement)
Fonctions
GSM::init()
: Initialise le modem GSM, y compris la configuration du débit et la gestion de l’allumage du modem (spécifique ESP_PLATFORM).GSM::reInit()
: Réinitialise la communication série après des changements de fréquence d’horloge.GSM::download(uint64_t timeout = 50)
: Lit les données depuis le port série du modem GSM avec un délai.GSM::send(const std::string &message, const std::string &answerKey, uint64_t timeout = 200)
: Envoie une commande au modem GSM et attend une réponse spécifique. Retourne la réponse complète du modem.GSM::appendRequest(Request request)
: Ajoute un*