My Project
Chargement...
Recherche...
Aucune correspondance
journal.c
Aller à la documentation de ce fichier.
1
17#include <manux/config.h>
18#include <manux/memoire.h> // NULL
19#include <manux/journal.h>
20#include <manux/string.h> // strlen
21
27#ifdef MANUX_FICHIER
28Fichier _consoleFichier; // Pour éviter un kmalloc pour le moment
29Fichier * consoleFichier = NULL;
30#else
32#endif
33
38static booleen journalInitialise = FALSE;
39
40//static ExclusionMutuelle emj;
41
42#ifdef MANUX_FICHIER
48Fichier * fichierJournal = NULL;
49
55[[maybe_unused]]
56static
57void journalInitialiserInoeud(INoeud * iNoeudConsole)
58{
59 // initialiserExclusionMutuelle(&emj);
60 // entrerExclusionMutuelle(&emj);
61
62 consoleFichier = &_consoleFichier;
63 fichierOuvrir(iNoeudConsole, consoleFichier, O_WRONLY, 0);
64
65 // Affichons un petit message
66 consoleNoyauAfficher("Journal+f de ManuX-32 \n");
67
68 // A partir de maintenant, le journal est opérationnel
69 journalInitialise = TRUE;
70
71 // sortirExclusionMutuelle(&emj);
72}
73
75{
76 fichierJournal = pc;
77}
78
79#endif
80
85{
86 // initialiserExclusionMutuelle(&emj);
87 // entrerExclusionMutuelle(&emj);
88
89 // consoleAffecterCouleurTexte(consoleJournal, COUL_TXT_BLANC);
90
91 // Affichons un petit message
92 consoleNoyauAfficher("Journal de ManuX-32\n");
93
94 // A partir de maintenant, le journal est opérationnel
95 journalInitialise = TRUE;
96
97 // sortirExclusionMutuelle(&emj);
98}
99
103static void journaliserNiveau(booleen console, booleen fichier,
104 uint8_t niveau,
105 char * message)
106{
107 // entrerExclusionMutuelle(&emj);
108
109 // Sur la console
110 if ((console) && (niveau <= MANUX_JOURNAL_NIVEAU_DEFAUT)) {
111#ifdef MANUX_FICHIER
112 // Si le fichier a été ouvert, on y écrit ...
113 if (consoleFichier) {
114 fichierEcrire(consoleFichier, message, strlen(message));
115 // ... mais s'il n'est pas encore ouvert (pas initialisé), on
116 // passe directement par la console
117 } else {
118 consoleNoyauAfficher(message);
119 }
120#else
121 consoleNoyauAfficher(message);
122#endif
123 }
124
125#ifdef MANUX_FICHIER
126 // Sur le fichier s'il y en a un
127 if (fichierJournal) {
128 if ((fichier) && (niveau <= MANUX_JOURNAL_NIVEAU_DEFAUT)) {
129 fichierEcrire(fichierJournal, message, strlen(message));
130 }
131 }
132#endif
133
134 // sortirExclusionMutuelle(&emj);
135}
136
140static void aiguillerMessage(char ** message,
141 booleen * cons, booleen * fic, uint8_t * niv)
142{
143 int longueurPrefixe = 0;
144 *cons = FALSE;
145 *fic = FALSE;
146 *niv = 0;
147
148 switch ((*message)[0]) {
149 case '[' :
150 *cons = TRUE;
151 break ;
152 case '{' :
153 *cons = TRUE;
154 [[fallthrough]];
155 case '(' :
156 *fic = TRUE;
157 break ;
158 default :
159 *cons = TRUE; // WARNING defaut
160 *fic = TRUE;
161 return;
162 };
163
164 longueurPrefixe ++;
165 if (((*message)[1] <= '9') && ((*message)[1] >= '0')) {
166 *niv = (*message)[1] - '0';
167 longueurPrefixe ++;
168
169 if (((*message)[2] == ')') || ((*message)[2] == '}') || ((*message)[2] == ']')) {
170 longueurPrefixe ++;
171 }
172 }
173 (*message) += longueurPrefixe;
174}
175
179void journaliser(char * message)
180{
181 booleen console; //< affiche-t-on le message sur la console ?
182 booleen fichier; //< envoie-t-on le message sur un fichier de log ?
183 uint8_t niveau; //< quel est le niveau de criticité ?
184
185 // On détermine où il doit être envoyé pour affichage
186 aiguillerMessage(&message, &console, &fichier, &niveau);
187
188 // On l'envoie
189 journaliserNiveau(console, fichier, niveau,
190 message);
191}
192
198{
199 return journalInitialise;
200}
201
202
#define O_WRONLY
Definition fichier.h:28
int fichierOuvrir(INoeud *iNoeud, Fichier *f, uint16_t fanions, uint16_t mode)
: Ouverture d'un fichier.
Definition fichier.c:145
int fichierEcrire(Fichier *f, void *buffer, int nbOctets)
Definition fichier.c:36
#define MANUX_JOURNAL_NIVEAU_DEFAUT
Definition journal.h:18
void consoleNoyauAfficher(char *msg)
Affichage d'un message sur la console noyau.
Definition console.c:437
Définition des outils de journalisation des messages du noyau.
void journalAffecterFichier(Fichier *pc)
Affectation d'un fichier sur lequel seront envoyés les messages journalisés.
#define NULL
Definition stddef.h:10
int strlen(const char *s)
Definition string.c:46
int booleen
Definition types.h:32
#define TRUE
Definition types.h:36
#define FALSE
Definition types.h:40
unsigned char uint8_t
Definition types.h:12
booleen journalOperationnel(void)
Definition journal.c:197
Console * consoleJournal
Definition journal.c:31
void journalInitialiser(void)
Initialisation du journal sans interface fichier.
Definition journal.c:84
void journaliser(char *message)
Journalisation d'un message.
Definition journal.c:179
INoeud iNoeudConsole
Structure d'une console.
Definition console.h:37
: Qu'est-ce qu'un fichier ouvert du point de vue du noyau ?
Definition fichier.h:46
: Un INoeud représente un fichier, d'un point de vue statique Il s'agit donc de la description d'un f...
Definition inoeud.h:27