Skip to content

Commit

Permalink
This comment adds (1) basic support for AF_BLUETOOTH sockets. The log…
Browse files Browse the repository at this point in the history
…ic compiles but is still incomplete. Support for Bluetooth is general is still dependent on CONFIG_EXPERMIMENTAL because it is not yet ready for used.

Squashed commit of the following:

    wireless/bluetooth:  Some small changes that gets to a clean compile by just eliminating some incorrect implementations (still with a lot of warnings.  The logic is still incomplete but now not so lethal.
    wireless/bluetooth:  Restructuring:  Connection interfaces should internal to wireless/bluetooth.  include/nuttx/wireless/bt_conn.h removed and merged with wireless/bluetooth/bt_conn.h.  Several fix to get closer to bt_netdev.c compiling.  Need to design some not interfaces and use some existing interfaces to send and receiv packets.
    wireless/bluetooth: Some organization with some network device compile errors fixed.  Still not even close to compiling.
    net/bluetooth:  Fix numerous compile issues; Still open design issues with regard to the interface with the Bluetooth stack.
    wireless/bluetooth:  Create bt_netdev.c with a crude copy of mac802154_netdev.c.  Does not not even compile yet.
    include/nuttx/net:  Add bluetooth.h.  Content is not yet correct.
    net/netpackets:  Add bluetooth.h.  Update net/bluetooth to use new socket address definition.
    net/bluetooth:  Some fixes for initial build.
    net/bluetooth:  Add initial support for Bluetooth sockets.  The initial cut is just the a clone of the IEEE 802.15.4 socket support with name changes.
    net/ieee802154:  Fix some typos noted when cloning to create net/bluetooth.
  • Loading branch information
gregory-nutt committed Mar 31, 2018
1 parent fd068f1 commit 0c007be
Show file tree
Hide file tree
Showing 43 changed files with 5,836 additions and 610 deletions.
2 changes: 1 addition & 1 deletion drivers/wireless/bluetooth/bt_uart.c
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ static void btuart_interrupt(FAR const struct btuart_lowerhalf_s *lower,

/* Pass buffer to the stack */

bt_recv(buf);
bt_input(buf);
buf = NULL;
}

Expand Down
84 changes: 84 additions & 0 deletions include/netpacket/bluetooth.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
/****************************************************************************
* include/netpacket/bluetooth.h
*
* Copyright (C) 2018 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/

#ifndef __INCLUDE_NETPACKET_BLUETOOTH_H
#define __INCLUDE_NETPACKET_BLUETOOTH_H

/****************************************************************************
* Included Files
****************************************************************************/

#include <sys/types.h>
#include <stdint.h>

#include <nuttx/wireless/bt_hci.h>

/****************************************************************************
* Pre-processor Definitions
****************************************************************************/

/* Well known addresses */

/****************************************************************************
* Public Type Definitions
****************************************************************************/

/* See include/nuttx/wireless/bt_hci.h for address definitions. In
* particular, type bt_addr_t
*/

/* Socket address used with:
*
* bind() - Associates local address with socket
* connect() - Associates a remote address with the socket (for send())
* sendto() - Send to specified remote address
* recvfrom()- Receive from indicated remote address.
*
* The 'rc' in the naming derives from RFCCOMM as used in Linux. The
* resemblances are superficial beyond that, however.
*/

struct sockaddr_rc_s
{
sa_family_t rc_family;
bt_addr_t rc_bdaddr;
uint8_t rc_channel;
};

/****************************************************************************
* Public Function Prototypes
****************************************************************************/

#endif /* __INCLUDE_NETPACKET_BLUETOOTH_H */
128 changes: 128 additions & 0 deletions include/nuttx/net/bluetooth.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
/****************************************************************************
* include/nuttx/net/bluetooth.h
*
* Copyright (C) 2018 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/

#ifndef __INCLUDE_NUTTX_NET_BLUETOOTH_H
#define __INCLUDE_NUTTX_NET_BLUETOOTH_H

/****************************************************************************
* Public Function Prototypes
****************************************************************************/

#include <nuttx/wireless/bt_hci.h>

/****************************************************************************
* Public Function Prototypes
****************************************************************************/

/* REVISIT: Is there any header on the Bluetooth data as received by the
* network stack?
*/

#warning REVISIT

#define BLUETOOTH_HDRLEN 0
#define BLUETOOTH_ADDRSIZE 6
#define BLUETOOTH_ADDRCOPY(d,s) memcpy((d),(s),BLUETOOTH_ADDRSIZE)
#define BLUETOOTH_ADDRCMP(a,b) (memcmp((a),(b),BLUETOOTH_ADDRSIZE) == 0)

/****************************************************************************
* Public Types
****************************************************************************/

/* This is the form of the meta-data that accompanies frames received from
* the Bluetooth stack.
*/

struct bluetooth_frame_meta_s
{
bt_addr_t bm_raddr; /* Connected remote address */
uint8_t bm_channel; /* Connection channel */
};

/****************************************************************************
* Public Function Prototypes
****************************************************************************/

/****************************************************************************
* Name: bluetooth_input
*
* Description:
* Handle incoming Bluetooth input
*
* This function is called when the radio device driver has received an
* frame from the network. The frame from the device driver must be
* provided in by the IOB frame argument of the function call:
*
* - The frame data is in the IOB io_data[] buffer,
* - The length of the frame is in the IOB io_len field, and
* - The offset past and radio MAC header is provided in the io_offset
* field.
*
* The frame argument may refer to a single frame (a list of length one)
* or may it be the head of a list of multiple frames.
*
* - The io_flink field points to the next frame in the list (if enable)
* - The last frame in the list will have io_flink == NULL.
*
* Input Parameters:
* radio The radio network driver interface.
* framelist - The head of an incoming list of frames. Normally this
* would be a single frame. A list may be provided if
* appropriate, however.
* meta - Meta data characterizing the received frame.
*
* If there are multiple frames in the list, this metadata
* must apply to all of the frames in the list.
*
* Returned Value:
* OK The Bluetooth has been processed and can be deleted
* ERROR Hold the Bluetooth and try again later. There is a listening
* socket but no recv in place to catch the Bluetooth yet.
* Useful when a packet arrives before a recv call is in place.
*
* Assumptions:
* Called from the network diver with the network locked.
*
****************************************************************************/

struct radio_driver_s; /* Forward reference */
struct bluetooth_data_ind_s; /* Forward reference */
struct iob_s; /* Forward reference */

int bluetooth_input(FAR struct radio_driver_s *radio,
FAR struct iob_s *framelist,
FAR struct bluetooth_frame_meta_s *meta);

#endif /* __INCLUDE_NUTTX_NET_BLUETOOTH_H */
1 change: 1 addition & 0 deletions include/nuttx/net/net.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ enum net_lltype_e
NET_LL_LOOPBACK, /* Local loopback */
NET_LL_SLIP, /* Serial Line Internet Protocol (SLIP) */
NET_LL_TUN, /* TUN Virtual Network Device */
NET_LL_BLUETOOTH, /* Bluetooth */
NET_LL_IEEE80211, /* IEEE 802.11 */
NET_LL_IEEE802154, /* IEEE 802.15.4 MAC */
NET_LL_PKTRADIO /* Non-standard packet radio */
Expand Down
21 changes: 16 additions & 5 deletions include/nuttx/net/netdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,12 @@
# endif
#elif defined(CONFIG_WIRELESS_IEEE802154)
# define RADIO_MAX_ADDRLEN 8
#elif defined(CONFIG_WIRELESS_BLUETOOTH)
# if CONFIG_PKTRADIO_ADDRLEN > 6
# define RADIO_MAX_ADDRLEN CONFIG_PKTRADIO_ADDRLEN
# else
# define RADIO_MAX_ADDRLEN 6
# endif
#else /* if defined(CONFIG_WIRELESS_PKTRADIO) */
# define RADIO_MAX_ADDRLEN CONFIG_PKTRADIO_ADDRLEN
#endif
Expand Down Expand Up @@ -182,9 +188,13 @@ struct netdev_statistics_s
};
#endif

#if defined(CONFIG_NET_6LOWPAN) || defined(CONFIG_NET_IEEE802154)
#if defined(CONFIG_NET_6LOWPAN) || defined(CONFIG_NET_BLUETOOTH) || \
defined(CONFIG_NET_IEEE802154)
/* This structure is used to represent addresses of varying length. This
* structure is used to represent the address assigned to a radio.
*
* NOTE: the Bluetooth address is not variable, but shares struct
* radio_driver_s which depends on this type.
*/

struct netdev_maxaddr_s
Expand Down Expand Up @@ -237,7 +247,7 @@ struct net_driver_s
#endif

#if defined(CONFIG_NET_ETHERNET) || defined(CONFIG_NET_6LOWPAN) || \
defined(CONFIG_NET_IEEE802154)
defined(CONFIG_NET_BLUETOOTH) || defined(CONFIG_NET_IEEE802154)

/* Link layer address */

Expand All @@ -249,13 +259,14 @@ struct net_driver_s
struct ether_addr ether; /* Device Ethernet MAC address */
#endif

#if defined(CONFIG_NET_6LOWPAN) || defined(CONFIG_NET_IEEE802154)
#if defined(CONFIG_NET_6LOWPAN) || defined(CONFIG_NET_BLUETOOTH) || \
defined(CONFIG_NET_IEEE802154)
/* The address assigned to an IEEE 802.15.4 or generic packet radio. */

struct netdev_varaddr_s radio;
#endif /* CONFIG_NET_6LOWPAN || CONFIG_NET_IEEE802154 */
#endif
} d_mac;
#endif /* CONFIG_NET_ETHERNET || CONFIG_NET_6LOWPAN || CONFIG_NET_IEEE802154 */
#endif /* CONFIG_NET_ETHERNET || CONFIG_NET_6LOWPAN ... || CONFIG_NET_IEEE802154 */

/* Network identity */

Expand Down
7 changes: 4 additions & 3 deletions include/nuttx/net/radiodev.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@

#include <nuttx/net/netdev.h>

#if defined(CONFIG_NET_6LOWPAN) || defined(CONFIG_NET_IEEE802154)
#if defined(CONFIG_NET_6LOWPAN) || defined(CONFIG_NET_BLUETOOTH) || \
defined (CONFIG_NET_IEEE802154)

/****************************************************************************
* Public Types
Expand Down Expand Up @@ -155,7 +156,7 @@ struct iob_s; /* Forward reference */

struct radio_driver_s
{
/* This definitiona must appear first in the structure definition to
/* This definition must appear first in the structure definition to
* assure cast compatibility.
*/

Expand Down Expand Up @@ -251,5 +252,5 @@ struct radio_driver_s
* Public Function Prototypes
****************************************************************************/

#endif /* CONFIG_NET_6LOWPAN || CONFIG_NET_IEEE802154 */
#endif /* CONFIG_NET_6LOWPAN || CONFIG_NET_BLUETOOTH || CONFIG_NET_IEEE802154 */
#endif /* __INCLUDE_NUTTX_NET_RADIODEV_H */
Loading

0 comments on commit 0c007be

Please sign in to comment.