You can investigate who is guilty, but most probably you will not be able to workaround it. If your phone has Android version 4.4 or later you can collect Bluetooth HCI snoop log.
- Enable Android Developer Options
- Turn Bluetooth off
- In Developer Options enable Bluetooth HCI snoop log
- Turn Bluetooth on
- Wait till connection with vehicle's head unit be established and try to make a call from head unit.
- Disable Bluetooth HCI snoop log in Developer Options. Do not turn off power or reboot the phone till log file be copied or studied.
The log has name btsnoop_hci.log and on different smartphone models it can be stored at different places, for example, /sdcard/btsnoop_hci.log.
This log has a binary format and commonly special software is required to parse and view it. But in your case any binary or hexadecimal file viewer with ASCII strings searching ability can be used (even Windows Notepad, but the log should not be too big in this case).
You can view it on phone or copy to PC (directly, or via ADB after enable debugging).
Please keep in mind that this log can contain private data (e.g. phone book records and SMS) and should not be shared with untrusted people.
Open the log file using file viewer and serch for the string +CIND:
You can find two form of strings like the following:
The first one provided by request and contain a list of indicators the phone can report with possible value ranges. Please pay attention to indicators order, a number of place in the list is used to report individual indicator states. In this case "service" has a number 1, "call" number 2 etc.
The second string is also provided by request and contains current indicators state.
Now you need to find all +CIEV: strings. The phone use them to report individual indicator states by its own initiative. They have the format
For my +CIND: example, string +CIEV:7,4 means battery charge value is 4 of 5 and +CIEV:1,0 means no service. Finding all values related to service, signal and roaming you can be sure if the phone reports them correctly or not.
Possibly, the head unit attempts to dial, so also try to find strings ATD (followed by dialed phone number) and ATD> (followed by an index in the phone memory). In such case you will see the phone answer ERROR or +CME ERROR:30 just below it.