test_modem.c
2.2 KB
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
104
105
106
107
108
109
110
111
112
113
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <termios.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
/** Constantes **/
#define SERIALDEV "/dev/ttyUSB0"
#define BAUDRATE B9600
#define TAILLE_TAMPON 3
void Reponse(int ds)
{
register int i;
char d[TAILLE_TAMPON];
sync();
for(i=0;i<TAILLE_TAMPON;i++){
if(read(ds,d+i,1)!=1){ perror("Reponse.read"); exit(-1); }
if(d[i]==0x0d) break;
}
int size=i;
for(i=0;i<size;i++)
if(d[i]!=0x0d) fprintf(stdout,"%c",d[i]);
if(size>0) fprintf(stdout," (");
for(i=0;i<size;i++){
fprintf(stdout,"%.2x",d[i]);
if(i<size-1) fprintf(stdout," ");
}
if(size>0) fprintf(stdout,")\n");
}
void ModeCommande(int ds)
{
#ifdef DEBUG
printf("{ModeCommande}\n");
#endif
char *cmd="+++++++++++++++++"; //Obligation de saturer le buffer pour send commande
sleep(1);
sync();
write(ds,cmd,strlen(cmd));
Reponse(ds);
}
void Answer(int ds)
{
#ifdef DEBUG
printf("{Answer}\n");
#endif
char *cmd="TAATAATAATAATAATA\r"; //Saturation buffer
write(ds,cmd,strlen(cmd));
Reponse(ds);
}
static struct termios sauvegarde;
/** Ouverture d'un port serie **/
int ouvertureSerie(char *periph,int vitesse)
{
struct termios nouveau;
int df=open(periph,O_RDWR|O_NOCTTY);
if(df<0) return -1;
tcgetattr(df,&sauvegarde); /* save current port settings */
bzero(&nouveau,sizeof(nouveau));
nouveau.c_cflag=CLOCAL|CREAD|vitesse|CS8;
nouveau.c_iflag=0;
nouveau.c_oflag=0;
nouveau.c_lflag=0;
nouveau.c_cc[VTIME]=0;
nouveau.c_cc[VMIN]=1;
tcflush(df, TCIFLUSH);
tcsetattr(df,TCSANOW,&nouveau);
return df;
}
/** Fermeture d'un port serie **/
void fermetureSerie(int df)
{
tcsetattr(df,TCSANOW,&sauvegarde);
close(df);
}
/** Programme principal **/
int main(void) {
int ds;
ds=ouvertureSerie(SERIALDEV,BAUDRATE);
if(ds<0){
fprintf(stderr,"Erreur sur la connexion série.\n");
exit(-1);
}
char enter = '\r';
ModeCommande(ds);
write(ds, &enter, 1);
write(ds, &enter, 1);
write(ds, &enter,1);
write(ds,&enter,1);
write(ds,&enter,1);
Answer(ds);
sleep(15);
write(ds,&enter,1);
fermetureSerie(ds);
return 0;
}