summaryrefslogtreecommitdiffstats
path: root/drivers/hfpmodem
AgeCommit message (Collapse)AuthorFilesLines
2015-08-24hfp: Handle extra CCWA eventKuba Pawlak1-0/+10
When a call is waitng, CCWA event is sent and call object in state WAITING is created. on ReleaseAndAnswer it is promoted to INCOMING and later to ACTIVE. iPhones send an extra CCWA event when active call is ended. This extra event is creating a second call object in state WAITING. It is not possible to have two WAITING calls, but previously waiting call was already promoted to INCOMING. For a brief time we have two calls from the same number, one INCOMING and one WAITING. Later WAITING one is removed. As we cannot have a waiting and incoming call at the same time, ignore CCWA when there is already an INCOMING call. < \r\n+CIEV: 3,3\r\n < \r\n+CIEV: 2,1\r\n < \r\n+CIEV: 3,0\r\n < \r\n+CCWA: "01234567890",129,1,"Me"\r\n < \r\n+CIEV: 3,1\r\n > AT+CLCC\r < \r\n+CLCC: 1,0,0,0,0,"09876543210",129,"Me"\r\n < \r\n+CLCC: 2,1,5,0,0,"01234567890",129,"Me"\r\n < \r\nOK\r\n < \r\n+CIEV: 2,0\r\n < \r\n+CCWA: "01234567890",129,1,"Me"\r\n < \r\n+CIEV: 2,1\r\n < \r\n+CIEV: 3,0\r\n > AT+CLCC\r < \r\n+CLCC: 2,1,0,0,0,"01234567890",129,"Me"\r\n < \r\nOK\r\n
2015-08-05hfp: Synchronize call state in case of +CHUP errorKuba Pawlak1-0/+4
It is possible for the phone to accept Dial request but not actually dial. This leaves a voicecall object in state 'dialling' that cannot be removed. Proposed workaround is to trigger AT+CLCC when an error is returned for Hangup. As the call is not on the list, this would remove this hanging object and signal CallRemoved. Windows Phone trace with this fix: ofonod[273]: > ATD1;\r ofonod[273]: < \r\nOK\r\n ofonod[273]: src/voicecall.c:dial_handle_result() Registering new call: 1 ofonod[273]: < \r\n+CIEV: 5,4\r\n ofonod[273]: src/network.c:ofono_netreg_strength_notify() strength 80 ofonod[273]: > AT+CHUP\r ofonod[273]: < \r\nERROR\r\n ofonod[273]: src/voicecall.c:generic_callback() command failed with error: Unknown error type ofonod[273]: > AT+CLCC\r ofonod[273]: < \r\nOK\r\n ofonod[273]: src/voicecall.c:ofono_voicecall_disconnected() Got disconnection event for id: 1, reason: 2
2015-06-04hfpmodem: Fix connecting to AG with existing mptyKuba Pawlak1-0/+20
If there is more then one active or held call, we are in mpty calls. We won't get indicator update if any of them is released by CHLD=1x. So we have to poll it.
2015-03-24hfpmodem: slc.c: make sure to use none_prefixKuba Pawlak1-3/+4
2015-03-24hfpmodem: hfpmodem.c make sure to use none_prefixKuba Pawlak1-5/+6
2015-02-20hfpmodem: Make sure to use none_prefixDenis Kenzior1-2/+2
ofonod[253]: > AT+CCWA=1\r ofonod[253]: < \r\n+BCS:2\r\n ofonod[253]: < \r\nOK\r\n
2015-02-20hfpmodem: Make sure to set the prefix properlyDenis Kenzior1-1/+2
ofonod[1239]: > AT+COPS=3,0\r ofonod[1239]: < \r\n+BCS:2\r\n ofonod[1239]: < \r\nOK\r\n
2014-10-20slc: Make sure to initialize variablesDenis Kenzior1-0/+3
2014-10-20hfp: Implement +BIND notificationsDenis Kenzior1-0/+22
2014-10-20hfp: Notify core of HF indicators supported by AGDenis Kenzior1-0/+9
This information was obtained from SLC negotiation
2014-10-20hfp: Track supported / active indicatorsDenis Kenzior2-3/+20
This information is obtained during SLC establishment
2014-10-20hfp: Add implementation of +BIEVDenis Kenzior1-0/+20
2014-10-20hfp: Add HF Indicators BRSF feature for 1.7Denis Kenzior1-0/+5
If HFP 1.7 client is used, enable the right BRSF feature
2014-10-20handsfree: Skeleton implementation of DDRDenis Kenzior1-2/+2
Distracted Driving Reduction or Enhanced Safety is implemented using HF indicator 0x0001
2014-10-20hfp: Add initial SLC negotiation for HFP 1.7Denis Kenzior1-1/+94
2014-06-30hfpmodem: Fix crash with more than two callsSergio Checa Blanco1-1/+1
A periodic CLCC polling is started when there is an ongoing multiparty call and a new call appears in the system. A simple way to reproduce the crashing scenario is: 1. Place a call. 2. Place a second call. 3. Create a multiparty call with both calls. 4. Place a third call (incoming or outgoing does not matter). 5. Disconnect HFP from the modem. Within the function ciev_callheld_notify, the AT+CLCC command is also invoked, thus a new cyclic CLCC polling is started, and it overwrites the timer resource identifier stored in voicecall_data.clcc_source. This means that there are several timers doing the CLCC polling, but only one of those is under control, i.e. it can be removed through its source identifier, hence a timer source leak. This has a fatal consequence when the HFP modem is disconnected. The function hfp_voicecall_remove stops the timer that is under control before freeing the voicecall_data struct. However there are other timers that are still active and will execute its handler poll_clcc afterwards. Inside poll_clcc the driver_data is accessed, which is already NULL. A solution for this is to avoid starting a CLCC polling if there is already one active, i.e. clcc_source is not 0. By doing this the uncontrolled timers will not cycle forever.
2014-06-21hfpmodem: Split AT+VTS command into multiple +VTSSergio Checa Blanco1-3/+8
According to the standard "3GPP 27.007 v6.8.0" Appendix C.2.11, when sending multiple DTMF characters, these must go in individual +VTS commands for each tone. This adopts the AT modem approach. Before: AT+VTS=1234\r After: AT+VTS=1;+VTS=2;+VTS=3;+VTS=4\r
2014-05-30hfp: Fix case where RING never arrivesDenis Kenzior1-1/+28
2014-04-10handsfree: Rename driver functionDenis Kenzior1-3/+3
To be more consistent with others in the same file
2014-04-10handsfree: Simplify logicDenis Kenzior1-18/+12
2014-04-10hfp: Add CNUM query to handsfree interface for subscriber numberAndrew Earl1-0/+88
2014-03-19hfp: Use enum from hfp.hDenis Kenzior3-23/+16
2014-03-19hfp: Fixup variable namesDenis Kenzior1-3/+3
2014-03-19hfp: Add CHLD features to drver dataKrzysztof Wilk1-0/+3
2013-12-21git: Fixup messed up permissionsDenis Kenzior3-0/+0
2013-12-18siri: Add atom driverKrzysztof Wilk3-0/+219
2013-12-05hfp: Add Voice Recognition flag to BRSFAndrew Earl1-0/+1
2013-09-12hfpmodem: Call ofono_voicecall_mpty_hint as neededDenis Kenzior1-2/+7
2013-08-25hfp: Set UDUB affected set to WAITING onlyDenis Kenzior1-2/+1
INCOMING calls are not affected by UDUB, only by +CHUP.
2013-08-25hfp: Fix up disconnect reason handling for +CHUPDenis Kenzior1-1/+6
The affected call types for +CHUP were set to only ACTIVE calls. Instead the affected set should include INCOMING, DIALING, ALERTING and ACTIVE calls. Thanks to Ionut Dediu for the diagnosing and reporting this issue.
2013-06-26hfpmodem: Fix ECNR HF featureFrederic Danis1-1/+2
2013-04-23hfpmodem: Add EchoCancelingNoiseReductionClaudio Takahasi1-0/+17
This patch adds echo canceling and noise reduction implementation to hfpmodem. It adds the implementation to send the command "AT+NREC=0" to the AG.
2013-04-18hfp: Move HFP versions definitions to hfp.hPaulo Borges1-6/+0
hfp.h should store all HFP related definitions.
2013-04-09hfpmodem: Send AT+BAC with the supported codecsVinicius Costa Gomes1-1/+11
Before, the AT+BAC command was being sent with fixed information, now we send the command (that inform the AG of the codecs supported by the HF) with the codecs supported by the registered Handsfree Audio Agent.
2013-04-09drivers: Include hfp.hDenis Kenzior2-0/+2
2013-02-21hfpmodem: Fix segfault in CIEV GAtChat callbackClaudio Takahasi1-3/+3
This patch fixes segmentation fault when the network registration watch is called without being initialized. CIEV GAtChat callback can be called before ofono_netreg_register(). ==15101== Invalid read of size 8 ==15101== at 0x492B56: ofono_netreg_register (network.c:2073) ==15101== by 0x47245E: hfp_netreg_probe (network-registration.c:311) ==15101== by 0x492A8D: ofono_netreg_create (network.c:1881) ==15101== by 0x4849D5: hfp_pre_sim (hfp_hf_bluez5.c:288) ==15101== by 0x48C486: ofono_modem_set_powered (modem.c:1194) ==15101== by 0x484E9D: slc_established (hfp_hf_bluez5.c:85) ==15101== by 0x4702AD: chld_cb (slc.c:147) ==15101== by 0x440457: at_chat_finish_command (gatchat.c:461) ==15101== by 0x44109F: new_bytes (gatchat.c:532) ==15101== by 0x4433B7: received_data (gatio.c:122) ==15101== by 0x3CBAA47824: g_main_context_dispatch (gmain.c:2539) ==15101== by 0x3CBAA47B57: g_main_context_iterate.isra.23 (gmain.c:3146) ==15101== Address 0x18 is not stack'd, malloc'd or (recently) free'd
2013-01-21hfpmodem: Add comment for previous commitDenis Kenzior1-0/+5
2013-01-21hfpmodem: Fix release-and-swap without +CIEVMikel Astiz1-1/+45
Some phones do not send the corresponding call state update (+CIEV) after a successful release-and-swap operation (AT+CHLD=1). This has been observed with a Nokia 500, while testing ReleaseAndSwap() while an active and a held call exist: ofonod[20414]: > AT+CLCC\r ofonod[20414]: < \r\n+CLCC: 1,0,1,0,0,"<number1>",145\r\n ofonod[20414]: < \r\n+CLCC: 2,0,0,0,0,"<number2>",145\r\n ofonod[20414]: < \r\nOK\r\n ofonod[20414]: > AT+CHLD=1\r ofonod[20414]: < \r\nOK\r\n After this, no +CIEV is received, but the call has been hung up. The proposed approach to solve this consists of using AT+CLCC, unless a call release has been received within a specific time period. The result fixes the problem as can be seen below: ofonod[20847]: < \r\n+CLCC: 1,0,1,0,0,"<number1>",145\r\n ofonod[20847]: < \r\n+CLCC: 2,0,0,0,0,"<number2>",145\r\n ofonod[20847]: < \r\nOK\r\n ofonod[20847]: > AT+CHLD=1\r ofonod[20847]: < \r\nOK\r\n ofonod[20847]: > AT+CLCC\r ofonod[20847]: < \r\n+CLCC: 1,0,0,0,0,"<number1>",145\r\n ofonod[20847]: < \r\nOK\r\n ofonod[20847]: < \r\n+CIEV: 5,2\r\n ofonod[20847]: < \r\n+CIEV: 5,0\r\n
2013-01-21hfpmodem: Avoid transitional voicecall statesMikel Astiz1-2/+12
While processing the result of AT+CLCC, process the differences in a way that disconnections are reported first, then call state changes and finally new calls. The goal is to avoid unnecessary transitional states such as two active calls existing at the same time.
2013-01-21hfpmodem: Refactor voicecall notify with foreachMikel Astiz1-3/+9
Define a helper function in order to use foreach statements when ofono_voicecall_notify() needs to be called.
2013-01-17hfpmodem: Add support for sending the supported codecsVinicius Costa Gomes1-0/+29
Right now, only the mandatory CVSD codec is supported. The mSBC mandatory codec is "temporarily" not supported. The spec alows this, HFP 1.6 Spec Section 4.34.1 page 92: "If wide band speech is supported then the mandatory codec (mSBC) shall be included unless it is temporarily unavailable."
2013-01-17hfpmodem: Add version defines for HFP 1.6Vinicius Costa Gomes1-1/+2
2012-12-17hfp: use ofono_handsfree_battchg_notifyDenis Kenzior1-0/+31
2012-04-11hfpmodem: use full CLCC handling in dialing caseMichael Brudevold1-67/+1
A call that moves from the dialing to active state before the +CLCC response will not properly be added as a voicecall. This is because the dialing callback was using simplified handling and only looked for calls in the dialing or alerting state. AT sequence that exhibited the failure (AG device was an iPhone accessing visual voicemail): > +CIND: ("service",(0-1)),("call",(0-1)),("callsetup",(0-3)), ("battchg",(0-5)),("signal",(0-5)),("roam",(0-1)),("callheld",(0-2)) ... > +CIEV: 3,2 < AT+CLCC > +CIEV: 2,1 > +CIEV: 3,0 > +CLCC: 1,0,0,0,0,"**21153**",129,"Voicemail"
2011-10-21hfpmodem: Report features supported by AGMikel Astiz1-0/+1
2011-10-21hfpmodem: devinfo atom added to export BT addressMikel Astiz3-0/+114
2011-10-21hfpmodem: Avoid segfault in handsfreeMikel Astiz1-1/+7
The use of g_idle_add can cause a segmentation fault if the object is destroyed in the meantime.
2011-10-21hfpmodem: Avoid segfault in call-volumeMikel Astiz1-1/+7
The use of g_idle_add can cause a segmentation fault if the object is destroyed in the meantime.
2011-10-21hfpmodem: Avoid segfault in network-registrationMikel Astiz1-1/+8
The use of g_idle_add can cause a segmentation fault if the object is destroyed in the meantime.
2011-10-21hfpmodem: Support for AT+BVRAMikel Astiz1-0/+53