Envoie et reception de données avec un modem (Port COM)

S1rK Messages postés 17 Date d'inscription mardi 25 juillet 2006 Statut Membre Dernière intervention 15 novembre 2011 - 24 févr. 2011 à 11:54
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 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!!

1 réponse

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
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().

@++
0
Rejoignez-nous