C/Visual C - Prgrama para controlar el modem

 
Vista:

Prgrama para controlar el modem

Publicado por burticio (1 intervención) el 10/12/2002 22:03:44
Que tal. Necesito ayuda para hacer un programa que pueda recibir una llamada de un telefono, conectarse, y recibir digitos marcados desde el telefono... algun de ustedes sabe de alguno, o si hay alguna libreria para controlar el modem???
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Programa para controlar un módem y recibir llamadas

Publicado por Alejandro (980 intervenciones) el 23/04/2025 17:18:06
Aquí tienes un ejemplo de un programa en C que utiliza comandos AT para controlar un módem y recibir llamadas, así como los dígitos marcados desde un teléfono. Este programa asume que tienes un módem conectado a través de un puerto serie (como `/dev/ttyS0` en Linux o `COM1` en Windows).

Código en C



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
 
#define SERIAL_PORT "/dev/ttyS0" // Cambia esto según tu sistema
#define BUFFER_SIZE 256
 
int openSerialPort(const char *port) {
    int fd = open(port, O_RDWR | O_NOCTTY | O_NDELAY);
    if (fd == -1) {
        perror("No se puede abrir el puerto serie");
        return -1;
    }
    return fd;
}
 
void configureSerialPort(int fd) {
    struct termios options;
    tcgetattr(fd, &options);
    options.c_cflag = B9600 | CS8 | CLOCAL | CREAD; // Configura la velocidad y el formato
    options.c_iflag = IGNPAR; // Ignora caracteres de paridad
    options.c_oflag = 0; // Sin control de flujo
    options.c_lflag = ICANON; // Modo canónico
    tcflush(fd, TCIFLUSH);
    tcsetattr(fd, TCSANOW, &options);
}
 
void sendATCommand(int fd, const char *command) {
    write(fd, command, strlen(command));
    write(fd, "\r", 1); // Enviar retorno de carro
}
 
void readResponse(int fd) {
    char buffer[BUFFER_SIZE];
    int n = read(fd, buffer, sizeof(buffer) - 1);
    if (n > 0) {
        buffer[n] = '\0'; // Null-terminate the string
        printf("Respuesta del módem: %s\n", buffer);
    }
}
 
int main() {
    int fd = openSerialPort(SERIAL_PORT);
    if (fd == -1) return 1;
 
    configureSerialPort(fd);
 
    // Enviar comandos AT para configurar el módem
    sendATCommand(fd, "AT"); // Verificar conexión
    readResponse(fd);
 
    sendATCommand(fd, "ATA"); // Contestar la llamada
    readResponse(fd);
 
    // Esperar y leer los dígitos marcados
    printf("Esperando dígitos marcados...\n");
    while (1) {
        readResponse(fd);
        // Aquí puedes agregar lógica para procesar los dígitos recibidos
    }
 
    close(fd);
    return 0;
}

Explicación del código



1. Abrir el puerto serie: La función `openSerialPort` abre el puerto serie especificado. Asegúrate de cambiar `SERIAL_PORT` a la ruta correcta según tu sistema operativo.

2. Configurar el puerto serie: La función `configureSerialPort` establece la configuración del puerto serie, como la velocidad de transmisión (9600 bps en este caso).

3. Enviar comandos AT: La función `sendATCommand` envía un comando AT al módem. Los comandos AT son instrucciones que controlan el módem.

4. Leer respuestas: La función `readResponse` lee la respuesta del módem y la imprime en la consola.

5. Contestar llamadas y leer dígitos: En el `main`, se envían comandos para verificar la conexión y contestar la llamada. Luego, se entra en un bucle infinito para esperar y leer los dígitos marcados.

Notas adicionales



- Asegúrate de tener los permisos necesarios para acceder al puerto serie en tu sistema.
- Este código es un ejemplo básico y puede requerir ajustes según el modelo de tu módem y el sistema operativo.
- Para recibir los dígitos marcados, es posible que necesites implementar lógica adicional para procesar los datos recibidos.

¡Espero que esto te sea útil, Burticio!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar