Hi Denis. We have done some testing with the STE modem for call termination, and this is the result:
TC |Call #1 | Call #2 | Call #3 | Command | Result ---|------------------------------------------------------------------------ 1 |ACTIVE | ACTIVE | .. | ATH | call 1, 2 terminated 2 |ACTIVE | ACTIVE | .. | AT+CHUP | call 1, 2 terminated 3 |ACTIVE | ACTIVE | HELD | ATH | call 1, 2 terminated 4 |ACTIVE | ACTIVE | HELD | AT+CHUP | call 1, 2 terminated 5 |ACTIVE | ACTIVE | HELD | AT+CHLD=0;H | call 1, 2 and 3 terminated 6 |ACTIVE | ACTIVE | WAITING | ATH | call 1, 2 terminated 7 |ACTIVE | ACTIVE | WAITING | AT+CHUP | call 1, 2 terminated 8 |ACTIVE | HELD | WAITING | CHLD=0 | call 3 terminated, 9 |ACTIVE | HELD | WAITING | ATH | call 1 terminated 10 |ACTIVE | HELD | WAITING | AT+CHUP | call 1 terminated 11 |HELD | HELD | ACTIVE | AT+CHLD=0 | call 1, 2 terminated 12 |HELD | HELD | ACTIVE | AT+CHLD=0;H | call 1, 2 and 3 terminated 13 |HELD | DIALING | .. | ATH | call 2 (MO) terminated 14 |HELD | DIALING | .. | CHUP | call 2 (MO) terminated 15 |HELD | DIALING | .. | AT+CHLD=12 | call 2 (MO) NOT terminated 16 |HELD | WAITING | .. | AT+CHLD=0 | call 2 terminated 17 |HELD | .. | .. | ATH | call 1 NOT terminated Denis Kenzior wrote: >>> oFono already takes care of this for single calls (see >>> src/voicecall.c voicecall_hangup.) So this is only an issue in the >>> case of three way calls, is this what you're referring to here? >> >> Kind of. This is very good, it takes care of the situation with >> emergency call which cannot be terminated with CHLD commands. >> >> But I think there are more issues. If I am not mistaken STE-modems >> have the following behavior: >> CHLD=1X can only terminate call in state ACTIVE or HELD. (I think >> this >> is as STE interprets the standards). > > The standards specify that CHLD=1X can only terminate an ACTIVE call. > Most modems implement it this way. There are vendor extensions that > provide this functionality (e.g. CHLD=7X on TI.) By default oFono > assumes that release_specific will simply fail if a user attempts to > use it on an e.g. HELD call with no modem support. For the STE modem, AT+CHLD=1x terminates calls in state ACTIVE and HELD. >> >> a) If you are in a active call and receives a new incoming call >> (ALERTING) and want to reject the new ALERTING call, then STE modem >> cannot terminate this call with CHLD=1X. It has to be terminated >> with CHLD=0 (cause=BUSY) or ATH (possible CHUP). > > Ok, lets get the terminology clear here. In this case the incoming > call is not ALERTING, it is WAITING. WAITING calls are always > rejected by using CHLD=0. ALERTING calls are always outgoing calls > that transitioned from DIALING to alerting the user. > >> >> b) Or you may have the following situation. One call on HOLD, >> another ACTIVE call, and then you receive a new incoming call >> ALERTING. If you try to terminate the new incoming (ALERTING) call >> with CHLD=0, >> I think you as a side effect will terminate the call on hold as well. >> If I am not mistaken ATH (possible CHUP) would be the correct in this >> situation for STE modems > > The standards are quite clear here, the WAITING call always takes > precedence > and thus only the WAITING call is affected. Can you check that STE > modems do > indeed get this wrong? If the modem is standards compliant, oFono > does the > right thing here. STE is standard compliant, only the WAITING call is terminated with AT+CHLD=0. (TC 8) >> >> c) If you have an call on hold and initiate a new call, but want to >> terminate the newly initiated call (DIALING), then this call cannot >> be terminated with CHLD=1X, but you would have to use ATH (or >> possible CHUP). > > Yes, so this is the case that we do need to take care of in the core. > Most > modems let us get away with sending release_specific up to this point. > For the STE modem, calls in state DIALING and ALERTING will have to be terminated with ATH or AT+CHUP, AT+CHLD=1x does not work. This means that the current implementation, using release_specific (and thus AT+CHLD=1x) will not work. >>> What I have been considering to take care of this case is to add >>> end_all and end_all_active callbacks. According to 27.007/22.030 >>> ATH should end all calls (active + held) except waiting calls, while >>> +CHUP should only end the currently active call. At least on one TI >>> modem I tried this works as expected. Do your modems implement the >>> same behavior? >> >> No, I don't think so. I think ATH will only terminate one call. >> In order to terminate all calls you would probably need to do >> something like: AT+CHLD=0;H But I'm not sure this works in all >> possible scenarios either... > > Can you check the behavior of ATH vs CHUP on STE modems? We need to > send the > right one here or both HELD and ACTIVE/DIALING/ALERTING will be > terminated. > If using CHUP and ATH doesn't work out we'll have to come up with > another > solution. For the STE modem, ATH will only terminate the active call, not the held call. (TC 9). For more information about ATH and AT+CHUP, please see the table above. BR/Sjur _______________________________________________ ofono mailing list [email protected] http://lists.ofono.org/listinfo/ofono
