Envoie et reception de données avec un modem (Port COM)
S1rK
Messages postés17Date d'inscriptionmardi 25 juillet 2006StatutMembreDernière intervention15 novembre 2011
-
24 févr. 2011 à 11:54
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 2014
-
25 févr. 2011 à 20:21
Bonjour à toute la communauté!
Je fais mumuse avec un modem 56k afin de pouvoir entièrement interagir avec.
Après les différents test de COM avec les commandes Hayes notamment, j'ai pu dans un premier temps faire la connexion a celui-ci via le port COM (ttyS0), dans un second temps lui envoyer des commandes AT, et a présent je souhaite écrire sur le port COM afin d'envoyer et réceptionner des données.
Voila sur quoi je suis partie (il y a juste la partie pour l'envoie d'octets)
char buffer[100]
int fd1;
/* Boucle tant que l'on ne quitte pas */
do
{
/* Menu */
printf("\r\n");
printf("1 : Envoyer des donnees.\r\n");
printf("2 : Recevoir des donnees.\r\n");
printf("3 : Quitter.\r\n");
printf("Choix : ");
scanf("%d", &nChoice);
/* Envoyer des données */
if(nChoice == 1)
{
printf("\r\n");
printf("\r\n");
printf("Donnees a envoyer\r\n");
wr=write(fd1, buffer, 'A');
fflush(stdin);
gets(buffer);
printf("\r\n");
printf("Envoie des donnees...\r\n");
if(write(buffer, strlen(buffer), &nBytesWritten))
//printf("%d octet(s) envoye(s).\r\n",nBytesWritten);
printf("%d octets(s)", wr);
else
printf("Erreur lors de l'envoi.\r\n");
}
/* Recevoir des données */
if(nChoice == 2)
{
printf("\r\n");
printf("Reception de donnees...\r\n");
printf("%d octet(s) recu(s) ==> %c\r\n", wr,wr);//nBytesRead, nBytesRead, buffer);
}
}
while(nChoice != 3);
Oui c'est le bordel dans mon code :) Dans cette partie j'envoie le caractère "A" pour réceptionner sur mon modem 65 octets, ensuite je lis le nombre d'octets présent sur mon modem qui me retourne bien 65 octets correspondant bien a "A"
Voila ou je bloque: Je souhaite tout simplement envoyer une chaine de caractère et non plus un simple caractère seul, problème mon programme me permet pour un caractère (enfin la fonction write), mais pas pour plus, comment doit-je m'y prendre?
En parallèle lorsque j'exécute mes commandes AT (du genre un appel téléphonique) j'aimerais savoir si c'est possible de prendre l'info dans l'hyperterminal (si c'est "OK" ou "BUSY" par exemple) et d'effectuer une action en fonction de la réponse.
Voila désolé pour le monologue, et un grand merci a ceux qui me donneront un coup de main (ou simplement ceux qui me liront sans me comprendre xD)
En espérant avoir été le plus clair possible ^^ merci!!
A voir également:
Envoie et reception de données avec un modem (Port COM)
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 25 févr. 2011 à 20:21
salut,
Tu as le nombre d'octets écrits en retour dans nBytesWritten.
erreur nbWritten 0
Tant que (!erreur && (nbWritten != strlen(buffer)))
erreur = ecrit()
nbWritten += nBytesWritten;
lire le status du port COM afin de determiner si la fifo est pleine.
fin
si erreur afficher infos.
Tu dois pouvoir avoir le status du port com avec la fonction ioctl(). A voir, il doit être possible de mettre la lecture du status sous forme d' évenement associé à un select().