Hi Caiwen,

On 08/19/2011 04:46 AM, Zhang, Caiwen wrote:
> Hi,
> 
> I find there may be some issues about GPRS state, please help check them.
> 
> (1) gprs->driver_attached is set to TURE just according to GPRS registration 
> state.
> It may cause the following issue.
> 
> 1 ofonod[619]: PCUI: < \r\n^SRVST:1\r\n\r\n+CREG: 2\r\n\r\n+CGREG: 
> 2\r\n\r\n^SRVST:2\r\n\r\n+CREG: 1, A807, A72B71\r\n\r\n+CGREG: 0\r\n
> 2 ofonod[619]: src/network.c:current_operator_callback() 0xa046ea0, 0xa0476e8
> 3 ofonod[619]: src/gprs.c:netreg_status_changed() 2           
> #driver_attached = FALSE
> 4 ofonod[619]: src/cbs.c:cbs_location_changed() 2, -1, -1, -1, (null)(null)
> 5 ofonod[619]: src/cbs.c:cbs_location_changed() 1, 0, 0
> 6 ofonod[619]: src/gprs.c:netreg_status_changed() 2
> 7 ofonod[619]: src/cbs.c:cbs_location_changed() 2, -1, -1, -1, (null)(null)
> 8 ofonod[619]: src/gprs.c:ofono_gprs_status_notify() /huawei0 status 2
> 9 ofonod[619]: src/gprs.c:netreg_status_changed() 1     
> 10 ofonod[619]: src/cbs.c:cbs_location_changed() 1, 43015, 10955633, -1, 
> (null)(null)
> 11 ofonod[619]: src/gprs.c:ofono_gprs_status_notify() /huawei0 status 0
> 12 ofonod[619]: PCUI: > AT+CSCB=0,"0,25,38,50,100,136,256,4352-4356"\r
> 13 ofonod[619]: PCUI: < \r\nOK\r\n
> 14 ofonod[619]: PCUI: > AT+CRSM=192,28437,0,0,255\r
> 15 ofonod[619]: PCUI: < \r\n+CREG: 1, A807, A72B71\r\n\r\n+CGREG: 1, A807, 
> A72B71\r\n
> 16 ofonod[619]: src/gprs.c:netreg_status_changed() 1
> 17 ofonod[619]: src/cbs.c:cbs_location_changed() 1, 43015, 10955633, -1, 
> (null)(null)
> 18 ofonod[619]: src/gprs.c:ofono_gprs_status_notify() /huawei0 status 1    
> #driver_attached = TRUE
> 19 ofonod[619]: PCUI: < \r\n+CRSM: 106,130,""\r\n\r\nOK\r\n
> 20 ofonod[619]: PCUI: > AT+CGATT=0\r
> 21 ofonod[619]: PCUI: < \r\n+CREG: 1, A807, A72B71\r\n\r\n+CGREG: 
> 0\r\n\r\nOK\r\n
> 22 ofonod[619]: src/gprs.c:netreg_status_changed() 1
> 23 ofonod[619]: src/cbs.c:cbs_location_changed() 1, 43015, 10955633, -1, 
> (null)(null)
> 24 ofonod[619]: src/gprs.c:ofono_gprs_status_notify() /huawei0 status 0
> 25 ofonod[619]: src/gprs.c:gprs_attach_callback() /huawei0 error = 0
> 
> At line 3 gprs_netreg_update() is called, driver_attached is set to FALSE. 
> Due to there
> are some AT command in the queue, AT+CGATT=0 is not sent out immediately(till 
> at line 20).
> At line 18, driver_attached is set to TRUE. In fact after line 21, GPRS is 
> detached.
> In src/gprs.c there is only one place to attach GPRS, it is in 
> gprs_netreg_update().
> due to driver_attached is TRUE, gprs_netreg_update() will always return before
> gprs->driver->set_attached() invoked.
>

It seems to me the issue is that we do not check the FLAG_ATTACHING
properly inside ofono_gprs_status_notify.  I've already proposed a fix
for this a while ago, please see it again (attached).

> For this issue I have submit two patches, please see attached.
> 
> (2) After receive "NW DETACH"/"ME DETACH" unsolicited message, GPRS is not 
> re-attached. It will
> cause can not connect GPRS connection any more.
> 
> (3) In AT modem GPRS driver, the attach status query 
> function(.attached_status) is implememted
> as query the GPRS registration status. Is it by mistake or intended? It is 
> very confusable.
> 

Attached means whether we're actually attached to PS service.  The
reason the driver method is called attached_status is that some modems
(e.g. isi) do not have (and rightfully so) a concept of 'PS registration
status' as returned by CGREG.  So yes, it is on purpose and it is not a
mistake.

Regards,
-Denis
>From ddbacc2dda8db476924181bff49356087c8ccc70 Mon Sep 17 00:00:00 2001
From: Denis Kenzior <[email protected]>
Date: Mon, 25 Jul 2011 21:42:35 -0500
Subject: [PATCH] gprs: Experimental fix for twitchy Huawei firmware

---
 src/gprs.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/src/gprs.c b/src/gprs.c
index acbfa56..b9e3105 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -2108,6 +2108,14 @@ void ofono_gprs_status_notify(struct ofono_gprs *gprs, 
int status)
                return;
        }
 
+       /*
+        * If we're already taking action, e.g. attaching or detaching, then
+        * ignore this notification for now, we will take appropriate action
+        * after the set_attach operation has completed
+        */
+       if (gprs->flags & GPRS_FLAG_ATTACHING)
+               return;
+
        /* We registered without being powered */
        if (gprs->powered == FALSE)
                goto detach;
-- 
1.7.3.4

_______________________________________________
ofono mailing list
[email protected]
http://lists.ofono.org/listinfo/ofono

Reply via email to