Hi Frederic, >>> + if (!strncmp(number, "*31#", 4)) { >>> + number += 4; >>> + clir = OFONO_CLIR_OPTION_INVOCATION; >>> + } else if (!strncmp(number, "#31#", 4)) { >>> + number += 4; >>> + clir = OFONO_CLIR_OPTION_SUPPRESSION; >>> + } else >>> + clir = OFONO_CLIR_OPTION_DEFAULT; >>> + >> >> Actually this is not quite right. The clir option is determined by the >> presence of 'I'/'i' characters at the end of the dial string. Refer to >> 27.007 for more details. >> >> oFono does not actually recognize temporary forms of *31/#31 >> invocation yet. >> > I added *31/#31 as I found them in telephony-ofono implementation of > BlueZ HFP AG, > but 27.007 uses I/i, > and HFP 1.5 does not seem to support clir option (ATDdd...dd;) > > Should I remove this part of code and only be compatible with HFP specs ? > Might as well handle the I/i and G/g part according to 27.007 since that is pretty easy and we'll have to do it anyway. *31/#31 is really an MMI code, it should never be sent to the modem, so please remove that for now. >>> + err = voicecall_dial(vc, number, clir, emulator_dial_callback, vc); >>> + switch (err) { >>> + case DIAL_NO_ERROR: >>> + result.type = OFONO_ERROR_TYPE_NO_ERROR; >>> + break; >>> + >>> + case DIAL_NO_NETWORK: >>> + result.error = 30; >>> + result.type = OFONO_ERROR_TYPE_CME; >>> + break; >> >> This might need to be NO CARRIER >> > As far as I understand, when there is no network, ATD should reply NO > CARRIER if CMEE error mode is set to 0, or +CME ERROR: 30 if it is set > to 1. Not quite. CMEE controls the presentation of 'extended' CME ERROR code. Either as ERROR, CME ERROR: or CME ERROR: . NO CARRIER is not an extended error code at all, and so is only affected by ATV setting, not CMEE. > So, I think that voicecall should return an OFONO_ERROR_TYPE_CME 30, and > ofono_emulator_send_final should take care of replying the right string. > Nope, you have to take your pick, either CME ERROR: 30, or NO CARRIER. I'd expect most implementations to reply with a NO CARRIER in this case, but can you check what other implementations do in reality? Regards, -Denis