}
/* signal incoming SMS with a +CMTI unsolicited msg */
- res = gsmopen_serial_write_AT_ack(tech_pvt, "AT+CNMI=3,1,0,0,0");
+ res = gsmopen_serial_write_AT_ack(tech_pvt, "AT+CNMI=1,1,0,0,0");
if (res) {
- DEBUGA_GSMOPEN("AT+CNMI=3,1,0,0,0 failed, continue\n", GSMOPEN_P_LOG);
+ DEBUGA_GSMOPEN("AT+CNMI=1,1,0,0,0 failed, continue\n", GSMOPEN_P_LOG);
tech_pvt->sms_cnmi_not_supported = 1;
tech_pvt->gsmopen_serial_sync_period = 30; //FIXME in config
}
WARNINGA("AT+CSCS=\"UCS2\" (set TE messages to ucs2) do not got OK from the phone, let's try with 'GSM'\n", GSMOPEN_P_LOG);
tech_pvt->no_ucs2 = 1;
}
-
+#ifdef NOTDEF
if (tech_pvt->no_ucs2) {
res = gsmopen_serial_write_AT_ack(tech_pvt, "AT+CSCS=\"GSM\"");
if (res) {
} else {
tech_pvt->at_has_ecam = 1;
}
+#endif// NOTDEF
/* disable unsolicited signaling of call list */
res = gsmopen_serial_write_AT_ack(tech_pvt, "AT+CLCC=0");
}
+ if ((strncmp(tech_pvt->line_array.result[i], "^CEND:1", 7) == 0)) {
+ tech_pvt->phone_callflow = CALLFLOW_CALL_IDLE;
+ if (option_debug > 1)
+ DEBUGA_GSMOPEN("|%s| CALLFLOW_CALL_IDLE\n", GSMOPEN_P_LOG, tech_pvt->line_array.result[i]);
+ if (tech_pvt->interface_state != GSMOPEN_STATE_DOWN && tech_pvt->owner) {
+ DEBUGA_GSMOPEN("just received a remote HANGUP\n", GSMOPEN_P_LOG);
+ tech_pvt->owner->hangupcause = GSMOPEN_CAUSE_NORMAL;
+ gsmopen_queue_control(tech_pvt->owner, GSMOPEN_CONTROL_HANGUP);
+ DEBUGA_GSMOPEN("just sent GSMOPEN_CONTROL_HANGUP\n", GSMOPEN_P_LOG);
+ }
+
+ tech_pvt->phone_callflow = CALLFLOW_CALL_NOCARRIER;
+ if (option_debug > 1)
+ DEBUGA_GSMOPEN("|%s| CALLFLOW_CALL_NOCARRIER\n", GSMOPEN_P_LOG, tech_pvt->line_array.result[i]);
+ if (tech_pvt->interface_state != GSMOPEN_STATE_DOWN) {
+ //cicopet
+ switch_core_session_t *session = NULL;
+ switch_channel_t *channel = NULL;
+
+ tech_pvt->interface_state = GSMOPEN_STATE_DOWN;
+
+ session = switch_core_session_locate(tech_pvt->session_uuid_str);
+ if (session) {
+ channel = switch_core_session_get_channel(session);
+ //gsmopen_hangup(tech_pvt);
+ switch_core_session_rwunlock(session);
+ switch_channel_hangup(channel, SWITCH_CAUSE_NONE);
+ }
+ //
+ //tech_pvt->owner->hangupcause = GSMOPEN_CAUSE_FAILURE;
+ //gsmopen_queue_control(tech_pvt->owner, GSMOPEN_CONTROL_HANGUP);
+ } else {
+ ERRORA("Why NO CARRIER now?\n", GSMOPEN_P_LOG);
+ }
+ }
+
/* at_call_* are unsolicited messages sent by the modem to signal us about call processing activity and events */
if ((strcmp(tech_pvt->line_array.result[i], tech_pvt->at_call_idle) == 0)) {
tech_pvt->phone_callflow = CALLFLOW_CALL_IDLE;
return -1;
}
}
+ res = gsmopen_serial_write_AT_expect(tech_pvt, "AT^DDSETEX=2", tech_pvt->at_dial_expect);
//tech_pvt->interface_state = GSMOPEN_STATE_UP;
//tech_pvt->phone_callflow = CALLFLOW_CALL_ACTIVE;
DEBUGA_GSMOPEN("AT: call answered\n", GSMOPEN_P_LOG);
ERRORA("at_hangup command failed, command used: 'AT+CKPD=\"EEE\"'\n", GSMOPEN_P_LOG);
return -1;
}
+
+ }
+
+ res = gsmopen_serial_write_AT_ack(tech_pvt, "AT+CHUP");
+ if (res) {
+ ERRORA("at_hangup command failed, command used: 'AT+CHUP'\n", GSMOPEN_P_LOG);
+ //return -1;
}
+
}
tech_pvt->interface_state = GSMOPEN_STATE_DOWN;
tech_pvt->phone_callflow = CALLFLOW_CALL_IDLE;
ERRORA("dial command failed, dial string was: %s\n", GSMOPEN_P_LOG, at_command);
return -1;
}
+ res = gsmopen_serial_write_AT_expect(tech_pvt, "AT^DDSETEX=2", tech_pvt->at_dial_expect);
// jet - early audio
//if (tech_pvt->at_early_audio) {
//ast_queue_control(tech_pvt->owner, AST_CONTROL_ANSWER);
POPPA_UNLOCKA(p->controldev_lock);
return 0;
}
+
+
+int gsmopen_serial_init_audio_port(private_t * tech_pvt, speed_t controldevice_audio_speed)
+{
+ 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);
+}
+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;
+
+
+ res = gsmopen_serial_write_AT_ack(tech_pvt, "AT^DDSETEX=2");
+ if (res) {
+ ERRORA("at_hangup command failed, command used: 'AT^DDSETEX=2'\n", GSMOPEN_P_LOG);
+ //return -1;
+ }
+
+ return err;
+}
+int serial_audio_shutdown(private_t * tech_pvt)
+{
+
+ int res;
+ int err;
+
+ res = close(tech_pvt->controldev_audio_fd);
+ 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;
+
+ err = res;
+
+ return err;
+}
+
+
+
+
+
+#ifdef GSMOPEN_ALSA
+int alsa_init(private_t * tech_pvt);
+int alsa_shutdown(private_t * tech_pvt);
+snd_pcm_t *alsa_open_dev(private_t * tech_pvt, snd_pcm_stream_t stream);
+int alsa_write(private_t * tech_pvt, short *data, int datalen);
+int alsa_read(private_t * tech_pvt, short *data, int datalen);
+
+#endif /* GSMOPEN_ALSA */
+
/*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005/2011, Anthony Minessale II <anthm@freeswitch.org>
}
}
#endif// GSMOPEN_PORTAUDIO
+ if(tech_pvt->no_sound==0){
+ if (serial_audio_init(tech_pvt)) {
+ ERRORA("serial_audio_init failed\n", GSMOPEN_P_LOG);
+ return SWITCH_STATUS_FALSE;
+
+ }
+ }
if (switch_core_timer_init(&tech_pvt->timer_read, "soft", 20, tech_pvt->read_codec.implementation->samples_per_packet, gsmopen_module_pool) !=
SWITCH_STATUS_SUCCESS) {
}
}
#endif// GSMOPEN_PORTAUDIO
+ if(tech_pvt->no_sound==0){
+ serial_audio_shutdown(tech_pvt);
+ }
*tech_pvt->session_uuid_str = '\0';
int i;
#endif// GSMOPEN_ALSA
#endif// WANT_SPEEX
+ int samples;
+ int samples2;
+ char digit_str[256];
+ short buffer2[640];
channel = switch_core_session_get_channel(session);
#ifndef GSMOPEN_PORTAUDIO
switch_core_timer_next(&tech_pvt->timer_read);
#endif// GSMOPEN_PORTAUDIO
+ //usleep(20000);
+ //goto cng;
if(tech_pvt->no_sound==1){
goto cng;
}
-#if defined(GSMOPEN_ALSA) || defined(GSMOPEN_PORTAUDIO)
+//#if defined(GSMOPEN_ALSA) || defined(GSMOPEN_PORTAUDIO)
#ifdef GSMOPEN_ALSA
//if ((samples = snd_pcm_readi(tech_pvt->alsac, tech_pvt->read_frame.data, tech_pvt->read_codec.implementation->samples_per_packet)) > 0)
if ((samples = alsa_read(tech_pvt, (short *) tech_pvt->read_frame.data, tech_pvt->read_codec.implementation->samples_per_packet)) > 0)
#ifdef GSMOPEN_PORTAUDIO
if ((samples = gsmopen_portaudio_read(tech_pvt, (short *) tech_pvt->read_frame.data, tech_pvt->read_codec.implementation->samples_per_packet)) > 0)
#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)
{
#ifdef GSMOPEN_PORTAUDIO
- tech_pvt->read_frame.datalen = samples * 2;
- tech_pvt->read_frame.samples = samples;
+ //tech_pvt->read_frame.datalen = samples * 2;
+ tech_pvt->read_frame.datalen = samples;
+ tech_pvt->read_frame.samples = samples/2;
#ifndef GSMOPEN_PORTAUDIO
tech_pvt->read_frame.timestamp = tech_pvt->timer_read.samplecount;
*frame = &tech_pvt->read_frame;
+ if ((samples2 = read(tech_pvt->controldev_audio_fd, (short *) buffer2, 320)) >0){
+ WARNINGA("samples2=%d\n", GSMOPEN_P_LOG, samples2);
+
+}
//status = SWITCH_STATUS_SUCCESS;
switch_set_flag(tech_pvt, TFLAG_VOICE);
}
//WARNINGA("samples=%d\n", GSMOPEN_P_LOG, samples);
- if (samples != 160) {
- ERRORA("samples=%d\n", GSMOPEN_P_LOG, samples);
+ if (samples != 320) {
+ //DEBUGA_GSMOPEN("samples=%d\n", GSMOPEN_P_LOG, samples);
goto cng;
}
//DEBUGA_GSMOPEN("samples=%d tech_pvt->read_frame.timestamp=%d\n", GSMOPEN_P_LOG, samples, tech_pvt->read_frame.timestamp);
-
+//#ifdef NOTDEF
memset(digit_str, 0, sizeof(digit_str));
//teletone_dtmf_detect(&tech_pvt->dtmf_detect, (int16_t *) tech_pvt->read_frame.data, tech_pvt->read_frame.samples);
tech_pvt->old_dtmf_timestamp = new_dtmf_timestamp;
}
}
+//#endif //NOTDEF
while (switch_test_flag(tech_pvt, TFLAG_IO)) {
if (switch_test_flag(tech_pvt, TFLAG_BREAK)) {
switch_clear_flag(tech_pvt, TFLAG_BREAK);
DEBUGA_GSMOPEN("CHANNEL READ FALSE\n", GSMOPEN_P_LOG);
return SWITCH_STATUS_FALSE;
-#endif // defined(GSMOPEN_ALSA) || defined(GSMOPEN_PORTAUDIO)
+//#endif // defined(GSMOPEN_ALSA) || defined(GSMOPEN_PORTAUDIO)
cng:
data = (switch_byte_t *) tech_pvt->read_frame.data;
data[0] = 65;
spx_int16_t *speexptr;
#endif// GSMOPEN_ALSA
#endif// WANT_SPEEX
+ unsigned int sent;
channel = switch_core_session_get_channel(session);
switch_assert(channel != NULL);
}
#endif //WANT_SPEEX
#endif // GSMOPEN_PORTAUDIO
+
+ 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) {
+ DEBUGA_GSMOPEN("sent %d\n", GSMOPEN_P_LOG, sent);
+ }
+
+
//NOTICA("sent=%d\n", GSMOPEN_P_LOG, sent);
return SWITCH_STATUS_SUCCESS;
}
const char *dialplan = "XML";
const char *destination = "5000";
const char *controldevice_name = "/dev/ttyACM0";
+ const char *controldevice_audio_name = "/dev/ttyUSB2";
char *digit_timeout = NULL;
char *max_digits = NULL;
char *hotline = NULL;
const char *at_postinit_3_expect = "OK";
const char *at_postinit_4 = "at+sidet=0";
const char *at_postinit_4_expect = "OK";
- const char *at_postinit_5 = "at+clvl=99";
+ const char *at_postinit_5 = "at+clvl=3";
const char *at_postinit_5_expect = "OK";
const char *at_query_battchg = "AT+CBC";
const char *at_query_battchg_expect = "OK";
const char *at_query_signal = "AT+CSQ";
const char *at_query_signal_expect = "OK";
const char *at_call_idle = "+MCST: 1";
- const char *at_call_incoming = "+MCST: 2";
- const char *at_call_active = "+CSSI: 7";
+ const char *at_call_incoming = "RING";
+ const char *at_call_active = "^CONN:1,0";
const char *at_call_failed = "+MCST: 65";
- const char *at_call_calling = "+CSSI: 1";
+ const char *at_call_calling = "^ORIG:1,0";
const char *at_indicator_noservice_string = "CIEV: 2;0";
const char *at_indicator_nosignal_string = "CIEV: 5;0";
const char *at_indicator_lowsignal_string = "CIEV: 5;1";
#if defined(GSMOPEN_ALSA) || defined(GSMOPEN_PORTAUDIO)
const char *no_sound = "0";
#else
- const char *no_sound = "1";
+ const char *no_sound = "0";
#endif // defined(GSMOPEN_ALSA) || defined(GSMOPEN_PORTAUDIO)
const char *portaudiocindex = "1";
const char *portaudiopindex = "1";
int controldevice_speed = 115200; //FIXME TODO
#else
uint32_t controldevice_speed = B115200; //FIXME TODO
+ uint32_t controldevice_audio_speed = B115200; //FIXME TODO
#endif //WIN32
uint32_t controldevprotocol = PROTOCOL_AT; //FIXME TODO
uint32_t running = 1; //FIXME TODO
destination = val;
} else if (!strcasecmp(var, "controldevice_name")) {
controldevice_name = val;
+ } else if (!strcasecmp(var, "controldevice_audio_name")) {
+ controldevice_audio_name = val;
} else if (!strcasecmp(var, "digit_timeout")) {
digit_timeout = val;
} else if (!strcasecmp(var, "max_digits")) {
tech_pvt = &globals.GSMOPEN_INTERFACES[interface_id];
switch_mutex_init(&globals.GSMOPEN_INTERFACES[interface_id].controldev_lock, SWITCH_MUTEX_NESTED, gsmopen_module_pool);
+ switch_mutex_init(&globals.GSMOPEN_INTERFACES[interface_id].controldev_audio_lock, SWITCH_MUTEX_NESTED, gsmopen_module_pool);
switch_set_string(globals.GSMOPEN_INTERFACES[interface_id].id, id);
switch_set_string(globals.GSMOPEN_INTERFACES[interface_id].dialplan, dialplan);
switch_set_string(globals.GSMOPEN_INTERFACES[interface_id].destination, destination);
switch_set_string(globals.GSMOPEN_INTERFACES[interface_id].controldevice_name, controldevice_name);
+ switch_set_string(globals.GSMOPEN_INTERFACES[interface_id].controldevice_audio_name, controldevice_audio_name);
switch_set_string(globals.GSMOPEN_INTERFACES[interface_id].dial_regex, dial_regex);
switch_set_string(globals.GSMOPEN_INTERFACES[interface_id].hold_music, hold_music);
switch_set_string(globals.GSMOPEN_INTERFACES[interface_id].fail_dial_regex, fail_dial_regex);
#if defined(GSMOPEN_ALSA) || defined(GSMOPEN_PORTAUDIO)
globals.GSMOPEN_INTERFACES[interface_id].no_sound = atoi(no_sound);
#else
- globals.GSMOPEN_INTERFACES[interface_id].no_sound = 1;
+ globals.GSMOPEN_INTERFACES[interface_id].no_sound = 0;
#endif // defined(GSMOPEN_ALSA) || defined(GSMOPEN_PORTAUDIO)
globals.GSMOPEN_INTERFACES[interface_id].gsmopen_serial_sync_period = atoi(gsmopen_serial_sync_period);
DEBUGA_GSMOPEN("dialplan=%s\n", GSMOPEN_P_LOG, globals.GSMOPEN_INTERFACES[interface_id].dialplan);
DEBUGA_GSMOPEN("destination=%s\n", GSMOPEN_P_LOG, globals.GSMOPEN_INTERFACES[interface_id].destination);
DEBUGA_GSMOPEN("controldevice_name=%s\n", GSMOPEN_P_LOG, globals.GSMOPEN_INTERFACES[interface_id].controldevice_name);
+ DEBUGA_GSMOPEN("controldevice_audio_name=%s\n", GSMOPEN_P_LOG, globals.GSMOPEN_INTERFACES[interface_id].controldevice_audio_name);
#ifdef GSMOPEN_ALSA
DEBUGA_GSMOPEN("alsacname=%s\n", GSMOPEN_P_LOG, globals.GSMOPEN_INTERFACES[interface_id].alsacname);
DEBUGA_GSMOPEN("alsapname=%s\n", GSMOPEN_P_LOG, globals.GSMOPEN_INTERFACES[interface_id].alsapname);
DEBUGA_GSMOPEN("speexpreprocess=%d\n", GSMOPEN_P_LOG, globals.GSMOPEN_INTERFACES[interface_id].speexpreprocess);
#endif// GSMOPEN_PORTAUDIO
DEBUGA_GSMOPEN("gsmopen_serial_sync_period=%d\n", GSMOPEN_P_LOG, (int)globals.GSMOPEN_INTERFACES[interface_id].gsmopen_serial_sync_period);
+
+
+
+
/* init the serial port */
if (globals.GSMOPEN_INTERFACES[interface_id].controldevprotocol != PROTOCOL_NO_SERIAL) {
globals.GSMOPEN_INTERFACES[interface_id].controldevfd =
}
#endif// GSMOPEN_PORTAUDIO
+ if (serial_audio_init(&globals.GSMOPEN_INTERFACES[interface_id])) {
+ ERRORA("serial_audio_init failed\n", GSMOPEN_P_LOG);
+ ERRORA("STARTING interface_id=%d FAILED\n", GSMOPEN_P_LOG, interface_id);
+ //return SWITCH_STATUS_FALSE;
+ globals.GSMOPEN_INTERFACES[interface_id].running=0;
+ alarm_event(&globals.GSMOPEN_INTERFACES[interface_id], ALARM_FAILED_INTERFACE, "serial_audio_init failed");
+ globals.GSMOPEN_INTERFACES[interface_id].active=0;
+ globals.GSMOPEN_INTERFACES[interface_id].name[0]='\0';
+ continue;
+
+ }
+
+ if (serial_audio_shutdown(&globals.GSMOPEN_INTERFACES[interface_id])) {
+ ERRORA("serial_audio_shutdown failed\n", GSMOPEN_P_LOG);
+ ERRORA("STARTING interface_id=%d FAILED\n", GSMOPEN_P_LOG, interface_id);
+ //return SWITCH_STATUS_FALSE;
+ globals.GSMOPEN_INTERFACES[interface_id].running=0;
+ alarm_event(&globals.GSMOPEN_INTERFACES[interface_id], ALARM_FAILED_INTERFACE, "serial_audio_shutdown failed");
+ globals.GSMOPEN_INTERFACES[interface_id].active=0;
+ globals.GSMOPEN_INTERFACES[interface_id].name[0]='\0';
+ continue;
+
+ }
+
+#ifdef NOTDEF
+ /* init the serial port */
+ if (globals.GSMOPEN_INTERFACES[interface_id].controldevprotocol != PROTOCOL_NO_SERIAL) {
+ globals.GSMOPEN_INTERFACES[interface_id].controldevfd =
+ gsmopen_serial_init(&globals.GSMOPEN_INTERFACES[interface_id], globals.GSMOPEN_INTERFACES[interface_id].controldevice_speed);
+ if (globals.GSMOPEN_INTERFACES[interface_id].controldevfd == -1) {
+ ERRORA("gsmopen_serial_init failed\n", GSMOPEN_P_LOG);
+ ERRORA("STARTING interface_id=%d FAILED\n", GSMOPEN_P_LOG, interface_id);
+ //return SWITCH_STATUS_FALSE;
+ globals.GSMOPEN_INTERFACES[interface_id].running=0;
+ alarm_event(&globals.GSMOPEN_INTERFACES[interface_id], ALARM_FAILED_INTERFACE, "gsmopen_serial_init failed");
+ globals.GSMOPEN_INTERFACES[interface_id].active=0;
+ globals.GSMOPEN_INTERFACES[interface_id].name[0]='\0';
+ continue;
+ }
+ }
+
+ /* config the phone/modem on the serial port */
+ if (globals.GSMOPEN_INTERFACES[interface_id].controldevprotocol != PROTOCOL_NO_SERIAL) {
+ res = gsmopen_serial_config(&globals.GSMOPEN_INTERFACES[interface_id]);
+ if (res) {
+ int count = 0;
+ ERRORA("gsmopen_serial_config failed, let's try again\n", GSMOPEN_P_LOG);
+ while(res && count < 5){
+ switch_sleep(100000); //0.1 seconds
+ res = gsmopen_serial_config(&globals.GSMOPEN_INTERFACES[interface_id]);
+ count++;
+ if (res) {
+ ERRORA("%d: gsmopen_serial_config failed, let's try again\n", GSMOPEN_P_LOG, count);
+ }
+ }
+ if (res) {
+ ERRORA("STARTING interface_id=%d FAILED\n", GSMOPEN_P_LOG, interface_id);
+ //return SWITCH_STATUS_FALSE;
+ globals.GSMOPEN_INTERFACES[interface_id].running=0;
+ alarm_event(&globals.GSMOPEN_INTERFACES[interface_id], ALARM_FAILED_INTERFACE, "gsmopen_serial_config failed");
+ globals.GSMOPEN_INTERFACES[interface_id].active=0;
+ globals.GSMOPEN_INTERFACES[interface_id].name[0]='\0';
+ continue;
+ }
+ }
+ }
+#endif// NOTDEF
+
+
+
}
globals.GSMOPEN_INTERFACES[interface_id].active=1;
DEBUGA_GSMOPEN("speexpreprocess=%d\n", GSMOPEN_P_LOG, globals.GSMOPEN_INTERFACES[i].speexpreprocess);
#endif// GSMOPEN_PORTAUDIO
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);
}
}