⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 btifclasses.h

📁 基于widcomm的蓝牙传输功能程序
💻 H
📖 第 1 页 / 共 5 页
字号:
/////////////////////////////////////////////////////////////////////////////
//
//  Name        BtIfClasses.h
//  $Header:
//
//  Function    this file contains SDK class definitions
//
//  Date                 Modification
//  ----------------------------------
//  12/17/2000    JF   Create
//
//  Copyright (c) 2000-2006, Broadcom Corporation, All Rights Reserved.
//
//////////////////////////////////////////////////////////////////////////////

#ifndef _BTIFCLASSES_H
#define _BTIFCLASSES_H


#ifndef _BTWLIB
#ifdef WIDCOMMSDK_EXPORTS
#define WIDCOMMSDK __declspec(dllexport)
#else
#define WIDCOMMSDK __declspec(dllimport)
#endif
#else 
#define WIDCOMMSDK
#endif


#include "com_error.h"
#include "BtIfDefinitions.h"

// Resolve forward references
//
class CSdpDiscoveryRec;


// Ensure alignment across all builds
//
#pragma pack (1)
#define BT_CHAR char
#define BT_CB_LPSTR  WCHAR *  // char used in call back function

class CWBtAPI;
//
// Define status values that are returned in the "OnDeviceStatus" callback
//
#define BT_DEVST_DOWN               0           // Device is present, but down
#define BT_DEVST_UP                 1           // Device is present and UP
#define BT_DEVST_ERROR              2           // Device is in error (maybe being removed)
#define BT_DEVST_UNLOADED           3           // Stack is being unloaded

// Define master/slave role code for SwitchRole function
//
typedef enum
{
    NEW_MASTER,
    NEW_SLAVE
} MASTER_SLAVE_ROLE;

// Define return code for Audio functions
//
typedef enum
{
    AUDIO_SUCCESS,
    AUDIO_UNKNOWN_ADDR,     // if the ACL connection is not up
    AUDIO_BUSY,             // if another SCO being set up to the same BD address
    AUDIO_NO_RESOURCES,     // if the max SCO limit has been reached
    AUDIO_ALREADY_STARTED,  // connection is already up.
    AUDIO_UNKNOWN_ERROR,    // unknown error, or code not supported in this version
    AUDIO_INVALID_PARAM,    // one of the API parameters was invalid                 - added BTW 4.0.1.1400, SDK 4.0
    AUDIO_MISMATCH_ADDR,    // connection attempt for specific bda does not match 
                            // remote addr on connected ACL link                     - added BTW 4.0.1.1400, SDK 4.0
    AUDIO_MODE_UNSUPPORTED, // The controller version is not BT1.2 or later
                            // or does not support eSCO                              - added BTW 5.0.1.200, SDK 5.0
    AUDIO_WRONG_MODE,       // There is no connection with a peer device
                            // or stack reports bad audio handle                     - added BTW 5.0.1.200, SDK 5.0
    AUDIO_INVALID_HANDLE = 0xffff   // The audio handle is invalid
} AUDIO_RETURN_CODE;
  

// Define common return code for new SDK functions that would normally return BOOL
typedef enum
{
    SDK_SUCCESS,            // The call was successful
    SDK_FAIL,               // Unspecified failure
    SDK_NOT_SUPPORTED,      // The API is not supported on the platform BTW stack version
    SDK_BUSY,               // The API cannot complete at this time, but may be retried
    SDK_INVALID_PARAM,      // One of the API parameters was invalid
    SDK_ERR_RESOURCES,      // A necessary resource could not be obtained
    SDK_TIMEOUT,            // The operation timed out before completion
} SDK_RETURN_CODE;                              // Added BTW and SDK 5.0.1.1100

WIDCOMMSDK  void WIDCOMMSDK_ShutDown(void);     // BTW SDK 4.0 - stubs for compatibility -
WIDCOMMSDK  void WIDCOMMSDK_Init(void);         // deprecated and no longer necessary

WIDCOMMSDK  BOOL IsBroadcomStack();             // Added 6.1.0.500 SDK, supported on all stacks

////////////////////////////////////////////////////////////////////////////
// 
// Define a class for interfacing to the stack
//
class WIDCOMMSDK CBtIf
{
public:
    CBtIf();
    virtual ~CBtIf();

    // Application can use this function to start an inquiry.
    BOOL StartInquiry();

    // Application can use this function to stop an inquiry.
    void StopInquiry();

    // Application can use this function to start service discovery
    BOOL StartDiscovery (BD_ADDR p_bda, GUID *p_service_guid);

    // Define return code for Bond function
    //
    typedef enum
    {
        SUCCESS,
        BAD_PARAMETER,
        NO_BT_SERVER,
        ALREADY_BONDED,     // maintained for compatibility, BTW stack allows rebonding
        FAIL,
        REPEATED_ATTEMPTS   // pairing has failed repeatedly, and further attempts will
                            // continue to return this code until after the device security
                            // timeout                  - added BTW 5.0.1.700, SDK 5.0
    } BOND_RETURN_CODE;

    typedef enum
    {
        REM_DEV_INFO_SUCCESS,   // success response
        REM_DEV_INFO_EOF,       // no more devices found
        REM_DEV_INFO_ERROR,     // can not find exsiting entry for bda provided as input
        REM_DEV_INFO_MEM_ERROR  // out of memory
    } REM_DEV_INFO_RETURN_CODE;

    typedef struct
    {
        BD_ADDR     bda;
        DEV_CLASS   dev_class;
        BD_NAME     bd_name;
        BOOL        b_paired;
        BOOL        b_connected;
    } REM_DEV_INFO;

    typedef struct
    {
        BD_ADDR      bd_addr;
        UINT8        hci_version;
        UINT16       hci_revision;
        UINT8        lmp_version;
        UINT16       manufacturer;
        UINT16       lmp_sub_version;
    } DEV_VER_INFO;

    typedef enum
    {
        LINK_MODE_NORMAL,
        LINK_MODE_HOLD,
        LINK_MODE_SNIFF,
        LINK_MODE_PARK
    } LINK_MODE;
    

    BOND_RETURN_CODE Bond(BD_ADDR bda, BT_CHAR* pin_code);

    // query if a device is bonded
    BOOL BondQuery(BD_ADDR bda);

    // Remove Bonding
    BOOL UnBond(BD_ADDR bda);

    // Create AudioConnection
    AUDIO_RETURN_CODE CreateAudioConnection(BD_ADDR bda, BOOL bIsClient, UINT16 *audioHandle);

    // Disconnect AudioConnection
    static AUDIO_RETURN_CODE RemoveAudioConnection(UINT16 audioHandle);

    // audio callback functions
    virtual void OnAudioConnected(UINT16 audioHandle){};
    virtual void OnAudioDisconnect(UINT16 audioHandle){};

    // Application can use this function to get list of services on the remote device
    int ReadDiscoveryRecords (BD_ADDR p_bda, int max_size, CSdpDiscoveryRec *p_list, GUID *p_guid_filter = NULL);

    typedef enum {
        DISCOVERY_RESULT_SUCCESS,
        DISCOVERY_RESULT_CONNECT_ERR,           // Could not connect to remote device 
        DISCOVERY_RESULT_CONNECT_REJ,           // Remote device rejected the connection 
        DISCOVERY_RESULT_SECURITY,              // Security failed 
        DISCOVERY_RESULT_BAD_RECORD,            // Remote Service Record Error 
        DISCOVERY_RESULT_OTHER_ERROR            // Other error
    } DISCOVERY_RESULT;

    // application can use this function from within the OnDiscoveryComplete callback
    // to find out the discovery results
    CBtIf::DISCOVERY_RESULT GetLastDiscoveryResult(BD_ADDR p_bda, UINT16 *p_num_recs);

    // server should call this method to switch role to master if
    // they want to accept multiple connections
    static BOOL SwitchRole(BD_ADDR bd_addr, MASTER_SLAVE_ROLE new_role);

    virtual void OnInquiryComplete (BOOL success, short num_responses) {}// {}
    virtual void OnDeviceResponded (BD_ADDR bda, DEV_CLASS devClass, BD_NAME bdName, BOOL bConnected) {} // = 0;
    virtual void OnDiscoveryComplete () {}// = 0;
    virtual void OnDiscoveryComplete (UINT16 nRecs, long lResultCode) {}// = 0;

    void  SetExtendedError(WBtRc code) { m_LastWBtRc = code; }
    WBtRc GetExtendedError() const { return m_LastWBtRc; }

    // allow to send vendor specific HCI_cmd
    typedef enum {
        SENDVENDOR_HCICMD_SUCCESS,
        SENDVENDOR_HCICMD_FAILURE,
        SENDVENDOR_HCICMD_UNKOWN_PLATFORM,   // Platform is unkown, (ie. Not Win2k, Win9x)
        SENDVENDOR_HCICMD_NO_SUPPORTED,      // The HCI command being sent is not
                                             // supported.
        SENDVENDOR_HCICMD_BTRKNL_NOT_OPENED,
        SENDVENDOR_HCICMD_BTKRNL_FAILURE,    // Unable to open or talk to btkrnl.sys
        SENDVENDOR_HCICMD_DEVICE_FAILURE,    // Unable to open or talk to the device.
        SENDVENDOR_HCICMD_NO_RESOURCE,       // memalloc failed
        SENDVENDOR_HCICMD_BUFFER_TOO_BIG,    // input buffer is lager than max_command for HCI command  - added SDK 5.0, BTW 5.0.1.702
        SENDVENDOR_HCICMD_BUFFER_TOO_SMALL,  // out buffer is too small to hold return data             - added SDK 5.0, BTW 5.0.1.702
        SENDVENDOR_HCICMD_INVALID_PARAM      // one of the parameters is invalid                        - added SDK 5.0, BTW 5.0.1.702
    } SENDVENDOR_HCICMD_RETURN_CODE;
    
    SENDVENDOR_HCICMD_RETURN_CODE SendVendorSpecific_HCICMD(UINT16 OpCode, UINT8 *InParam, UINT8 InParamLen,
                                                            UINT8 * pOutBuff, UINT8 outBuffLen);

    // sets the public variable m_BdAddr
    BOOL GetLocalDeviceInfo();
    BOOL GetLocalDeviceName(BD_NAME *BdName);
    BOOL SetLocalDeviceName(BD_NAME BdName);        // deactivated SDK 6.1
    
    typedef void (tAudio_CB) (UINT16);
    static AUDIO_RETURN_CODE CreateAudioConnection(BD_ADDR bda, BOOL bIsClient, UINT16 *audioHandle,
                                                   tAudio_CB *p_conn_cb, tAudio_CB *p_disc_cb);
     // eSCO functions
    static AUDIO_RETURN_CODE RegForEScoEvts (UINT16 audioHandle, tBTM_ESCO_CBACK *p_esco_cback);        // added SDK 5.0, BTW 5.0.1.200
    static AUDIO_RETURN_CODE SetEScoMode (tBTM_SCO_TYPE sco_mode, tBTM_ESCO_PARAMS *p_parms);           // added SDK 5.0, BTW 5.0.1.200
    static AUDIO_RETURN_CODE ReadEScoLinkData (UINT16 audioHandle, tBTM_ESCO_DATA *p_data);             // added SDK 5.0, BTW 5.0.1.200
    static AUDIO_RETURN_CODE ChangeEScoLinkParms (UINT16 audioHandle, tBTM_CHG_ESCO_PARAMS *p_parms);   // added SDK 5.0, BTW 5.0.1.200
    static void EScoConnRsp (UINT16 audioHandle, UINT8 hci_status, tBTM_ESCO_PARAMS *p_parms = NULL);   // added SDK 5.0, BTW 5.0.1.200
    
    static BOOL GetBTWVersionInfo(BT_CHAR *p_version_info, int nSize);
    static BOOL GetDKVersionInfo(BT_CHAR *p_version_info, int nSize);

    static BOOL SetLinkSupervisionTimeOut(BD_ADDR BdAddr, UINT16 timeout);
    static BOOL SetSniffMode (BD_ADDR bd_Addr);                                 // added SDK 4.0, BTW 4.0.1.1000
    static BOOL CancelSniffMode (BD_ADDR bd_Addr);                              // added SDK 4.0, BTW 4.0.1.1000
    static BOOL ReadLinkMode(BD_ADDR bd_Addr, UINT8 *pMode);                    // added SDK 5.0, BTW 5.0.1.900
    BOOL GetLocalServiceName(BT_CHAR *p_ServiceName, int bBuffLen);
    BOOL GetNextLocalServiceName(BT_CHAR *p_ServiceName, int bBuffLen);

    REM_DEV_INFO_RETURN_CODE GetRemoteDeviceInfo(DEV_CLASS dev_class_filter, REM_DEV_INFO *p_rem_dev_info);
    REM_DEV_INFO_RETURN_CODE GetNextRemoteDeviceInfo(REM_DEV_INFO *p_rem_dev_info);
    BOOL CreateCOMPortAssociation(BD_ADDR bda, GUID *p_guid, LPCSTR szServiceName, USHORT mtu, BYTE SecurityID,
                             BYTE SecurityLevel, USHORT uuid, USHORT *p_com_port);
    BOOL RemoveCOMPortAssociation(USHORT com_port);
    BOOL ReadCOMPortAssociation(tBT_REM_ASSOC_REC *pBuffList, DWORD dwBuffSize, DWORD *pdwRequiredSize);

    BOOL Add_Printer(LPCSTR PortName, BD_ADDR bd_Addr);
    BOOL Remove_Printer(BD_ADDR bd_Addr);
    BOOL IsDeviceReady();                                                     // added BTW 3.0.0.300, SDK 3.0.1.901
    BOOL GetLocalDeviceVersionInfo(DEV_VER_INFO *p_Dev_Ver_Info);             // added BTW 3.0.0.1300, SDK 3.0.1.901
    BOOL GetRemoteDeviceVersionInfo(BD_ADDR bd_addr_remote, 
                                    DEV_VER_INFO *p_Dev_Ver_Info);            // added BTW 3.0.0.1400, SDK 3.0.1.901
    BOOL IsStackServerUp();                                                   // added BTW 3.0.0.1300, SDK 3.0.1.901
    BOOL GetConnectionStats (BD_ADDR bd_Addr, tBT_CONN_STATS *p_conn_stats);  // added BTW 3.0.0.1500, SDK 3.0.1.901
    BOOL IsClientEnabled(UINT32 uClientID);   // unsupported method, for internal use only

    typedef void (tLINK_STATUS_CB)(BD_ADDR remote_bda, BOOL bLinkUp);
    BOOL IsRemoteDeviceConnected(BD_ADDR bd_addr_remote);                                // added BTW 5.0.1.300, SDK 5.0
    BOOL RegisterForLinkStatusChanges(tLINK_STATUS_CB *p_link_status_cb, BD_ADDR bda);   // added BTW 5.0.1.300, SDK 5.0

    SDK_RETURN_CODE IsRemoteDevicePresent(BD_ADDR bd_addr_remote);      // added BTW and SDK 5.0.1.1000


private:
    CWBtAPI                 *m_pBtApi;
    

public:
    typedef enum {
        DEVST_DOWN,     // Device is present, but down
        DEVST_UP,       // Device is present and UP
        DEVST_ERROR,    // Device is in error (maybe being removed)
        DEVST_UNLOADED, // Stack is being unloaded
        DEVST_RELOADED  // Stack reloaded after being unloaded
    } STACK_STATUS;

    virtual void OnStackStatusChange(CBtIf::STACK_STATUS new_status) {}

    // standard GUID values for common Bluetooth service classes
    static const GUID guid_SERVCLASS_SERVICE_DISCOVERY_SERVER;
    static const GUID guid_SERVCLASS_BROWSE_GROUP_DESCRIPTOR;
    static const GUID guid_SERVCLASS_PUBLIC_BROWSE_GROUP;
    static const GUID guid_SERVCLASS_SERIAL_PORT;    
    static const GUID guid_SERVCLASS_LAN_ACCESS_USING_PPP;
    static const GUID guid_SERVCLASS_PANU;
    static const GUID guid_SERVCLASS_NAP;
    static const GUID guid_SERVCLASS_GN;
    static const GUID guid_SERVCLASS_DIALUP_NETWORKING;
    static const GUID guid_SERVCLASS_IRMC_SYNC;
    static const GUID guid_SERVCLASS_OBEX_OBJECT_PUSH;
    static const GUID guid_SERVCLASS_OBEX_FILE_TRANSFER;
    static const GUID guid_SERVCLASS_IRMC_SYNC_COMMAND;
    static const GUID guid_SERVCLASS_HEADSET;
    static const GUID guid_SERVCLASS_CORDLESS_TELEPHONY;
    static const GUID guid_SERVCLASS_INTERCOM;
    static const GUID guid_SERVCLASS_FAX;
    static const GUID guid_SERVCLASS_HEADSET_AUDIO_GATEWAY;
    static const GUID guid_SERVCLASS_PNP_INFORMATION;
    static const GUID guid_SERVCLASS_GENERIC_NETWORKING;
    static const GUID guid_SERVCLASS_GENERIC_FILETRANSFER;
    static const GUID guid_SERVCLASS_GENERIC_AUDIO;
    static const GUID guid_SERVCLASS_GENERIC_TELEPHONY;
    static const GUID guid_SERVCLASS_BPP_PRINTING;
    static const GUID guid_SERVCLASS_HCRP_PRINTING;
    static const GUID guid_SERVCLASS_SPP_PRINTING;
    static const GUID guid_SERVCLASS_HUMAN_INTERFACE;
    static const GUID guid_SERVCLASS_AUDIO_SINK;
                      

    BD_ADDR m_BdAddr;   // Bluetooth address of local device
    BD_NAME m_BdName;

    long    m_DeviceState;
        
protected:
    void SetOnDeviceStatusCallback();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -