My Application uses UART1 in Data mode. This works fine.
In the event of an incoming data call, the Application needs to release the UART so that the call can use it. This works fine.
After the call clears, the Application again needs UART1 - but this doesn’t work: I never get the ADL_FCM_EVENT_FLOW_OPENNED after re-subscribing to the Flow.

Here’s what happens:

I Subscribe to UART1 with an adl_fcmSubscribe() call;

I receive the ADL_FCM_EVENT_FLOW_OPENNED event, and switch the Flow to Data mode with an adl_fcmSwitchV24State() call;

I receive the ADL_FCM_EVENT_V24_DATA_MODE event.

So far, so good - the App now has the UART in Data mode.

On an ADL_CALL_EVENT_RING_DATA event, I switch the Flow to AT-Commands mode with an adl_fcmSwitchV24State() call;

I receive the ADL_FCM_EVENT_V24_AT_MODE event, and unsubscribe from the UART with an adl_fcmUnsubscribe() call;

I receive the ADL_FCM_EVENT_FLOW_CLOSED event, and answer the data call with an adl_callAnswer() call.

Again, so far, so good - the data call is now connected through to the UART.

When I receive the ADL_CALL_EVENT_RELEASE_ID, it is time for the Application to re-subscribe to the UART1 Flow, so I make another adl_fcmSubscribe() call. This returns a non-negative result, indicating success, but I never see any subsequent FCM events - in particular, no ADL_FCM_EVENT_FLOW_OPENNED event to indicate that the Flow is actually ready.

What would prevent an ADL_FCM_EVENT_FLOW_OPENNED event after a successful adl_fcmSubscribe() call?


It looks like adl_fcmSubscribe() has a timing issue.

If I put a delay after the data call releases before calling adl_fcmSubscribe(), it works!

So it looks like adl_fcmSubscribe() is returning “Success” even though the Flow is not actually ready!