153 lines
5.6 KiB
C
153 lines
5.6 KiB
C
|
#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
|