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

153 lines
5.6 KiB
C
Raw Normal View History

2024-03-07 16:46:43 +08:00
#ifndef __RFCOMM_API_H
#define __RFCOMM_API_H
#include "btconfig.h"
#include "me_api.h"
#include "sec_api.h"
typedef struct _RfDeferEvent {
ListEntry node;
void *func;
void *channel;
} RfDeferEvent;
/*---------------------------------------------------------------------------
* RfChannel structure
*
* Represents a single RFCOMM channel. The RFCOMM user must create
* this structure and fill in the "callback", "maxFrameSize", and
* "priority" fields prior to calling RF_OpenClientChannel. Only the
* "callback" filed must be set when calling RF_RegisterServerChannel.
*/
typedef struct _RfChannel
{
ListEntry node; /* Used internally by RFCOMM. */
/* Callback function for channel events */
void* callback;
/* Frame size for the channel. This value must be between
* RF_MIN_FRAME_SIZE and RF_MAX_FRAME_SIZE.
*/
uint16_t maxFrameSize;
/* Priority of the channel. Channels with higher priority have smaller
* "priority" values. Generally, data on higher priority channels is
* sent before lower priority channels. The priority must be between
* RF_DEFAULT_PRIORITY (0) and RF_LOWEST_PRIORITY (63).
*/
uint8_t priority;
/* User context. In some environments the context of the application
* during a callback is not known. In these cases, a pointer to the
* application's context can be stored in userContext and then
* retrieved during the callback.
*/
void *userContext;
/* === Internal use only === */
BtSecurityToken secToken;
uint8_t state;
uint8_t muxId;
uint8_t dlcId;
uint8_t dlci;
uint16_t flags;
ListEntry txQueue;
EvmTimer timer;
uint8_t cmdSent;
uint8_t rfSignals;
int16_t rxCredit;
uint16_t txCredit;
uint8_t grantedCredit;
uint8_t initialRxCredit;
uint16_t initialFrameSize;
RfDeferEvent deferEvent;
}RfChannel;
typedef uint8_t RfSignals;
/*---------------------------------------------------------------------------
* RfModemStatus structure
*
* Represents the status of V.24 signals. To send signals on a connection,
* create and fill in this structure, then call RF_SetModemStatus.
*
* When the remote device sends these signals, RFCOMM generates an
* RFEVENT_MODEM_STATUS_IND event. During this event, you can read the
* status in the RfCallbackParms "ptrs.modemStatus" field.
*/
typedef struct _RfModemStatus
{
RfSignals signals; /* Contains all signals that apply to this status
* message.
*/
uint8_t breakLen; /* Indicates the length of the break signal in 200 ms
* units. If 0, no break signal was sent. Must be
* between 0 and 15 (inclusive).
*/
} RfModemStatus;
typedef uint8_t RfLineStatus;
typedef uint8_t RfBaudRate;
typedef uint8_t RfDataFormat;
typedef uint8_t RfFlowControl;
typedef uint16_t RfPortSettingsMask;
/*---------------------------------------------------------------------------
* RfPortSettings structure
*
* Represents port settings for an RFCOMM channel. Port settings
* are used for RS232 emulation. They are informational and have
* no real effect on the data stream at the RFCOMM level. To change
* port settings for a channel, this structure is filled and provided
* to RFCOMM using the RF_RequestPortSettings function.
*
* When the remote device changes port settings, RFCOMM provides
* this structure along with the RFEVENT_PORT_NEG_IND event. The
* RFCOMM user can then review the settings, then accept or reject
* them with RF_AcceptPortSettings.
*
* Fields in this structure may be valid or invalid, depending on
* the contents of the "parmMask" field.
*/
typedef struct _RfPortSettings
{
RfBaudRate baudRate; /* Indicates the baud rate */
RfDataFormat dataFormat; /* Contains data bits, stop bits, and
* parity settings.
*/
RfFlowControl flowControl; /* Indicates port flow control options */
uint8_t xonChar; /* Indicates the XON character */
uint8_t xoffChar; /* Indicates the XOFF character */
/* Contains a bitmask of settings.
*
* When changing port settings with RF_RequestPortSettings, "parmMask"
* indicates which port settings are being changed.
*
* During an RFEVENT_PORT_NEG_IND event, "parmMask" describes which
* parameters the remote device sent.
*/
RfPortSettingsMask parmMask;
} RfPortSettings;
typedef struct _RfService
{
/* Identifies the ID that corresponds to this service. This ID value
* can be set to 0 before this structure is used if the desired RFCOMM
* Server ID not known. If it is set to 0, then, after the service has been
* registered with RFCOMM, it will contain a valid RFCOMM Server ID. If
* the desired RFCOMM Server ID is known, then this ID value can be set to
* that value before registering with RFCOMM. In either case, make sure to
* register this ID with SDP so that remote devices can locate this RFCOMM
* service. This ID can also be used as the channel in * BtSecurityRecords
* (for incoming connections only).
*/
uint8_t serviceId;
} RfService;
#endif