elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  configurar puerto com en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: configurar puerto com en c  (Leído 2,302 veces)
txenfsm

Desconectado Desconectado

Mensajes: 6


Ver Perfil
configurar puerto com en c
« en: 8 Mayo 2012, 12:53 pm »

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.


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: configurar puerto com en c
« Respuesta #1 en: 8 Mayo 2012, 17:22 pm »

Usa GetLastError para ver cual es el error.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
txenfsm

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: configurar puerto com en c
« Respuesta #2 en: 8 Mayo 2012, 23:17 pm »

Hola gracias por contestar, no es que me de ningun error porque la aplicacion se conecta al puerto y añade la configuracion lo que pasa es que cuando escribe el comando at se queda esperando respuesta es decir la parte:

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;
}

funciona se queda esperando cuando se escribe el comando at en:

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++;
           }       
     }
     }
Y si configuro el puerto desde hyperterminal todo funciona bien, escribe y recibe respuesta de los comandos.
El dispositivo es un modem normal marca huawei no se si tiene que ver.
 Un saludo
En línea

txenfsm

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: configurar puerto com en c
« Respuesta #3 en: 9 Mayo 2012, 08:42 am »

Hola de nuevo, he cambiado la forma de abrir el puerto por :
hSerial = CreateFile(puerto, GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);

y al escribir el comando at me da el error 87 con la funcion GetLastError (),y sin modificar nada es decir:
hSerial = CreateFile(puerto, GENERIC_READ | GENERIC_WRITE,0, NULL, OPEN_EXISTING,0,NULL);
el programa se queda esperando respuesta del comando at, ni idea de que es alguna ayuda.

Un saludo
« Última modificación: 9 Mayo 2012, 12:26 pm por txenfsm » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Puerto de control en puerto paralelo
Electrónica
c_tarnoski 0 2,743 Último mensaje 19 Septiembre 2005, 05:46 am
por c_tarnoski
Configurar puerto LAN como WAN, ¿es posible?
Redes
_Aris_ 0 2,849 Último mensaje 30 Enero 2015, 05:46 am
por _Aris_
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines