From d1446cd91c1290b93bf4bde66c931e23c8aa34f8 Mon Sep 17 00:00:00 2001 From: Giovanni Maruzzelli Date: Mon, 2 Apr 2012 09:27:22 +0200 Subject: [PATCH] gsmopen: works05 --- src/mod/endpoints/mod_gsmopen/gsmopen.h | 2 + .../mod_gsmopen/gsmopen_protocol.cpp | 125 +++++++++++++++++- src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp | 11 +- 3 files changed, 132 insertions(+), 6 deletions(-) diff --git a/src/mod/endpoints/mod_gsmopen/gsmopen.h b/src/mod/endpoints/mod_gsmopen/gsmopen.h index e8cd61a0a0..92a6c8b8eb 100644 --- a/src/mod/endpoints/mod_gsmopen/gsmopen.h +++ b/src/mod/endpoints/mod_gsmopen/gsmopen.h @@ -536,6 +536,8 @@ struct private_object { int controldev_audio_dead; switch_mutex_t *controldev_audio_lock; + ctb::IOBase* device_serial_audio; +ctb::SerialPort* serialPort_serial_audio; }; diff --git a/src/mod/endpoints/mod_gsmopen/gsmopen_protocol.cpp b/src/mod/endpoints/mod_gsmopen/gsmopen_protocol.cpp index 1f0464fa2f..a87cc4ec4c 100644 --- a/src/mod/endpoints/mod_gsmopen/gsmopen_protocol.cpp +++ b/src/mod/endpoints/mod_gsmopen/gsmopen_protocol.cpp @@ -4051,7 +4051,7 @@ int gsmopen_serial_getstatus_AT(private_t * tech_pvt) } -int gsmopen_serial_init_audio_port(private_t * tech_pvt, speed_t controldevice_audio_speed) +int oldgsmopen_serial_init_audio_port(private_t * tech_pvt, speed_t controldevice_audio_speed) { int fd; int rt; @@ -4127,7 +4127,7 @@ int gsmopen_serial_init_audio_port(private_t * tech_pvt, speed_t controldevice_a return (fd); } -int serial_audio_init(private_t * tech_pvt) +int old_serial_audio_init(private_t * tech_pvt) { int res; int err; @@ -4149,13 +4149,132 @@ int serial_audio_init(private_t * tech_pvt) return err; } +int gsmopen_serial_init_audio_port(private_t * tech_pvt, speed_t controldevice_audio_speed) +{ + +//#ifdef NOTDEF +/***********************************/ + + tech_pvt->device_serial_audio = NULL; + tech_pvt->serialPort_serial_audio = new ctb::SerialPort(); + + if( tech_pvt->serialPort_serial_audio->Open( "/dev/ttyUSB2", 115200, "8N1", ctb::SerialPort::NoFlowControl ) >= 0 ) { + + //tech_pvt->device_serial_audio = tech_pvt->serialPort_serial_audio; + ERRORA("port SUCCESS open\n", GSMOPEN_P_LOG); + + } else { + + ERRORA("port NOT open\n", GSMOPEN_P_LOG); + } + +return 0; + +/***********************************/ +//#endif// NOTDEF + +#ifdef NOTDEF + + + int fd; + int rt; + struct termios tp; + unsigned int status = 0; + unsigned int flags = TIOCM_DTR; + +/* if there is a file descriptor, close it. But it is probably just an old value, so don't check for close success*/ + fd = tech_pvt->controldev_audio_fd; + if (fd) { + close(fd); + } +/* open the serial port */ +//#ifdef __CYGWIN__ + fd = open(tech_pvt->controldevice_audio_name, O_RDWR | O_NOCTTY | O_NONBLOCK); + sleep(1); + close(fd); +//#endif /* __CYGWIN__ */ + fd = open(tech_pvt->controldevice_audio_name, O_RDWR | O_NOCTTY | O_NONBLOCK); + if (fd == -1) { + perror("AUDIO open error "); + DEBUGA_GSMOPEN("AUDIO serial error: %s\n", GSMOPEN_P_LOG, strerror(errno)); + tech_pvt->controldev_audio_fd = fd; + return -1; + } +/* flush it */ + rt = tcflush(fd, TCIFLUSH); + if (rt == -1) { + ERRORA("AUDIO serial error: %s", GSMOPEN_P_LOG, strerror(errno)); + } +/* attributes */ + tp.c_cflag = B0 | CS8 | CLOCAL | CREAD | HUPCL; + tp.c_iflag = IGNPAR; + tp.c_cflag &= ~CRTSCTS; + tp.c_oflag = 0; + tp.c_lflag = 0; + tp.c_cc[VMIN] = 1; + tp.c_cc[VTIME] = 0; +/* set controldevice_audio_speed */ + rt = cfsetispeed(&tp, tech_pvt->controldevice_audio_speed); + if (rt == -1) { + ERRORA("AUDIO serial error: %s, speed was: %d", GSMOPEN_P_LOG, strerror(errno), tech_pvt->controldevice_audio_speed); + } + rt = cfsetospeed(&tp, tech_pvt->controldevice_audio_speed); + if (rt == -1) { + ERRORA("AUDIO serial error: %s", GSMOPEN_P_LOG, strerror(errno)); + } +/* set port attributes */ + if (tcsetattr(fd, TCSADRAIN, &tp) == -1) { + ERRORA("AUDIO serial error: %s", GSMOPEN_P_LOG, strerror(errno)); + } + rt = tcsetattr(fd, TCSANOW, &tp); + if (rt == -1) { + ERRORA("AUDIO serial error: %s", GSMOPEN_P_LOG, strerror(errno)); + } +#ifndef __CYGWIN__ + ioctl(fd, TIOCMGET, &status); + status |= TIOCM_DTR; /* Set DTR high */ + status &= ~TIOCM_RTS; /* Set RTS low */ + ioctl(fd, TIOCMSET, &status); + ioctl(fd, TIOCMGET, &status); + ioctl(fd, TIOCMBIS, &flags); + flags = TIOCM_RTS; + ioctl(fd, TIOCMBIC, &flags); + ioctl(fd, TIOCMGET, &status); +#else /* __CYGWIN__ */ + ioctl(fd, TIOCMGET, &status); + status |= TIOCM_DTR; /* Set DTR high */ + status &= ~TIOCM_RTS; /* Set RTS low */ + ioctl(fd, TIOCMSET, &status); +#endif /* __CYGWIN__ */ + tech_pvt->controldev_audio_fd = fd; + + return (fd); +#endif //NOTDEF +} + +int serial_audio_init(private_t * tech_pvt) +{ + int res; + int err; + + res=gsmopen_serial_init_audio_port(tech_pvt, tech_pvt->controldevice_audio_speed); + ERRORA("serial_audio_init res=%d\n", GSMOPEN_P_LOG, res); + + if(res == 0) + err=0; + else + err=1; + + return err; +} int serial_audio_shutdown(private_t * tech_pvt) { int res; int err; - res = close(tech_pvt->controldev_audio_fd); + //res = close(tech_pvt->controldev_audio_fd); + res = tech_pvt->serialPort_serial_audio->Close(); ERRORA("serial_audio_shutdown res=%d (controldev_audio_fd is %d)\n", GSMOPEN_P_LOG, res, tech_pvt->controldev_audio_fd); tech_pvt->controldev_audio_fd = -1; diff --git a/src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp b/src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp index fed0996dea..8655487bc2 100644 --- a/src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp +++ b/src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp @@ -883,7 +883,8 @@ static switch_status_t channel_read_frame(switch_core_session_t *session, switch #endif// GSMOPEN_PORTAUDIO //sent = write(tech_pvt->controldev_audio_fd, (short *) frame->data, (int) (frame->datalen)); - if ((samples = read(tech_pvt->controldev_audio_fd, (short *) tech_pvt->read_frame.data, 320)) >0) + //if ((samples = read(tech_pvt->controldev_audio_fd, (short *) tech_pvt->read_frame.data, 320)) >0) + if ((samples = tech_pvt->serialPort_serial_audio->Read((char *) tech_pvt->read_frame.data, 320)) >0) { #ifdef GSMOPEN_PORTAUDIO @@ -923,7 +924,8 @@ static switch_status_t channel_read_frame(switch_core_session_t *session, switch *frame = &tech_pvt->read_frame; - if ((samples2 = read(tech_pvt->controldev_audio_fd, (short *) buffer2, 320)) >0){ + //if ((samples2 = read(tech_pvt->controldev_audio_fd, (short *) buffer2, 320)) >0){ + if ((samples2 = tech_pvt->serialPort_serial_audio->Read((char *) tech_pvt->read_frame.data, 320)) >0){ WARNINGA("samples2=%d\n", GSMOPEN_P_LOG, samples2); } @@ -1093,7 +1095,8 @@ static switch_status_t channel_write_frame(switch_core_session_t *session, switc #endif //WANT_SPEEX #endif // GSMOPEN_PORTAUDIO - sent = write(tech_pvt->controldev_audio_fd, (short *) frame->data, (int) (frame->datalen)); + sent = tech_pvt->serialPort_serial_audio->Write((char *) frame->data, (int) (frame->datalen)); + //sent = write(tech_pvt->controldev_audio_fd, (short *) frame->data, (int) (frame->datalen)); //DEBUGA_GSMOPEN("sent=%d \n", GSMOPEN_P_LOG, sent); if (sent && sent != frame->datalen && sent != -1) { @@ -2153,6 +2156,7 @@ static switch_status_t load_config(int reload_type) DEBUGA_GSMOPEN("gsmopen_serial_sync_period=%d\n", GSMOPEN_P_LOG, (int)globals.GSMOPEN_INTERFACES[i].gsmopen_serial_sync_period); DEBUGA_GSMOPEN("controldevice_audio_name=%s\n", GSMOPEN_P_LOG, globals.GSMOPEN_INTERFACES[i].controldevice_audio_name); /***********************************/ +#ifdef NOTDEF ctb::IOBase* device = NULL; @@ -2175,6 +2179,7 @@ static switch_status_t load_config(int reload_type) ERRORA("port NOT open\n", GSMOPEN_P_LOG); } +#endif// NOTDEF /***********************************/ }