mirror of git://git.sysmocom.de/ofono
hfpmodem: Handle repeated held call indicator
An issue with iPhone 5C iOS 9.2 triggers desynchronization in call states. When an active call is put on hold and another call arrives, it is in WAITING state. It should be possible to answer it by issuing AT+CHLD=2 but the phone changes its state to INCOMING so ATA should be used. This change is advertised by sending callheld:2 event, but it is not handled. This event can be used to trigger CLCC poll to synchronize call states. +CIEV: 3,1 <- first call arrives AT+CLCC +CLCC: 1,1,4,0,0,"01234567890",129 OK RING +CLIP: "01234567890",129 ATA OK +CIEV: 2,1 +CIEV: 3,0. AT+CHLD=2.$ <- first call is put on hold OK +CIEV: 7,2 <- notification confirming that call #1 is on hold +CCWA: "09876543210",129,1 <- second call arrives +CIEV: 7,2 +CIEV: 3,1 AT+CLCC +CLCC: 1,1,1,0,0,"01234567890",129 +CLCC: 2,1,5,0,0,"09876543210",129 <- new call is still in WAITING state OK +CIEV: 7,2 <- phone iternally promotes WAITING call to INCOMING AT+CHLD=2 <- there is no WAITING call anymore, ATA should be used +CME ERROR:3
This commit is contained in:
parent
abb72e8999
commit
fc4088fb02
|
@ -1110,6 +1110,17 @@ static void ciev_callheld_notify(struct ofono_voicecall *vc,
|
|||
*/
|
||||
vd->clcc_source = g_timeout_add(POLL_CLCC_DELAY,
|
||||
poll_clcc, vc);
|
||||
} else {
|
||||
if (vd->clcc_source)
|
||||
g_source_remove(vd->clcc_source);
|
||||
|
||||
/*
|
||||
* We got a notification that there is a held call
|
||||
* and no active call but we already are in such state.
|
||||
* Let's schedule a poll to see what happened.
|
||||
*/
|
||||
vd->clcc_source = g_timeout_add(POLL_CLCC_DELAY,
|
||||
poll_clcc, vc);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue