pinebuds/services/bt_if_enhanced/inc/spp_api.h
2022-08-15 17:20:27 +08:00

178 lines
5.9 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 __SPP_API_H__
#define __SPP_API_H__
#include "sdp_api.h"
#include "cmsis_os.h"
#include "cqueue.h"
#include "rfcomm_api.h"
#define SPP_DEVICE_NUM 6
#define SPP_SERVICE_NUM 6
typedef uint16_t spp_event_t;
#define BTIF_SPP_EVENT_REMDEV_CONNECTED 0
#define BTIF_SPP_EVENT_REMDEV_DISCONNECTED 1
#define BTIF_SPP_EVENT_DATA_SENT 2
#define BTIF_SPP_EVENT_REMDEV_DISCONNECTED_IND 3
#define BTIF_SPP_EVENT_REMDEV_CONNECTED_IND 4
typedef uint8_t spp_port_t;
#define BTIF_SPP_SERVER_PORT 0x01
#define BTIF_SPP_CLIENT_PORT 0x02
#define SPP_RX_SIGNAL_ID 0x04
struct spp_device;
struct spp_tx_done {
uint8_t *tx_buf;
uint16_t tx_data_length;
};
struct spp_client {
btif_remote_device_t *remDev;
uint8_t serverId;
btif_sdp_query_token_t *sdpToken;
uint8_t* rfcommServiceSearchRequestPtr;
uint8_t rfcommServiceSearchRequestLen;
};
struct spp_service {
struct rf_service rf_service;
const uint8_t *name;
uint16_t nameLen;
uint16_t numPorts;
btif_sdp_record_t *sdpRecord;
uint8_t service_used_flag;
};
struct spp_callback_parms {
spp_event_t event;
int status;
union {
void *other;
btif_remote_device_t *remDev;
} p;
};
typedef void (*spp_callback_t)(struct spp_device *locDev,
struct spp_callback_parms *Info);
typedef int (*spp_handle_data_event_func_t)(void *pDev, uint8_t process, uint8_t *pData, uint16_t dataLen);
struct _spp_dev {
union {
struct spp_client client;
struct spp_service *sppService;
} type;
};
struct spp_device {
spp_port_t portType;
uint32_t app_id;
osThreadId reader_thread_id;
osMutexId mutex_id;
CQueue rx_queue;
uint8_t *rx_buffer;
uint32_t rx_buffer_size;
uint32_t tx_packet_num;
void *priv;
spp_callback_t spp_callback;
spp_handle_data_event_func_t spp_handle_data_event_func;
uint8_t serialNumber;
uint8_t spp_connected_flag;
uint8_t sppUsedFlag;
uint8_t close_pending;
struct _spp_dev sppDev;
void *_channel;
uint8_t initial_credit;
uint8_t credit_give_limit;
osMutexId creditMutex;
bt_bdaddr_t btaddr;
};
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
#ifdef __cplusplus
extern "C" {
#endif
bt_status_t btif_spp_init_device(struct spp_device *dev, uint16_t numPackets, osMutexId mid);
bt_status_t btif_spp_init_rx_buf(struct spp_device *dev, uint8_t *rx_buf, uint32_t size);
bool btif_sppos_is_txpacket_available(struct spp_device *dev);
bt_status_t btif_spp_open(struct spp_device *dev,
btif_remote_device_t *btDevice,
spp_callback_t callback);
bt_status_t btif_spp_open_client(struct spp_device *dev,
bt_bdaddr_t *bdaddr,
spp_callback_t callback);
bt_status_t btif_spp_open_server(struct spp_device *dev,
spp_callback_t callback);
bt_status_t btif_spp_disconnect(struct spp_device *dev);
bt_status_t btif_spp_close(struct spp_device *dev);
void btif_spp_close_device(struct spp_device *dev);
bt_status_t btif_spp_read(struct spp_device *dev, char *buffer, uint16_t *nBytes);
bt_status_t btif_spp_write(struct spp_device *dev, char *buffer, uint16_t *nBytes);
bt_status_t btif_spp_service_setup(struct spp_device *dev,
struct spp_service *service,
btif_sdp_record_t *record);
bt_status_t btif_ccmp_open(struct spp_device *dev,
btif_remote_device_t *btDevice,
spp_callback_t callback,
uint8_t port);
struct spp_device *btif_create_spp_device(void);
void btif_destroy_spp_device(struct spp_device *dev_t);
struct spp_device *btif_spp_get_device(uint32_t app_id);
struct spp_service *btif_create_spp_service(void);
void btif_destroy_spp_service(struct spp_service *spp_service_p);
uint32_t btif_spp_get_app_id(struct spp_device *dev);
uint32_t btif_spp_get_rfcomm_handle(struct spp_device *dev);
uint8_t btif_spp_get_server_channel(struct spp_device *dev);
const char *btif_spp_event2str(spp_event_t event);
typedef void (*btif_bt_spp_app_callback_func)(void* spp_devi, void* spp_para);
void btif_register_bt_spp_callback_func(btif_bt_spp_app_callback_func func);
uint32_t btif_spp_profile_save_ctx(uint32_t app_id,btif_remote_device_t *rem_dev, uint8_t *buf, uint32_t buf_len);
uint32_t btif_spp_profile_restore_ctx(uint8_t *buf, uint32_t buf_len);
/*---------------------------------------------------------------------------
* rfcomm channel number
* should be from 1 to 30
*/
enum RFCOMM_CHANNEL_NUM_ {
RFCOMM_CHANNEL_1 = 10,
RFCOMM_CHANNEL_2,
RFCOMM_CHANNEL_3,
RFCOMM_CHANNEL_4,
RFCOMM_CHANNEL_5,
RFCOMM_CHANNEL_6,
RFCOMM_CHANNEL_7,
RFCOMM_CHANNEL_8,
RFCOMM_CHANNEL_9,
RFCOMM_CHANNEL_10,
};
#ifdef __cplusplus
}
#endif
#endif /* __SPP_API_H__ */