mirror of
https://github.com/spiffcode/hostile-takeover.git
synced 2025-12-16 12:08:36 +00:00
1317 lines
42 KiB
C++
1317 lines
42 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Name BtIfClasses.h
|
|
// $Header:
|
|
//
|
|
// Function this file contains Widcomm SDK class definitions
|
|
//
|
|
// Date Modification
|
|
// ----------------------------------
|
|
// 12/17/2000 JF Create
|
|
//
|
|
// Copyright (c) 2000-2002, WIDCOMM Inc., All Rights Reserved.
|
|
// Proprietary and confidential.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _BTIFCLASSES_H
|
|
#define _BTIFCLASSES_H
|
|
|
|
#ifdef WIDCOMMSDK_EXPORTS
|
|
#define WIDCOMMSDK __declspec(dllexport)
|
|
#else
|
|
#define WIDCOMMSDK __declspec(dllimport)
|
|
#endif
|
|
|
|
#include "BtIfDefinitions13.h"
|
|
|
|
// Resolve forward references
|
|
//
|
|
class CSdpDiscoveryRec;
|
|
|
|
|
|
// Ensure alignment across all builds
|
|
//
|
|
#ifdef _WIN32_WCE //for CE only
|
|
#pragma pack (8)
|
|
#define BT_CHAR TCHAR
|
|
#define BT_CB_LPSTR LPCTSTR //char used in call back function
|
|
#else //for windows
|
|
#pragma pack (1)
|
|
#define BT_CHAR char
|
|
#define BT_CB_LPSTR WCHAR * //char used in call back function
|
|
#endif
|
|
|
|
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,
|
|
AUDIO_INVALID_HANDLE = 0xffff
|
|
} AUDIO_RETURN_CODE;
|
|
|
|
|
|
//
|
|
// Since CE seems to have some problems with dll unloading,
|
|
// define a function that can be called to shut down the SDK
|
|
//
|
|
WIDCOMMSDK void WIDCOMMSDK_ShutDown(void);
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 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,
|
|
ALREADY_BONDED,
|
|
BAD_PARAMETER,
|
|
FAIL
|
|
} BOND_RETURN_CODE;
|
|
|
|
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);
|
|
|
|
#ifndef _WIN32_WCE
|
|
//Crate AudioConnection
|
|
AUDIO_RETURN_CODE CreateAudioConnection(BD_ADDR bda, BOOL bIsClient, UINT16 *audioHandle);
|
|
|
|
//Disconnect AudioConnection
|
|
static AUDIO_RETURN_CODE RemoveAudioConnection(UINT16 audioHandle);
|
|
|
|
//audion callback functions
|
|
virtual void OnAudioConnected(UINT16 audioHandle){};
|
|
virtual void OnAudioDisconnect(UINT16 audioHandle){};
|
|
#endif
|
|
|
|
// 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;
|
|
|
|
|
|
// sets the public variable m_BdAddr
|
|
BOOL GetLocalDeviceInfo();
|
|
|
|
#ifndef _WIN32_WCE
|
|
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);
|
|
#endif
|
|
|
|
|
|
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_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;
|
|
|
|
BD_ADDR m_BdAddr; // Bluetooth address of local device
|
|
|
|
protected:
|
|
void SetOnDeviceStatusCallback();
|
|
BD_ADDR m_DiscoveryBdAddr;
|
|
UINT16 m_DiscoveryNumRecs;
|
|
DISCOVERY_RESULT m_DiscoveryResult;
|
|
|
|
private:
|
|
BOOL m_bInquiryActive;
|
|
BOOL m_bDiscoveryActive;
|
|
|
|
BOOL m_tempRegistry;
|
|
GUID m_TempRegistryGUID;
|
|
void DeleteTempRegistry();
|
|
BOOL AddTempRegistry(GUID *p_GUID);
|
|
UINT16 m_audioHandle;
|
|
HANDLE m_hKrnl;
|
|
|
|
friend class CBtIfFriend;
|
|
|
|
// This class will not support the compiler-supplied copy constructor or assignment operator,
|
|
// so these are declared private to prevent inadvertent use by the application.
|
|
CBtIf(const CBtIf & x);
|
|
CBtIf& operator= (const CBtIf & x);
|
|
};
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Define a class to control an L2CAP interface (for a specific PSM)
|
|
//
|
|
class WIDCOMMSDK CL2CapIf
|
|
{
|
|
public:
|
|
CL2CapIf();
|
|
~CL2CapIf();
|
|
|
|
// Server should call this method without any parameter
|
|
// to assign a new PSM value, or with a PSM value if it
|
|
// is using a fixed PSM. Client should call this method
|
|
// with PSM found from service discovery
|
|
//
|
|
BOOL AssignPsmValue (GUID *p_guid, UINT16 psm = 0);
|
|
|
|
// Both client and server sides should call this function
|
|
// to register a PSM with L2CAP, once the PSM value is known
|
|
//
|
|
BOOL Register ();
|
|
|
|
// Both client and server sides should call this function
|
|
// to de-register a PSM from L2CAP, when application is exiting
|
|
//
|
|
void Deregister ();
|
|
|
|
// Both client and server MUST call this function to set
|
|
// the security level for connections on the assigned PSM.
|
|
//
|
|
BOOL SetSecurityLevel (BT_CHAR *p_service_name, UINT8 security_level, BOOL is_server);
|
|
|
|
// Returns the PSM value currently in use.
|
|
//
|
|
inline UINT16 GetPsm() { return m_psm; }
|
|
|
|
private:
|
|
UINT16 m_psm;
|
|
BOOL m_is_registered;
|
|
CL2CapIf *m_p_next_psm;
|
|
GUID m_service_guid;
|
|
UINT8 m_security_index;
|
|
|
|
friend class CL2CapConn;
|
|
|
|
// This class will not support the compiler-supplied copy constructor or assignment operator,
|
|
// so these are declared private to prevent inadvertent use by the application.
|
|
CL2CapIf(const CL2CapIf & x);
|
|
CL2CapIf& operator= (const CL2CapIf & x);
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Define a class to control the L2CAP connections (both client and server
|
|
//
|
|
class WIDCOMMSDK CL2CapConn
|
|
{
|
|
public:
|
|
|
|
// Construction/destruction
|
|
//
|
|
CL2CapConn ();
|
|
virtual ~CL2CapConn();
|
|
|
|
// Public variables
|
|
//
|
|
BOOL m_isCongested;
|
|
UINT16 m_RemoteMtu;
|
|
BD_ADDR m_RemoteBdAddr;
|
|
|
|
// Server should call this method to listen for an incoming
|
|
// connection. Client should not call this method.
|
|
//
|
|
BOOL Listen (CL2CapIf *p_if);
|
|
|
|
// Server should call this method to switch role to master if
|
|
// it wants to accept multiple connections
|
|
//
|
|
BOOL SwitchRole(MASTER_SLAVE_ROLE new_role);
|
|
|
|
#ifndef _WIN32_WCE
|
|
//Crate AudioConnection
|
|
AUDIO_RETURN_CODE CreateAudioConnection(BOOL bIsClient, UINT16 *audioHandle);
|
|
|
|
//Disconnect AudioConnection
|
|
AUDIO_RETURN_CODE RemoveAudioConnection(UINT16 audioHandle);
|
|
|
|
//audion callback functions
|
|
virtual void OnAudioConnected(UINT16 audioHandle){};
|
|
virtual void OnAudioDisconnect(UINT16 audioHandle){};
|
|
#endif
|
|
|
|
// Server should call this method to accept an incoming
|
|
// connection, after he is notified of that connection.
|
|
// If anything other than the default MTU is desired,
|
|
// it should be passed as a parameter.
|
|
//
|
|
BOOL Accept (UINT16 desired_mtu = L2CAP_DEFAULT_MTU);
|
|
|
|
// Server should call this method to reject an incoming
|
|
// connection, after he is notified of that connection.
|
|
//
|
|
BOOL Reject (UINT16 reason);
|
|
|
|
// Client should call thi smethod to create a connection
|
|
// to a remote device. If anything other than the default
|
|
// MTU is desired, it should be passed as a parameter
|
|
//
|
|
BOOL Connect (CL2CapIf *p_if, BD_ADDR p_bd_addr, UINT16 desired_mtu = L2CAP_DEFAULT_MTU);
|
|
|
|
// Client or server may call this function to reconfigure
|
|
// an existing connection.
|
|
//
|
|
BOOL Reconfigure (tL2CAP_CONFIG_INFO *p_cfg);
|
|
|
|
// Client or server may call this function to disconnect
|
|
// an existing connection.
|
|
//
|
|
void Disconnect (void);
|
|
|
|
// Client or server may call this function to send data to
|
|
// an existing connection.
|
|
//
|
|
BOOL Write (void *p_data, UINT16 length, UINT16 *p_len_written);
|
|
|
|
// Get Current Connection Statistics
|
|
//
|
|
BOOL GetConnectionStats (tBT_CONN_STATS *p_conn_stats);
|
|
|
|
// Server may provide a function to handle incoming connection
|
|
// notifications. Client should not.
|
|
//
|
|
virtual void OnIncomingConnection ();
|
|
|
|
// Client may provide a function to handle connection pending
|
|
// notifications.
|
|
//
|
|
virtual void OnConnectPendingReceived (void) {}
|
|
|
|
// Client and server may provide a method to be notified
|
|
// when a connection is established.
|
|
//
|
|
virtual void OnConnected() {}
|
|
|
|
// Client and server may provide a method to be notified
|
|
// when data is received from the remote side.
|
|
//
|
|
virtual void OnDataReceived (void *p_data, UINT16 length) {}
|
|
|
|
// Client and server may provide a method to be notified
|
|
// when a connection becomes congested or uncongested.
|
|
//
|
|
virtual void OnCongestionStatus (BOOL is_congested) {}
|
|
|
|
// Client and server may provide a method to be notified
|
|
// when a connection is disconnected.
|
|
//
|
|
virtual void OnRemoteDisconnected (UINT16 reason) {}
|
|
|
|
|
|
private:
|
|
void SetIdle();
|
|
|
|
#define CL2CAP_STATE_IDLE 0
|
|
#define CL2CAP_STATE_LISTENING 1
|
|
#define CL2CAP_STATE_WAITING_ACCEPT 2
|
|
#define CL2CAP_STATE_CONNECTING 3
|
|
#define CL2CAP_STATE_CONFIG 4
|
|
#define CL2CAP_STATE_CONNECTED 5
|
|
|
|
int m_state;
|
|
|
|
UINT16 m_psm;
|
|
UINT16 m_desired_mtu;
|
|
UINT8 m_cfg_flags;
|
|
UINT16 m_cid;
|
|
UINT8 m_id;
|
|
|
|
static CL2CapConn *m_p_first_conn;
|
|
CL2CapConn *m_p_next_conn;
|
|
UINT16 m_audioHandle;
|
|
|
|
friend class CL2CapFriend;
|
|
|
|
// This class will not support the compiler-supplied copy constructor or assignment operator,
|
|
// so these are declared private to prevent inadvertent use by the application.
|
|
CL2CapConn(const CL2CapConn & x);
|
|
CL2CapConn& operator= (const CL2CapConn & x);
|
|
};
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Define a class to create and manage SDP service records
|
|
//
|
|
class WIDCOMMSDK CSdpService
|
|
{
|
|
public:
|
|
CSdpService();
|
|
virtual ~CSdpService();
|
|
|
|
// This function adds a service class ID list to a service record. The service class ID
|
|
// list should be the first attribute added for a service record.
|
|
//
|
|
SDP_RETURN_CODE AddServiceClassIdList (int num_guids, GUID *p_service_guids);
|
|
|
|
// This function adds a name field to a service record.
|
|
//
|
|
// SDP_RETURN_CODE AddServiceName (char *p_service_name);
|
|
SDP_RETURN_CODE AddServiceName (BT_CHAR *p_service_name);//CE defs
|
|
|
|
// This function adds a profile descriptor list to a service record.
|
|
//
|
|
SDP_RETURN_CODE AddProfileDescriptorList (GUID *p_profile_guid, UINT16 version);
|
|
|
|
// This function adds an L2CAP protocol descriptor list to a service record.
|
|
//
|
|
SDP_RETURN_CODE AddL2CapProtocolDescriptor (UINT16 psm);
|
|
|
|
// This function adds an RFCOMM protocol descriptor list to a service record.
|
|
//
|
|
SDP_RETURN_CODE AddRFCommProtocolDescriptor (UINT8 scn);
|
|
|
|
// This function adds a generic protocol descriptor list to a service record.
|
|
// It should be only needed if the specific RFCOMM and L2CAP functions above
|
|
// do not suffice.
|
|
//
|
|
SDP_RETURN_CODE AddProtocolList (int num_elem, tSDP_PROTOCOL_ELEM *p_elem_list);
|
|
|
|
// This function adds the additional sequence of generic protocol descriptor lists to a service record.
|
|
// It should be only needed if the specific RFCOMM and L2CAP functions above
|
|
// do not suffice.
|
|
//
|
|
SDP_RETURN_CODE AddAdditionProtoLists (int num_list_elem, tSDP_PROTO_LIST_ELEM *p_proto_list);
|
|
|
|
// This function adds a language base to a service record.
|
|
//
|
|
SDP_RETURN_CODE AddLanguageBaseAttrIDList (UINT16 lang, UINT16 char_enc, UINT16 base_id);
|
|
|
|
// This function makes a service record public browsable.
|
|
//
|
|
SDP_RETURN_CODE MakePublicBrowseable (void);
|
|
|
|
// This function sets the 'service availability' field of a service record.
|
|
//
|
|
SDP_RETURN_CODE SetAvailability (UINT8 availability);
|
|
|
|
// This function adds an attribute to a service record. It is intended
|
|
// to be used to add some other attribute not covered by the existing
|
|
// functions. Note that the parameter should be in Big Endian order.
|
|
//
|
|
SDP_RETURN_CODE AddAttribute (UINT16 attr_id, UINT8 attr_type, UINT32 attr_len, UINT8 *p_val);
|
|
|
|
// This function deletes an attribute from a service record.
|
|
//
|
|
SDP_RETURN_CODE DeleteAttribute (UINT16 attr_id);
|
|
|
|
// This functions add a list (sequence) for the 'supported formats' attribute
|
|
//
|
|
SDP_RETURN_CODE AddSupportedFormatsList(UINT8 num_formats,
|
|
UINT8 pDataType[], UINT8 pDataTypeLength[], UINT8 *pDataTypeValue[]);
|
|
|
|
private:
|
|
UINT32 m_sdp_record_handle;
|
|
|
|
// This class will not support the compiler-supplied copy constructor or assignment operator,
|
|
// so these are declared private to prevent inadvertent use by the application.
|
|
CSdpService(const CSdpService & x);
|
|
CSdpService& operator= (const CSdpService & x);
|
|
};
|
|
|
|
|
|
class WIDCOMMSDK CSdpDiscoveryRec
|
|
{
|
|
public:
|
|
|
|
CSdpDiscoveryRec();
|
|
~CSdpDiscoveryRec();
|
|
|
|
//char m_service_name[BT_MAX_SERVICE_NAME_LEN + 1];
|
|
BT_CHAR m_service_name[BT_MAX_SERVICE_NAME_LEN + 1];
|
|
|
|
|
|
GUID m_service_guid;
|
|
|
|
BOOL FindRFCommScn (UINT8 *pScn);
|
|
|
|
BOOL FindL2CapPsm (UINT16 *pPsm);
|
|
|
|
BOOL FindProtocolListElem (UINT16 layer_uuid, tSDP_PROTOCOL_ELEM *p_elem);
|
|
|
|
BOOL FindAdditionalProtocolListElem (UINT16 layer_uuid, tSDP_PROTOCOL_ELEM *p_elem);
|
|
|
|
BOOL FindProfileVersion (GUID *p_profile_guid, UINT16 *p_version);
|
|
|
|
BOOL FindAttribute (UINT16 attr_id, SDP_DISC_ATTTR_VAL *p_val);
|
|
|
|
private:
|
|
|
|
void *m_p_rec;
|
|
UINT8 *m_p_free_mem;
|
|
UINT16 m_mem_free;
|
|
|
|
void Create(void *p);
|
|
UINT8 *AddDiscoveryAttr (UINT8 *pp, int len, void *p_parent, int nest_level);
|
|
|
|
friend class CBtIf;
|
|
|
|
// This class will not support the compiler-supplied copy constructor or assignment operator,
|
|
// so these are declared private to prevent inadvertent use by the application.
|
|
CSdpDiscoveryRec(const CSdpDiscoveryRec & x);
|
|
CSdpDiscoveryRec& operator= (const CSdpDiscoveryRec & x);
|
|
};
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Define a class to control the RfComm interface
|
|
//
|
|
class WIDCOMMSDK CRfCommIf
|
|
{
|
|
public:
|
|
CRfCommIf();
|
|
~CRfCommIf();
|
|
|
|
// Server should call this method without any parameter
|
|
// to assign a new SCN value, or with a SCN value if it
|
|
// is using a fixed SCN. Client should call this method
|
|
// with SCN found from service discovery
|
|
//
|
|
BOOL AssignScnValue (GUID *p_service_guid, UINT8 scn = 0);
|
|
|
|
// Returns the SCN value currently in use.
|
|
//
|
|
inline UINT8 GetScn() { return m_scn; }
|
|
|
|
// Both client and server MUST call this function to set
|
|
// the security level for connections on the assigned SCN.
|
|
//
|
|
BOOL SetSecurityLevel (BT_CHAR *p_service_name, UINT8 security_level, BOOL is_server);
|
|
|
|
// Server should call this method to switch role to master if
|
|
// it wants to accept multiple connections
|
|
//
|
|
BOOL SwitchRole(MASTER_SLAVE_ROLE new_role);
|
|
|
|
private:
|
|
UINT8 m_scn;
|
|
BOOL m_scnWasAllocated;
|
|
GUID m_service_guid;
|
|
UINT8 m_security_index;
|
|
|
|
// This class will not support the compiler-supplied copy constructor or assignment operator,
|
|
// so these are declared private to prevent inadvertent use by the application.
|
|
CRfCommIf(const CRfCommIf & x);
|
|
CRfCommIf& operator= (const CRfCommIf & x);
|
|
};
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// Define a class to control the RFCOMM connections (both client and server)
|
|
//
|
|
class WIDCOMMSDK CRfCommPort
|
|
{
|
|
public:
|
|
|
|
// Construction/destruction
|
|
//
|
|
CRfCommPort ();
|
|
virtual ~CRfCommPort();
|
|
//
|
|
// Define return code for RFCOMM port functions
|
|
//
|
|
typedef enum
|
|
{
|
|
SUCCESS,
|
|
UNKNOWN_ERROR,
|
|
ALREADY_OPENED, // Client tried to open port to existing DLCI/BD_ADDR
|
|
HANDLE_ERROR, // Use of a bad connection handle within SDK
|
|
NOT_OPENED, // Function called before conn opened, or after closed
|
|
LINE_ERR, // Line error
|
|
START_FAILED, // Connection attempt failed
|
|
PAR_NEG_FAILED, // Parameter negotiation failed, currently only MTU
|
|
PORT_NEG_FAILED, // Port negotiation failed
|
|
PEER_CONNECTION_FAILED, // Connection ended by remote side
|
|
PEER_TIMEOUT,
|
|
|
|
} PORT_RETURN_CODE;
|
|
|
|
|
|
// Open the RFComm serial port as a server (i.e. listen for
|
|
// remote side to connect to us).
|
|
//
|
|
PORT_RETURN_CODE OpenServer (UINT8 scn, UINT16 desired_mtu = RFCOMM_DEFAULT_MTU);
|
|
|
|
// Open the RFComm serial port as a client (i.e. initiate
|
|
// the connection).
|
|
//
|
|
PORT_RETURN_CODE OpenClient (UINT8 scn, BD_ADDR RemoteBdAddr, UINT16 desired_mtu = RFCOMM_DEFAULT_MTU);
|
|
|
|
// Close the RFComm serial port
|
|
//
|
|
PORT_RETURN_CODE Close(void);
|
|
|
|
// Check if connection is up, and if so to whom
|
|
//
|
|
BOOL IsConnected (BD_ADDR *p_remote_bdaddr);
|
|
|
|
// Set port flow control - application level, not low level
|
|
//
|
|
PORT_RETURN_CODE SetFlowEnabled (BOOL enabled);
|
|
|
|
// Set control leads see BtIfDefinitions.h
|
|
//
|
|
PORT_RETURN_CODE SetModemSignal (UINT8 signal);
|
|
|
|
// Get control lead status
|
|
//
|
|
PORT_RETURN_CODE GetModemStatus (UINT8 *p_signal);
|
|
|
|
// Send an error to the peer
|
|
//
|
|
PORT_RETURN_CODE SendError (UINT8 errors);
|
|
|
|
// Purge transmit queue
|
|
//
|
|
PORT_RETURN_CODE Purge (UINT8 purge_flags);
|
|
|
|
// Write data
|
|
//
|
|
PORT_RETURN_CODE Write (void *p_data, UINT16 len_to_write, UINT16 *p_len_written);
|
|
|
|
// Get Current Connection Statistics
|
|
//
|
|
PORT_RETURN_CODE GetConnectionStats (tBT_CONN_STATS *p_conn_stats);
|
|
|
|
// App may provide these functions
|
|
//
|
|
virtual void OnDataReceived (void *p_data, UINT16 len) {}
|
|
virtual void OnEventReceived (UINT32 event_code) {}
|
|
virtual void OnModemSignalChanged (UINT8 signals) {}
|
|
virtual void OnFlowEnabled (BOOL enabled) {}
|
|
|
|
BOOL SwitchRole(MASTER_SLAVE_ROLE new_role);
|
|
|
|
#ifndef _WIN32_WCE
|
|
//Crate AudioConnection
|
|
AUDIO_RETURN_CODE CreateAudioConnection(BOOL bIsClient, UINT16 *audioHandle);
|
|
|
|
//Disconnect AudioConnection
|
|
AUDIO_RETURN_CODE RemoveAudioConnection(UINT16 audioHandle);
|
|
|
|
//audion callback functions
|
|
virtual void OnAudioConnected(UINT16 audioHandle){};
|
|
virtual void OnAudioDisconnect(UINT16 aidioHandle){};
|
|
#endif
|
|
|
|
private:
|
|
|
|
UINT8 m_scn;
|
|
BOOL m_is_server;
|
|
UINT16 m_RemoteMtu;
|
|
|
|
UINT16 m_desired_mtu;
|
|
|
|
static CRfCommPort *m_p_first_port;
|
|
CRfCommPort *m_p_next_port;
|
|
|
|
UINT16 m_handle;
|
|
BOOL m_is_connected;
|
|
BD_ADDR m_RemoteBdAddr;
|
|
UINT16 m_audioHandle;
|
|
|
|
friend class CRfCommFriend;
|
|
|
|
// This class will not support the compiler-supplied copy constructor or assignment operator,
|
|
// so these are declared private to prevent inadvertent use by the application.
|
|
CRfCommPort(const CRfCommPort & x);
|
|
CRfCommPort& operator= (const CRfCommPort & x);
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// Define a class to control the FTP client sessions
|
|
//
|
|
class WIDCOMMSDK CFtpClient
|
|
{
|
|
|
|
public:
|
|
|
|
//
|
|
// Define return code for FTP Client functions
|
|
//
|
|
typedef enum
|
|
{
|
|
SUCCESS, // Operation initiated without error
|
|
OUT_OF_MEMORY, // Not enough memory to initiate operation
|
|
SECURITY_ERROR, // Error implementing requested security level
|
|
FTP_RETURN_ERROR, // FTP-specific error
|
|
NO_BT_SERVER, // cannot access the local Bluetooth COM server
|
|
ALREADY_CONNECTED, // Only one connection at a time supported for each instantiated CFtpClient object
|
|
NOT_OPENED, // Connection must be opened before requesting this operation
|
|
UNKNOWN_RETURN_ERROR // Any condition other than the above
|
|
} FTP_RETURN_CODE;
|
|
|
|
//
|
|
// Define return code for FTP response functions
|
|
//
|
|
typedef enum
|
|
{
|
|
COMPLETED, // operation completed without error
|
|
BAD_ADDR, // bad BD_ADDR
|
|
FILE_EXISTS, // file already exists
|
|
BAD_STATE, // could not handle request in present state
|
|
BAD_REQUEST, // invalid request
|
|
NOT_FOUND, // no such file
|
|
NO_SERVICE, // could not find the specified FTP server
|
|
DISCONNECT, // connection lost
|
|
READ, // read error
|
|
WRITE, // write error
|
|
OBEX_AUTHEN, // OBEX Authentication required
|
|
DENIED, // request could not be honored
|
|
DATA_NOT_SUPPORTED, // server does not support the requested data
|
|
CONNECT, // error establishing connection
|
|
PERMISSIONS, // incorrect file or service permissions
|
|
NOT_INITIALIZED, // not initialized
|
|
PARAM, // invalid parameter
|
|
RESOURCES, // out of file system resources (handles, disk space, etc)
|
|
SHARING, // sharing violation
|
|
UNKNOWN_RESULT_ERROR // Any condition other than the above
|
|
} FTP_RESULT_CODE;
|
|
|
|
// FTP
|
|
enum FtpFolder
|
|
{
|
|
FTP_ROOT_FOLDER = 1,
|
|
FTP_PARENT_FOLDER,
|
|
FTP_SUBFOLDER
|
|
};
|
|
typedef enum FtpFolder tFtpFolder;
|
|
|
|
|
|
public:
|
|
|
|
// Construction/destruction
|
|
//
|
|
CFtpClient ();
|
|
virtual ~CFtpClient();
|
|
|
|
FTP_RETURN_CODE OpenConnection (BD_ADDR bdAddr, CSdpDiscoveryRec & sdp_rec);
|
|
FTP_RETURN_CODE CloseConnection();
|
|
FTP_RETURN_CODE PutFile(WCHAR * localFileName);
|
|
FTP_RETURN_CODE GetFile(WCHAR * remoteFileName, WCHAR * localFolder);
|
|
FTP_RETURN_CODE FolderListing();
|
|
FTP_RETURN_CODE ChangeFolder(WCHAR * szFolder);
|
|
FTP_RETURN_CODE DeleteFile(WCHAR * szFile);
|
|
FTP_RETURN_CODE Abort();
|
|
FTP_RETURN_CODE Parent();
|
|
FTP_RETURN_CODE Root();
|
|
FTP_RETURN_CODE CreateEmpty(WCHAR * szFile);
|
|
FTP_RETURN_CODE CreateFolder(WCHAR * szFolder);
|
|
void SetSecurity(BOOL authentication, BOOL encryption);
|
|
|
|
// Application may provide these functions to facilitate managing the connection
|
|
virtual void OnOpenResponse(FTP_RESULT_CODE result_code) {}
|
|
virtual void OnCloseResponse(FTP_RESULT_CODE result_code){}
|
|
|
|
|
|
//windows
|
|
#ifndef _WIN32_WCE
|
|
virtual void OnProgress(FTP_RESULT_CODE result_code, WCHAR * name, long current, long total) {}
|
|
virtual void OnPutResponse(FTP_RESULT_CODE result_code, WCHAR * name) {}
|
|
virtual void OnGetResponse(FTP_RESULT_CODE result_code, WCHAR * name) {}
|
|
virtual void OnCreateResponse(FTP_RESULT_CODE result_code, WCHAR * name) {}
|
|
virtual void OnDeleteResponse(FTP_RESULT_CODE result_code, WCHAR * name){}
|
|
|
|
virtual void OnChangeFolderResponse(FTP_RESULT_CODE result_code, tFtpFolder folder_type, WCHAR * szFolder) {}
|
|
virtual void OnFolderListingResponse(FTP_RESULT_CODE result_code, tFTP_FILE_ENTRY * listing, long entries) {}
|
|
virtual void OnXmlFolderListingResponse(FTP_RESULT_CODE rc, WCHAR * pfolder_listing, long folder_length ){}
|
|
#else //for ce
|
|
virtual void OnProgress(FTP_RESULT_CODE result_code, LPCTSTR name, long current, long total) {}
|
|
virtual void OnPutResponse(FTP_RESULT_CODE result_code, LPCTSTR name) {}
|
|
virtual void OnGetResponse(FTP_RESULT_CODE result_code, LPCTSTR name) {}
|
|
virtual void OnCreateResponse(FTP_RESULT_CODE result_code, LPCTSTR name) {}
|
|
virtual void OnDeleteResponse(FTP_RESULT_CODE result_code, LPCTSTR name){}
|
|
|
|
virtual void OnFolderListingResponse(FTP_RESULT_CODE result_code, tFTP_FILE_ENTRY * listing, BOOL last) {}
|
|
virtual void OnXmlFolderListingResponse(FTP_RESULT_CODE rc, WCHAR * pfolder_listing, long folder_length, BOOL last ){}
|
|
virtual void OnChangeFolderResponse(FTP_RESULT_CODE result_code, tFtpFolder folder_type, LPCTSTR szFolder) {}
|
|
#endif
|
|
|
|
|
|
virtual void OnAbortResponse(FTP_RESULT_CODE result_code) {}
|
|
|
|
private:
|
|
|
|
long m_FtpHandle;
|
|
CWBtAPI *m_pBtApi;
|
|
BOOL m_authentication_requested_by_app;
|
|
BOOL m_encryption_requested_by_app;
|
|
BOOL m_authentication_saved;
|
|
BOOL m_encryption_saved;
|
|
void SaveSecurity();
|
|
void RestoreSecurity();
|
|
|
|
friend class CFtpClientFriend;
|
|
|
|
// This class will not support the compiler-supplied copy constructor or assignment operator,
|
|
// so these are declared private to prevent inadvertent use by the application.
|
|
CFtpClient(const CFtpClient & x);
|
|
CFtpClient& operator= (const CFtpClient & x);
|
|
};
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// Define a class to control the OPP client sessions
|
|
//
|
|
class WIDCOMMSDK COppClient
|
|
{
|
|
public:
|
|
|
|
//
|
|
// Define return code for OPP Client functions
|
|
//
|
|
typedef enum
|
|
{
|
|
OPP_CLIENT_SUCCESS, // Operation initiated without error
|
|
OUT_OF_MEMORY, // Not enough memory to initiate operation
|
|
SECURITY_ERROR, // Error implementing requested security level
|
|
OPP_ERROR, // OPP-specific error
|
|
ABORT_INVALID, // Abort not valid, no operation is in progress
|
|
UNKNOWN_ERROR // Any condition other than the above
|
|
} OPP_RETURN_CODE;
|
|
|
|
//
|
|
// Define return code for OPP response functions
|
|
//
|
|
typedef enum
|
|
{
|
|
COMPLETED, // operation completed without error
|
|
BAD_ADDR, // bad BD_ADDR
|
|
BAD_STATE, // could not handle request in present state
|
|
BAD_REQUEST, // invalid request
|
|
NOT_FOUND, // no such file
|
|
NO_SERVICE, // could not find the specified FTP server
|
|
DISCONNECT, // connection lost
|
|
READ, // read error
|
|
WRITE, // write error
|
|
OBEX_AUTH, // OBEX Authentication required
|
|
DENIED, // request could not be honored
|
|
DATA_NOT_SUPPORTED, // server does not support the requested data
|
|
CONNECT, // error establishing connection
|
|
NOT_INITIALIZED, // not initialized
|
|
PARAM, // bad parameter
|
|
BAD_INBOX, // inbox is not valid
|
|
BAD_NAME, // bad name for object
|
|
PERMISSIONS, // prohibited by file permissions
|
|
SHARING, // file is shared
|
|
RESOURCES, // file system resource limit reached - may be file handles, disk space, etc.
|
|
FILE_EXISTS, // is closedfile alto attempt to perform function after connectionready exists
|
|
UNKNOWN_RESULT_ERROR // Any condition other than the above
|
|
} OPP_RESULT_CODE;
|
|
|
|
//
|
|
// Define return code for OPP response functions
|
|
// (NOTE: these values match the ones defined in \middleware\opp\oppapp.h)
|
|
//
|
|
typedef enum
|
|
{
|
|
OPP_PUT_TRANS = 1,
|
|
OPP_GET_TRANS = 2,
|
|
OPP_EXCHANGE_PUT_TRANS = 3,
|
|
OPP_EXCHANGE_GET_TRANS = 4,
|
|
OPP_ABORT_TRANS = 5
|
|
|
|
} OPP_TRANSACTION_CODE;
|
|
|
|
public:
|
|
|
|
// Construction/destruction
|
|
//
|
|
COppClient ();
|
|
virtual ~COppClient();
|
|
|
|
OPP_RETURN_CODE Push(BD_ADDR bda, WCHAR * pszPathName, CSdpDiscoveryRec & sdp_rec);
|
|
OPP_RETURN_CODE Pull(BD_ADDR bda, WCHAR * pszPathName, CSdpDiscoveryRec & sdp_rec);
|
|
OPP_RETURN_CODE Exchange(BD_ADDR bda, WCHAR * pszName, WCHAR * pszFolder, CSdpDiscoveryRec & sdp_rec);
|
|
OPP_RETURN_CODE Abort();
|
|
void SetSecurity(BOOL authentication, BOOL encryption);
|
|
|
|
|
|
virtual void OnAbortResponse (OPP_RESULT_CODE result_code) {}
|
|
|
|
#ifndef _WIN32_WCE
|
|
virtual void OnProgress(OPP_RESULT_CODE result_code, BD_ADDR bda, WCHAR * string, long current, long total) {}
|
|
virtual void OnPushResponse(OPP_RESULT_CODE result_code, BD_ADDR bda, WCHAR * string) {}
|
|
virtual void OnPullResponse(OPP_RESULT_CODE result_code , BD_ADDR bda, WCHAR * string) {}
|
|
virtual void OnExchangeResponse(OPP_RESULT_CODE result_code, BD_ADDR bda, WCHAR * string) {}
|
|
virtual void OnExchangeResponse(OPP_RESULT_CODE result_code, BD_ADDR bda, WCHAR * string, OPP_TRANSACTION_CODE transaction_code) {}
|
|
#else //for CE
|
|
virtual void OnProgress(OPP_RESULT_CODE result_code, BD_ADDR bda, LPCTSTR string, long current, long total) {}
|
|
virtual void OnPushResponse(OPP_RESULT_CODE result_code, BD_ADDR bda, LPCTSTR string) {}
|
|
virtual void OnPullResponse(OPP_RESULT_CODE result_code , BD_ADDR bda, LPCTSTR string) {}
|
|
virtual void OnExchangeResponse(OPP_RESULT_CODE result_code, BD_ADDR bda, LPCTSTR string) {}
|
|
virtual void OnExchangeResponse(OPP_RESULT_CODE result_code, BD_ADDR bda, LPCTSTR string, OPP_TRANSACTION_CODE transaction_code) {}
|
|
#endif
|
|
|
|
private:
|
|
long m_OppHandle;
|
|
CWBtAPI *m_pBtApi;
|
|
BOOL m_authentication_requested_by_app;
|
|
BOOL m_encryption_requested_by_app;
|
|
BOOL m_authentication_saved;
|
|
BOOL m_encryption_saved;
|
|
void SaveSecurity();
|
|
void RestoreSecurity();
|
|
|
|
friend class COppClientFriend;
|
|
|
|
// This class will not support the compiler-supplied copy constructor or assignment operator,
|
|
// so these are declared private to prevent inadvertent use by the application.
|
|
COppClient(const COppClient & x);
|
|
COppClient& operator= (const COppClient & x);
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// Define a class to control the LAP client sessions
|
|
//
|
|
class WIDCOMMSDK CLapClient
|
|
{
|
|
public:
|
|
|
|
//
|
|
// Define return code for LAP Client functions
|
|
//
|
|
typedef enum
|
|
{
|
|
SUCCESS, // Operation initiated without error
|
|
NO_BT_SERVER, // COM server could not be started
|
|
ALREADY_CONNECTED, // attempt to connect before previous connection closed
|
|
NOT_CONNECTED, // attempt to close unopened connection
|
|
NOT_ENOUGH_MEMORY, // local processor could not allocate memory for open
|
|
UNKNOWN_ERROR // Any condition other than the above
|
|
} LAP_RETURN_CODE;
|
|
|
|
//
|
|
// Define connection states
|
|
//
|
|
typedef enum
|
|
{
|
|
LAP_CONNECTED, // port now connected
|
|
LAP_DISCONNECTED // port now disconnected
|
|
} LAP_STATE_CODE;
|
|
|
|
|
|
public:
|
|
|
|
// Construction/destruction
|
|
//
|
|
CLapClient ();
|
|
virtual ~CLapClient();
|
|
|
|
LAP_RETURN_CODE CreateConnection(BD_ADDR bda, CSdpDiscoveryRec & sdp_rec);
|
|
LAP_RETURN_CODE RemoveConnection();
|
|
void SetSecurity(BOOL authentication, BOOL encryption);
|
|
|
|
virtual void OnStateChange(BD_ADDR bda, DEV_CLASS dev_class, BD_NAME name, short com_port, LAP_STATE_CODE state) = 0;
|
|
|
|
private:
|
|
BD_ADDR m_RemoteBda;
|
|
short m_ComPort;
|
|
CWBtAPI *m_pBtApi;
|
|
BOOL m_authentication_requested_by_app;
|
|
BOOL m_encryption_requested_by_app;
|
|
BOOL m_authentication_saved;
|
|
BOOL m_encryption_saved;
|
|
void SaveSecurity();
|
|
void RestoreSecurity();
|
|
|
|
|
|
friend class CLapClientFriend;
|
|
|
|
// This class will not support the compiler-supplied copy constructor or assignment operator,
|
|
// so these are declared private to prevent inadvertent use by the application.
|
|
CLapClient(const CLapClient & x);
|
|
CLapClient& operator= (const CLapClient & x);
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// Define a class to control the DUN client sessions
|
|
//
|
|
class WIDCOMMSDK CDunClient
|
|
{
|
|
public:
|
|
|
|
//
|
|
// Define return code for DUN Client functions
|
|
//
|
|
typedef enum
|
|
{
|
|
SUCCESS, // Operation initiated without error
|
|
NO_BT_SERVER, // COM server could not be started
|
|
ALREADY_CONNECTED, // attempt to connect before previous connection closed
|
|
NOT_CONNECTED, // attempt to close unopened connection
|
|
NOT_ENOUGH_MEMORY, // local processor could not allocate memory for open
|
|
UNKNOWN_ERROR // Any condition other than the above
|
|
} DUN_RETURN_CODE;
|
|
|
|
//
|
|
// Define connection states
|
|
//
|
|
typedef enum
|
|
{
|
|
DUN_CONNECTED, // port now connected
|
|
DUN_DISCONNECTED // port now disconnected
|
|
} DUN_STATE_CODE;
|
|
|
|
|
|
public:
|
|
|
|
// Construction/destruction
|
|
//
|
|
CDunClient ();
|
|
virtual ~CDunClient();
|
|
|
|
DUN_RETURN_CODE CreateConnection(BD_ADDR bda, CSdpDiscoveryRec & sdp_rec);
|
|
DUN_RETURN_CODE RemoveConnection();
|
|
void SetSecurity(BOOL authentication, BOOL encryption);
|
|
|
|
virtual void OnStateChange(BD_ADDR bda, DEV_CLASS dev_class, BD_NAME name, short com_port, DUN_STATE_CODE state) = 0;
|
|
|
|
private:
|
|
short m_ComPort;
|
|
CWBtAPI *m_pBtApi;
|
|
BOOL m_authentication_requested_by_app;
|
|
BOOL m_encryption_requested_by_app;
|
|
BOOL m_authentication_saved;
|
|
BOOL m_encryption_saved;
|
|
void SaveSecurity();
|
|
void RestoreSecurity();
|
|
|
|
|
|
friend class CDunClientFriend;
|
|
|
|
// This class will not support the compiler-supplied copy constructor or assignment operator,
|
|
// so these are declared private to prevent inadvertent use by the application.
|
|
CDunClient(const CDunClient & x);
|
|
CDunClient& operator= (const CDunClient & x);
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// Define a class to control the SPP client sessions
|
|
//
|
|
class WIDCOMMSDK CSppClient
|
|
{
|
|
public:
|
|
|
|
//
|
|
// Define return code for SPP Client functions
|
|
//
|
|
typedef enum
|
|
{
|
|
SUCCESS, // Operation initiated without error
|
|
NO_BT_SERVER, // COM server could not be started
|
|
ALREADY_CONNECTED, // attempt to connect before previous connection closed
|
|
NOT_CONNECTED, // attempt to close unopened connection
|
|
NOT_ENOUGH_MEMORY, // local processor could not allocate memory for open
|
|
UNKNOWN_ERROR // Any condition other than the above
|
|
} SPP_CLIENT_RETURN_CODE;
|
|
|
|
|
|
public:
|
|
|
|
// Construction/destruction
|
|
//
|
|
CSppClient ();
|
|
virtual ~CSppClient();
|
|
|
|
SPP_CLIENT_RETURN_CODE CreateConnection(BD_ADDR bda, BT_CHAR *szServiceName);
|
|
SPP_CLIENT_RETURN_CODE RemoveConnection();
|
|
|
|
virtual void OnClientStateChange(BD_ADDR bda, DEV_CLASS dev_class, BD_NAME name, short com_port, SPP_STATE_CODE state) = 0;
|
|
|
|
private:
|
|
short m_ComPort;
|
|
CWBtAPI *m_pBtApi;
|
|
BOOL m_connected;
|
|
|
|
friend class CSppClientFriend;
|
|
|
|
// This class will not support the compiler-supplied copy constructor or assignment operator,
|
|
// so these are declared private to prevent inadvertent use by the application.
|
|
CSppClient(const CSppClient & x);
|
|
CSppClient& operator= (const CSppClient & x);
|
|
};
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// Define a class to control the SPP server sessions
|
|
//
|
|
class WIDCOMMSDK CSppServer
|
|
{
|
|
public:
|
|
|
|
//
|
|
// Define return code for SPP Server functions
|
|
//
|
|
typedef enum
|
|
{
|
|
SUCCESS, // Operation initiated without error
|
|
NO_BT_SERVER, // COM server could not be started
|
|
ALREADY_CONNECTED, // attempt to connect before previous connection closed
|
|
NOT_CONNECTED, // attempt to close unopened connection
|
|
NOT_ENOUGH_MEMORY, // local processor could not allocate memory for open
|
|
NOT_SUPPORTED, // requested service not available locally
|
|
UNKNOWN_ERROR // Any condition other than the above
|
|
} SPP_SERVER_RETURN_CODE;
|
|
|
|
private:
|
|
|
|
typedef struct {
|
|
short comPort;
|
|
BOOL authentication;
|
|
BOOL authorization;
|
|
BOOL encryption;
|
|
BOOL automatic; // TRUE if this service is automatically started by stack server
|
|
//unsigned char serviceName[BT_MAX_SERVICE_NAME_LEN];
|
|
BT_CHAR serviceName[BT_MAX_SERVICE_NAME_LEN];
|
|
} SPP_LOCAL_SERVICE;
|
|
|
|
#define MAX_LOCAL_SERVICES 5
|
|
|
|
public:
|
|
|
|
// Construction/destruction
|
|
//
|
|
CSppServer ();
|
|
virtual ~CSppServer();
|
|
|
|
SPP_SERVER_RETURN_CODE CreateConnection(BT_CHAR * szServiceName);
|
|
SPP_SERVER_RETURN_CODE RemoveConnection();
|
|
virtual void OnServerStateChange(BD_ADDR bda, DEV_CLASS dev_class, BD_NAME name, short com_port, SPP_STATE_CODE state) = 0;
|
|
|
|
private:
|
|
short m_comPort;
|
|
CWBtAPI *m_pBtApi;
|
|
BOOL m_authentication; // future
|
|
BOOL m_authorization; // future
|
|
BOOL m_encryption; // future
|
|
BOOL m_startup;
|
|
BT_CHAR m_serviceName[BT_MAX_SERVICE_NAME_LEN];
|
|
#ifndef _WIN32_WCE
|
|
BOOL serviceAvailable(LPCSTR szServiceName);
|
|
#else
|
|
BOOL serviceAvailable(LPCTSTR szServiceName);
|
|
#endif
|
|
BOOL m_connected;
|
|
BOOL m_automatic;
|
|
short m_cntLocalServices;
|
|
SPP_LOCAL_SERVICE m_localServiceList[MAX_LOCAL_SERVICES];
|
|
|
|
void SppLocalServices(SPP_LOCAL_SERVICE *pLocalServiceList, short maxLocalServices, short *pCntLocalServices);
|
|
|
|
|
|
friend class CSppServerFriend;
|
|
|
|
// This class will not support the compiler-supplied copy constructor or assignment operator,
|
|
// so these are declared private to prevent inadvertent use by the application.
|
|
CSppServer(const CSppServer & x);
|
|
CSppServer& operator= (const CSppServer & x);
|
|
};
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
// The CPrintClient class
|
|
//
|
|
//file types
|
|
#define TYPE_STRING_GIF _T("image/gif:89A")
|
|
|
|
#define BPSF_TYPE 0x01 //Mask value
|
|
|
|
struct BTPRINTSTRUCT
|
|
{
|
|
DWORD dwSize; // Must be sizeof(BTPRINTSTRUCT)
|
|
UINT mask; // 0 or BPSF_TYPE
|
|
LPCTSTR pszType; // Data type
|
|
};
|
|
|
|
|
|
class CPrintInternal;
|
|
class WIDCOMMSDK CPrintClient
|
|
{
|
|
public:
|
|
|
|
// Define the profiles supported by the Printing SDK
|
|
//
|
|
typedef enum
|
|
{
|
|
PRINT_PROFILE_BPP,
|
|
PRINT_PROFILE_HCRP,
|
|
PRINT_PROFILE_SPP
|
|
|
|
} ePRINT_PROFILE;
|
|
|
|
// Define the current state of the Printing SDK
|
|
//
|
|
typedef enum
|
|
{
|
|
PRINT_STATE_IDLE,
|
|
PRINT_STATE_CONNECTING,
|
|
PRINT_STATE_PRINTING,
|
|
PRINT_STATE_FLOW_CONTROLLED,
|
|
PRINT_STATE_DISCONNECTING,
|
|
PRINT_STATE_DONE
|
|
|
|
} ePRINT_STATE;
|
|
|
|
// Define error codes returned by the Printing SDK
|
|
//
|
|
typedef enum
|
|
{
|
|
// Generic to all profiles
|
|
//
|
|
PRINT_RC_OK,
|
|
PRINT_RC_FILE_PRINTED_OK,
|
|
PRINT_RC_FILE_NOT_FOUND,
|
|
PRINT_RC_FILE_READ_ERROR,
|
|
PRINT_RC_ALREADY_PRINTING,
|
|
PRINT_RC_UNKNOWN_PROFILE,
|
|
PRINT_RC_SERVICE_NOT_FOUND,
|
|
PRINT_RC_SECURITY_ERROR,
|
|
PRINT_RC_CONNECT_ERROR,
|
|
PRINT_RC_WRITE_ERROR,
|
|
PRINT_RC_REMOTE_DISCONNECTED,
|
|
PRINT_RC_INVALID_PARAM,
|
|
|
|
|
|
// BPP Specific errors
|
|
//
|
|
PRINT_RC_BPP_SCN_NOT_FOUND,
|
|
PRINT_RC_BPP_SCN_NOT_ASSIGNED,
|
|
PRINT_RC_BPP_OBEX_ABORTED,
|
|
PRINT_RC_BPP_OBEX_MISMATCH,
|
|
|
|
// HCRP Specific errors
|
|
//
|
|
PRINT_RC_HCRP_CTL_PSM_NOT_FOUND,
|
|
PRINT_RC_HCRP_DATA_PSM_NOT_FOUND,
|
|
|
|
// SPP Specific errors
|
|
//
|
|
PRINT_RC_SPP_SCN_NOT_FOUND,
|
|
|
|
} ePRINT_ERROR;
|
|
|
|
public:
|
|
CPrintClient();
|
|
~CPrintClient();
|
|
|
|
ePRINT_ERROR Start (BD_ADDR pBDA, ePRINT_PROFILE eProfile, LPCTSTR pszFile,
|
|
BTPRINTSTRUCT * pBtPrintStruct = NULL);
|
|
|
|
void Cancel();
|
|
ePRINT_STATE GetState();
|
|
UINT GetBytesSent();
|
|
UINT GetBytesTotal();
|
|
ePRINT_ERROR GetLastError(TCHAR **pDescr);
|
|
|
|
virtual void OnStateChange (ePRINT_STATE NewState) { };
|
|
static CPrintInternal *pIp;
|
|
};
|
|
|
|
|
|
#pragma pack ()
|
|
|
|
|
|
#endif // !defined(AFX_WIDCOMMSDK_H__1F5ED990_6FC6_4B0D_882C_8D7C98C16A06__INCLUDED_)
|