Hi Denis,

Denis Kenzior wrote:
> Hi Zhenhua,
> 
>> There're two cases of outgoing call: dial from HF or dial from phone.
>> 
>> In the first case, some phones may not support enhanced call status
>> (AT+CLCC) to query outgoing number. So we need to pass struct
>> atd_cb_data to fill in the number and type. Later, we invoke
>> AT+CLCC to query phone number and overwrite ours if we are wrong.
> 
> This is actually not necessary.  The core already tracks the
> outgoing number and fills it in if the dial returns before the
> new call is notified.  This should be always the case in HFP,
> since the ATD returns before CIEV is signaled, correct?

The reason to record outgoing number is for later clcc_poll_cb in multicall
hanlding, because HFP doesn't have COLP so it don't know the outgoing
number unless we do +CLCC poll. So we need to sync it.

>> +static GSList *parse_clcc(GAtResult *result) {
>> +    GAtResultIter iter;
>> +    GSList *l = NULL;
>> +    int id, dir, status, type;
>> +    struct ofono_call *call;
>> +
>> +    g_at_result_iter_init(&iter, result);
>> +
>> +    while (g_at_result_iter_next(&iter, "+CLCC:")) {
>> +            const char *str = "";
>> +            int number_type = 129;
>> +
>> +            if (!g_at_result_iter_next_number(&iter, &id))
>> +                    continue;
>> +
>> +            if (!g_at_result_iter_next_number(&iter, &dir))
>> +                    continue;
>> +
>> +            if (!g_at_result_iter_next_number(&iter, &status)) +            
>>         continue;
>> +
>> +            if (!g_at_result_iter_next_number(&iter, &type)) +              
>>         continue;
>> +
>> +            if (!g_at_result_iter_skip_next(&iter))
>> +                    continue;
>> +
>> +            if (g_at_result_iter_next_string(&iter, &str))
>> +                    g_at_result_iter_next_number(&iter, &number_type); +
>> +            call = g_try_new0(struct ofono_call, 1);
>> +
>> +            if (!call)
>> +                    break;
>> +
>> +            call->id = id;
>> +            call->direction = dir;
>> +            call->status = status;
>> +            call->type = type;
>> +            strncpy(call->phone_number.number, str,
>> +                            OFONO_MAX_PHONE_NUMBER_LENGTH);
>> +            call->phone_number.type = number_type;
>> +
>> +            if (strlen(call->phone_number.number) > 0)
>> +                    call->clip_validity = 0;
>> +            else
>> +                    call->clip_validity = 2;
>> +
>> +            l = g_slist_insert_sorted(l, call, at_util_call_compare); +     
>> }
>> +
>> +    return l;
>> +}
> 
> If this function is a copy from atmodem, please put it into
> atutils instead of duplicating it here.

I will send a separate patch for that.

>> +    ofono_voicecall_notify(vc, call);
>> +
> 
> As I mentioned above, you do not need to do this.  oFono will
> synthesize the outgoing call properly.  Worst case we will
> send a PropertyChanged signal after CLCC is polled and the new number
> is obtained. 
>
> Also, there's actually two separate cases here.  Ideally I'd
> like them separated into two patches.
> 
> Regards,
> -Denis
> _______________________________________________
> ofono mailing list
> ofono@ofono.org
> http://lists.ofono.org/listinfo/ofono



Regards,
Zhenhua

_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to