comment envoyer des commandes AT à C

C

champnim

Guest
Je veux contrôler un téléphone mobile à partir de mon PC en utilisant un programme écrit en C. Je veux savoir comment envoyer les commandes requises à travers le programme C.

 
Je suppose u avoir toutes les interfaces machine prête.

1) Ouvrir le port de communication série à l'aide CreateFile
2) Régler le débit en baud, stopbits, etc utilisant SetCommState
3) lire et écrire à la com série à l'aide readfile et writefile
4) On suppose Wish U d'envoyer au OK, convertir "AT OK" pour ASCII, et envoyer à l'aide WriteFile.

Merci.

 
D'abord convertir chaque caractère de la commande AT pour le code hexadécimal et l'envoyer ensuite en série ou de l'envoyer sans la convertir en hexadécimal.

 
Convertir en hexadécimal ASCII d'abord, puis envoyer seulement en série.

Toutefois, si l'utilisation du tampon de tenir la commande AT est déclarée en tant que char, elle mai pas besoin de convertir en hexadécimal Ascii 1st, mais peut envoyer la commande directe.
Vous ne savez pas sur cette méthode, juste une idée.

 
J'essaie d'envoyer "AT \ r" à mon téléphone, mais writefile donne une erreur (n ° 87) ... pls me dire ce qui ne va pas

# include <iostream>
# include <windows.h>
# include <string.h>

int main ()
(
DCB dcb;
POIGNEE hCom;
BOOL fSuccess;
OVERLAPPED o;
DWORD dwEvtMask;
char buffer [2048];
char * pcCommPort = "COM4";

hCom = CreateFile (pcCommPort,
GENERIC_READ | GENERIC_WRITE,
0, / / comm dispositifs doivent être ouverts w / exclusif d'accès
NULL, / / pas les attributs de sécurité
OPEN_EXISTING, / / comm dispositifs doivent utiliser OPEN_EXISTING
FILE_FLAG_OVERLAPPED,
NULL / / hTemplate doit avoir la valeur NULL pour les dispositifs de comm
);

if (hCom == INVALID_HANDLE_VALUE)
(
/ / Gérer l'erreur.
printf ( "CreateFile failed with error% d. \ n", GetLastError ());
return (1);
)
fSuccess = GetCommState (hCom, & dcb);

if (! fSuccess)
(
/ / Gérer l'erreur.
printf ( "GetCommState a échoué avec l'erreur% d. \ n", GetLastError ());
retour (2);
)

/ / Fill in the DCB: baud = 9600 bps, 8 bits de données, pas de parité et 1 bit d'arrêt.

= dcb.BaudRate CBR_9600; / / Définit la vitesse de transmission
dcb.ByteSize = 8; / / taille des données, xmit, et AN
dcb.Parity = NOPARITY; / / pas de bit de parité
= dcb.StopBits ONESTOPBIT; / / un bit d'arrêt

fSuccess = SetCommState (hCom, & dcb);

if (! fSuccess)
(
/ / Gérer l'erreur.
printf ( "SetCommState a échoué avec l'erreur% d. \ n", GetLastError ());
retour (3);
)

printf ( "% s port série est reconfiguré avec succès. \ n", pcCommPort);

/ / char * command = "A";
unsigned long BytesWritten;
if (! WriteFile (hCom, "AT \ r", 3, & BytesWritten, NULL))
(
printf ( "WriteFile a échoué avec l'erreur% d. \ n", GetLastError ());
return (4);
)
/ / printf ( "% s écrites avec succès vers% s port", le commandement, pcCommPort);
)

 
J'utilise toujours cette façon d'envoyer des données

Octet de données [5] = (0);
DWORD BytesWritten;
BOOL returnValue;
BYTE bytes2send;
.......
.....

data [0] = 0x41; / / ASCII, un
data [1] = 0x54; / / T Ascii
data [2] = 0x5C;
data [3] = 0x72;

bytes2send = 4;

returnValue = WriteFile (hCom, & donnees, bytes2send, & BytesWritten, NULL);

si un nouvel échec, peut-être pouvez essayer de remplacer les R \ avec retour chariot, comme ci-dessous: --
data [0] = 0x41; / / ASCII, un
data [1] = 0x54; / / T Ascii
data [2] = 0x0D / / ASCII pour les CR

bytes2send = 3;

Hope it helps.

 

Welcome to EDABoard.com

Sponsor

Back
Top