5 Replies Latest reply on Sep 25, 2018 11:18 PM by AnjanaM_61

    LMP Feature Notification of EDR ACL 2Mbps and 3Mbps Capablities


      I am using the RFCOMM server example from the WICED studio. The RFCOMM server is paired with a Bluetooth client application on an Android phone. The log of HCI messages on the Android indicates that the ACL 2 & 3 Mbps modes are marked as disabled in the LMP feature notification message sent from WICED reference board to the Android phone. It appears that those two modes, the  2 Mbps and 3 Mbps (EDR) features are not turned on by default. I am experiencing a low throughput with the RFCOMM. So I need to turn on the 2 & 3 Mbps features. I know that the BT stack can change the rate (increase or decrease)  based on the RF environment but in this case it should be able to support the higher rates ( at least 2 Mbps) since the client and the server are two feet apart and there are not a lot interferences around them. What configuration table (or parameters) I need to add to the WICED's RFCOMM server example so it flags the 2 Mbps & 3 Mbps (EDR) modes as enabled?


        • 1. Re: LMP Feature Notification of EDR ACL 2Mbps and 3Mbps Capablities



          Please let us know which chip you are using?


          Can you please confirm whether you are are looking for ACL packet type configuration using "7.1.14 Change Connection Packet Type Command " (in Bluetooth Core Spec) ?


          Thanks & Regards,



          • 2. Re: LMP Feature Notification of EDR ACL 2Mbps and 3Mbps Capablities

            I am using a CYW43438  reference module. Which is a combination of 43438 radio + STM32 M4 CPU.

            The “Change Connection Packet Type” message from the log indicates that DH5 packet types are enables but not 2-DH5 or 3DH5. Below is a snapshot of the message from the capture log:




            • 3. Re: LMP Feature Notification of EDR ACL 2Mbps and 3Mbps Capablities

              Hello Mohammad,


              There is an API you can call for setting the packet types.



              ** Function BTM_SetPacketTypes


              ** Description This function is set the packet types used for a specific

              ** ACL connection,


              ** Returns BTM_CMD_STARTED if successfully initiated, otherwise error



              BTM_API extern tBTM_STATUS BTM_SetPacketTypes (BD_ADDR remote_bda, UINT16 pkt_types);


              Below are the options you can use for packet types.


              ** Definitions for packet type masks (BT1.2 and BT2.0 definitions)


              #define HCI_PKT_TYPES_MASK_NO_2_DH1 0x0002

              #define HCI_PKT_TYPES_MASK_NO_3_DH1 0x0004

              #define HCI_PKT_TYPES_MASK_DM1 0x0008

              #define HCI_PKT_TYPES_MASK_DH1 0x0010

              #define HCI_PKT_TYPES_MASK_HV1 0x0020

              #define HCI_PKT_TYPES_MASK_HV2 0x0040

              #define HCI_PKT_TYPES_MASK_HV3 0x0080

              #define HCI_PKT_TYPES_MASK_NO_2_DH3 0x0100

              #define HCI_PKT_TYPES_MASK_NO_3_DH3 0x0200

              #define HCI_PKT_TYPES_MASK_DM3 0x0400

              #define HCI_PKT_TYPES_MASK_DH3 0x0800

              #define HCI_PKT_TYPES_MASK_NO_2_DH5 0x1000

              #define HCI_PKT_TYPES_MASK_NO_3_DH5 0x2000

              #define HCI_PKT_TYPES_MASK_DM5 0x4000

              #define HCI_PKT_TYPES_MASK_DH5 0x8000


              Here is an example of usage.

                case HCI_CONTROL_AUDIO_START:

                // When streaming audio to a headset, we will not use 3mbps modulation to improve

                // range. The 0xcc18 allows all packets types. Adding 0x2204 tell controller

                // not to use 3DH1, 3DH3 and 3DH5 packets.


                HCI_PKT_TYPES_MASK_DM5 | HCI_PKT_TYPES_MASK_DH5 | /* Use 1 mbps 5 slot packets */

                HCI_PKT_TYPES_MASK_DH3 | HCI_PKT_TYPES_MASK_DM3 | /* Use 1 mbps 3 slot packets */

                HCI_PKT_TYPES_MASK_DH1 | HCI_PKT_TYPES_MASK_DM1 | /* Use 1 mbps 1 slot packets */

                HCI_PKT_TYPES_MASK_NO_3_DH1 | /* Don't use 3 mbps 1 slot packets */

                HCI_PKT_TYPES_MASK_NO_3_DH3 | /* Don't use 3 mbps 3 slot packets */

                HCI_PKT_TYPES_MASK_NO_3_DH5); /* Don't use 3 mbps 5 slot packets */




              1 of 1 people found this helpful
              • 4. Re: LMP Feature Notification of EDR ACL 2Mbps and 3Mbps Capablities

                Thanks JaeyoungY_71 for your reply. Our captured log files indicates the  DH5 packet type has been enabled. I am trying to enable the 2DH5 or 3DH5 packet types to increase the throughput of the RFCOMM link. Your reply shows how to disable the 3DH5 (using HCI_PKT_TYPES_MASK_NO_3_DH5) or 2DH5 (using HCI_PKT_TYPES_MASK_NO_2_DH5) but it does not show how to enable those type of packets. I looked at the file "hcidefs.h" which includes the packet type defines. In that file I don't see an option to turn on the 3DH5 or 2Dh5 packet types. I don't see the define for HCI_PKT_TYPES_MASK_3_DH5 (enables the 3Dh5 type) but I see the define for HCI_PKT_TYPES_MASK_NO_3_DH5 that is used for disabling the 3Dh5 packet types.




                My goal is to increase the RFCOMM throughput. If the 3D5 or 2Dh5 packets are disabled by default then the other avenue to explore is how to increase the RFCOMM window of transmission. RFCOMM uses a credit based system to adjust the window of transmission. If the receiver grants 1 credit to the transmitter, then the transmitting side transmits 1 packet only and waits until it receives more credit. If the receiver grants 6 credit then the transmitter sends 6 packets back to back then it stops transmitting till  the receiver grants more credit.




                The captured log files of an RFCOMM connection between the WICED and an Android phone indicates that the RFCOMM server on the WICED grants only 1 credit but the log files of an RFCOMM link between two Android phones shows that the server on one of the Android phone is granting 6 credits to the other Android phone. More credit means more back to back transmission; 6 credit corresponds to the transmission of 6 packets back to back. The higher the credit grant corresponds to more back to back transmission which ultimately improves the overall RFCOMM throughput. The throughput of RFCOMM link between two android phone is 6 or 7 folds more than the throughput of RFCOMM link between the WICED and the Android phones.




                The question that needs to be answered is that since the RFCOMM is a credit based protocol what parameter needs to be modified in the WICED studio to increase the RFCOMM credit?


                Certainly there is an upper limit for the credit. But currently it is set to 1. There should be some room to tune it higher than 1.





                • 5. Re: LMP Feature Notification of EDR ACL 2Mbps and 3Mbps Capablities



                  Unfortunately there is no easy fix for this feature and at the moment we do not have an ETA for it.

                  We have forwarded your query to our product development team, who will evaluate your query.

                  Thank you for your interest in Cypress products