[asterisk-addons-commits] mnicholson: branch mnicholson/chan-mobile-refactor r741 - /team/mnicholson/ch...
SVN commits to the Asterisk addons project
asterisk-addons-commits at lists.digium.com
Mon Jan 26 11:15:21 CST 2009
Author: mnicholson
Date: Mon Jan 26 11:15:21 2009
New Revision: 741
URL: http://svn.digium.com/svn-view/asterisk-addons?view=rev&rev=741
Log:
Rewrote the do_monitor_* functions for the new rfcomm_wait and rfcomm_read
functions.
Modified:
team/mnicholson/chan-mobile-refactor/channels/chan_mobile.c
Modified: team/mnicholson/chan-mobile-refactor/channels/chan_mobile.c
URL: http://svn.digium.com/svn-view/asterisk-addons/team/mnicholson/chan-mobile-refactor/channels/chan_mobile.c?view=diff&rev=741&r1=740&r2=741
==============================================================================
--- team/mnicholson/chan-mobile-refactor/channels/chan_mobile.c (original)
+++ team/mnicholson/chan-mobile-refactor/channels/chan_mobile.c Mon Jan 26 11:15:21 2009
@@ -1316,7 +1316,8 @@
char monitor = 1;
char buf[256];
char cid_num[AST_MAX_EXTENSION], *pcids, *pcide;
- int s, t, i, smsi;
+ int t, i, smsi, waitfd;
+ ssize_t s;
int group, group2;
int callp = 0, callsetupp;
char brsf, nsmode, *p, *p1;
@@ -1331,20 +1332,33 @@
while (monitor) {
if (pvt->state == MBL_STATE_DIAL1)
- t = pvt->dial_timeout;
+ t = pvt->dial_timeout * 1000;
else if (pvt->state == MBL_STATE_HANGUP)
- t = 2;
+ t = 2000;
else if (pvt->state == MBL_STATE_OUTSMS1)
- t = 2;
+ t = 2000;
else if (pvt->state == MBL_STATE_OUTSMS2)
- t = 10;
+ t = 10000;
else
- t = 1;
-
- s = rfcomm_read(pvt, buf, 0, t);
-
- if ((s > 0) && (buf[0] != 0x0) && (buf[0] != '\r')) {
- ast_debug(1, "rfcomm_read() (%s) [%s]\n", pvt->id, buf);
+ t = 1000;
+
+ waitfd = rfcomm_wait(pvt->rfcomm_socket, &t);
+
+ if (waitfd == pvt->rfcomm_socket) {
+ s = rfcomm_read(pvt->rfcomm_socket, buf, sizeof(buf));
+
+ if (s < 1) {
+ monitor = 0;
+ continue;
+ }
+
+ ast_debug(1, "rfcomm_read() (%s) [%.*s]\n", pvt->id, s, buf);
+
+ if (s < sizeof(buf))
+ buf[s] = '\0';
+ else
+ buf[sizeof(buf) - 1] = '\0';
+
switch (pvt->state) {
case MBL_STATE_INIT:
if (strstr(buf, "+BRSF:")) {
@@ -1608,7 +1622,7 @@
}
}
- } else if (s == 0) { /* Timeouts */
+ } else if (waitfd = -1) { /* Timeouts */
if (pvt->state == MBL_STATE_INIT2) { /* Some devices dont respond to AT+CIND? properly. RIM Blackberry 4 example */
pvt->state++;
rfcomm_write(pvt->rfcomm_socket, "AT+CMER=3,0,0,1\r");
@@ -1662,7 +1676,7 @@
ast_log(LOG_ERROR, "Failed to send SMS to %s on device %s\n", pvt->dial_number, pvt->id);
pvt->state = MBL_STATE_IDLE;
}
- } else if (s == -1) {
+ } else if (waitfd == 0) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Bluetooth Device %s has disconnected, reason (%d).\n", pvt->id, errno);
monitor = 0;
@@ -1698,20 +1712,35 @@
struct mbl_pvt *pvt = (struct mbl_pvt *)data;
char monitor = 1;
char buf[256];
- int s, t;
+ int t, waitfd;
+ ssize_t s;
pvt->state = MBL_STATE_PREIDLE;
while (monitor) {
if (pvt->state == MBL_STATE_RING2)
- t = 2;
+ t = 2000;
else
- t = 1;
- s = rfcomm_read(pvt, buf, 0, t);
-
- if ((s > 0) && (buf[0] != 0x0) && (buf[0] != '\r')) {
- ast_debug(1, "rfcomm_read() (%s) [%s]\n", pvt->id, buf);
+ t = 1000;
+
+ waitfd = rfcomm_wait(pvt->rfcomm_socket, &t);
+
+ if (waitfd == pvt->rfcomm_socket) {
+ s = rfcomm_read(pvt->rfcomm_socket, buf, sizeof(buf));
+
+ if (s < 1) {
+ monitor = 0;
+ continue;
+ }
+
+ ast_debug(1, "rfcomm_read() (%s) [%.*s]\n", pvt->id, s, buf);
+
+ if (s < sizeof(buf))
+ buf[s] = '\0';
+ else
+ buf[sizeof(buf) - 1] = '\0';
+
switch (pvt->state) {
case MBL_STATE_RING2:
if (strstr(buf, "AT+CKPD=")) {
@@ -1734,7 +1763,7 @@
} else if (strstr(buf, "AT+VGM=")) {
rfcomm_write(pvt->rfcomm_socket, "\r\nOK\r\n");
}
- } else if (s == 0) { /* Timeouts */
+ } else if (waitfd == -1) { /* Timeouts */
if (pvt->state == MBL_STATE_PREIDLE) {
pvt->connected = 1;
ast_verbose(VERBOSE_PREFIX_3 "Bluetooth Device %s initialised and ready.\n", pvt->id);
@@ -1751,7 +1780,7 @@
} else if (pvt->state == MBL_STATE_RING2) {
rfcomm_write(pvt->rfcomm_socket, "\r\nRING\r\n");
}
- } else if (s == -1) {
+ } else if (waitfd == 0) {
if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "Bluetooth Device %s has disconnected, reason (%d).\n", pvt->id, errno);
monitor = 0;
More information about the asterisk-addons-commits
mailing list