socket_api->connect((const bt_bdaddr_t *)bd,
BTSOCK_RFCOMM, NULL, channel, &sock_fd, 0);
break;
+ case OAL_SOCK_L2CAP_LE:
+ BT_INFO("L2CAP_LE socket connect");
+ socket_api->connect((const bt_bdaddr_t *)bd,
+ BTSOCK_L2CAP_LE, NULL, channel, &sock_fd, 0);
+ break;
default:
BT_ERR("Socket type: %d not supported", sock_type);
}
int socket_listen(oal_sock_type_t sock_type, oal_uuid_t *p_uuid, char *svc_name, int channel)
{
int sock_fd = -1;
- int srv_channel;
+ int srv_channel = -1;
int ret = BT_STATUS_FAIL;
CHECK_OAL_SOCKET_ENABLED();
- OAL_CHECK_PARAMETER(svc_name, return);
- API_TRACE("svc_name: %s", svc_name);
+
+ if (sock_type != OAL_SOCK_L2CAP_LE) {
+ OAL_CHECK_PARAMETER(svc_name, return);
+ API_TRACE("svc_name: %s", svc_name);
+ }
switch (sock_type) {
case OAL_SOCK_RFCOMM:
ret = socket_api->listen(BTSOCK_RFCOMM,
svc_name, p_uuid->uuid, channel, &sock_fd, 0);
break;
+ case OAL_SOCK_L2CAP_LE:
+ BT_INFO("l2cap_le socket listen to psm %d", channel);
+ ret = socket_api->listen(BTSOCK_L2CAP_LE,
+ NULL, NULL, channel, &sock_fd, 0);
+ break;
default:
BT_ERR("Socket type: %d not supported", sock_type);
}
BT_INFO("Bluetooth server socket created, sock_fd=%d", sock_fd);
- /* Read server channel number sent by stack */
- srv_channel = sock_wait_for_channel(sock_fd);
- if (srv_channel < 0) {
- BT_ERR("incorrect channel= %d", srv_channel);
- return -1;
+ /* Read server channel number sent by stack
+ * Skipping it for l2cap_le socket, it will be read at FRWK API.
+ */
+ if (sock_type != OAL_SOCK_L2CAP_LE) {
+ srv_channel = sock_wait_for_channel(sock_fd);
+ if (srv_channel < 0) {
+ BT_ERR("incorrect channel= %d", srv_channel);
+ return -1;
+ }
}
-
BT_INFO("server channel= %d", srv_channel);
return sock_fd;