preparation de la lecture du fichier de conf
This commit is contained in:
parent
2f2bfa641a
commit
abdfc44cbe
@ -2,11 +2,19 @@
|
|||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
|
||||||
|
OBJS = lut1024f.o parseconf.o
|
||||||
|
|
||||||
lut1024f.o: lut1024f.c lut1024.h
|
lut1024f.o: lut1024f.c lut1024.h
|
||||||
gcc -Wall -c $<
|
gcc -Wall -c $<
|
||||||
|
|
||||||
t: t.c lut1024f.o lut1024.h
|
|
||||||
gcc -Wall $< lut1024f.o -o $@
|
parseconf.o: parseconf.c config.h
|
||||||
|
gcc -Wall -c $<
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
t: t.c ${OBJS} lut1024.h config.h
|
||||||
|
gcc -Wall $< ${OBJS} -o $@
|
||||||
|
|
||||||
foo.lut1024f: mklut.pl Makefile
|
foo.lut1024f: mklut.pl Makefile
|
||||||
./mklut.pl quux > $@
|
./mklut.pl quux > $@
|
||||||
|
21
core/config.h
Normal file
21
core/config.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* config.h
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define SZ_STRINGS 200
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
|
||||||
|
int valid;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} Configuration;
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int parse_config(char *fname, int flags);
|
||||||
|
int show_config(char *title);
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
10
core/dd2-monitor.conf
Normal file
10
core/dd2-monitor.conf
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
input_device s /def/ttyACM0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
61
core/parseconf.c
Normal file
61
core/parseconf.c
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* parseconf
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
extern int verbosity;
|
||||||
|
extern Configuration config;
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
int parse_config(char *fname, int flags)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
char line[SZ_STRINGS+1];
|
||||||
|
|
||||||
|
|
||||||
|
#if DEBUG_LEVEL
|
||||||
|
fprintf(stderr, ">>> %s ( '%s' $%x )\n", fname, flags);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
config.valid = 49;
|
||||||
|
|
||||||
|
if (NULL==(fp=fopen(fname, "r"))) {
|
||||||
|
perror(fname);
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (fgets(line, SZ_STRINGS, fp))
|
||||||
|
{
|
||||||
|
/* massage the end of line */
|
||||||
|
|
||||||
|
/* skip comments */
|
||||||
|
|
||||||
|
/* seek for keyword */
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
/* ---------------------------------------------------------------- */
|
||||||
|
int show_config(char *title)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (verbosity) {
|
||||||
|
printf("********** %s **********\n", title);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("valid %d\n", config.valid);
|
||||||
|
|
||||||
|
puts("");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/* ---------------------------------------------------------------- */
|
16
core/t.c
16
core/t.c
@ -7,20 +7,28 @@
|
|||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
|
|
||||||
#include "lut1024.h"
|
#include "lut1024.h"
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
int verbosity;
|
int verbosity;
|
||||||
|
|
||||||
|
Configuration config;
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------- */
|
/* ---------------------------------------------------------------- */
|
||||||
|
|
||||||
int main (int argc, char *argv[])
|
int main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int foo, opt;
|
int foo, opt;
|
||||||
|
char *conffile = "dd2-monitor.conf";
|
||||||
|
|
||||||
|
|
||||||
|
fprintf(stderr, "+\n+ DD2 MONITOR\n+\n");
|
||||||
|
|
||||||
/* set some default values */
|
/* set some default values */
|
||||||
verbosity = 0;
|
verbosity = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
while ((opt = getopt(argc, argv, "v")) != -1) {
|
while ((opt = getopt(argc, argv, "v")) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 'v': verbosity++; break;
|
case 'v': verbosity++; break;
|
||||||
@ -35,9 +43,13 @@ while ((opt = getopt(argc, argv, "v")) != -1) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
foo = parse_config(conffile, 1);
|
||||||
|
fprintf(stderr, "parse_config(%s) -> %d\n\n", conffile, foo);
|
||||||
|
show_config("foo");
|
||||||
|
|
||||||
foo = load_lut1024f("foo.lut1024f", NULL, 1);
|
foo = load_lut1024f("foo.lut1024f", NULL, 1);
|
||||||
|
|
||||||
fprintf(stderr, "chargement de la lut --> %d\n", foo);
|
fprintf(stderr, "chargement de la lut --> %d\n\n", foo);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
\usepackage[verbose]{layout}
|
\usepackage[verbose]{layout}
|
||||||
|
|
||||||
\makeindex
|
\makeindex
|
||||||
\setlength{\parskip}{0.25cm plus 0.25cm}
|
\setlength{\parskip}{0.20cm plus 0.20cm}
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
\title{DD2 Monitoring}
|
\title{DD2 Monitoring}
|
||||||
@ -76,6 +76,8 @@ choix, et nous allons en évaluer quelques uns :
|
|||||||
\texttt{gnocchi}\index{Gnocchi} (page \pageref{gnocchi})
|
\texttt{gnocchi}\index{Gnocchi} (page \pageref{gnocchi})
|
||||||
\texttt{sqlite}\index{sqlite} (page \pageref{sqlite})
|
\texttt{sqlite}\index{sqlite} (page \pageref{sqlite})
|
||||||
|
|
||||||
|
La représentation interne des valeurs reste à définir pour
|
||||||
|
la plupart d'entre elles.
|
||||||
|
|
||||||
\subsection{Affichage}
|
\subsection{Affichage}
|
||||||
|
|
||||||
@ -107,7 +109,8 @@ de bonne efficacité.
|
|||||||
|
|
||||||
Un premier exemple avec rrdb en page \pageref{rrdb}.
|
Un premier exemple avec rrdb en page \pageref{rrdb}.
|
||||||
Le second cause des premiers essais du LM35, capteur de
|
Le second cause des premiers essais du LM35, capteur de
|
||||||
température analogique.
|
température analogique branché sur un Arduino et relié
|
||||||
|
par un port série (page \pageref{serialcode}).
|
||||||
|
|
||||||
\subsection{Analyses}
|
\subsection{Analyses}
|
||||||
|
|
||||||
@ -121,8 +124,9 @@ de choses étranges, comme ça :
|
|||||||
d'une criante justesse scientifique ;)}
|
d'une criante justesse scientifique ;)}
|
||||||
|
|
||||||
Ce qui donne qunad même à réfléchir. À se demander quel savoir
|
Ce qui donne qunad même à réfléchir. À se demander quel savoir
|
||||||
allons-nous pouvir déduire de ces\footnote{non, c'est pas du bigdata.}
|
allons-nous pouvoir déduire de ces\footnote{non, c'est pas du bigdata.}
|
||||||
chiffres improbables.
|
chiffres improbables.
|
||||||
|
(Re-)Découvrir les lois de l'inertie thermique ?
|
||||||
|
|
||||||
|
|
||||||
\subsection{Archivage} \index{archivage} \label{archivage}
|
\subsection{Archivage} \index{archivage} \label{archivage}
|
||||||
@ -138,12 +142,22 @@ ou d'un
|
|||||||
\textit{epicfail\footnote{En fait, c'est comme ça que la science avance}}.
|
\textit{epicfail\footnote{En fait, c'est comme ça que la science avance}}.
|
||||||
|
|
||||||
Nous devons donc rencontrer quelqu'un qui maitrise cette partie
|
Nous devons donc rencontrer quelqu'un qui maitrise cette partie
|
||||||
de la mouvance détournementale de l'espionnage.
|
de la mouvance détournementale de l'espionnage. Yaya\index{Yaya} ?
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
|
|
||||||
|
\section{Configuration} \index{configuration} \label{configuration}
|
||||||
|
|
||||||
|
Pour adapter cet outil de surveillance aux variations du monde réel,
|
||||||
|
nous devons nous-même lui décrire ce monde. Une description qui se
|
||||||
|
fera avec des lignes de la forme '\texttt{input\_device s /dev/ttyACM0}'
|
||||||
|
qui représentent des tuples
|
||||||
|
\textit{clef-type-valeur}\footnote{Laissons les canards tranquilles.}
|
||||||
|
de.
|
||||||
|
|
||||||
|
La syntaxe n'est pas encore fixée, mais un fichier exemple est
|
||||||
|
disponible pour des explication plus récentes, donc plus en
|
||||||
|
rapport avec la réalité du code.
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
\section{RRDB} \label{rrdb}
|
\section{RRDB} \label{rrdb}
|
||||||
@ -239,6 +253,11 @@ trop fatiguante à compiler pour ce soir, ni même pour ce week-end.
|
|||||||
\texttt{pip install gnocchi[postgresql,ceph,keystone]}, finalement,
|
\texttt{pip install gnocchi[postgresql,ceph,keystone]}, finalement,
|
||||||
çe ne me donne pas trop envie. C'est du genre \textit{usinagaz}.
|
çe ne me donne pas trop envie. C'est du genre \textit{usinagaz}.
|
||||||
|
|
||||||
|
% -------------------------------------------------------------------
|
||||||
|
\section{Sqlite} \index{sqlite} \label{sqlite}
|
||||||
|
|
||||||
|
\subsection{À regarder de près}
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
|
|
||||||
\section{Serial coms} \index{serial} \label{serial}
|
\section{Serial coms} \index{serial} \label{serial}
|
||||||
@ -282,6 +301,10 @@ Nous allons donc transférer ces valeurs sous forme de ligne
|
|||||||
de texte commençant par un caractère clef (par exemple T pour
|
de texte commençant par un caractère clef (par exemple T pour
|
||||||
les températures) et se terminant par un \textit{newline}.
|
les températures) et se terminant par un \textit{newline}.
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Un peu de code} \label{serialcode}
|
||||||
|
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
|
|
||||||
\section{Détournements}
|
\section{Détournements}
|
||||||
@ -293,11 +316,8 @@ Les possibilités ne seront limitées que par votre manque d'imagination.
|
|||||||
Si vous voulez un petit exemple, imaginez des courbes de température
|
Si vous voulez un petit exemple, imaginez des courbes de température
|
||||||
qui pilotent un \texttt{uGen} de Chuck\index{chuck} ou des algues dont
|
qui pilotent un \texttt{uGen} de Chuck\index{chuck} ou des algues dont
|
||||||
la lumière envoie du \texttt{cv/gate} en temps réel.
|
la lumière envoie du \texttt{cv/gate} en temps réel.
|
||||||
Le tout en n'utilisant que des circuits\index{ampli op} analogiques,
|
|
||||||
et peut-être quelques transistors au germanium\index{germanium}.
|
|
||||||
Ça vous semble peut-être un peu mélangé, mais bon,
|
|
||||||
c'est facile de comprendre l'esprit. C'est plus délicat d'imaginer.
|
|
||||||
|
|
||||||
|
\subsection{Variante}
|
||||||
|
|
||||||
|
|
||||||
% -------------------------------------------------------------------
|
% -------------------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user