MXC_A39_20240320/SW/components/btdm/include/pan_api.h

679 lines
20 KiB
C

#ifndef _PAN_API
#define _PAN_API
#include "bt_types.h"
#include "me_api.h"
#include "pan_pkt.h"
#define NUM_BNEP_PANUS 1
#define NUM_PAN_ARP_ADDRS 10
#define NUM_BT_PKTS (NUM_BNEP_PANUS * 4)
#define BNEP_ADDR_SIZE BD_ADDR_SIZE
#define BNEP_NUM_TIMERS 3
/*---------------------------------------------------------------------------
* BnepEthernetProtocolType type
*
* Some of the more common Ethernet Protocol types in BNEP packets.
*/
typedef uint16_t BnepEthernetProtocolType;
#define ETHER_TYPE_IPV4 0x0800
#define ETHER_TYPE_ARP 0x0806
#define ETHER_TYPE_IPV6 0x86DD
/*---------------------------------------------------------------------------
* BnepPacketType type
*
* The high order bit of the BNEP packet type is the Extension Flag. The
* one bit Extension Flag indicates if one or more extension headers
* follow the BNEP header before the data payload.
*
*/
typedef uint8_t BnepPacketType;
#define BNEP_GENERAL_ETHERNET 0x00
#define BNEP_CONTROL 0x01
#define BNEP_COMPRESSED_ETHERNET 0x02
#define BNEP_COMPRESSED_ETHERNET_SOURCE_ONLY 0x03
#define BNEP_COMPRESSED_ETHERNET_DEST_ONLY 0x04
/*---------------------------------------------------------------------------
* BnepControlType type
*
*/
typedef uint8_t BnepControlType;
#define BNEP_CONTROL_COMMAND_NOT_UNDERSTOOD 0x00
#define BNEP_SETUP_CONNECTION_REQUEST_MSG 0x01
#define BNEP_SETUP_CONNECTION_RESPONSE_MSG 0x02
#define BNEP_FILTER_NET_TYPE_SET_MSG 0x03
#define BNEP_FILTER_NET_TYPE_RESPONSE_MSG 0x04
#define BNEP_FILTER_MULTI_ADDR_SET_MSG 0x05
#define BNEP_FILTER_MULTI_ADDR_RESPONSE_MSG 0x06
/*---------------------------------------------------------------------------
* PanPacketType type
*
* Indicates the packet type when sending or receiving a data packet.
* All packets include their associated IP header unless otherwise
* indicated.
*/
typedef BnepPacketType PanPacketType;
/* Packet type unknown.
*/
#define PANPKT_UNKNOWN 0x40
/* Packet type is General Ethernet and includes the MAC header. The packet
* must be parsed to determine higher layer protocols. This packet is
* normally forwarded to the remote network.
*/
#define PANPKT_ETHER_PKT 0x41
/* Packet is an ARP request.
*/
#define PANPKT_ARP_REQUEST 0x42
/* Packet is an ARP reply.
*/
#define PANPKT_ARP_REPLY 0x43
/* Packet type is IP.
*/
#define PANPKT_IP 0x44
/* Packet is an ICMP request (Ping echo.)
*/
#define PANPKT_ICMP_REQUEST 0x45
/* Packet is an ICMP reply (Ping echo reply.)
*/
#define PANPKT_ICMP_REPLY 0x46
/* Packet type is TCP.
*/
#define PANPKT_TCP 0x47
/* Packet type is UDP.
*/
#define PANPKT_UDP 0x48
/* Packet is a DHCP request.
*/
#define PANPKT_DHCP_REQUEST 0x49
/* Packet is a DHCP reply.
*/
#define PANPKT_DHCP_REPLY 0x4a
/* Packet is a BNEP network filter (no IP header.)
*/
#define PANPKT_NET_FILTER 0x4b
/* Packet is a BNEP multicast filter (no IP header.)
*/
#define PANPKT_MCAST_FILTER 0x4c
/* End of PanPacketType */
#define ETHER_HDR_SIZE (BNEP_ADDR_SIZE*2 + sizeof(BnepEthernetProtocolType))
#define ETHER_RANGE_SIZE (sizeof(BnepEthernetProtocolType)*2)
#define BNEP_TYPE_SIZE sizeof(BnepPacketType)
#define BNEP_GNRL_HDR_SIZE (BNEP_TYPE_SIZE + ETHER_HDR_SIZE)
#define BNEP_CONTROL_TYPE_SIZE sizeof(BnepControlType)
#define BNEP_CONTROL_HDR_SIZE (BNEP_TYPE_SIZE + BNEP_CONTROL_TYPE_SIZE)
#define PAN_PANU_NUM_ATTRIBUTES 9
#define PAN_GN_NUM_ATTRIBUTES 11
#define PAN_NAP_NUM_ATTRIBUTES 13
#define PAN_NUM_SEARCH_ATTRIBUTES 21
/*---------------------------------------------------------------------------
* BnepFilterResponseMsg type
*
*/
typedef uint16_t BnepFilterResponseMsg;
#define BNEP_FR_OPERATION_SUCCESS 0x0000
#define BNEP_FR_UNSUPPORTED 0x0001
#define BNEP_FR_INVALID_PROTOCOL 0x0002
#define BNEP_FR_FAILED_MAX_FILTERS 0x0003
#define BNEP_FR_FAILED_SECURITY 0x0004
/** Indicates an open request is in progress on a client. Use
* PAN_SetupConnection to complete the connection with a BNEP Setup
* Connection control message. This event precedes the PANEVENT_OPEN
* event on a client.
*/
#define PANEVENT_SETUP_CONNECTION 0x81
/** Indicates an open request on a server. Use PAN_ControlResponse to
* complete the connection with a BNEP Setup Connection response. This
* event will follow a PANEVENT_OPEN event on a server.
*/
#define PANEVENT_SETUP_CONN_REQ 0x82
/** Indicates a BNEP control packet other than SETUP_CONNECTION has been
* received.
*/
#define PANEVENT_CONTROL_IND 0x83
/** Indicates an Open request is in progress on a server or complete on
* a client.
*/
#define PANEVENT_OPEN 0x87
/** Indicates the connection is closed.
*/
#define PANEVENT_CLOSED 0x88
/** Indicates an SDP service query failed on an open.
*/
#define PANEVENT_SDP_FAILED 0x89
/** Indicates a data packet is available. The parms.pkt parameter points
* to the packet. The packet is of type PanPacketType indicated in the
* parms.type parameter. The packet length is indicated in the
* parms.rxPktLen parameter.
*/
#define PANEVENT_DATA_IND 0x8a
/** Indicates the PanPacket used to send data has been released and may
* be freed or reused.
*/
#define PANEVENT_DATA_HANDLED 0x8b
/* End of PanEvent */
#define PANBTPKT_FREE 0
#define PANBTPKT_INUSE 1
#define PANBTPKT_INUSE_INT 2
#define PANBTPKT_INUSE_EXT 3
/* Forward reference to PanCallbackParms defined below */
typedef struct _PanCallbackParms PanCallbackParms;
/*---------------------------------------------------------------------------
* PanCallback type
*
* PAN Events and data are passed to the application through a callback
* function of this type defined by the application.
*/
typedef void (*PanCallback)(PanCallbackParms *parms);
/*---------------------------------------------------------------------------
* BNEP_ADDR structure
*
* Represents a 48-bit Bluetooth or Ethernet device address.
*/
typedef struct _BNEP_ADDR
{
uint8_t addr[BNEP_ADDR_SIZE];
} BNEP_ADDR;
/*---------------------------------------------------------------------------
* BnepPanu structure
*
* Maintains connection information for a PANU channel.
*/
typedef struct _BnepPanu {
BNEP_ADDR bnepAddr; /* BNEP_ADDR of remote device */
uint16_t l2ChannelId; /* L2CAP channel ID for connection */
uint8_t state; /* PANU state */
BtRemoteDevice *remDev; /* Remote device of connection */
EvmTimer timer[BNEP_NUM_TIMERS]; /* Timers for Control commands */
uint32_t controlTimeout; /* Timeout value for Control commands */
} BnepPanu;
/*----------------------------------------------------------------------
* PanService structure
*
* PAN service registration structure used to register a service
* through the PAN_Register function.
*/
typedef struct _PanService {
PanCallback callback;
uint16_t type;
} PanService;
/* End of PanService */
/*----------------------------------------------------------------------
* PanPacket structure
*
* PAN Packet allocation structure.
*/
typedef struct _PanPacket {
uint8_t header[BNEP_GNRL_HDR_SIZE];
uint8_t body[];
} PanPacket;
/* End of PanPacket */
/* ---------------------------------------------------------------------------
* BtPacket container
*/
typedef struct _PanBtPkt
{
uint16_t context;
BtPacket btPkt;
} PanBtPkt;
/*----------------------------------------------------------------------
* PanSetupConnPkt structure
*
* PAN Setup Connection Request allocation structure.
*/
typedef struct _PanSetupConnPkt {
uint8_t header[BNEP_CONTROL_HDR_SIZE];
uint8_t uuidSize;
uint8_t dstUuid[2];
uint8_t srcUuid[2];
} PanSetupConnPkt;
/* End of PanSetupConnPkt */
/*----------------------------------------------------------------------
* PanControlRespPkt structure
*
* PAN Control response message allocation structure.
*/
typedef struct _PanControlRespPkt {
uint8_t header[BNEP_CONTROL_HDR_SIZE];
uint8_t message[2];
} PanControlRespPkt;
/* End of PanControlRespPkt */
/*---------------------------------------------------------------------------
* PanRecvCb type
*
* Describes the PAN Receive data callback function. Used when user decide to
* deal receicved data from remote device directly.
*/
typedef void (* PanRecvCb)(uint8_t *, uint16_t);
/* End of PanRecvCb */
/*--------------------------------------------------------------------------
* PanUser structure
*
* Maintains PANU connection info and status during an application
* session. A NAP, GN or PANU uses this structure to maintain
* information on connected PANU(s). The PanUser structure is always
* allocated by the application and is passed into the SDK through
* the PAN_Open function by a client or the PAN_Listen function by a
* server.
*/
typedef struct _PanUser {
/* === Internal use only === */
BnepPanu bnepPanu; /* remote BnepPanu */
BNEP_ADDR destMac; /* storage for dest MAC address */
uint8_t state;
PanRecvCb recv_cb; /* callback for receive data */
/* NAP */
uint32_t remIpAddr;
uint32_t remAddrContext;
/* SDP Client */
uint16_t dstService;
SdpQueryToken sdpQueryToken;
uint8_t sdpSrchAttrib[PAN_NUM_SEARCH_ATTRIBUTES];
} PanUser;
/* End of PanUser */
/*---------------------------------------------------------------------------
* PanCallbackParms structure
*
* Describes a callback event and any data that relates to the event.
*/
typedef struct _PanCallbackParms
{
/* Completion status based on the event type. Reason will be
* L2capDiscReason for PANEVENT_CLOSED events or BtStatus for others.
*/
uint16_t status;
uint8_t event; /* Type of PANEVENT_XX event */
/* Handle to the PanUser structure associated with this event. Valid
* after a connection is established.
*/
PanUser *pan;
/* Type of packet associated with this event. Valid on
* PANEVENT_DATA_HANDLED and PANEVENT_DATA_IND events.
*/
uint8_t type;
/* On PANEVENT_DATA_HANDLED event, points to the sent data packet.
* On PANEVENT_DATA_IND event, points to the received packet.
* The PanPacketType field above indicates the type.
*/
uint8_t *pkt;
/* Length of received data packet. Valid on
* PANEVENT_DATA_IND events.
*/
uint16_t rxPktLen;
} PanCallbackParmsT;
/* End of PanCallbackParms */
/*---------------------------------------------------------------------------
* bnep_addr_ntoa()
*
* Convert a MSB BNEP_ADDR to MSB ASCII notation aa:bb:cc:dd:ee:ff.
* AddrString should point to no less than 20 bytes. It will be
* null-terminated upon return.
*
* Parameters:
* bnepAddr - Pointer to BNEP_ADDR to convert.
* addrString - Pointer to storage for the converted BNEP address string.
*
* Returns:
* pointer to the converted/provided AddrString
*/
char *bnep_addr_ntoa(const BNEP_ADDR *bnepAddr, char *addrString);
/*---------------------------------------------------------------------------
* BNEP_Init()
*
* Initializes the BNEP layer.
*
* Returns:
* TRUE - BNEP was successfully initialized.
*
* FALSE - BNEP failed to initialize. This can
* happen when BNEP cannot be registered with L2CAP.
*/
int BNEP_Init(void);
/*---------------------------------------------------------------------------
* PAN_Init()
*
* Initialize PAN. This should be the first function called for PAN.
*
* Returns:
* TRUE - PAN was successfully initialized.
* FALSE - PAN failed to initialize.
*/
int PAN_Init(void);
/*---------------------------------------------------------------------------
* PAN_Register()
*
* Register a callback for events associated with the PanService. An
* application may register for only one service in a session.
*
* Parameters:
* service - pointer to PanService structure with the PanCallback and
* PanServiceType fields initialized for the desired service.
*
* Returns:
* BT_STATUS_SUCCESS - The registration succeeded.
*
* BT_STATUS_FAILED - The registration failed.
*/
BtStatus PAN_Register(PanService *service);
/*---------------------------------------------------------------------------
* PAN_Open()
*
* Initiate an open request for a PAN service connection.
*
* Parameters:
* remDev - The target remote device for the connection.
* pan - handle to the PanUser structure used to maintain the
* connection.
* cb - callback function used to handle received data directly
* tgtService - Service required for the connection.
*
* Returns:
* BT_STATUS_PENDING - The open request succeeded.
*
* BT_STATUS_FAILED - The open request failed.
*/
BtStatus PAN_Open(BtRemoteDevice *remDev, PanUser *pan, PanRecvCb cb, uint16_t tgtService);
/*---------------------------------------------------------------------------
* PAN_SetupConnection()
*
* Send a BNEP Setup Connection message from a client to complete an
* open connection request.
*
* Parameters:
* pan - handle to the PanUser structure used to maintain the
* connection.
* setupPkt - Setup connection packet.
*
* Returns:
* BT_STATUS_PENDING - The send succeeded. (If accepted by the remote
* device, a PANEVENT_OPEN event will occur.)
*
* BT_STATUS_FAILED - The send failed.
*/
BtStatus PAN_SetupConnection(PanUser *pan, PanSetupConnPkt *setupPkt);
/*---------------------------------------------------------------------------
* PAN_ControlResponse()
*
* Send a BNEP Setup Connection message from a server to complete an
* open connection request.
*
* Parameters:
* pan - handle to the PanUser structure used to maintain the
* connection.
* type - BNEP Control response type.
* controlRespPkt - control response packet.
*
* Returns:
* BT_STATUS_PENDING - The send succeeded.
*
* BT_STATUS_FAILED - The send failed.
*/
BtStatus PAN_ControlResponse(PanUser *pan, BnepControlType type,
PanControlRespPkt *controlRespPkt);
/*---------------------------------------------------------------------------
* PAN_ForwardPkt()
*
* Forward a data packet received from the BNEP protocol stack. The
* packet must include the Ethernet MAC header. No PANEVENT_DATA_HANDLED
* event will follow this function, as it was received from the BNEP
* stack and does not require allocation from the application memory
* pool.
*
* Parameters:
* pan - handle to the PanUser structure used to maintain the
* connection.
* pkt - pointer to the Ethernet data packet received from the BNEP
* stack.
* len - length of data packet.
*
* Returns:
* BT_STATUS_PENDING - The send succeeded.
*
* BT_STATUS_FAILED - The send failed.
*/
BtStatus PAN_ForwardPkt(PanUser *pan, uint8_t *pkt, uint16_t len);
/*---------------------------------------------------------------------------
* PAN_Close()
*
* Close the connection associated with the PanUser structure.
*
* Parameters:
* pan - handle to the PanUser structure used to maintain the
* connection.
*
* Returns:
* BT_STATUS_SUCCESS - The close succeeded.
*
* BT_STATUS_FAILED - The close failed.
*/
BtStatus PAN_Close(PanUser *pan);
/*---------------------------------------------------------------------------
* PAN_SendPkt()
*
* Send a data packet created by the application. A PANEVENT_DATA_HANDLED
* will be sent to the registered callback to notify when the
* packet can be returned to the memory pool.
*
* Parameters:
* pan - handle to the PanUser structure used to maintain the
* connection.
* panPkt - pointer to the data packet encapsulated in the PanPacket
* structure.
* type - data packet type.
* len - length of data packet.
*
* Returns:
* BT_STATUS_PENDING - The send succeeded.
*
* BT_STATUS_FAILED - The send failed.
*/
BtStatus PAN_SendPkt(PanUser *pan, PanPacket *panPkt, PanPacketType type, uint16_t len);
/*---------------------------------------------------------------------------
* PAN_SendArp()
*
* Send an ARP to resolve the specified IP address to a MAC address.
*
* Parameters:
* pan - handle to the PanUser structure associated with this address.
* destIP - IP address to resolve to a MAC address.
*
* Returns:
* The MAC address in a BNEP_ADDR structure.
*/
BNEP_ADDR *PAN_SendArp(PanUser *pan, uint32_t destIP);
/*---------------------------------------------------------------------------
* PAN_MakeArpHdr()
*
* Helper function to build an ARP header.
*
* Parameters:
* arpHdr - pointer to memory buffer large enough for ARP header.
* dstIP - IP address of destination.
*
* Returns:
* BT_STATUS_SUCCESS - The operation succeeded.
*
* BT_STATUS_FAILED - The operation failed.
*/
BtStatus PAN_MakeArpHdr(ArpHeader *arpHdr, uint32_t dstIP);
/*---------------------------------------------------------------------------
* PAN_GetLocalIpAddr_v2()
*
* Get the local IP address.
*
* Parameters:
* None
*
* Returns:
* The local IP address as an uint32_t.
*/
uint32_t PAN_GetLocalIpAddr_v2(void);
/*---------------------------------------------------------------------------
* PAN_SetLocalIpAddr_v2()
*
* Set the local IP address.
*
* Parameters:
* addr - local IP address.
*
* Returns:
* None.
*/
void PAN_SetLocalIpAddr_v2(uint32_t addr);
/*---------------------------------------------------------------------------
* PAN_GetRemoteIpAddr_v2()
*
* Get the remote IP address.
*
* Parameters:
* pan - handle to the PanUser structure used to maintain the
* connection.
*
* Returns:
* The remote IP address as an uint32_t.
*/
uint32_t PAN_GetRemoteIpAddr_v2(PanUser *pan);
/*---------------------------------------------------------------------------
* PAN_SetRemoteMacAddr()
*
* Set the MAC address of the remote PAN device.
*
* Parameters:
* pan - handle to the PanUser structure used to maintain the
* connection.
* macAddr - MAC address of remote PAN device.
*
* Returns:
* BT_STATUS_SUCCESS - The registration succeeded.
*
* BT_STATUS_FAILED - The registration failed.
*/
BtStatus PAN_SetRemoteMacAddr(PanUser *pan, uint8_t *macAddr);
/*---------------------------------------------------------------------------
* PAN_SetDhcpAddr_v2()
*
* Set the address to use for DHCP requests.
*
* Parameters:
* addr - DHCP address to use.
*
* Returns:
* None.
*/
void PAN_SetDhcpAddr_v2(uint32_t addr);
/*---------------------------------------------------------------------------
* PanFindFreeBtPkt()
*---------------------------------------------------------------------------
*
* Synopsis: Find available packet.
*
* Return: packet pointer or 0.
*/
PanBtPkt *PanFindFreeBtPkt(void);
/*---------------------------------------------------------------------------
* BNEP_SendPkt()
*
* Send a BNEP packet to the remote device. The bnepPkt parameter
* points to one of the valid BNEP packet types: General, Compressed,
* Source only compressed or Destination only compressed and may
* contain extension headers.
*
* Parameters:
* panu - Identifies the BNEP PANU channel that owns the packet.
* btPacket - A pointer to the BtPacket used to send the BNEP packet
* through L2CAP.
* bnepPkt - A pointer to the BNEP packet to send.
* bnepPktLen - Length of the BNEP packet.
*
* Returns:
* BT_STATUS_PENDING - The send packet process has been successfully
* started.
*
* BT_STATUS_INVALID_PARM - An invalid parameter was used.
*
* BT_STATUS_FAILED - L2CAP_Send failure.
*
* BT_STATUS_IN_PROGRESS - BNEP is busy sending another packet.
*/
BtStatus BNEP_SendPkt(BnepPanu *panu,
BtPacket *btPacket,
uint8_t *bnepPkt,
uint16_t bnepPktLen);
#endif // _PAN_API