310 lines
10 KiB
C
310 lines
10 KiB
C
|
/***************************************************************************
|
||
|
*
|
||
|
* Copyright 2015-2019 BES.
|
||
|
* All rights reserved. All unpublished rights reserved.
|
||
|
*
|
||
|
* No part of this work may be used or reproduced in any form or by any
|
||
|
* means, or stored in a database or retrieval system, without prior written
|
||
|
* permission of BES.
|
||
|
*
|
||
|
* Use of this work is governed by a license granted by BES.
|
||
|
* This work contains confidential and proprietary information of
|
||
|
* BES. which is protected by copyright, trade secret,
|
||
|
* trademark and other intellectual property rights.
|
||
|
*
|
||
|
****************************************************************************/
|
||
|
#ifndef __RFCOMM_API_H__
|
||
|
#define __RFCOMM_API_H__
|
||
|
#include "bluetooth.h"
|
||
|
#include "me_api.h"
|
||
|
#include "bt_if.h"
|
||
|
|
||
|
typedef void *rf_channel_t;
|
||
|
|
||
|
typedef uint8_t rf_event_t;
|
||
|
|
||
|
#define BTIF_RFEVENT_OPEN_IND 1
|
||
|
#define BTIF_RFEVENT_OPEN 2
|
||
|
#define BTIF_RFEVENT_CLOSE_IND 3
|
||
|
#define BTIF_RFEVENT_CLOSED 4
|
||
|
#define BTIF_RFEVENT_DATA_IND 5
|
||
|
#define BTIF_RFEVENT_PACKET_HANDLED 6
|
||
|
#define BTIF_RFEVENT_TEST_CNF 7
|
||
|
#define BTIF_RFEVENT_PORT_NEG_IND 8
|
||
|
#define BTIF_RFEVENT_PORT_NEG_CNF 9
|
||
|
#define BTIF_RFEVENT_PORT_STATUS_IND 10
|
||
|
#define BTIF_RFEVENT_PORT_STATUS_CNF 11
|
||
|
#define BTIF_RFEVENT_MODEM_STATUS_IND 12
|
||
|
#define BTIF_RFEVENT_MODEM_STATUS_CNF 13
|
||
|
#define BTIF_RFEVENT_LINE_STATUS_IND 14
|
||
|
#define BTIF_RFEVENT_LINE_STATUS_CNF 15
|
||
|
#define BTIF_RFEVENT_FLOW_OFF_IND 16
|
||
|
#define BTIF_RFEVENT_FLOW_ON_IND 17
|
||
|
#define BTIF_RFEVENT_RESOURCE_FREE 18
|
||
|
#define BTIF_RFEVENT_FRAME_SIZE_CHANGED 19
|
||
|
|
||
|
typedef uint8_t rf_signals;
|
||
|
#define RFCOMM_FLOW 0x02
|
||
|
#define RFCOMM_RTC 0x04
|
||
|
#define RFCOMM_RTR 0x08
|
||
|
#define RFCOMM_IC 0x40
|
||
|
#define RFCOMM_DV 0x80
|
||
|
|
||
|
#define RFCOMM_DSR 0x04
|
||
|
#define RFCOMM_CTS 0x08
|
||
|
#define RFCOMM_RI 0x40
|
||
|
#define RFCOMM_CD 0x80
|
||
|
|
||
|
#define RFCOMM_DTR 0x04
|
||
|
#define RFCOMM_RTS 0x08
|
||
|
|
||
|
typedef uint8_t rf_data_format;
|
||
|
#define RFCOMM_DATA_BITS_5 0x00
|
||
|
#define RFCOMM_DATA_BITS_6 0x02
|
||
|
#define RFCOMM_DATA_BITS_7 0x01
|
||
|
#define RFCOMM_DATA_BITS_8 0x03
|
||
|
|
||
|
#define RFCOMM_STOP_BITS_1 0x00
|
||
|
#define RFCOMM_STOP_BITS_1_5 0x04
|
||
|
|
||
|
#define RFCOMM_PARITY_NONE 0x00
|
||
|
#define RFCOMM_PARITY_ON 0x08
|
||
|
|
||
|
#define RFCOMM_PARITY_TYPE_ODD 0x00
|
||
|
#define RFCOMM_PARITY_TYPE_EVEN 0x20
|
||
|
#define RFCOMM_PARITY_TYPE_MARK 0x10
|
||
|
#define RFCOMM_PARITY_TYPE_SPACE 0x30
|
||
|
|
||
|
#define RFCOMM_DATA_BITS_MASK 0x03
|
||
|
#define RFCOMM_STOP_BITS_MASK 0x04
|
||
|
#define RFCOMM_PARITY_MASK 0x08
|
||
|
#define RFCOMM_PARITY_TYPE_MASK 0x30
|
||
|
|
||
|
typedef uint8_t rf_line_status;
|
||
|
#define RFCOMM_LINE_ERROR 0x01
|
||
|
#define RFCOMM_OVERRUN 0x02
|
||
|
#define RFCOMM_PARITY 0x04
|
||
|
#define RFCOMM_FRAMING 0x08
|
||
|
|
||
|
typedef uint8_t rf_signals;
|
||
|
#define RFCOMM_FLOW 0x02
|
||
|
#define RFCOMM_RTC 0x04 /* Set when sender is ready to communicate. */
|
||
|
#define RFCOMM_RTR 0x08 /* Set when sender is ready to receive data. */
|
||
|
#define RFCOMM_IC 0x40 /* Set when a call is incoming. */
|
||
|
#define RFCOMM_DV 0x80 /* Set when valid data is being sent. */
|
||
|
|
||
|
#define RFCOMM_DSR 0x04
|
||
|
#define RFCOMM_CTS 0x08
|
||
|
#define RFCOMM_RI 0x40
|
||
|
#define RFCOMM_CD 0x80
|
||
|
|
||
|
#define RFCOMM_DTR 0x04
|
||
|
#define RFCOMM_RTS 0x08
|
||
|
|
||
|
struct rf_modem_status
|
||
|
{
|
||
|
rf_signals signals;
|
||
|
uint8_t break_len;
|
||
|
};
|
||
|
|
||
|
typedef uint16_t rf_port_settings_mask;
|
||
|
|
||
|
#define RFCOMM_PARM_BAUDRATE 0x0001
|
||
|
#define RFCOMM_PARM_DATABITS 0x0002
|
||
|
#define RFCOMM_PARM_STOPBITS 0x0004
|
||
|
#define RFCOMM_PARM_PARITY 0x0008
|
||
|
#define RFCOMM_PARM_PARITY_TYPE 0x0010
|
||
|
#define RFCOMM_PARM_DATA_FORMAT (RFCOMM_PARM_DATABITS | RFCOMM_PARM_STOPBITS | \
|
||
|
RFCOMM_PARM_PARITY | RFCOMM_PARM_PARITY_TYPE)
|
||
|
#define RFCOMM_PARM_XON_CHAR 0x0020
|
||
|
#define RFCOMM_PARM_XOFF_CHAR 0x0040
|
||
|
|
||
|
#define RFCOMM_PARM_XON_INPUT 0x0100
|
||
|
#define RFCOMM_PARM_XON_OUTPUT 0x0200
|
||
|
#define RFCOMM_PARM_RTR_INPUT 0x0400
|
||
|
#define RFCOMM_PARM_RTR_OUTPUT 0x0800
|
||
|
#define RFCOMM_PARM_RTC_INPUT 0x1000
|
||
|
#define RFCOMM_PARM_RTC_OUTPUT 0x2000
|
||
|
|
||
|
#define RFCOMM_PARM_FLOW_RTS_CTS (RFCOMM_PARM_RTR_INPUT | RFCOMM_PARM_RTR_OUTPUT)
|
||
|
#define RFCOMM_PARM_FLOW_DTR_DSR (RFCOMM_PARM_RTC_INPUT | RFCOMM_PARM_RTC_OUTPUT)
|
||
|
#define RFCOMM_PARM_FLOW_XON_XOFF (RFCOMM_PARM_XON_INPUT | RFCOMM_PARM_XON_OUTPUT)
|
||
|
|
||
|
typedef uint8_t rf_flow_control;
|
||
|
|
||
|
#define RFCOMM_FLOW_CTRL_NONE 0x00
|
||
|
#define RFCOMM_XON_ON_INPUT 0x01
|
||
|
#define RFCOMM_XON_ON_OUTPUT 0x02
|
||
|
#define RFCOMM_RTR_ON_INPUT 0x04
|
||
|
#define RFCOMM_RTR_ON_OUTPUT 0x08
|
||
|
#define RFCOMM_RTC_ON_INPUT 0x10
|
||
|
#define RFCOMM_RTC_ON_OUTPUT 0x20
|
||
|
|
||
|
#define RFCOMM_FLOW_RTS_CTS (RFCOMM_RTR_ON_INPUT | RFCOMM_RTR_ON_OUTPUT)
|
||
|
#define RFCOMM_FLOW_DTR_DSR (RFCOMM_RTC_ON_INPUT | RFCOMM_RTC_ON_OUTPUT)
|
||
|
#define RFCOMM_FLOW_XON_XOFF (RFCOMM_XON_ON_INPUT | RFCOMM_XON_ON_OUTPUT)
|
||
|
|
||
|
typedef uint8_t rf_data_format;
|
||
|
#define RFCOMM_DATA_BITS_5 0x00
|
||
|
#define RFCOMM_DATA_BITS_6 0x02
|
||
|
#define RFCOMM_DATA_BITS_7 0x01
|
||
|
#define RFCOMM_DATA_BITS_8 0x03
|
||
|
#define RFCOMM_STOP_BITS_1 0x00
|
||
|
#define RFCOMM_STOP_BITS_1_5 0x04
|
||
|
#define RFCOMM_PARITY_NONE 0x00
|
||
|
#define RFCOMM_PARITY_ON 0x08
|
||
|
#define RFCOMM_PARITY_TYPE_ODD 0x00
|
||
|
#define RFCOMM_PARITY_TYPE_EVEN 0x20
|
||
|
#define RFCOMM_PARITY_TYPE_MARK 0x10
|
||
|
#define RFCOMM_PARITY_TYPE_SPACE 0x30
|
||
|
#define RFCOMM_DATA_BITS_MASK 0x03
|
||
|
#define RFCOMM_STOP_BITS_MASK 0x04
|
||
|
#define RFCOMM_PARITY_MASK 0x08
|
||
|
#define RFCOMM_PARITY_TYPE_MASK 0x30
|
||
|
|
||
|
typedef uint8_t rf_baud_rate;
|
||
|
|
||
|
#define RFCOMM_BAUD_2400 0x00
|
||
|
#define RFCOMM_BAUD_4800 0x01
|
||
|
#define RFCOMM_BAUD_7200 0x02
|
||
|
#define RFCOMM_BAUD_9600 0x03
|
||
|
#define RFCOMM_BAUD_19200 0x04
|
||
|
#define RFCOMM_BAUD_38400 0x05
|
||
|
#define RFCOMM_BAUD_57600 0x06
|
||
|
#define RFCOMM_BAUD_115200 0x07
|
||
|
#define RFCOMM_BAUD_230400 0x08
|
||
|
|
||
|
typedef struct _rf_port_settings
|
||
|
{
|
||
|
rf_baud_rate baudRate;
|
||
|
rf_data_format dataFormat;
|
||
|
rf_flow_control flowControl;
|
||
|
uint8_t xonChar;
|
||
|
uint8_t xoffChar;
|
||
|
rf_port_settings_mask parmMask;
|
||
|
} rf_port_settings;
|
||
|
|
||
|
struct rf_callback_prams
|
||
|
{
|
||
|
rf_event_t event;
|
||
|
int status;
|
||
|
uint16_t data_len;
|
||
|
union
|
||
|
{
|
||
|
btif_bt_packet_t *packet;
|
||
|
U8 *data;
|
||
|
struct rf_modem_status *modem_status;
|
||
|
rf_line_status *line_status;
|
||
|
rf_port_settings *port_settings;
|
||
|
btif_remote_device_t *remDev;
|
||
|
} ptrs;
|
||
|
};
|
||
|
|
||
|
typedef void (*rf_callback_func) (rf_channel_t chan, struct rf_callback_prams * parms);
|
||
|
|
||
|
struct rf_chan_info
|
||
|
{
|
||
|
rf_callback_func callback;
|
||
|
uint16_t max_frame_size;
|
||
|
uint8_t priority;
|
||
|
void *priv;
|
||
|
};
|
||
|
|
||
|
struct rf_service
|
||
|
{
|
||
|
uint8_t serviceId;
|
||
|
};
|
||
|
|
||
|
struct _rf_channel
|
||
|
{
|
||
|
rf_callback_func callback;
|
||
|
int8_t server_channel;
|
||
|
uint32_t rfcomm_handle;
|
||
|
uint32_t app_id;
|
||
|
void *priv;
|
||
|
list_entry_t tx_queue;
|
||
|
};
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif /* */
|
||
|
void btif_rfcomm_ctx_input_init(void *para);
|
||
|
rf_channel_t btif_rf_create_channel(void);
|
||
|
|
||
|
void btif_rf_free_channel(rf_channel_t chan_h);
|
||
|
|
||
|
bt_status_t btif_rf_register_server_channel(rf_channel_t chan_h,
|
||
|
struct rf_service *service, uint8_t credit);
|
||
|
bt_status_t btif_rf_deregister_server_channel(rf_channel_t chan_h, struct rf_service *service);
|
||
|
|
||
|
bt_status_t btif_rf_deregister_service(struct rf_service *service);
|
||
|
|
||
|
uint16_t btif_rf_frame_size(rf_channel_t chan_h);
|
||
|
|
||
|
bt_status_t btif_rf_respond_channel(rf_channel_t chan_h, bool accept);
|
||
|
|
||
|
bt_status_t btif_rf_accept_channel(rf_channel_t chan_h);
|
||
|
#define btif_rf_accept_channel(c) btif_rf_respond_channel(c, true)
|
||
|
|
||
|
bt_status_t btif_rf_reject_channel(rf_channel_t chan_h);
|
||
|
#define btif_rf_reject_channel(c) btif_rf_respond_channel(c, false)
|
||
|
|
||
|
#if BTIF_RF_SEND_CONTROL == BTIF_ENABLED
|
||
|
bt_status_t btif_rf_send_port_settings(rf_channel_t chan_h, rf_port_settings * PortSettings);
|
||
|
|
||
|
bt_status_t btif_rf_request_port_settings(rf_channel_t chan_h, rf_port_settings * portSettings);
|
||
|
#define btif_rf_request_port_settings(c, p) btif_rf_send_port_settings(c, p)
|
||
|
|
||
|
bt_status_t btif_rf_request_port_status(rf_channel_t chan_h);
|
||
|
#define btif_rf_request_port_status(c) btif_rf_send_port_settings(c, NULL)
|
||
|
|
||
|
bt_status_t btif_rf_set_modem_status(rf_channel_t chan_h,
|
||
|
struct rf_modem_status *modem_status);
|
||
|
#endif /*BTIF_RF_SEND_CONTROL == BTIF_ENABLED */
|
||
|
|
||
|
bt_status_t btif_rf_open_client_channel(btif_remote_device_t * RemDev,
|
||
|
uint8_t server_id, rf_channel_t chan_h, uint8_t credit);
|
||
|
|
||
|
bt_status_t btif_rf_close_channel(rf_channel_t chan_h);
|
||
|
|
||
|
bt_status_t btif_rf_send_data(rf_channel_t chan_h, btif_bt_packet_t * Packet);
|
||
|
|
||
|
bt_status_t btif_rf_advance_credit(rf_channel_t chan_h, uint8_t credit);
|
||
|
|
||
|
bool btif_rf_credit_flow_enabled(rf_channel_t chan_h);
|
||
|
|
||
|
bt_status_t btif_rf_setup_channel(rf_channel_t chan_h, struct rf_chan_info *info);
|
||
|
|
||
|
void *btif_rf_get_channel_priv(rf_channel_t chan);
|
||
|
uint32_t btif_rf_get_app_id(rf_channel_t chan_h);
|
||
|
|
||
|
uint32_t btif_rf_get_rfcomm_handle(rf_channel_t chan_h);
|
||
|
bt_status_t btif_rf_set_rfcomm_handle(rf_channel_t chan_h, uint32_t rfcomm_handle);
|
||
|
uint8_t btif_rf_get_server_channel(rf_channel_t chan_h);
|
||
|
|
||
|
uint16_t btif_rf_max_frame_size_configure(void);
|
||
|
void btif_rf_set_app_id(rf_channel_t chan_h,uint32_t app_id);
|
||
|
|
||
|
#if defined(IBRT)
|
||
|
#if defined(ENHANCED_STACK)
|
||
|
uint32_t btif_save_rfc_ctx(uint8_t *ctx_buffer, uint8_t MuxId);
|
||
|
uint32_t btif_set_rfc_ctx(uint8_t* ctx_buffer, uint16_t MuxId, uint8_t rm_devtbl_idx);
|
||
|
uint32_t btif_rfc_get_session_l2c_handle(uint16_t hci_handle);
|
||
|
bool btif_rfc_is_dlci_channel_connected(uint32_t session_l2c_handle,uint32_t app_id);
|
||
|
#else
|
||
|
uint32_t btif_save_rfc_ctx(uint8_t *ctx_buffer, uint8_t MuxId);
|
||
|
uint32_t btif_set_rfc_ctx(uint8_t* ctx_buffer, uint16_t MuxId, uint8_t rm_devtbl_idx);
|
||
|
uint32_t btif_save_rfcomm_channel_ctx(uint8_t *ctx_buffer, uint8_t MuxId, uint32_t app_id);
|
||
|
uint32_t btif_set_rfcomm_channel_ctx(uint8_t *ctx_buffer, uint8_t MuxId, uint32_t app_id);
|
||
|
#endif
|
||
|
bool btif_rf_is_rfcomm_channel_connected(uint8_t mux_id,uint32_t app_id);
|
||
|
btif_remote_device_t* btif_rfc_get_mux_remote_device(uint8_t mux_idx);
|
||
|
uint8_t btif_rfc_get_mux_index(uint16_t hci_handle);
|
||
|
uint8_t btif_rfc_get_mux_state(uint8_t mux_idx);
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
#endif /*__RFCOMM_API_H__*/
|