The goal we want to reach is, to have only one active call and place all others held. So,

```
for (nn = 0; nn < modem->call_count; nn++) {
    AVoiceCall  vcall = modem->calls + nn;
    ACall       call  = &vcall->call;
    if (call->mode != A_CALL_VOICE)
        continue;
    if (call->id == id) {
        if (call->state != A_CALL_ACTIVE)
            return "+CME ERROR: 3";
    } else if (call->state == A_CALL_HELD)
        return "+CME ERROR: 3";
}
// Checked, now proceed to set states.
for (nn = 0; nn < modem->call_count; nn++) {
    AVoiceCall  vcall = modem->calls + nn;
    ACall       call  = &vcall->call;
    if (call->mode != A_CALL_VOICE)
        continue;
    if (call->id == id)
        acall_unset_multi( vcall );
    else if (call->state == A_CALL_ACTIVE)
        acall_set_state( vcall, A_CALL_HELD ); 
}
```