Hola, estoy realizando una aplicacion en c que se comunica con un puerto com al cual esta conectado un moden, lo que intento es enviar mensajes mediante comandos at, todo funciona pero tengo una duda o un problema porque no se si esto debe ser asi siempre. Resulta que la aplicacion no guarda la configuracion del puerto es decir:
dcbSerialParams.BaudRate=CBR_9600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
if(!SetCommState(hSerial, &dcbSerialParams))
printf("\nSetCommState error!");
else{
printf("\nSetCommState ok.");
}
No lo realiza bien no se porque pero si configuro el puerto por hyperterminal y le doy estos mismos valores luego todo funciona a la perfeccion, no encuentro manera de solucionarlo creo que esta todo bien pero aun asi os dejo el codigo para que podais verlo mejor:
int abrir_puerto(){
int bandera=0;
char lineabaudio[30];
hSerial = CreateFile(puerto, GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0,NULL);
if(hSerial!=INVALID_HANDLE_VALUE)
{
DCB dcbSerialParams;
if (!GetCommState(hSerial, &dcbSerialParams))
printf("\nGetCommState error!");
else
printf("\nGetCommState ok.");
dcbSerialParams.BaudRate=CBR_9600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
if(!SetCommState(hSerial, &dcbSerialParams))
printf("\nSetCommState error!");
else{
printf("\nSetCommState ok.");
}
}
else
bandera=1;
return bandera;
}
void comandos_inicio(){ //funcion que ejecuta los primeros comando necesarios para configurar el dispositivo
char *comando[4]={"AT \r","AT+CPIN? \r","AT+CMGF=1 \r","AT+CSCS=\"GSM\" \r"};
char szBuff[2024];
int i=0;
while(i<4){
strcpy(szBuff,comando);
if(!WriteFile(hSerial, szBuff,strlen(szBuff), &dwBytesRead, NULL)) //Escribe cada comando
printf("\nWriteFile error!");
else{
Sleep(waitsms);
dwBytesRead = 0;
if(!ReadFile(hSerial, szBuff, sizeof(szBuff), &dwBytesRead, NULL)) //lee la respuesta de cada comando
printf("\nReadFile error!");
else{
szBuff[dwBytesRead] = '\0';
printf(" ReadFile: %s\n", szBuff);
}
if(i==1)
if( strstr(szBuff,"READY")==NULL)
i=5;
i++;
}
}
}
Espero que me podais ayudar, gracias de antemano.
dcbSerialParams.BaudRate=CBR_9600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
if(!SetCommState(hSerial, &dcbSerialParams))
printf("\nSetCommState error!");
else{
printf("\nSetCommState ok.");
}
No lo realiza bien no se porque pero si configuro el puerto por hyperterminal y le doy estos mismos valores luego todo funciona a la perfeccion, no encuentro manera de solucionarlo creo que esta todo bien pero aun asi os dejo el codigo para que podais verlo mejor:
int abrir_puerto(){
int bandera=0;
char lineabaudio[30];
hSerial = CreateFile(puerto, GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING, 0,NULL);
if(hSerial!=INVALID_HANDLE_VALUE)
{
DCB dcbSerialParams;
if (!GetCommState(hSerial, &dcbSerialParams))
printf("\nGetCommState error!");
else
printf("\nGetCommState ok.");
dcbSerialParams.BaudRate=CBR_9600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
if(!SetCommState(hSerial, &dcbSerialParams))
printf("\nSetCommState error!");
else{
printf("\nSetCommState ok.");
}
}
else
bandera=1;
return bandera;
}
void comandos_inicio(){ //funcion que ejecuta los primeros comando necesarios para configurar el dispositivo
char *comando[4]={"AT \r","AT+CPIN? \r","AT+CMGF=1 \r","AT+CSCS=\"GSM\" \r"};
char szBuff[2024];
int i=0;
while(i<4){
strcpy(szBuff,comando);
if(!WriteFile(hSerial, szBuff,strlen(szBuff), &dwBytesRead, NULL)) //Escribe cada comando
printf("\nWriteFile error!");
else{
Sleep(waitsms);
dwBytesRead = 0;
if(!ReadFile(hSerial, szBuff, sizeof(szBuff), &dwBytesRead, NULL)) //lee la respuesta de cada comando
printf("\nReadFile error!");
else{
szBuff[dwBytesRead] = '\0';
printf(" ReadFile: %s\n", szBuff);
}
if(i==1)
if( strstr(szBuff,"READY")==NULL)
i=5;
i++;
}
}
}
Espero que me podais ayudar, gracias de antemano.