#ifndef __APP_RFCOMM_MGR_H__ #define __APP_RFCOMM_MGR_H__ #ifdef __cplusplus extern "C" { #endif #include "cmsis_os.h" #if defined(__3M_PACK__) #define L2CAP_MTU 980 #else #define L2CAP_MTU 672 #endif #define SPP_MAX_PACKET_SIZE L2CAP_MTU #define MAXIMUM_RFCOMM_TX_SIZE ((L2CAP_MTU) - 10) #define SPP_TX_BUF_DATA_SIZE 4096 #define SPP_MAX_PACKET_NUM \ ((int)(SPP_TX_BUF_DATA_SIZE / MAXIMUM_RFCOMM_TX_SIZE)) typedef enum { RFCOMM_INCOMING_CONN_REQ = 0, RFCOMM_CONNECTED, RFCOMM_DISCONNECTED, RFCOMM_TX_DONE, RFCOMM_UNKNOWN_EVENT } RFCOMM_EVENT_E; typedef bool (*rfcomm_callback_func)(RFCOMM_EVENT_E event, uint8_t serviceIndex, uint16_t connHandle, uint8_t* pBtAddr, uint8_t* pSentDataBuf, uint16_t sentDataLen); typedef int (*spp_handle_data_event_func_t)(void *pDev, uint8_t process, uint8_t *pData, uint16_t dataLen); typedef struct { uint8_t rfcomm_ch; uint8_t tx_pkt_cnt; uint32_t app_id; const uint8_t* rfcomm_128bit_uuid; rfcomm_callback_func callback; spp_handle_data_event_func_t spp_handle_data_event_func; osMutexId mutexId; osMutexId creditMutexId; } RFCOMM_CONFIG_T; int8_t app_rfcomm_open(RFCOMM_CONFIG_T* ptConfig); void app_rfcomm_close(uint8_t instanceIndex); int8_t app_rfcomm_write(uint8_t instanceIndex, const uint8_t* pBuf, uint16_t length); void app_rfcomm_read(uint8_t instanceIndex, uint8_t* pBuf, uint16_t* ptrLen); void app_rfcomm_mgr_init(void); uint8_t app_rfcomm_get_instance_index(void* dev); osThreadId app_rfcomm_get_rx_thread_id(uint8_t serviceIndex); void app_rfcomm_services_add_sdp(void); void app_rfcomm_services_remove_sdp(void); #ifdef __cplusplus } #endif #endif // __APP_RFCOMM_MGR_H__