mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-06-01 11:10:24 +00:00
gsmopen: continue AT control with tcblib, basic calls ok
This commit is contained in:
parent
3c27c1f823
commit
94ca0be296
@ -546,7 +546,7 @@ int gsmopen_serial_read_AT(private_t * tech_pvt, int look_for_ack, int timeout_u
|
|||||||
{
|
{
|
||||||
int select_err = 1;
|
int select_err = 1;
|
||||||
int res;
|
int res;
|
||||||
fd_set read_fds;
|
//fd_set read_fds;
|
||||||
struct timeval timeout;
|
struct timeval timeout;
|
||||||
char tmp_answer[AT_BUFSIZ];
|
char tmp_answer[AT_BUFSIZ];
|
||||||
char tmp_answer2[AT_BUFSIZ];
|
char tmp_answer2[AT_BUFSIZ];
|
||||||
@ -557,13 +557,19 @@ int gsmopen_serial_read_AT(private_t * tech_pvt, int look_for_ack, int timeout_u
|
|||||||
int la_counter = 0;
|
int la_counter = 0;
|
||||||
int at_ack = -1;
|
int at_ack = -1;
|
||||||
int la_read = 0;
|
int la_read = 0;
|
||||||
|
int timeout1;
|
||||||
|
|
||||||
|
timeout1 = (timeout_sec * 1000) + (timeout_usec ? (timeout_usec / 1000) : 0 );
|
||||||
|
|
||||||
|
if(timeout1 != 100)
|
||||||
|
ERRORA("TIMEOUT=%d\n", GSMOPEN_P_LOG, timeout1);
|
||||||
|
|
||||||
if(!running || !tech_pvt->running){
|
if(!running || !tech_pvt->running){
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
FD_ZERO(&read_fds);
|
////FD_ZERO(&read_fds);
|
||||||
FD_SET(tech_pvt->controldevfd, &read_fds);
|
//FD_SET(tech_pvt->controldevfd, &read_fds);
|
||||||
|
|
||||||
//NOTICA (" INSIDE this gsmopen_serial_device %s \n", GSMOPEN_P_LOG, tech_pvt->controldevice_name);
|
//NOTICA (" INSIDE this gsmopen_serial_device %s \n", GSMOPEN_P_LOG, tech_pvt->controldevice_name);
|
||||||
tmp_answer_ptr = tmp_answer;
|
tmp_answer_ptr = tmp_answer;
|
||||||
@ -574,18 +580,20 @@ int gsmopen_serial_read_AT(private_t * tech_pvt, int look_for_ack, int timeout_u
|
|||||||
PUSHA_UNLOCKA(tech_pvt->controldev_lock);
|
PUSHA_UNLOCKA(tech_pvt->controldev_lock);
|
||||||
LOKKA(tech_pvt->controldev_lock);
|
LOKKA(tech_pvt->controldev_lock);
|
||||||
|
|
||||||
while ((!tech_pvt->controldev_dead) && ((select_err = select(tech_pvt->controldevfd + 1, &read_fds, NULL, NULL, &timeout)) > 0)) {
|
//while ((!tech_pvt->controldev_dead) && ((select_err = select(tech_pvt->controldevfd + 1, &read_fds, NULL, NULL, &timeout)) > 0)) {
|
||||||
|
while ( (!tech_pvt->controldev_dead) && (read_count = tech_pvt->serialPort_serial_control->Readv(tmp_answer_ptr, AT_BUFSIZ - (tmp_answer_ptr - tmp_answer), (timeout_sec * 1000) + (timeout_usec ? (timeout_usec / 1000) : 0 ) ) > 0) ) {
|
||||||
char *token_ptr;
|
char *token_ptr;
|
||||||
timeout.tv_sec = timeout_sec; //reset the timeout, linux modify it
|
timeout.tv_sec = timeout_sec; //reset the timeout, linux modify it
|
||||||
timeout.tv_usec = timeout_usec; //reset the timeout, linux modify it
|
timeout.tv_usec = timeout_usec; //reset the timeout, linux modify it
|
||||||
read_count = read(tech_pvt->controldevfd, tmp_answer_ptr, AT_BUFSIZ - (tmp_answer_ptr - tmp_answer));
|
//cicopet read_count = read(tech_pvt->controldevfd, tmp_answer_ptr, AT_BUFSIZ - (tmp_answer_ptr - tmp_answer));
|
||||||
|
//cicopet read_count = tech_pvt->serialPort_serial_control->Readv(tmp_answer_ptr, AT_BUFSIZ - (tmp_answer_ptr - tmp_answer), (timeout_sec * 1000) + (timeout_usec ? (timeout_usec / 1000) : 0 ) );
|
||||||
|
|
||||||
if (read_count == 0) {
|
if (read_count == 0) {
|
||||||
ERRORA
|
ERRORA
|
||||||
("read 0 bytes!!! Nenormalno! Marking this gsmopen_serial_device %s as dead, andif it is owned by a channel, hanging up. Maybe the phone is stuck, switched off, power down or battery exhausted\n",
|
("read 0 bytes!!! Nenormalno! Marking this gsmopen_serial_device %s as dead, andif it is owned by a channel, hanging up. Maybe the phone is stuck, switched off, power down or battery exhausted\n",
|
||||||
GSMOPEN_P_LOG, tech_pvt->controldevice_name);
|
GSMOPEN_P_LOG, tech_pvt->controldevice_name);
|
||||||
tech_pvt->controldev_dead = 1;
|
tech_pvt->controldev_dead = 1;
|
||||||
close(tech_pvt->controldevfd);
|
//cicopet close(tech_pvt->controldevfd);
|
||||||
ERRORA("gsmopen_serial_monitor failed, declaring %s dead\n", GSMOPEN_P_LOG, tech_pvt->controldevice_name);
|
ERRORA("gsmopen_serial_monitor failed, declaring %s dead\n", GSMOPEN_P_LOG, tech_pvt->controldevice_name);
|
||||||
tech_pvt->running=0;
|
tech_pvt->running=0;
|
||||||
alarm_event(tech_pvt, ALARM_FAILED_INTERFACE, "gsmopen_serial_monitor failed, declaring interface dead");
|
alarm_event(tech_pvt, ALARM_FAILED_INTERFACE, "gsmopen_serial_monitor failed, declaring interface dead");
|
||||||
@ -1725,7 +1733,7 @@ int gsmopen_serial_read_AT(private_t * tech_pvt, int look_for_ack, int timeout_u
|
|||||||
if (select_err == -1) {
|
if (select_err == -1) {
|
||||||
ERRORA("select returned -1 on %s, setting controldev_dead, error was: %s\n", GSMOPEN_P_LOG, tech_pvt->controldevice_name, strerror(errno));
|
ERRORA("select returned -1 on %s, setting controldev_dead, error was: %s\n", GSMOPEN_P_LOG, tech_pvt->controldevice_name, strerror(errno));
|
||||||
tech_pvt->controldev_dead = 1;
|
tech_pvt->controldev_dead = 1;
|
||||||
close(tech_pvt->controldevfd);
|
//cicopet close(tech_pvt->controldevfd);
|
||||||
|
|
||||||
tech_pvt->running=0;
|
tech_pvt->running=0;
|
||||||
alarm_event(tech_pvt, ALARM_FAILED_INTERFACE, "select returned -1 on interface, setting controldev_dead");
|
alarm_event(tech_pvt, ALARM_FAILED_INTERFACE, "select returned -1 on interface, setting controldev_dead");
|
||||||
@ -1796,48 +1804,54 @@ int gsmopen_serial_read_AT(private_t * tech_pvt, int look_for_ack, int timeout_u
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//cicopet int gsmopen_serial_write_AT(private_t * tech_pvt, const char *data)
|
||||||
int gsmopen_serial_write_AT(private_t * tech_pvt, const char *data)
|
int gsmopen_serial_write_AT(private_t * tech_pvt, const char *data)
|
||||||
{
|
{
|
||||||
int howmany;
|
int howmany;
|
||||||
int i;
|
int i;
|
||||||
int res;
|
int res;
|
||||||
int count;
|
int count;
|
||||||
|
char *Data=(char *)data;
|
||||||
|
|
||||||
howmany = strlen(data);
|
howmany = strlen(Data);
|
||||||
|
|
||||||
for (i = 0; i < howmany; i++) {
|
for (i = 0; i < howmany; i++) {
|
||||||
res = write(tech_pvt->controldevfd, &data[i], 1);
|
//cicopetres = write(tech_pvt->controldevfd, &data[i], 1);
|
||||||
|
res = tech_pvt->serialPort_serial_control->Write(&Data[i], 1);
|
||||||
|
|
||||||
if (res != 1) {
|
if (res != 1) {
|
||||||
DEBUGA_GSMOPEN("Error sending (%.1s): %d (%s)\n", GSMOPEN_P_LOG, &data[i], res, strerror(errno));
|
DEBUGA_GSMOPEN("Error sending (%.1s): %d (%s)\n", GSMOPEN_P_LOG, &Data[i], res, strerror(errno));
|
||||||
gsmopen_sleep(100000);
|
gsmopen_sleep(100000);
|
||||||
for (count = 0; count < 10; count++) {
|
for (count = 0; count < 10; count++) {
|
||||||
res = write(tech_pvt->controldevfd, &data[i], 1);
|
//cicopet res = write(tech_pvt->controldevfd, &data[i], 1);
|
||||||
|
res = tech_pvt->serialPort_serial_control->Write(&Data[i], 1);
|
||||||
if (res == 1) {
|
if (res == 1) {
|
||||||
DEBUGA_GSMOPEN("Successfully RE-sent (%.1s): %d %d (%s)\n", GSMOPEN_P_LOG, &data[i], count, res, strerror(errno));
|
DEBUGA_GSMOPEN("Successfully RE-sent (%.1s): %d %d (%s)\n", GSMOPEN_P_LOG, &Data[i], count, res, strerror(errno));
|
||||||
break;
|
break;
|
||||||
} else
|
} else
|
||||||
DEBUGA_GSMOPEN("Error RE-sending (%.1s): %d %d (%s)\n", GSMOPEN_P_LOG, &data[i], count, res, strerror(errno));
|
DEBUGA_GSMOPEN("Error RE-sending (%.1s): %d %d (%s)\n", GSMOPEN_P_LOG, &Data[i], count, res, strerror(errno));
|
||||||
gsmopen_sleep(100000);
|
gsmopen_sleep(100000);
|
||||||
|
|
||||||
}
|
}
|
||||||
if (res != 1) {
|
if (res != 1) {
|
||||||
ERRORA("Error RE-sending (%.1s): %d %d (%s)\n", GSMOPEN_P_LOG, &data[i], count, res, strerror(errno));
|
ERRORA("Error RE-sending (%.1s): %d %d (%s)\n", GSMOPEN_P_LOG, &Data[i], count, res, strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (option_debug > 1)
|
if (option_debug > 1)
|
||||||
DEBUGA_GSMOPEN("sent data... (%.1s)\n", GSMOPEN_P_LOG, &data[i]);
|
DEBUGA_GSMOPEN("sent data... (%.1s)\n", GSMOPEN_P_LOG, &Data[i]);
|
||||||
gsmopen_sleep(1000); /* release the cpu */
|
gsmopen_sleep(1000); /* release the cpu */
|
||||||
}
|
}
|
||||||
|
|
||||||
res = write(tech_pvt->controldevfd, "\r", 1);
|
//cicopet res = write(tech_pvt->controldevfd, "\r", 1);
|
||||||
|
res = tech_pvt->serialPort_serial_control->Write((char *)"\r", 1);
|
||||||
|
|
||||||
if (res != 1) {
|
if (res != 1) {
|
||||||
DEBUGA_GSMOPEN("Error sending (carriage return): %d (%s)\n", GSMOPEN_P_LOG, res, strerror(errno));
|
DEBUGA_GSMOPEN("Error sending (carriage return): %d (%s)\n", GSMOPEN_P_LOG, res, strerror(errno));
|
||||||
gsmopen_sleep(100000);
|
gsmopen_sleep(100000);
|
||||||
for (count = 0; count < 10; count++) {
|
for (count = 0; count < 10; count++) {
|
||||||
res = write(tech_pvt->controldevfd, "\r", 1);
|
//cicopet res = write(tech_pvt->controldevfd, "\r", 1);
|
||||||
|
res = tech_pvt->serialPort_serial_control->Write((char *)"\r", 1);
|
||||||
|
|
||||||
if (res == 1) {
|
if (res == 1) {
|
||||||
DEBUGA_GSMOPEN("Successfully RE-sent carriage return: %d %d (%s)\n", GSMOPEN_P_LOG, count, res, strerror(errno));
|
DEBUGA_GSMOPEN("Successfully RE-sent carriage return: %d %d (%s)\n", GSMOPEN_P_LOG, count, res, strerror(errno));
|
||||||
@ -1865,31 +1879,34 @@ int gsmopen_serial_write_AT_nocr(private_t * tech_pvt, const char *data)
|
|||||||
int i;
|
int i;
|
||||||
int res;
|
int res;
|
||||||
int count;
|
int count;
|
||||||
|
char *Data=(char *)data;
|
||||||
|
|
||||||
howmany = strlen(data);
|
howmany = strlen(Data);
|
||||||
|
|
||||||
for (i = 0; i < howmany; i++) {
|
for (i = 0; i < howmany; i++) {
|
||||||
res = write(tech_pvt->controldevfd, &data[i], 1);
|
//cicopet res = write(tech_pvt->controldevfd, &data[i], 1);
|
||||||
|
res = tech_pvt->serialPort_serial_control->Write(&Data[i], 1);
|
||||||
|
|
||||||
if (res != 1) {
|
if (res != 1) {
|
||||||
DEBUGA_GSMOPEN("Error sending (%.1s): %d (%s)\n", GSMOPEN_P_LOG, &data[i], res, strerror(errno));
|
DEBUGA_GSMOPEN("Error sending (%.1s): %d (%s)\n", GSMOPEN_P_LOG, &Data[i], res, strerror(errno));
|
||||||
gsmopen_sleep(100000);
|
gsmopen_sleep(100000);
|
||||||
for (count = 0; count < 10; count++) {
|
for (count = 0; count < 10; count++) {
|
||||||
res = write(tech_pvt->controldevfd, &data[i], 1);
|
//cicopet res = write(tech_pvt->controldevfd, &data[i], 1);
|
||||||
|
res = tech_pvt->serialPort_serial_control->Write(&Data[i], 1);
|
||||||
if (res == 1)
|
if (res == 1)
|
||||||
break;
|
break;
|
||||||
else
|
else
|
||||||
DEBUGA_GSMOPEN("Error RE-sending (%.1s): %d %d (%s)\n", GSMOPEN_P_LOG, &data[i], count, res, strerror(errno));
|
DEBUGA_GSMOPEN("Error RE-sending (%.1s): %d %d (%s)\n", GSMOPEN_P_LOG, &Data[i], count, res, strerror(errno));
|
||||||
gsmopen_sleep(100000);
|
gsmopen_sleep(100000);
|
||||||
|
|
||||||
}
|
}
|
||||||
if (res != 1) {
|
if (res != 1) {
|
||||||
ERRORA("Error RE-sending (%.1s): %d %d (%s)\n", GSMOPEN_P_LOG, &data[i], count, res, strerror(errno));
|
ERRORA("Error RE-sending (%.1s): %d %d (%s)\n", GSMOPEN_P_LOG, &Data[i], count, res, strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (option_debug > 1)
|
if (option_debug > 1)
|
||||||
DEBUGA_GSMOPEN("sent data... (%.1s)\n", GSMOPEN_P_LOG, &data[i]);
|
DEBUGA_GSMOPEN("sent data... (%.1s)\n", GSMOPEN_P_LOG, &Data[i]);
|
||||||
gsmopen_sleep(1000); /* release the cpu */
|
gsmopen_sleep(1000); /* release the cpu */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1932,7 +1949,8 @@ int gsmopen_serial_write_AT_ack(private_t * tech_pvt, const char *data)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
at_result = gsmopen_serial_read_AT(tech_pvt, 1, 500000, 2, NULL, 1); // 2.5 sec timeout
|
//cicopet at_result = gsmopen_serial_read_AT(tech_pvt, 1, 500000, 2, NULL, 1); // 2.5 sec timeout
|
||||||
|
at_result = gsmopen_serial_read_AT(tech_pvt, 1, 100000, 0, NULL, 1); // 1/10th sec timeout
|
||||||
UNLOCKA(tech_pvt->controldev_lock);
|
UNLOCKA(tech_pvt->controldev_lock);
|
||||||
POPPA_UNLOCKA(tech_pvt->controldev_lock);
|
POPPA_UNLOCKA(tech_pvt->controldev_lock);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user