-
Notifications
You must be signed in to change notification settings - Fork 1
/
capture.c
103 lines (83 loc) · 2.94 KB
/
capture.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include "capture.h"
#include "test.h"
/** Instants capturés des flancs montants. */
unsigned int instantFlancMontant[] = {0, 0, 0, 0, 0};
/**
* Initialise la capture.
*/
void initialiseCapture() {
instantFlancMontant[0] = 0;
instantFlancMontant[1] = 0;
instantFlancMontant[2] = 0;
instantFlancMontant[3] = 0;
instantFlancMontant[4] = 0;
}
/**
* Signale la capture d'un flanc montant.
* @param canal Canal où a été capturé le flanc.
* @param instant Instant au quel a été capturé le flanc.
*/
void captureFlancMontant(unsigned char canal, unsigned int instant) {
instantFlancMontant[canal] = instant;
}
/**
* Signale la capture d'un flanc descendant.
* @param canal Canal où a été capturé le flanc.
* @param instant Instant au quel a été capturé le flanc.
* @return Une valeur entre 0 et 255 proportionnelle à la durée de
* la partie haute de la pulsation.
*/
unsigned char captureFlancDescendant(unsigned char canal, unsigned int instant) {
instant -= instantFlancMontant[canal];
if (instant > 4000) {
instant = 4000;
}
if (instant < 2000) {
instant = 2000;
}
instant -= 2000;
instant >>= 3;
return instant;
}
#ifdef TEST
void detecte_une_pulsation_sur_un_canal() {
initialiseCapture();
captureFlancMontant(0, 10000);
verifieEgalite("CP1C01", captureFlancDescendant(0, 11000), 0);
captureFlancMontant(0, 10000);
verifieEgalite("CP1C02", captureFlancDescendant(0, 12000), 0);
captureFlancMontant(0, 10000);
verifieEgalite("CP1C03", captureFlancDescendant(0, 12500), 62);
captureFlancMontant(0, 10000);
verifieEgalite("CP1C04", captureFlancDescendant(0, 13000), 125);
captureFlancMontant(0, 10000);
verifieEgalite("CP1C05", captureFlancDescendant(0, 13500), 187);
captureFlancMontant(0, 10000);
verifieEgalite("CP1C06", captureFlancDescendant(0, 14000), 250);
captureFlancMontant(0, 10000);
verifieEgalite("CP1C07", captureFlancDescendant(0, 15000), 250);
}
void detecte_des_pulsations_sur_deux_canaux() {
initialiseCapture();
captureFlancMontant(0, 10000);
captureFlancMontant(1, 11000);
captureFlancMontant(2, 12000);
captureFlancMontant(3, 13000);
captureFlancMontant(4, 14000);
verifieEgalite("CP2C00", captureFlancDescendant(0, 13000), 125);
verifieEgalite("CP2C01", captureFlancDescendant(1, 14000), 125);
verifieEgalite("CP2C02", captureFlancDescendant(2, 15000), 125);
verifieEgalite("CP2C03", captureFlancDescendant(3, 16000), 125);
verifieEgalite("CP2C04", captureFlancDescendant(4, 17000), 125);
}
void detecte_une_pulsation_avec_debordement() {
initialiseCapture();
captureFlancMontant(0, 65500);
verifieEgalite("CPDE00", captureFlancDescendant(0, 2964), 125);
}
void test_capture() {
detecte_une_pulsation_sur_un_canal();
detecte_des_pulsations_sur_deux_canaux();
detecte_une_pulsation_avec_debordement();
}
#endif