Hi Denis and Gustavo, On 13/08/12 19:03, Denis Kenzior wrote:
Hi Christopher,CC-ing Gustavo since he wrote much of the SAP bits in this driver... On 08/13/2012 08:17 AM, Christopher Vogl wrote:Use MDM port for data service and AUX for the AT chat. Disable DCD so that the modem does not hangup after a data connection. Add vendor for sim and gprs. udevng: rename aux port from Data to Aux for telit. Telit software user guide says: USB AUX doesn’t support any flow control method. Therefore, this port isn’t suitable for DATA service port. We recommend this port should be used only for AT command and URC processing. ---plugins/telit.c | 76 +++++++++++++++++++++++++++++++++++++----------------plugins/udevng.c | 2 +- 2 files changed, 54 insertions(+), 24 deletions(-) diff --git a/plugins/telit.c b/plugins/telit.c index 853fd44..8446a22 100644 --- a/plugins/telit.c +++ b/plugins/telit.c @@ -65,8 +65,8 @@ static const char *qss_prefix[] = { "#QSS:", NULL }; static const char *rsen_prefix[]= { "#RSEN:", NULL }; struct telit_data { - GAtChat *chat; - GAtChat *aux; + GAtChat *chat; /* AT chat */ + GAtChat *modem; /* Data port */ struct ofono_sim *sim; struct ofono_modem *sap_modem; GIOChannel *bt_io;@@ -295,6 +295,13 @@ static void cfun_enable_cb(gboolean ok, GAtResult *result, gpointer user_data)return; } + /* + * Switch data carrier detect signal off. + * When the DCD is disabled the modem does not hangup anymore + * after the data connection. + */ + g_at_chat_send(data->chat, "AT&C0", NULL, NULL, NULL, NULL); + ofono_modem_set_powered(m, TRUE); /* Enable sim state notification */ @@ -311,10 +318,19 @@ static int telit_enable(struct ofono_modem *modem) DBG("%p", modem); - data->chat = open_device(modem, "Modem", "Modem: "); - if (data->chat == NULL) + data->modem = open_device(modem, "Modem", "Modem: "); + if (data->modem == NULL) return -EINVAL; + data->chat = open_device(modem, "Aux", "Aux: "); + if (data->chat == NULL) { + g_at_chat_unref(data->modem); + data->modem = NULL; + return -EIO; + } + + g_at_chat_set_slave(data->modem, data->chat); +Gustavo, are you OK with these changes? I do not recall whether it made a difference on which port the #RSEN was being sent./* * Disable command echo and * enable the Extended Error Result Codes@@ -362,8 +378,6 @@ static void rsen_enable_cb(gboolean ok, GAtResult *result, gpointer user_data)DBG("%p", modem); if (!ok) { - g_at_chat_unref(data->aux); - data->aux = NULL; ofono_modem_set_powered(data->sap_modem, FALSE); sap_close_io(modem); return;@@ -380,6 +394,21 @@ static void cfun_disable_cb(gboolean ok, GAtResult *result, gpointer user_data)DBG("%p", modem); + GIOChannel *channel = g_at_chat_get_channel(data->modem); + if(channel) { + g_io_channel_unref(channel); + channel = NULL; + }Why do you need this part? What's the reason to manually unref the channel?
This is a relict of a workmate desperately trying to find out why the modem hangs up after a ppp connection -
which was finally solved by sending '&CO'.Sorry, this code part does not belong here and I have to be more careful when sending patches.
+ + g_at_chat_unref(data->modem); + data->modem = NULL; + + channel = g_at_chat_get_channel(data->chat); + if(channel) { + g_io_channel_unref(channel); + channel = NULL; + } +And here?g_at_chat_unref(data->chat); data->chat = NULL; @@ -394,6 +423,9 @@ static int telit_disable(struct ofono_modem *modem) struct telit_data *data = ofono_modem_get_data(modem); DBG("%p", modem); + g_at_chat_cancel_all(data->modem); + g_at_chat_unregister_all(data->modem); + g_at_chat_cancel_all(data->chat); g_at_chat_unregister_all(data->chat);@@ -411,9 +443,6 @@ static void rsen_disable_cb(gboolean ok, GAtResult *result, gpointer user_data)DBG("%p", modem); - g_at_chat_unref(data->aux); - data->aux = NULL; - sap_close_io(modem); telit_disable(modem);@@ -469,10 +498,6 @@ static int telit_sap_enable(struct ofono_modem *modem,g_io_channel_set_buffered(data->hw_io, FALSE); g_io_channel_set_close_on_unref(data->hw_io, TRUE); - data->aux = open_device(modem, "Data", "Aux: "); - if (data->aux == NULL) - goto error; - data->bt_io = g_io_channel_unix_new(bt_fd); if (data->bt_io == NULL) goto error;@@ -491,13 +516,13 @@ static int telit_sap_enable(struct ofono_modem *modem,data->sap_modem = sap_modem; - g_at_chat_register(data->aux, "#RSEN:", telit_rsen_notify, + g_at_chat_register(data->chat, "#RSEN:", telit_rsen_notify, FALSE, modem, NULL); - g_at_chat_send(data->aux, "AT#NOPT=0", NULL, NULL, NULL, NULL); + g_at_chat_send(data->chat, "AT#NOPT=0", NULL, NULL, NULL, NULL); /* Set SAP functionality */ - g_at_chat_send(data->aux, "AT#RSEN=1,1,0,2,0", rsen_prefix, + g_at_chat_send(data->chat, "AT#RSEN=1,1,0,2,0", rsen_prefix, rsen_enable_cb, modem, NULL); return -EINPROGRESS;@@ -516,10 +541,7 @@ static int telit_sap_disable(struct ofono_modem *modem)DBG("%p", modem); - g_at_chat_cancel_all(data->aux); - g_at_chat_unregister_all(data->aux); -Removing this part might not be correct, Gustavo?
telit_sap_disable() will lead to a call of rsen_disable_cb(), which in turn calls telit_disable().
telit_disable() includes the code removed above.
static struct ofono_modem_driver telit_driver = { diff --git a/plugins/udevng.c b/plugins/udevng.c index 872039a..bd5e5e0 100644 --- a/plugins/udevng.c +++ b/plugins/udevng.c@@ -615,7 +615,7 @@ static gboolean setup_telit(struct modem_info *modem)DBG("modem=%s aux=%s gps=%s diag=%s", mdm, aux, gps, diag); ofono_modem_set_string(modem->modem, "Modem", mdm); - ofono_modem_set_string(modem->modem, "Data", aux); + ofono_modem_set_string(modem->modem, "Aux", aux); ofono_modem_set_string(modem->modem, "GPS", gps); return TRUE;This part belongs in a separate patch.
Ok! Corrected patches will follow. Regards, Christopher -- Scanned by MailScanner. _______________________________________________ ofono mailing list [email protected] http://lists.ofono.org/listinfo/ofono
