Bluetooth: L2CAP_BR: Add mode optional support
Add mode optional support for BR l2cap connect initiator role. If `chan->rx.optional` is true, set the mode to basic mode instead of return error code `-ENOTSUP`. Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
This commit is contained in:
parent
d2a10833dd
commit
88bd18b6cd
1 changed files with 32 additions and 8 deletions
|
@ -1999,15 +1999,27 @@ static int l2cap_br_check_chan_config(struct bt_conn *conn, struct bt_l2cap_br_c
|
|||
if ((br_chan->rx.mode == BT_L2CAP_BR_LINK_MODE_FC) &&
|
||||
(((br_chan_sig->info_feat_mask & L2CAP_FEAT_FC_MASK) == 0) ||
|
||||
((L2CAP_EXTENDED_FEAT_MASK & L2CAP_FEAT_FC_MASK) == 0))) {
|
||||
LOG_ERR("Invalid mode %u", br_chan->rx.mode);
|
||||
return -ENOTSUP;
|
||||
if (!br_chan->rx.optional) {
|
||||
LOG_ERR("Invalid mode %u", br_chan->rx.mode);
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
LOG_WRN("Unsupp mode %u, set basic mode", br_chan->rx.mode);
|
||||
br_chan->rx.mode = BT_L2CAP_BR_LINK_MODE_BASIC;
|
||||
break;
|
||||
}
|
||||
|
||||
if ((br_chan->rx.mode == BT_L2CAP_BR_LINK_MODE_RET) &&
|
||||
(((br_chan_sig->info_feat_mask & L2CAP_FEAT_RET_MASK) == 0) ||
|
||||
((L2CAP_EXTENDED_FEAT_MASK & L2CAP_FEAT_RET_MASK) == 0))) {
|
||||
LOG_ERR("Invalid mode %u", br_chan->rx.mode);
|
||||
return -ENOTSUP;
|
||||
if (!br_chan->rx.optional) {
|
||||
LOG_ERR("Invalid mode %u", br_chan->rx.mode);
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
LOG_WRN("Unsupp mode %u, set basic mode", br_chan->rx.mode);
|
||||
br_chan->rx.mode = BT_L2CAP_BR_LINK_MODE_BASIC;
|
||||
break;
|
||||
}
|
||||
|
||||
if (((br_chan_sig->info_feat_mask & L2CAP_FEAT_ENH_RET_MASK) != 0) &&
|
||||
|
@ -2023,15 +2035,27 @@ static int l2cap_br_check_chan_config(struct bt_conn *conn, struct bt_l2cap_br_c
|
|||
case BT_L2CAP_BR_LINK_MODE_ERET:
|
||||
if (((br_chan_sig->info_feat_mask & L2CAP_FEAT_ENH_RET_MASK) == 0) ||
|
||||
((L2CAP_EXTENDED_FEAT_MASK & L2CAP_FEAT_ENH_RET_MASK) == 0)) {
|
||||
LOG_ERR("Invalid mode %u", br_chan->rx.mode);
|
||||
return -ENOTSUP;
|
||||
if (!br_chan->rx.optional) {
|
||||
LOG_ERR("Invalid mode %u", br_chan->rx.mode);
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
LOG_WRN("Unsupp mode %u, set basic mode", br_chan->rx.mode);
|
||||
br_chan->rx.mode = BT_L2CAP_BR_LINK_MODE_BASIC;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case BT_L2CAP_BR_LINK_MODE_STREAM:
|
||||
if (((br_chan_sig->info_feat_mask & L2CAP_FEAT_STREAM_MASK) == 0) ||
|
||||
((L2CAP_EXTENDED_FEAT_MASK & L2CAP_FEAT_STREAM_MASK) == 0)) {
|
||||
LOG_ERR("Invalid mode %u", br_chan->rx.mode);
|
||||
return -ENOTSUP;
|
||||
if (!br_chan->rx.optional) {
|
||||
LOG_ERR("Invalid mode %u", br_chan->rx.mode);
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
LOG_WRN("Unsupp mode %u, set basic mode", br_chan->rx.mode);
|
||||
br_chan->rx.mode = BT_L2CAP_BR_LINK_MODE_BASIC;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue