Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

Wi-Fi Combo Forum Discussions

MoNo_2793136
Level 2
Level 2

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?

Thanks.

0 Likes
1 Solution
AnjanaM_61
Moderator
Moderator First comment on KBA 5 questions asked First question asked
Moderator

Hello,

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

Regards

Anjana

View solution in original post

0 Likes
5 Replies
AnjanaM_61
Moderator
Moderator First comment on KBA 5 questions asked First question asked
Moderator

Hi,

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,

Anjana

0 Likes
MoNo_2793136
Level 2
Level 2

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:

Thanks.

0 Likes
JaeyoungY_71
Employee
100 likes received 50 likes received 25 likes received
Employee

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.

  BTM_SetPacketTypes(av_app_cb.peer_bda,

  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 */

Thanks,

Jaeyoung

MoNo_2793136
Level 2
Level 2

Thanks jayi 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.

Thanks.

0 Likes
AnjanaM_61
Moderator
Moderator First comment on KBA 5 questions asked First question asked
Moderator

Hello,

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

Regards

Anjana

0 Likes