This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2564C: Cannot open A2DP SRC stream to certain Bluetooth speakers

Part Number: CC2564C
Other Parts Discussed in Thread: , CC2564

Hi!

We're using CC2564C chip with CC2564CSTBTBLESW FreeRTOS stack, and are getting errors when trying to AUD_Open_Remote_Stream() to the following speakers:

  1. JBL Flip 4
  2. UE Boom 2

When comparing with the STM32 devkit HW setup using NoOS A3DPDemo_SRC, the connection succeeds, here's the log for it: JBL Flip 4 success STM32.txt

On our platform the callback etAUD_Stream_Open_Confirmation returns with OpenStatus == 1 (or 3), the connection establishment doesn't even get to the authentication part: JBL Flip 4 fail SUE.txt

Could you compare these logs to try to understand what causes the difference in the behavior?

Thanks in advance.

  • We will take a look and get back..

    Thanks

  • In the meantime we've produced logs of the UE Boom 2 connection failure as well: ue boom.txt

  • Did, the UE Boom2 connect with TI BluetopiaSDK demo example? (i.e A3DPDemo_SRC)?

  • We haven't arranged the logistics of that (with all the remote working during lockdown), but I'll update this thread as soon as we made it.

  • Hi Hari, could you please have a look at the BT debug UART log provided by Benedek even though we have not tried connecting with A3DPDemo_SRC yet ? Background is that Benedek just got father and thus it is a bit hard for him to do the test at the moment. If there was however something obvious in the log which points to a possible solution, he could try that right away.

  • Ok.. Let me check the logs again.

    Thanks

  • Hi Hari, did you manage to take a look at the logs ?

    thanks and regards, Christoph

  • Hi Christoiph,

    I do not see any issue from the controller side. It appears the Host has disconnected after sometime ..

    Thanks

  • dear Hari, thanks a lot for checking

  • I have tested the UE Boom 2 with the Demo code as well, the result is the same: UE-Boom-2_2.txt

    The Bluetopia stack always returns StreamOpenConfirmation with Status == 3, just like in the case of JBL Flip 4. We don't have source code access to the Bluetopia stack, so we cannot analyze this issue in more depth. You however have access, could you share some insight, what conditions trigger this result?

    I believe you were able to reproduce these conditions on your side as well with the JBL Flip 4 (even if it worked on many tries), you could also use that as a starting point for reproducing the issue, in case just observing the source code for this return value isn't conclusive.

    Thanks in advance.

  • Hi,

    Looking through the logs provided, it seems like the disconnection occurs without any obvious controller error or other potential issue.

    OpenStatus of 0x3 indicates that an AUD_STREAM_OPEN_CONFIRMATION_STATUS_UNKNOWN_ERROR has occurred. This is a general catch-all error that is provided by the stack in no less than 11 error cases I can find in the Bluetopia source code.

    One thing that would help me narrow down where in the source code the error gets thrown is the callstack when the error is first generated on your setup. While you don't have the source code, if you were to step through your code in the debugger you should still see symbols from the Bluetopia libraries. The Bluetopia functions which may be throwing that error are:

    DisconnectEndpoint()

    ProcessCloseEndpointConfirmation()

    ProcessSignallingConnectConfirmation()

    ProcessDiscoverConfirmation()

    ProcessGetCapabilitiesConfirmation()

    ProcessSignallingConnectIndication()

    ProcessSignallingDisconnectIndication()

    CheckAndDispatchFailedConnection()

    Which of those functions appear in the callstack when the stack returns StreamOpenConfirmation?

    Regards,
    Michael

  • Hi Michael,

    This is the call stack for OpenConfirmation with Status == 3:
    CheckAndDispatchFailedConnection()
    ProcessGetCapabilitiesConfirmation()
    GAVD_Event_Callback()
    GetCapabilitiesResponseEvent()
    ProcessSignallingMessage()
    SignallingDataEvent()
    L2CA_Event_Callback()
    HCI_ACL_Data_Callback()

    Best regards,
    Benedek

  • Hi Benedek,

    Thanks for providing the callstack. It looks like the error is caused by an error while processing a GAVD event. There are a few possibilities, some of the most likely include:

    1. A mismatch between the endpoint capabilities, for example if there are no common codecs supported by both src and snk.

    2. The endpoints advertised by are not detected as in the 'connecting' state.

    3. There was an error in the GAVD request itself, and not with its contents, such as a timeout or corrupt message, etc.

    Does any of the three above cases seem to fit with the other error data you've collected, such as sniffer logs from the device?

    I've also copied the implementation of that ProcessGetCapabilitiesConfirmation() function, which is what generates that error for your reference (CheckNadDispatchFailedConnection() just reports it to the upper layers). Please feel free to take a look and see if there is another possibility that could be causing your error.

    processGetCapabilitiesConfirmation.c
       /* The following function is responsible for processing a Get        */
       /* Capabilities Confirmation that is received by GAVD.  This function*/
       /* returns BOOLEAN FALSE if there was an error or a BOOLEAN TRUE if  */
       /* successful.                                                       */
    static Boolean_t ProcessGetCapabilitiesConfirmation(AudioContextInfo_t *AudioContextInfo, GAVD_Get_Capabilities_Confirmation_Data_t *GAVDGetCapabilitiesConfirmationData)
    {
       int                         CodecIndex;
       Boolean_t                   ret_val = FALSE;
       Boolean_t                   EnableSCMS_T;
       Boolean_t                   ConnectionFailed[NUMBER_AUD_STREAM_TYPES];
       Boolean_t                   ContinueSearching;
       Boolean_t                   CodecSupported;
       Boolean_t                   StreamTypeFound;
       Boolean_t                   InternalConnection;
       unsigned int                NumberConnectingEndpoints;
       unsigned int                Index;
       AUD_Stream_Type_t           LocalStreamType;
       RemoteDeviceInfo_t         *RemoteDeviceInfo;
       MediaCodecInformation_t     RemoteDeviceCodecInformation;
       AudioEndpointContextInfo_t *AudioEndpointContextInfo;
    
       /* First, make sure the input parameters appear to be semi-valid.    */
       if((AudioContextInfo) && (GAVDGetCapabilitiesConfirmationData))
       {
          /* Check to see if we know about this device.                     */
          if((RemoteDeviceInfo = SearchRemoteDeviceInfoEntryGAVDID(&(AudioContextInfo->RemoteDeviceInfoList), GAVDGetCapabilitiesConfirmationData->GAVDID)) != NULL)
          {
             /* Flag success to the caller.                                 */
             ret_val = TRUE;
    
             /* Flag that we are no longer in the Get Capabilities state.   */
             RemoteDeviceInfo->SignallingState = ssIdle;
    
             /* Initially set the connection failure flags to false.        */
             ConnectionFailed[astSRC] = FALSE;
             ConnectionFailed[astSNK] = FALSE;
    
             /* Initially set the flag to specifies if we need to continue  */
             /* searching for a compatible remote endpoint to true.         */
             ContinueSearching        = TRUE;
    
             /* First determine if these capabilities were retrieved for our*/
             /* local SRC or SNK endpoint.                                  */
             LocalStreamType          = astSRC;
             if(RemoteDeviceInfo->CurrentGetCapabilitiesRSEID[astSRC] == (Byte_t)GAVDGetCapabilitiesConfirmationData->RSEID)
                StreamTypeFound = TRUE;
             else
             {
                if(RemoteDeviceInfo->CurrentGetCapabilitiesRSEID[astSNK] == (Byte_t)GAVDGetCapabilitiesConfirmationData->RSEID)
                {
                   LocalStreamType = astSNK;
                   StreamTypeFound = TRUE;
                }
                else
                {
                   /* We did not query the capabilities of an endpoint with */
                   /* this RSEID, flag an error.                            */
                   ret_val         = FALSE;
                   StreamTypeFound = FALSE;
                }
             }
    
             /* Check if we were able to determine the stream type.         */
             if(StreamTypeFound)
             {
                /* The capabilities are valid, next set the number of       */
                /* connecting endpoints to 0.                               */
                NumberConnectingEndpoints = 0;
    
                /* Check that error code from GAVD did not specify any      */
                /* errors and that the return value is true.                */
                if(GAVDGetCapabilitiesConfirmationData->ErrorCode == GAVD_AVDTP_ERROR_SUCCESS)
                {
                   /* Determine if the service capabilities of this endpoint*/
                   /* are valid.                                            */
                   if((CodecIndex = DetermineServiceCapabilitiesValid(GAVDGetCapabilitiesConfirmationData->NumberServiceCapabilities, GAVDGetCapabilitiesConfirmationData->ServiceCapabilities, TRUE, TRUE, &EnableSCMS_T)) >= 0)
                   {
                      /* Check if this is a supported codec.                */
                      if(IsSupportedCodec(GAVDGetCapabilitiesConfirmationData->ServiceCapabilities[CodecIndex].InfoElement.GAVD_Media_Codec_Info_Element_Data.MediaCodecType, GAVDGetCapabilitiesConfirmationData->ServiceCapabilities[CodecIndex].InfoElement.GAVD_Media_Codec_Info_Element_Data.MediaCodecSpecificInfoLength))
                      {
                         CodecSupported = TRUE;
    
                         /* Convert the GAVD codec capability to an AUD     */
                         /* Media Codec Information structure.              */
                         ConvertGAVDMediaCodecInfoToAUDMediaCodecInfo(&GAVDGetCapabilitiesConfirmationData->ServiceCapabilities[CodecIndex].InfoElement.GAVD_Media_Codec_Info_Element_Data, &RemoteDeviceCodecInformation);
                      }
                      else
                         CodecSupported = FALSE;
    
                      /* Loop through all of the local endpoints to         */
                      /* determine if this remote endpoint's codec matches  */
                      /* one of our endpoints.                              */
                      for(AudioEndpointContextInfo=AudioContextInfo->AudioEndpointInfoList;AudioEndpointContextInfo!=NULL;AudioEndpointContextInfo=AudioEndpointContextInfo->NextAudioEndpointContextInfoPtr)
                      {
                         /* Only search for endpoints that are connecting   */
                         /* and for endpoints that have not already found a */
                         /* codec match (the Client RSEID will be 0 if a    */
                         /* codec match has not been found.                 */
                         if((AudioEndpointContextInfo->StreamType == LocalStreamType) && (COMPARE_BD_ADDR(AudioEndpointContextInfo->RemoteBD_ADDR, RemoteDeviceInfo->BD_ADDR)) && (AudioEndpointContextInfo->ConnectionState == csConnecting) && (!AudioEndpointContextInfo->RSEID))
                         {
                            /* A connecting endpoint was found, increment   */
                            /* the number of connecting endpoints.          */
                            NumberConnectingEndpoints++;
    
                            /* Flag that we are no longer retrieving        */
                            /* capabilities for this endpoint.              */
                            AudioEndpointContextInfo->Flags &= ~AUDIO_ENDPOINT_CONTEXT_INFO_FLAGS_RETRIEVING_CAPABILITIES;
    
                            /* Check if this a locally supported codec.     */
                            if(CodecSupported)
                            {
                               /* The remote device's codec type is         */
                               /* supported locally, next determine if the  */
                               /* capabilities of this endpoint will map to */
                               /* the capabilities that we support.         */
                               if(CheckCapababilitiesCompatible(&AudioEndpointContextInfo->LocalCodecCapabilities, &RemoteDeviceCodecInformation))
                               {
                                  /* Note the matching client RSEID.        */
                                  AudioEndpointContextInfo->RSEID = RemoteDeviceInfo->CurrentGetCapabilitiesRSEID[LocalStreamType];
    
                                  /* Set the SCMS-T Content Protection Flag.*/
                                  if(EnableSCMS_T)
                                     AudioEndpointContextInfo->Flags |= AUDIO_ENDPOINT_CONTEXT_INFO_FLAGS_SCMS_T_SUPPORTED_REMOTELY;
    
                                  /* Go ahead and note the Capabilities of  */
                                  /* the remote device.                     */
                                  BTPS_MemCopy(&(AudioEndpointContextInfo->RemoteStreamCodecCapabilities), &RemoteDeviceCodecInformation, sizeof(AudioEndpointContextInfo->RemoteStreamCodecCapabilities));
    
                                  /* Check if this endpoint has the highest */
                                  /* codec precedence.                      */
                                  if(AUDIO_ENDPOINT_CONTEXT_INFO_FLAGS_READ_PRECEDENCE(AudioEndpointContextInfo->Flags) == AUDIO_ENDPOINT_CONTEXT_INFO_FLAGS_HIGHEST_PRECEDENCE)
                                  {
                                     /* This remote endpoint's codec matches*/
                                     /* with our highest precedence local   */
                                     /* endpoint, attempt to open the remote*/
                                     /* endpoint.                           */
                                     if(OpenRemoteEndpoint(AudioContextInfo, RemoteDeviceInfo, AudioEndpointContextInfo))
                                     {
                                        /* A match has been found for our   */
                                        /* highest precedence codec, flag   */
                                        /* that we can stop searching       */
                                        /* through the remote device's      */
                                        /* endpoints.                       */
                                        ContinueSearching = FALSE;
    
                                        break;
                                     }
                                  }
    
                                  /* Note that a matching endpoint was found*/
                                  /* and we can break out of the loop now.  */
                                  /* In the current implementation this is  */
                                  /* ok because there can only be one       */
                                  /* instance of a codec for each stream    */
                                  /* type, i.e. there cannot be 2 SBC       */
                                  /* source, or 2 AAC source endpoints.  If */
                                  /* AUD is ever changed to support having  */
                                  /* multiple same-type codecs then         */
                                  /* processing in this loop will have to   */
                                  /* continue when an endpoint match is     */
                                  /* found to see if a higher codec         */
                                  /* precedence endpoint can be found.      */
                                  break;
                               }
                            }
                         }
                      }
    
                      /* Check if any connecting endpoints were found.      */
                      if(!NumberConnectingEndpoints)
                      {
                         /* No connecting endpoints were found, flag that   */
                         /* the connection has failed.                      */
                         ConnectionFailed[LocalStreamType] = TRUE;
                         ContinueSearching                 = FALSE;
                      }
                   }
                }
    
                if(ContinueSearching)
                {
                   /* Match not found, keep searching.                      */
                   if(!RetrieveCapabilities(AudioContextInfo, RemoteDeviceInfo, LocalStreamType))
                   {
                      /* An error occurred while retrieving the             */
                      /* capabilities, most likely because the remote       */
                      /* endpoint does not have any more compatible         */
                      /* endpoints.  Flag that the connection has failed.   */
                      ConnectionFailed[LocalStreamType] = TRUE;
                   }
                }
             }
             else
             {
                /* We could not determine the stream type.  Fail both       */
                /* connections so that an error is dispatched to the user.  */
                ConnectionFailed[astSRC] = TRUE;
                ConnectionFailed[astSNK] = TRUE;
             }
    
             InternalConnection = FALSE;
    
             /* Loop through the endpoint types.                            */
             for(Index=0;Index<NUMBER_AUD_STREAM_TYPES;Index++)
             {
                /* Check if the connection failed.                          */
                if(ConnectionFailed[Index])
                {
                   /* The connection failed, before we give up and dispatch */
                   /* the failed connection event check if we can connect to*/
                   /* the next highest precedence codec.                    */
                   if(!ConnectHighestPrecedenceCodec(AudioContextInfo, (AUD_Stream_Type_t)Index, RemoteDeviceInfo))
                   {
                      /* The connection failed, attempt to dispatch a       */
                      /* connection failed event.                           */
                      CheckAndDispatchFailedConnection(AudioContextInfo, (AUD_Stream_Type_t)Index, RemoteDeviceInfo, GAVDGetCapabilitiesConfirmationData->ErrorCode == GAVD_AVDTP_ERROR_TIMEOUT ? AUD_STREAM_OPEN_CONFIRMATION_STATUS_CONNECTION_TIMEOUT : AUD_STREAM_OPEN_CONFIRMATION_STATUS_UNKNOWN_ERROR, &InternalConnection);
                   }
                }
             }
    
             /* Check to see if we are finished with the Remote Device Info.*/
             CheckAndCleanupRemoteDeviceInfo(AudioContextInfo, RemoteDeviceInfo, (Boolean_t)GAVDGetCapabilitiesConfirmationData->ErrorCode, InternalConnection, adrRemoteDeviceDisconnect);
          }
          else
             ret_val = FALSE;
       }
       else
          ret_val = FALSE;
    
       /* Finally return the result to the caller.                          */
       return(ret_val);
    }

    Regards,

    Michael

  • Hi Michael,

    Thanks for this info. Unfortunately I'm not that well versed in the internals of Bluetooth to be able to identify these scenarios by looking at the HCI trace. Do you have some replay tool that can feed the HCI messages to Bluetopia that were recorded in our logs, and debug the exact root cause?

  • Hi,

    The Bluetooth debug logs that you capture do not record all of the data for each message, and do not have the full info needed from the GAVD request. Are you able to capture the air sniffer logs of the connection attempt between the CC2564 and the UE Boom 2?

    Regards,

    Michael

  • Hi Michael,

    I wish we had a BT air sniffer but we don´t have. So all we have are HCI logs and those from CC2564C debug UART. Shall I have a UE Boom 2 sample shipped to you ? But as far as we can see, the behavior is similar to the JBL Flip 4 of which we already sent one sample to Hari...

  • Hi,

    I'll go see if I can get the JBL Flip4 from Hari and capture the needed test data from it.

    Regards,

    Michael

  • We could log the UART HCI communication if that helps. If so, in what format can you use this log best?

  • Hi,

    In terms of UART logs, the HCI logs you get from the logger tool is the best format for me. You've already given that to me, but it doesn't look like there is any obvious error or issue that could correspond to the stack error you are seeing though.

    One complication is that Hari is currently out of the office, and so getting ahold of that JBL Flip4 will be difficult if not impossible as the equipment is at his home office. So I appreciate your further patience in waiting.

    Regards,

    Michael

  • Dear Michael,

    did you receive the product which we ordered ? Anything we can do to help you debug ?

  • Hi Christoph,

    I got the UE Boom 2 late last night as was testing with it today.

    With the A3DPDemo_SRC application on the STM3240G-EVAL + CC2564XCQFN-EM setup I have, I do not see the same issue you're seeing unfortunately - AUD_Open_Remote_Stream seems to always succeed. Please take a look at the program output below:

    A3DP+SRC>
    OpenStack().
    Bluetooth Stack ID: 1
    A3DP Source Feature enabled.
    Device Chipset: Unknown (greater 4.1)
    BTPS Version  : 4.2.1.0
    PLAT Version  : 1.0
    App Name      : STM32-TI-BT-SRC
    App Version   : 0.2
    Project Type  : 6
    FW Version    : 12.23
    Local BD_ADDR: 0xC8DF842570C2
    EIR Data Configured Successfully (Device Name STM32-TI-BT-SRC-2570C2).
    Mute and enter the DAC, CS43L22, into power save mode with reset
    A3DP Endpoint opened successfully.
    Class of Device: 0x100428.
    Supported formats:
       Frequency: 44100, Channels: 2, Flags: 0
       Frequency: 48000, Channels: 2, Flags: 0
       Frequency: 48000, Channels: 1, Flags: 0
       Frequency: 44100, Channels: 1, Flags: 0
    
    ******************************************************************
    * Command Options: Inquiry, DisplayInquiryList, Pair,            *
    *                  EndPairing, PINCodeResponse, PassKeyResponse, *
    *                  UserConfirmationResponse,                     *
    *                  SetDiscoverabilityMode, SetConnectabilityMode,*
    *                  SetPairabilityMode, SetBaudRate               *
    *                  ChangeSimplePairingParameters,                *
    *                  GetLocalAddress, GetLocalName, SetLocalName,  *
    *                  GetClassOfDevice, SetClassOfDevice,           *
    *                  GetRemoteName, OpenSink, CloseSink, Play,     *
    *                  Pause, Help                                   *
    ******************************************************************
    
    A3DP+SRC>inquiry
    
    A3DP+SRC>
    Inquiry Entry: 0xB07D47D3F5CB.
    
    A3DP+SRC>
    Inquiry Entry: 0x88C6267D92D0.
    
    A3DP+SRC>
    Inquiry Entry: 0x84B517089959.
    
    A3DP+SRC>
    Inquiry Entry: 0x2C73A02CEA57.
    
    A3DP+SRC>
    Inquiry Entry: 0x84B517083CEF.
    
    A3DP+SRC>
    Inquiry Entry: 0x84B51708870B.
    
    A3DP+SRC>
    Inquiry Entry: 0xB07D47D348E3.
    
    A3DP+SRC>
    Inquiry Entry: 0x84B51708D1AD.
    
    A3DP+SRC>
    Inquiry Entry: 0x84B5170896E1.
    
    A3DP+SRC>
    Inquiry Entry: 0xB07D47D35111.
    
    A3DP+SRC>
    Inquiry Entry: 0x00B0E1EE3243.
    
    A3DP+SRC>
    Inquiry Entry: 0xB07D47D3C12F.
    
    A3DP+SRC>
    Inquiry Entry: 0xB07D47D34931.
    
    A3DP+SRC>
    Inquiry Entry: 0x84B51708C481.
    
    A3DP+SRC>
    Inquiry Entry: 0x84B51708D00B.
    
    A3DP+SRC>
      Result: 1,0xB07D47D3F5CB.
      Result: 2,0x88C6267D92D0.
      Result: 3,0x84B517089959.
      Result: 4,0x2C73A02CEA57.
      Result: 5,0x84B517083CEF.
      Result: 6,0x84B51708870B.
      Result: 7,0xB07D47D348E3.
      Result: 8,0x84B51708D1AD.
      Result: 9,0x84B5170896E1.
      Result: 10,0xB07D47D35111.
      Result: 11,0x00B0E1EE3243.
      Result: 12,0xB07D47D3C12F.
      Result: 13,0xB07D47D34931.
      Result: 14,0x84B51708C481.
      Result: 15,0x84B51708D00B.
    
    A3DP+SRC>GetRemoteName 1
    
    GAP_Query_Remote_Device_Name success.
    
    A3DP+SRC>
    BD_ADDR: 0xB07D47D3F5CB.
    Name: CP-8851.
    
    A3DP+SRC>GetRemoteName 2
    
    GAP_Query_Remote_Device_Name success.
    
    A3DP+SRC>
    BD_ADDR: 0x88C6267D92D0.
    Name: UE BOOM 2.
    
    A3DP+SRC>GetRemoteName 3
    
    GAP_Query_Remote_Device_Name success.
    
    A3DP+SRC>
    BD_ADDR: 0x84B517089959.
    Name: CP-8851.
    
    A3DP+SRC>pair 2
    GAP_Initiate_Bonding(Dedicated): Success.
    
    A3DP+SRC>
    atLinkKeyRequest: 0x88C6267D92D0
    
    GAP_Authentication_Response success.
    
    A3DP+SRC>
    atIOCapabilityRequest: 0x88C6267D92D0
    
    Auth success.
    
    A3DP+SRC>
    atIOCapabilityResponse: 0x88C6267D92D0
    Capabilities: No Input/Output
    
    A3DP+SRC>
    atUserConfirmationRequest: 0x88C6267D92D0
    
    Auto Accepting: 456914
    
    GAP_Authentication_Response success.
    
    A3DP+SRC>Un-handled Auth. Event.
    
    A3DP+SRC>
    atLinkKeyCreation: 0x88C6267D92D0
    Link Key Stored.
    
    A3DP+SRC>
    atAuthenticationStatus: 0 for 0x88C6267D92D0
    
    A3DP+SRC>opensink 2
    
    AUD_Open_Remote_Stream success.
    
    A3DP+SRC>
    atLinkKeyRequest: 0x88C6267D92D0
    
    GAP_Authentication_Response success.
    
    A3DP+SRC>
    atAuthenticationStatus: 0 for 0x88C6267D92D0
    
    A3DP+SRC>
    etEncryption_Change_Result for 0x88C6267D92D0, Status: 0x00, Mode: Enabled.
    
    A3DP+SRC>
    etAUD_Signalling_Channel_Open_Indication
    BD_ADDR:  0x88C6267D92D0
    
    A3DP+SRC>
    etAUD_Stream_Open_Confirmation
    Status:      0
    BD_ADDR:     0x88C6267D92D0
    MediaMTU:    895
    A3DP Open: 0
    Initialize audio with sampling frequency: 44100
    
     I2S configuration start f = 44100
    
     I2S configuration finished
    Stream Format:
       Frequency: 44100
       Channels:  2
       Flags:     0
    
    A3DP+SRC>
    etAUD_Remote_Control_Open_Indication
    BD_ADDR:     0x88C6267D92D0
    
    A3DP+SRC>play
    
    AUD_Change_Stream_State success.
    
    A3DP+SRC>
    etAUD_Stream_State_Change_Confirmation
    BD_ADDR:     0x88C6267D92D0
    StreamState: Started
    A3DP Start: 0
    
    A3DP+SRC>closeink 2
    Invalid Command: CLOSEINK.
    
    A3DP+SRC>closesink
    A3DP Stop: 0
    A3DP Close: 0
    
     uninitializeAUDIO finished...
    
    etAUD_Remote_Control_Close_Indication
    BD_ADDR:          0x88C6267D92D0
    DisconnectReason: 0
    
    A3DP+SRC>
    etAUD_Signalling_Channel_Close_Indication
    BD_ADDR:  0x88C6267D92D0
    DisconnectReason: 1
    
    A3DP+SRC>
             AUD_Close_Stream success.
    
    A3DP+SRC>
    A3DP+SRC>open
    Invalid Command: OPEN.
    
    A3DP+SRC>opensink2
    Invalid Command: OPENSINK2.
    
    A3DP+SRC>opensink 2
    
    AUD_Open_Remote_Stream success.
    
    A3DP+SRC>
    atLinkKeyRequest: 0x88C6267D92D0
    
    GAP_Authentication_Response success.
    
    A3DP+SRC>
    atAuthenticationStatus: 0 for 0x88C6267D92D0
    
    A3DP+SRC>
    etEncryption_Change_Result for 0x88C6267D92D0, Status: 0x00, Mode: Enabled.
    
    A3DP+SRC>
    etAUD_Signalling_Channel_Open_Indication
    BD_ADDR:  0x88C6267D92D0
    
    A3DP+SRC>
    etAUD_Stream_Open_Confirmation
    Status:      0
    BD_ADDR:     0x88C6267D92D0
    MediaMTU:    895
    A3DP Open: 0
    Initialize audio with sampling frequency: 44100
    
     I2S configuration start f = 44100
    
     I2S configuration finished
    Stream Format:
       Frequency: 44100
       Channels:  2
       Flags:     0
    
    A3DP+SRC>
    etAUD_Remote_Control_Open_Indication
    BD_ADDR:     0x88C6267D92D0
    
    A3DP+SRC>closesink 2
    A3DP Close: 0
    
     uninitializeAUDIO finished...
    
    etAUD_Remote_Control_Close_Indication
    BD_ADDR:          0x88C6267D92D0
    DisconnectReason: 0
    
    A3DP+SRC>
    etAUD_Signalling_Channel_Close_Indication
    BD_ADDR:  0x88C6267D92D0
    DisconnectReason: 1
    
    A3DP+SRC>
             AUD_Close_Stream success.
    
    A3DP+SRC>opensink 2
    
    AUD_Open_Remote_Stream success.
    
    A3DP+SRC>
    atLinkKeyRequest: 0x88C6267D92D0
    
    GAP_Authentication_Response success.
    
    A3DP+SRC>
    atAuthenticationStatus: 0 for 0x88C6267D92D0
    
    A3DP+SRC>
    etEncryption_Change_Result for 0x88C6267D92D0, Status: 0x00, Mode: Enabled.
    
    A3DP+SRC>
    etAUD_Signalling_Channel_Open_Indication
    BD_ADDR:  0x88C6267D92D0
    
    A3DP+SRC>
    etAUD_Stream_Open_Confirmation
    Status:      0
    BD_ADDR:     0x88C6267D92D0
    MediaMTU:    895
    A3DP Open: 0
    Initialize audio with sampling frequency: 44100
    
     I2S configuration start f = 44100
    
     I2S configuration finished
    Stream Format:
       Frequency: 44100
       Channels:  2
       Flags:     0
    
    A3DP+SRC>
    etAUD_Remote_Control_Open_Indication
    BD_ADDR:     0x88C6267D92D0
    
    A3DP+SRC>closeink 2
    Invalid Command: CLOSEINK.
    
    A3DP+SRC>closesih
    Invalid Command: CLOSESIH.
    
    A3DP+SRC>closesink 2
    A3DP Close: 0
    
     uninitializeAUDIO finished...
    
    AUD_Close_Stream success.
    
    A3DP+SRC>
    etAUD_Remote_Control_Close_Indication
    BD_ADDR:          0x88C6267D92D0
    DisconnectReason: 0
    
    A3DP+SRC>
    etAUD_Signalling_Channel_Close_Indication
    BD_ADDR:  0x88C6267D92D0
    DisconnectReason: 1
    
    A3DP+SRC>opensink 2
    
    AUD_Open_Remote_Stream success.
    
    A3DP+SRC>
    atLinkKeyRequest: 0x88C6267D92D0
    
    GAP_Authentication_Response success.
    
    A3DP+SRC>
    atAuthenticationStatus: 0 for 0x88C6267D92D0
    
    A3DP+SRC>
    etEncryption_Change_Result for 0x88C6267D92D0, Status: 0x00, Mode: Enabled.
    
    A3DP+SRC>
    etAUD_Signalling_Channel_Open_Indication
    BD_ADDR:  0x88C6267D92D0
    
    A3DP+SRC>
    etAUD_Stream_Open_Confirmation
    Status:      0
    BD_ADDR:     0x88C6267D92D0
    MediaMTU:    895
    A3DP Open: 0
    Initialize audio with sampling frequency: 44100
    
     I2S configuration start f = 44100
    
     I2S configuration finished
    Stream Format:
       Frequency: 44100
       Channels:  2
       Flags:     0
    
    A3DP+SRC>
    etAUD_Remote_Control_Open_Indication
    BD_ADDR:     0x88C6267D92D0
    
    A3DP+SRC>

    Just to clarify, is this issue something you see with the STM32 EVM + CC2564C demo board setup as well, or are you only seeing this issue on your own custom hardware?

    Regards,

    Michael

  • Hi Michael,

    We're seeing the problem with the A3DPDemo_SRC on STM32F4Disc + CC2564C on our side, the logs are also from there. What I'm doing differently is I don't pair them first, but let the opensink manage the pairing internally (since when I tried to do GAP pairing and A2DP connecting programmatically one after another, the connect always failed). Could you try that on your side a few times as well, power cycling the setup in between (so the pairing information is lost)?

  • Hi,

    Sure, I can run that test, where I just use opensink directly without pairing.

    As for your comment on how "GAP pairing and A2DP connecting programmatically one after another, the connect always failed", do you mean that when you perform the pairing separate from the opensink like I do, you always encounter the issue? Just want to make sure I understand your comment correctly

    Regards,

    Michael

  • Any updates on this?

    I mean that I use the GAP API to pair, and when the success callback is triggered, the code initiates an A2DP stream open request. This request always fails for me, even with devices that connect successfully using only the stream open call.

  • Hi,

    As per our debug earlier today, I cannot reproduce the issue that you are seeing.

    The next steps I have recorded are:

    1. I will get an STM32 discovery board, so that I can run build and run your code. You will send me the code that I should run, to best reproduce your setup.

    2. I will build a version of the A3DP SRC demo, so that you can run what I'm running and see if you run into the same issue.

    Currently, I do not have access to an STM32 discovery board. I have arranged to get one from a coworker, and that should happen tomorrow. I will let you know when I have it up and running.

    Regards,

    Michael

  • Hi Benedek,

    Please try the latest Bluetopia STM32 stack found here. That solved the issue on my end.

    Thanks,
    Jacob

  • Hi Jacob,

    Thanks for the update, I will try the new stack soon - from the private link that you sent me, as the TI website still shows me the old v4.2.1.1 version to download.

  • Hi Benedek,

    Thanks for pointing that out - I will check on this link. It should be made available on TI.com.

    Thanks,
    Jacob