📄 bluesoleilclient.cpp
字号:
/************************************************************************************
// Sample code for calling IVT BlueSoleil APIs
Copyright 2004, IVT Corporation
*******************************************************************************************/
#include <windows.h>
#include <stdio.h>
#include "HelpFunc.h"
#include "ConnectCheck.h"
/*******************************Global Variables**********************************/
UCHAR g_targetBdAddr[6]={0x6B,0xCC,0xEC,0xD9,0x0A,0x00};
BT_CONNECTION g_connList[MAX_CONNECT_COUNT] = {0};
char g_szIniPath[MAX_PATH] = {0};
DWORD g_dwLastError=0;
void SDK_BtConnectService()
{
BLUETOOTH_DEVICE_INFO devInfo={0};
devInfo.dwSize = sizeof(BLUETOOTH_DEVICE_INFO);
memcpy(devInfo.address, g_targetBdAddr, 6);
GENERAL_SERVICE_INFO svcInfo = {0};
svcInfo.dwSize = sizeof(GENERAL_SERVICE_INFO);
int i, in = 0;
for(i = 0; i < MAX_CONNECT_COUNT; i++) {
if(connection_list[i].dwConnectionHandle == 0)
break;
else{
if(i == MAX_CONNECT_COUNT){
printf("Can not connect to any device any more!\n");
return;
}
}
}
do{
printf("Please Select the Service you want to connect!(-1: Return)\n");
printf("(1) Dial-Up Network\n");
printf("(2) Personal Area Network\n");
printf("(3) Object Push Profile\n");
printf("(4) File Transfer Profile\n");
printf("(5) Synchronization\n");
printf("(6) Basic Image Profile\n");
printf("(7) Lan Access Profile\n");
printf("(8) Audio Video Profile\n");
printf("(9) Headset Profile\n");
printf("(10) Human Interface Device Profile\n");
printf("(11) Serial Port Profile\n");
printf("(12) Hard Cable Replacement Profile\n");
scanf("%d", &in);
if(in<-1 || in>20){
printf("Invalid Number! Please Select again!\n");
continue;
}
switch(in)
{
case CLNT_CONNECT_DUN:
Help_ConnectDUN(&devInfo, &svcInfo, i);
break;
case CLNT_CONNECT_PAN:
Help_ConnectPAN(&devInfo, &svcInfo, i);
break;
case CLNT_CONNECT_OPP:
Help_ConnectOPP(&devInfo, &svcInfo, i);
break;
case CLNT_CONNECT_FTP:
Help_ConnectFTP(&devInfo, &svcInfo, i);
break;
case CLNT_CONNECT_SYNC:
Help_ConnectSYNC(&devInfo, &svcInfo, i);
break;
case CLNT_CONNECT_BIP:
Help_ConnectBIP(&devInfo, &svcInfo, i);
break;
case CLNT_CONNECT_LAP:
Help_ConnectLAP(&devInfo, &svcInfo, i);
break;
case CLNT_CONNECT_HS:
Help_ConnectHS(&devInfo, &svcInfo, i);
break;
case CLNT_CONNECT_HID:
Help_ConnectHID(&devInfo, &svcInfo, i);
break;
case CLNT_CONNECT_SPP:
Help_ConnectSPP(&devInfo, &svcInfo, i);
break;
case CLNT_CONNECT_HCRP:
Help_ConnectHCRP(&devInfo, &svcInfo, i);
break;
case -1:
StartUI();
break;
}
}while(in == 0);
}
void SDK_BtDisConnectService()
{
int in = -1;
printf("All the connections on local device:\n");
for(int i = 0; i < MAX_CONNECT_COUNT; i++){
if(connection_list[i].dwConnectionHandle != 0){
printf("List NO: %d\n", i);
printf("Connection Handle:%d\n", connection_list[i].dwConnectionHandle);
printf("Remote Device Address: %02X:%02X:%02X:%02X:%02X:%02X\n",
connection_list[i].ucRemoteAddr[5],
connection_list[i].ucRemoteAddr[4],
connection_list[i].ucRemoteAddr[3],
connection_list[i].ucRemoteAddr[2],
connection_list[i].ucRemoteAddr[1],
connection_list[i].ucRemoteAddr[0]);
printf("***********************************************\n");
in = i;
}
}
if(in == -1){
printf("There is no connection on this local device!\n");
return;
}
do{
printf("Please Input the List NO that you want to disconnect:(-1 to Cancel)");
scanf("%d", &in);
if(in < 0 || in > 7)
continue;
else{
DWORD dwResult = BT_DisconnectService(connection_list[in].dwConnectionHandle);
PrintError("BT_DisconnectService",dwResult);
if(dwResult == BTSTATUS_SUCCESS){
connection_list[in].dwConnectionHandle = 0;
connection_list[in].dwServiceClass = 0;
memset(connection_list[in].ucRemoteAddr, 0 , 6);
}
}
}while(in != -1);
}
void SDK_BtGetRemoteInfo()
{
DWORD dwMask = 0;
BLUETOOTH_DEVICE_INFO_EX devInfo={0};
devInfo.dwSize = sizeof(BLUETOOTH_DEVICE_INFO_EX);
memcpy(devInfo.address, g_targetBdAddr, 6);
char temp[MAX_PATH];
if(GetPrivateProfileString("GET_REMOTE_DEVICE_INFO", "Mask", NULL, temp, MAX_PATH, g_ini_path)==0){
printf("Get Mask Failed!\n");
return;
}
if((dwMask = atoi(temp)) == 0){
printf("Invalid Parameters: 'Mask'\n");
return;
}
//dwMask = 0x0000ffff;
DWORD dwResult = BT_GetRemoteDeviceInfo(dwMask, &devInfo);
PrintError("BT_GetRemoteDeviceInfo",dwResult);
if(dwResult != BTSTATUS_SUCCESS){
WriteLog("BT_GetRemoteDeviceInfo failed=%d",dwResult);
return;
}
WriteLog("BT_GetRemoteDeviceInfo succeed. singnal=%d\n",devInfo.cSignalStrength);
printf("Device Name: %s\nDevice class: %02X %02X %02X\n",
devInfo.szName,
devInfo.classOfDevice[0],
devInfo.classOfDevice[1],
devInfo.classOfDevice[2]);
if(devInfo.bConnected)
printf("Device Connection Status: YES\n");
else
printf("Device Connection Status: NO\n");
if(devInfo.bPaired)
printf("Device Paired Status: YES\n");
else
printf("Device Paired Status: NO\n");
printf("Device Link Key: ");
for(int i = 0; i < MAX_LINK_KEY_LENGTH; i++)
printf("%02X",devInfo.linkKey[i]);
printf("\n");
printf("Device Clock Offset: %d\n", devInfo.wClockOffset);
printf("Device LPM version: %d\n", devInfo.ucLmpVersion);
printf("Device Manufacture: %d\n", devInfo.wManuName);
printf("Device Sub LMP version: %d\n", devInfo.wLmpSubversion);
printf("Device dwDataRecvBytes: %d\n", devInfo.dwDataRecvBytes);
printf("Device dwDataSentBytes: %d\n", devInfo.dwDataSentBytes);
printf("Device Signal Strength: %d\n", devInfo.cSignalStrength);
}
void SDK_BtSetRemoteInfo()
{
DWORD dwMask = 0;
BLUETOOTH_DEVICE_INFO_EX devInfo = {0};
devInfo.dwSize = sizeof(BLUETOOTH_DEVICE_INFO_EX);
memcpy(devInfo.address, g_targetBdAddr, 6);
char temp[MAX_PATH];
//Get Mask
if(GetPrivateProfileString("SET_REMOTE_DEVICE_INFO", "Mask", NULL, temp, MAX_PATH, g_ini_path)==0) {
printf("Get Mask Failed!\n");
return;
}
if((dwMask = atoi(temp)) == 0){
printf("Invalid Parameters: 'Mask'\n");
return;
}
//Get Name
if(GetPrivateProfileString("SET_REMOTE_DEVICE_INFO", "Name", "", devInfo.szName, MAX_DEVICE_NAME_LENGTH, g_ini_path)==0){
}
//Get Device Class
if(GetPrivateProfileString("SET_REMOTE_DEVICE_INFO", "Device Class", NULL, temp, MAX_PATH, g_ini_path)==0){
printf("Get Device Class Failed!\n");
return;
}
if(Help_InputDeviceClass(temp, devInfo.classOfDevice) == BTSTATUS_FAIL){
printf("Invalid Device Class!\n");
return;
}
//Get Link Key
if(GetPrivateProfileString("SET_REMOTE_DEVICE_INFO", "Link Key", NULL, temp, MAX_PATH, g_ini_path)==0){
printf("Get Link Key Failed!\n");
return;
}
if(Help_InputLinkKey(temp, devInfo.linkKey) == BTSTATUS_FAIL)
return;
//Get Clock Offset
if(GetPrivateProfileString("SET_REMOTE_DEVICE_INFO", "Clock Offset", NULL, temp, MAX_PATH, g_ini_path)==0) {
printf("Get Link Key Failed!\n");
return;
}
devInfo.wClockOffset = atoi(temp);
DWORD dwResult;
dwResult = BT_SetRemoteDeviceInfo(dwMask, &devInfo);
PrintError("BT_SetRemoteDeviceInfo",dwResult);
}
void SDK_BtGetLocalInfo()
{
DWORD dwMask = 0;
BLUETOOTH_DEVICE_INFO_EX devInfo = {0};
devInfo.dwSize = sizeof(BLUETOOTH_DEVICE_INFO_EX);
memcpy(devInfo.address, g_targetBdAddr, 6);
char temp[MAX_PATH];
//Get Mask
if(GetPrivateProfileString("GET_LOCAL_DEVICE_INFO", "Mask", NULL, temp, MAX_PATH, g_ini_path)==0){
printf("Get Mask Failed!\n");
return;
}
if((dwMask = atoi(temp)) == 0){
printf("Invalid Parameters: 'Mask'\n");
return;
}
memcpy(devInfo.address, g_targetBdAddr, 6);
DWORD dwResult;
dwResult = BT_GetLocalDeviceInfo(dwMask, &devInfo);
PrintError("BT_GetLocalDeviceInfo",dwResult);
printf("Device Address: %02X:%02X:%02X:%02X:%02X:%02X \n",
devInfo.address[5],
devInfo.address[4],
devInfo.address[3],
devInfo.address[2],
devInfo.address[1],
devInfo.address[0]);
printf("Device Name: %s\nDevice class: %02X %02X %02X\n",
devInfo.szName,
devInfo.classOfDevice[0],
devInfo.classOfDevice[1],
devInfo.classOfDevice[2]);
printf("Device Manufacturer Name: %d\n", devInfo.wManuName);
printf("Device LMP Version: %d\n", devInfo.ucLmpVersion);
printf("Device LMP SubVersion: %d\n", devInfo.wLmpSubversion);
if(devInfo.bConnected)
printf("Device Connection Status: YES\n");
else
printf("Device Connection Status: NO\n");
}
void SDK_BtSetLocalInfo()
{
DWORD dwMask = 0;
BLUETOOTH_DEVICE_INFO devInfo = {0};
devInfo.dwSize = sizeof(BLUETOOTH_DEVICE_INFO);
memcpy(devInfo.address, g_targetBdAddr, 6);
char temp[MAX_PATH];
//Get Mask
if(GetPrivateProfileString("SET_LOCAL_DEVICE_INFO", "Mask", NULL, temp, MAX_PATH, g_ini_path)==0){
printf("Get Mask Failed!\n");
return;
}
if((dwMask = atoi(temp)) == 0){
printf("Invalid Parameters: 'Mask'\n");
return;
}
//Get Name
if(GetPrivateProfileString("SET_LOCAL_DEVICE_INFO", "Name", NULL, devInfo.szName, MAX_DEVICE_NAME_LENGTH, g_ini_path)==0){
printf("Get Name Failed!\n");
return;
}
//Get Device Class
if(GetPrivateProfileString("SET_LOCAL_DEVICE_INFO", "Device Class", NULL, temp, MAX_PATH, g_ini_path)==0){
printf("Get Device Class Failed!\n");
return;
}
if(Help_InputDeviceClass(temp, devInfo.classOfDevice) == BTSTATUS_FAIL){
printf("Invalid Device Class!\n");
return;
}
DWORD dwResult;
dwResult=BT_SetLocalDeviceInfo(dwMask, &devInfo);
PrintError("BT_SetLocalDeviceInfo",dwResult);
}
void SDK_BtRegisterCallBack()
{
UCHAR in;
BOOL bInvalid_Input = TRUE;
DWORD dwResult;
do {
printf("Please Select the Event (-1:Return 0:All the Events):\n");
printf("(1) EVENT_AUTHENTICATION\n");
printf("(2) EVENT_PIN_CODE_REQUEST\n");
printf("(3) EVENT_CONNECTION_STATUS\n");
printf("(4) EVENT_DUN_RAS_CALLBACK\n");
printf("(5) EVENT_ERROR\n");
printf("(6) EVENT_INQUIRY_DEVICE_REPORT\n");
printf("(7) EVENT_SPPEX_STATUS\n");
printf("(8) EVENT_BLUETOOTH_STATUS\n");
printf("(13) EVENT_PAN_NOTIFICATION\n");
printf("(14) EVENT_AUTHORIZE_REQUEST\n");
scanf("%d", &in);
if(in == -1 || in==0)
break;
if(!ISVALIDEVENT(in))
{
printf("\nInvalid Event!\n");
}
else
bInvalid_Input = FALSE;
} while(bInvalid_Input);
switch(in)
{
case 0:
dwResult=BT_RegisterCallback(EVENT_AUTHENTICATION, SDK_Authentication);
PrintError("BT_RegisterCallback EVENT_AUTHENTICATION",dwResult);
dwResult=BT_RegisterCallback(EVENT_PIN_CODE_REQUEST, SDK_PinRequestInd);
PrintError("BT_RegisterCallback EVENT_PIN_CODE_REQUEST",dwResult);
dwResult=BT_RegisterCallback(EVENT_CONNECTION_STATUS, SDK_ConnectionInd);
PrintError("BT_RegisterCallback EVENT_CONNECTION_STATUS",dwResult);
dwResult=BT_RegisterCallback(EVENT_DUN_RAS_CALLBACK, SDK_RasCallback);
PrintError("BT_RegisterCallback EVENT_DUN_RAS_CALLBACK",dwResult);
dwResult=BT_RegisterCallback(EVENT_ERROR, SDK_GeneralError);
PrintError("BT_RegisterCallback EVENT_ERROR",dwResult);
dwResult=BT_RegisterCallback(EVENT_INQUIRY_DEVICE_REPORT, SDK_InquiryDeviceInd);
PrintError("BT_RegisterCallback EVENT_INQUIRY_DEVICE_REPORT",dwResult);
dwResult=BT_RegisterCallback(EVENT_SPPEX_CONNECTION_STATUS, SDK_SPPEXConnectionInd);
PrintError("BT_RegisterCallback EVENT_SPPEX_CONNECTION_STATUS",dwResult);
dwResult=BT_RegisterCallback(EVENT_BLUETOOTH_STATUS, SDK_BluetoothInd);
PrintError("BT_RegisterCallback EVENT_BLUETOOTH_STATUS",dwResult);
dwResult=BT_RegisterCallback(EVENT_PAN_NOTIFICATION, SDK_PanInd);
PrintError("BT_RegisterCallback EVENT_PAN_NOTIFICATION",dwResult);
dwResult=BT_RegisterCallback(EVENT_AUTHORIZE_REQUEST, SDK_AuthorizeInd);
PrintError("BT_RegisterCallback EVENT_AUTHORIZE_REQUEST",dwResult);
break;
case EVENT_AUTHENTICATION:
dwResult=BT_RegisterCallback(in, SDK_Authentication);
PrintError("BT_RegisterCallback EVENT_AUTHENTICATION",dwResult);
break;
case EVENT_PIN_CODE_REQUEST:
dwResult=BT_RegisterCallback(in, SDK_PinRequestInd);
PrintError("BT_RegisterCallback EVENT_PIN_CODE_REQUEST",dwResult);
break;
case EVENT_CONNECTION_STATUS:
dwResult=BT_RegisterCallback(in, SDK_ConnectionInd);
PrintError("BT_RegisterCallback EVENT_CONNECTION_STATUS",dwResult);
break;
case EVENT_DUN_RAS_CALLBACK:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -