begin process at 2012 05 29 05:17:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Réseau & Internet

 > 

Executer des commandes Hayes (AT) en language C


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Executer des commandes Hayes (AT) en language C

mardi 15 février 2011 à 15:03:13 | Executer des commandes Hayes (AT) en language C

S1rK

Hello la compagnie,

Voila mon "problème" (il n'y en a pas pour le moment xD) je cherche a crée un petit programme en C de préférence, capable d'exécuté des commandes Hayes d'un modem vers un autre modem.

A savoir que j'ai déja test la plupart des commandes, et que celles-ci fonctionnent, mais je ne vois pas trop comment les exécutés dans un programme en C (pour le moment je cherche, mais je n'ai pas de pistes, en parallèle je découvre la programmation sous Linux aussi..)

Du genre lorsque je fais un "AT" savoir si celui-ci reçoit l'information ou non, ou encore émettre un appel "ATD 301" (vers le poste 301 ici)

Si une âme charitable à une idée, un tuto, des bouts de codes qui me serviraient d'exemple ou quoi que ce soit, je suis preneur :)

En espérant m'être fait comprendre ^^ merci d'avance!

Cordialement
mercredi 16 février 2011 à 07:18:47 | Re : Executer des commandes Hayes (AT) en language C

patatalo

Membre Club Administrateur CodeS-SourceS
salut,


Sous Linux, c'est très simple:
Tu ouvres le port COM (ttys?) avec open().
Tu places un select() sur le fd pour lire les données entrantes.
Tu écris les commandes AT avec write() comme pour un fichier basique.

Si ton modem reçoit bien la commande AT et l'execute, il retourne "OK" qui sera lu par ta procedure fournie avec select()

@++
vendredi 18 février 2011 à 11:27:02 | Re : Executer des commandes Hayes (AT) en language C

S1rK

Salut!

Merci pour ton aide, c'est peut-être pas grand chose, mais ton explication m'a mis sur la bonne voie, encore merci =)

J'ai récupéré un programme complet et fonctionnel certes, mais que je ne comprends pas forcement (ce qui n'est pas mon but), donc je suis reparti sur quelque chose de beaucoup plus simple et clair, par contre j'ai un nombre d'erreur incalculable dans mon programme, si ton oeil d'expert ou celui d'un autre peut m'aider, un grand merci d'avance!! :)

Code C/C++ :
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
#include <unistd.h>

int fd1;
int fd2;
char *buff,*buffer,*bufptr;
int wr,rd,nbytes,tries;

int main()
{
	return 0;
}

//Next step, we connect to device through associated file and check the connection:

fd1 = open(&#8220;/dev/ttyS0&#8243;, O_RDWR | O_NOCTTY | O_NDELAY);

if (fd1 == -1 )
{
perror(&#8220;open_port: Unable to open /dev/ttyS0 &#8211; &#8220;);
}

else
{
fcntl(fd1, F_SETFL,0);

printf(&#8220;Port 1 has been sucessfully opened and %d is the file description\n&#8221;,fd1);
}

//Where, &#8220;/dev/ttyS0&#8221; is associated with COM1 port.

//With following code we send to device some bits:

wr=write(fd1,&#8221;ATZ\r&#8221;,4);

//And for reading response from device:

rd=read(fd1,buff,10);

printf(&#8220;Bytes sent are %d \n&#8221;,rd);

//At the end, close the connection:

close(fd1);
vendredi 18 février 2011 à 11:32:53 | Re : Executer des commandes Hayes (AT) en language C

S1rK

oups, petit problème lors du c/c.. les #8220 représentent des "
samedi 19 février 2011 à 21:40:07 | Re : Executer des commandes Hayes (AT) en language C

beg0

Réponse acceptée !
Je ne sais pas si tu fais du C depuis longtemps, mais en C le point d'entrée (i.e. l'endroit de la premiere instruction executée) est la fonction main(). Tout ce qui est en dehors de la fonction main() ne sera pas executé (Enfin c'est pas tout à fait vrai, mais pour l'instant ca suffira ;) )


Voici un programme minimaliste en C
Code C/C++ :
/* file: hello.c */
#include <stdio.h>

int main()
{
    puts("Hello, world");
    return 0;
}

Ce programme peut se compiler avec la ligne de commande suivante
Code :
$ gcc -Wall -o hello hello.c


Voici un truc qui devrais plus ou moins marcher.
J'ai simplement mis tout le code à l'interieur du main() et ajouté deux lignes pour l'allocation/liberation de memoire pour la variable buff

Code C/C++ :
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
#include <unistd.h>


int main()
{
int fd1;
int fd2;
char *buff,*buffer,*bufptr;
int wr,rd,nbytes,tries;

//beg0 added: Allocation memoire necessaire
buff=(char*)calloc(sizeof(char), 10+1);

//Next step, we connect to device through associated file and check the connection:

fd1 = open(&#8220;/dev/ttyS0&#8243;, O_RDWR | O_NOCTTY | O_NDELAY);

if (fd1 == -1 )
{
perror(&#8220;open_port: Unable to open /dev/ttyS0 &#8211; &#8220;);
}

else
{
fcntl(fd1, F_SETFL,0);

printf(&#8220;Port 1 has been sucessfully opened and %d is the file description\n&#8221;,fd1);
}

//Where, &#8220;/dev/ttyS0&#8221; is associated with COM1 port.

//With following code we send to device some bits:

wr=write(fd1,&#8221;ATZ\r&#8221;,4);

//And for reading response from device:

rd=read(fd1,buff,10);

printf(&#8220;Bytes sent are %d \n&#8221;,rd);

//At the end, close the connection:

close(fd1);

//Beg0 added: Liberation de la memoire allouée
free(buff);

return 0;
}


Pourrait on egalement savoir comment tu compiles ton programme ? Et pourrait tu nous envoyer les erreures generées ?

De ce que j'ai vu il y a egalement quelques definitions de variables en trop, mais ca ne devrait pas generer d'erreurs.


Je ne peux pas affirmer que ce code compile, je suis sous Windows donc...


lundi 21 février 2011 à 11:26:35 | Re : Executer des commandes Hayes (AT) en language C

S1rK

Hello! un grand merci de prendre la peine de me répondre =)

Effectivement en postant, je me suis aperçu de mes erreurs :D (notamment le fait que j'étais en dehors de ma fonction main() >.<

Sinon je n'ai plus fait de C depuis une bonne année (et surtout jamais sous Linux!) donc j'apprends, tout doucement mais surement. Je compile avec l'IDE Anjuta (relativement proche de Visual Studio, et facile a prendre en main) ou via le terminal.

Lors de l'exécution de mon programme (avec les erreurs corrigées) la communication était bonne, par contre je recevais un nombre de byte de -1 (hu? oO)

Je viens d'exécuter ton programme ci-dessus, et là j'obtiens le résultat suivant:

Port 1 has been sucessfully opened and 3 is the file description
Bytes sent are 6 (auparavant je recevais -1)

Conclusion? :p (et encore merci ^^)

jeudi 24 février 2011 à 11:28:33 | Re : Executer des commandes Hayes (AT) en language C

S1rK

Bon, la conclusion c'est faite d'elle même ça va :D

Un grand merci a tous, j'ai bien avancé dans mon programme grâce a vous.

Tchao!


Cette discussion est classée dans : executer, at, commandes, language, hayes


Répondre à ce message

Sujets en rapport avec ce message

commandes AT [ par croll ] Bonjour,Lorsque j'envoi une commande AT à mon modem je ne parviens pas à lire la réponse. J'utilise la méthode suivante : HANDLE hPort = CreateFile executer une commande systeme [ par anthraxx ] bonjour,je voulais savoir si quelqu'un connait un moyen d'éxecuter des commandes su systemes d'exploitation sous Windows, et d'en récupérer l'output.I "Executer en tant que" en CPP [ par Lord_Did ] Hello tout le monde... J'execute des lignes de commandes windows avec "system()" (avec Dev-cpp) Ca marche bien, seulement, j'aimerais lancer ces lign SAUVEGARDER les commandes PROMPT ? [ par cdesroch ] Salut, est-il possible de recuperer le resultat de ma commande prompt et de le sauvegarder dans un fichier txt ?Et si ca ne se fait pas en language C/ Modem + Commandes AT [ par mamounette ] Bonjour, je souhaiterai savoir s'il était possible de récupérer le numéro de téléphone d'un appel entrant via un modem 56k en utilisant les commandes execution des commandes sous windows [ par mesetudes ] bonjour, svp je voudrait savoir quelle est les  commandes c/c++  permettant d'executer :-l'arret et le redemarage du windo Envoi commande AT [ par spirou91 ] Hello, Je cherche à faire communiquer mon gsm avec mon ordi. Pour ca, j'envoi des commandes AT à mon gsm. J'ai trouvé la source suivante: http://www. comment recevoir un mms via un hyperterminal en utilisant les commandes AT [ par anis9800 ] est ce que je peux recevoir un MMS via un hyperterminal ??si c'est possible svp aider moi à trouver ces commandes AT CFileFind et commandes At [ par MNEMONIC ] Bonjour à tous.Comme le dit le sujet, j'ai un problème lorsque j'utilise le CFileFind dans un programme qui est lancé par une commande AT.Si je lance prise d'une photo a l'aide d'une webcam en language c [ par jedi_vulture ] Bonjour,je débute dans le monde de la programmation et je cherche a connecter une webcam a l'aide du language c.une fois la webcam connecter je désire


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,312 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales