From d5eeb704107cae77e346a99f78f4623e3395b502 Mon Sep 17 00:00:00 2001 From: tick Date: Wed, 5 Dec 2007 08:14:34 +0000 Subject: gsmd: add "RING" timeout scheme, for those modem not have %CPI (like) supports (Andrzej Zaborowski) git-svn-id: http://svn.openmoko.org/trunk/src/target/gsm@3572 99fdad57-331a-0410-800a-d7fa5415bdb3 --- src/gsmd/usock.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'src/gsmd/usock.c') diff --git a/src/gsmd/usock.c b/src/gsmd/usock.c index b16aff5..fd602b5 100644 --- a/src/gsmd/usock.c +++ b/src/gsmd/usock.c @@ -200,6 +200,17 @@ static int voicecall_get_stat_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp) cmd->id, sizeof(gcs), &gcs); } +static int usock_ringing_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp) +{ + struct gsmd_user *gu = ctx; + + /* If the incoming call answer/rejection succeeded then we + * know the modem isn't ringing and we update the state info. */ + if (cmd->ret == 0) + gu->gsmd->dev_state.ringing = 0; + return usock_cmd_cb(cmd, ctx, resp); +} + static int usock_rcv_voicecall(struct gsmd_user *gu, struct gsmd_msg_hdr *gph, int len) { @@ -223,7 +234,10 @@ static int usock_rcv_voicecall(struct gsmd_user *gu, struct gsmd_msg_hdr *gph, break; case GSMD_VOICECALL_HANGUP: /* ATH0 is not supported by QC, we hope ATH is supported by everone */ - cmd = atcmd_fill("ATH", 4, &usock_cmd_cb, gu, gph->id, NULL); + cmd = atcmd_fill("ATH", 4, + gu->gsmd->dev_state.ringing ? + usock_ringing_cb : usock_cmd_cb, + gu, gph->id,NULL); /* This command is special because it needs to be sent to * the MS even if a command is currently executing. */ @@ -232,7 +246,7 @@ static int usock_rcv_voicecall(struct gsmd_user *gu, struct gsmd_msg_hdr *gph, } break; case GSMD_VOICECALL_ANSWER: - cmd = atcmd_fill("ATA", 4, &usock_cmd_cb, gu, gph->id, NULL); + cmd = atcmd_fill("ATA", 4, &usock_ringing_cb, gu, gph->id,NULL); break; case GSMD_VOICECALL_DTMF: if (len < sizeof(*gph) + sizeof(*gd)) -- cgit v1.2.3