pinebuds/services/bt_profiles_enhanced/inc/sppnew.h

153 lines
4.2 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 __SPPNEW_H__
#define __SPPNEW_H__
#include "btlib_more.h"
#include "l2cap_i.h"
#include "bt_co_list.h"
#include "data_link.h"
#include "sdp.h"
#ifdef __cplusplus
extern "C" {
#endif
enum sppnew_event {
SPPNEW_EVENT_OPEN,
SPPNEW_EVENT_NEW_OPEN,
SPPNEW_EVENT_DATA_IND,
SPPNEW_EVENT_CLOSE,
SPPNEW_EVENT_TX_HANDLED,
SPPNEW_EVENT_QUERY_FAIL,
};
enum sppnew_chnl_state {
SPPNEW_CHNL_STATE_CLOSE,
SPPNEW_CHNL_STATE_QUERING,
SPPNEW_CHNL_STATE_CONNECTING,
SPPNEW_CHNL_STATE_OUT_CLOSING,
SPPNEW_CHNL_STATE_OPEN,
};
enum sppnew_tx_state {
SPPNEW_TX_STATE_IDLE,
SPPNEW_TX_STATE_BUSY,
};
struct sppnew_callback_param {
union {
struct {
uint8 *buff;
uint32 buff_len;
} data_ind;
struct {
uint8 *buff;
uint32 buff_len;
} tx_handled;
struct {
void *remDev;
} open;
struct {
void *remDev;
} new_open;
struct {
uint8 reason;
void *remDev;
} close;
} p;
};
enum sppnew_device_type {
SPPNEW_DEVICE_TYPE_CLIENT,
SPPNEW_DEVICE_TYPE_SERVER,
};
struct sppnew_channel;
typedef int8 (*sppnew_callback)(struct sppnew_channel *chnl, enum sppnew_event event, struct sppnew_callback_param *param);
struct sppnew_setup {
uint32 buad_rate;
};
struct sppnew_packet {
struct list_node node;
uint8 *buff;
uint32 buff_len;
};
struct sppnew_config {
#if 0
uint8 *tx_buff;
uint32 tx_buff_len;
#endif
sppnew_callback callback;
uint8 local_server_channel;
uint32 tx_packet_list_length;
enum sppnew_device_type dev_type;
struct sppnew_packet *tx_free_packet;
void *priv;
};
struct sppnew_channel {
struct list_node node;
uint32 tx_size_max;
uint32 rfcomm_handle;
struct bdaddr_t bdaddr;
struct sppnew_config cfg;
uint8 remote_server_channel;
enum sppnew_chnl_state state;
enum sppnew_tx_state tx_state;
struct list_node tx_pend_list;
struct list_node tx_free_list;
struct sppnew_packet *tx_packet;
struct sdp_request sdp_request;
};
struct sppnew_ctx_input {
struct ctx_content ctx;
struct sppnew_channel *chnl;
struct sppnew_config *cfg;
uint32 rfcomm_handle;
struct bdaddr_t *remote;
};
struct sppnew_ctx_output {
};
int8 sppnew_init(struct sppnew_channel *chnl, struct sppnew_config *config);
int8 sppnew_open_server(struct sppnew_channel *chnl, struct rfcomm_config_t * cfg);
int8 sppnew_open_client(struct sppnew_channel *chnl, struct bdaddr_t *bdaddr, uint8 remote_channel);
int8 sppnew_query_and_open_client(struct sppnew_channel *chnl, struct bdaddr_t *bdaddr, uint8 *query, uint32 query_len);
int8 sppnew_write(struct sppnew_channel *chnl, uint8 *buff, uint32 buff_len);
int8 sppnew_setup(struct sppnew_channel *chnl, struct sppnew_setup *setup);
int8 sppnew_disconnect(struct sppnew_channel *chnl);
int8 sppnew_close(struct sppnew_channel *chnl);
enum sppnew_chnl_state sppnew_get_state(struct sppnew_channel *chnl);
void *sppnew_get_priv(struct sppnew_channel *chnl);
const char *sppnew_event2str(enum sppnew_event event);
void _sppnew_rfc_notify_callback(enum rfcomm_event_enum event, uint32 rfcomm_handle, void *pdata, uint8 reason, void *priv);
void _sppnew_rfc_datarecv_callbac(uint32 rfcomm_handle, struct pp_buff *ppb, void *priv);
void sppnew_delete_chnl_note(struct sppnew_channel *chnl);
uint32 sppnew_save_ctx(struct sppnew_channel *chnl, uint8_t *buf, uint32_t buf_len);
uint32 sppnew_restore_ctx(struct sppnew_ctx_input *input, struct sppnew_ctx_output *output);
#ifdef __cplusplus
}
#endif
#endif /* __SPPNEW_H__ */