📄 btclient.cxx
字号:
if ((*pf) & 0x01)
wprintf (L"\tpark\n");
if ((*pf) & 0x02)
wprintf (L"\tRSSI\n");
if ((*pf) & 0x04)
wprintf (L"\tchannel-quality driven rate\n");
if ((*pf) & 0x08)
wprintf (L"\tSCO\n");
if ((*pf) & 0x10)
wprintf (L"\tHV2\n");
if ((*pf) & 0x20)
wprintf (L"\tHV3\n");
if ((*pf) & 0x40)
wprintf (L"\tu-law log\n");
if ((*pf) & 0x80)
wprintf (L"\ta-law log\n");
++pf;
if ((*pf) & 0x01)
wprintf (L"\tCVSD\n");
if ((*pf) & 0x02)
wprintf (L"\tpaging scheme\n");
if ((*pf) & 0x04)
wprintf (L"\tpower control\n");
if ((*pf) & 0x08)
wprintf (L"\ttransparent SCO data\n");
if ((*pf) & 0x10)
wprintf (L"\tflow lag bit 0\n");
if ((*pf) & 0x20)
wprintf (L"\tflow lag bit 0\n");
if ((*pf) & 0x40)
wprintf (L"\tflow lag bit 0\n");
}
int wmain (int argc, WCHAR **argv) {
#if defined (USE_RPC)
WCHAR *pszUuid = NULL;
WCHAR *pszProtocolSequence = L"ncalrpc";
WCHAR *pszNetworkAddress = NULL;
WCHAR *pszEndpoint = L"bt_server";
WCHAR *pszOptions = NULL;
WCHAR *pszStringBinding = NULL;
RpcStringBindingCompose (pszUuid, pszProtocolSequence, pszNetworkAddress,
pszEndpoint, pszOptions, &pszStringBinding);
wprintf (L"String binding : %s\n", pszStringBinding);
RpcBindingFromStringBinding (pszStringBinding, &bluetooth_IfHandle);
#endif
for ( ; ; ) {
WCHAR szBuffer[512];
wprintf (L"> ");
szBuffer[0] = L'\0';
if (NULL == fgetws (szBuffer,sizeof(szBuffer)/sizeof(WCHAR)-1,stdin))
break;
// trim trailing carriage return characters.
int iBufLen = wcslen(szBuffer)-1;
for (; iBufLen; iBufLen--) {
if (! (szBuffer[iBufLen] == L'\r' || szBuffer[iBufLen] == L'\n'))
break;
szBuffer[iBufLen] = 0;
}
if (szBuffer[0] == L'\0')
continue;
if (wcsicmp (szBuffer, L"exit") == 0) {
break;
} else if (wcsicmp (szBuffer, L"help") == 0) {
wprintf (L"\n\tCommand syntax:\n");
wprintf (L"exit exit\n");
wprintf (L"help print this text\n");
wprintf (L"start [card] starts all BT services or HCI transport\n");
wprintf (L"stop [card] stops all BT services or HCI transport\n");
wprintf (L"l2cap load loads l2cap API driver\n");
wprintf (L"l2cap unload unloads l2cap API driver\n");
wprintf (L"ping bt_addr string l2cap-ping the peer device\n");
wprintf (L"connect bt_addr psm mtu establish new L2CAP connection\n");
wprintf (L"unaccept psm stop accepting L2CAP connections for psm\n");
wprintf (L"accept psm mtu start accepting L2CAP connections for psm\n");
wprintf (L"write cid string write string to cid\n");
wprintf (L"writeansi cid string write string to cid\n");
wprintf (L"rep number cid string write string to cid a number of times\n");
wprintf (L"disconnect cid disconnect\n");
wprintf (L"inquiry LAP length numresp start inquiry\n");
wprintf (L"name bt_addr query remote name\n");
wprintf (L"set/getscan [mask] set or retrieve current scan mask\n");
wprintf (L"set/getpage [timeout] set or retrieve current page timeout\n");
wprintf (L"set/getcod [cod] set or retrieve current class of device\n");
wprintf (L"getremotecod bt_addr get remote COD for given BT_ADDR\n");
wprintf (L"park bt_addr beacon_max beacon_min enter park mode\n");
wprintf (L"sniff bt_addr max min attempt t/o enter sniff mode\n");
wprintf (L"readbd read bd address\n");
wprintf (L"readhw read hardware state\n");
wprintf (L"readversion [bt_addr] read local or remote hardware version\n");
wprintf (L"setpin bt_addr byteseq set PIN code\n");
wprintf (L"revpin bt_addr revoke PIN code\n");
wprintf (L"setlink bt_addr byteseq set link key\n");
wprintf (L"getlink bt_addr get link key\n");
wprintf (L"revlink bt_addr revoke link key\n");
wprintf (L"auth bt_addr authenticate connection\n");
wprintf (L"encrypt bt_addr on/off start/stop encryption\n");
wprintf (L"uptest1 cid send unplugfest test 1 sequence\n");
wprintf (L"uptest2 cid send unplugfest test 2 sequence\n");
wprintf (L"uptest3 cid send unplugfest test 3 sequence\n");
wprintf (L"send cid mtu filename send file <filename> to <cid> in chunks of <mtu>\n");
wprintf (L"nsInquiry [-name] inqury using NSP (-name retrieves device name also)\n");
wprintf (L"sdpAddRecord filename adds <filename> to SDP record database\n");
wprintf (L"sdpDelRecord handle removes sdp database handle\n");
wprintf (L"sdpServiceSearch bt_addr filename ServiceSearch, GUIDS from <filename>\n");
wprintf (L"sdpAttribSearch bt_addr filename AttributeSearch,AttribIDs from <filename>\n");
wprintf (L"sdpServAttribSearch bt_addr filename ServiceAttributeSearch, from <filename>\n");
wprintf (L"\n\tData format:\n");
wprintf (L"handle 8 hex digits preceeded by 0x\n");
wprintf (L"psm, mtu, LAP and cid, timeout 4 hex digits preceeded by 0x\n");
wprintf (L"length and numresp 2 hex digits preceeded by 0x\n");
wprintf (L"bt_addr 12 hex digits without leading 0x\n");
wprintf (L"string any set of characters\n");
ProcessRFCOMMCommand (L"help");
continue;
} else if (wcsicmp (szBuffer, L"l2cap load") == 0) {
#if defined (UNDER_CE)
wprintf (L"L2CAPLoad : %d\n", L2CAPLoad ());
#endif
continue;
} else if (wcsicmp (szBuffer, L"l2cap unload") == 0) {
#if defined (UNDER_CE)
wprintf (L"L2CAPUnload : %d\n", L2CAPUnload ());
#endif
continue;
} else if (wcsnicmp (szBuffer, L"setscan ", 8) == 0) {
WCHAR *p = szBuffer + 8;
unsigned char scan;
if (! GetUC(&p, &scan)) {
wprintf (L"Syntax: scan\n");
continue;
}
int iError = BthWriteScanEnableMask (scan);
wprintf (L"BthWriteScanEnableMask returns 0x%08x %d\n", iError, iError);
continue;
} else if (wcsicmp (szBuffer, L"getscan") == 0) {
unsigned char mask;
int iError = BthReadScanEnableMask (&mask);
wprintf (L"BthSetScanEnableMask returns 0x%08x %d\n", iError, iError);
if (iError == ERROR_SUCCESS)
wprintf (L"scan = %d\n", mask);
continue;
} else if (wcsnicmp (szBuffer, L"setpage ", 8) == 0) {
WCHAR *p = szBuffer + 8;
unsigned short page;
if (! GetUS(&p, &page)) {
wprintf (L"Syntax: page\n");
continue;
}
int iError = BthWritePageTimeout (page);
wprintf (L"BthWritePageTimeout returns 0x%08x %d\n", iError, iError);
continue;
} else if (wcsicmp (szBuffer, L"getpage") == 0) {
unsigned short page;
int iError = BthReadPageTimeout (&page);
wprintf (L"BthReadPageTimeout returns 0x%08x %d\n", iError, iError);
if (iError == ERROR_SUCCESS)
wprintf (L"page = 0x%04x\n", page);
continue;
} else if (wcsnicmp (szBuffer, L"setauth ", 8) == 0) {
WCHAR *p = szBuffer + 8;
unsigned char ae;
if (! GetUC(&p, &ae)) {
wprintf (L"Syntax: authn mask\n");
continue;
}
int iError = BthWriteAuthenticationEnable (ae);
wprintf (L"BthWriteAuthenticationEnable returns 0x%08x %d\n", iError, iError);
continue;
} else if (wcsicmp (szBuffer, L"getauth") == 0) {
unsigned char ae;
int iError = BthReadAuthenticationEnable (&ae);
wprintf (L"BthReadAuthenticationEnable returns 0x%08x %d\n", iError, iError);
if (iError == ERROR_SUCCESS)
wprintf (L"auth = 0x%04x\n", ae);
continue;
} else if (wcsnicmp (szBuffer, L"setcod ", 7) == 0) {
WCHAR *p = szBuffer + 7;
unsigned int cod;
if (! GetUx(&p, &cod, 8)) {
wprintf (L"Syntax: page\n");
continue;
}
int iError = BthWriteCOD (cod);
wprintf (L"BthWriteCOD returns 0x%08x %d\n", iError, iError);
continue;
} else if (wcsicmp (szBuffer, L"getcod") == 0) {
unsigned int cod;
int iError = BthReadCOD (&cod);
wprintf (L"BthReadCOD returns 0x%08x %d\n", iError, iError);
if (iError == ERROR_SUCCESS)
wprintf (L"cod = 0x%08x\n", cod);
continue;
} else if (wcsnicmp (szBuffer, L"getremotecod ", 13) == 0) {
WCHAR *p = szBuffer + 13;
unsigned int cod = 0;
BT_ADDR ba;
if (! GetBA(&p, &ba)) {
wprintf (L"Syntax: bt_addr\n");
continue;
}
int iError = BthGetRemoteCOD (&ba, &cod);
wprintf (L"BthGetRemoteCOD returns 0x%08x %d\n", iError, iError);
if (iError == ERROR_SUCCESS)
wprintf (L"cod = 0x%08x\n", cod);
continue;
} else if (wcsnicmp (szBuffer, L"park ", 5) == 0) {
WCHAR *p = szBuffer + 5;
BT_ADDR ba;
if (! GetBA(&p, &ba)) {
wprintf (L"Syntax: bt_addr\n");
continue;
}
USHORT b_max = 0;
if (! GetUS(&p, &b_max)) {
wprintf (L"Syntax: beacon_max\n");
continue;
}
USHORT b_min = 0;
if (! GetUS(&p, &b_min)) {
wprintf (L"Syntax: beacon_min\n");
continue;
}
USHORT pInt = 0;
int iError = BthEnterParkMode (&ba, b_max, b_min, &pInt);
wprintf (L"BthEnterParkMode returns 0x%08x %d\n", iError, iError);
continue;
} else if (wcsnicmp (szBuffer, L"sniff ", 6) == 0) {
WCHAR *p = szBuffer + 5;
BT_ADDR ba;
if (! GetBA(&p, &ba)) {
wprintf (L"Syntax: bt_addr\n");
continue;
}
USHORT max = 0;
if (! GetUS(&p, &max)) {
wprintf (L"Syntax: sniff_mode_max\n");
continue;
}
USHORT min = 0;
if (! GetUS(&p, &min)) {
wprintf (L"Syntax: sniff_mode_min\n");
continue;
}
USHORT attempt = 0;
if (! GetUS(&p, &attempt)) {
wprintf (L"Syntax: sniff_attempt\n");
continue;
}
USHORT to = 0;
if (! GetUS(&p, &to)) {
wprintf (L"Syntax: sniff_timeout\n");
continue;
}
USHORT pInt = 0;
int iError = BthEnterSniffMode (&ba, max, min, attempt, to, &pInt);
wprintf (L"BthEnterSniffMode returns 0x%08x %d\n", iError, iError);
continue;
} else if (wcsnicmp (szBuffer, L"readversion ", 12) == 0) {
WCHAR *p = szBuffer + 12;
BT_ADDR ba;
if (! GetBA(&p, &ba)) {
wprintf (L"Syntax: bt_addr\n");
continue;
}
unsigned char lmp_version;
unsigned short lmp_subversion, manufacturer;
unsigned char lmp_features[8];
int iError = BthReadRemoteVersion (&ba, &lmp_version, &lmp_subversion, &manufacturer, lmp_features);
wprintf (L"BthAuthenticate returns 0x%08x %d\n", iError, iError);
if (iError == ERROR_SUCCESS) {
wprintf (L"LMP Version : %d\n", lmp_version);
wprintf (L"LMP Subversion : %d\n", lmp_subversion);
wprintf (L"Manufacturer: ");
switch (manufacturer) {
case 0:
wprintf (L"Ericsson\n");
break;
case 1:
wprintf (L"Nokia\n");
break;
case 2:
wprintf (L"Intel\n");
break;
case 3:
wprintf (L"IBM\n");
break;
case 4:
wprintf (L"Toshiba\n");
break;
case 5:
wprintf (L"3COM\n");
break;
case 6:
wprintf (L"Microsoft\n");
break;
case 7:
wprintf (L"Lucent\n");
break;
case 8:
wprintf (L"Motorola\n");
break;
case 9:
wprintf (L"Infineon\n");
break;
case 10:
wprintf (L"CSR\n");
break;
case 11:
wprintf (L"Silicon Wave\n");
break;
case 12:
wprintf (L"Digianswer\n");
break;
default:
wprintf (L"Unknown, code %d\n", manufacturer);
break;
}
DumpFeatures (lmp_features);
}
continue;
} else if (wcsicmp (szBuffer, L"readversion") == 0) {
unsigned char lmp_version, hci_version;
unsigned short hci_subversion, lmp_subversion, manufacturer;
unsigned char lmp_features[8];
int iError = BthReadLocalVersion (&hci_version, &hci_subversion, &lmp_version, &lmp_subversion, &manufacturer, lmp_features);
wprintf (L"BthAuthenticate returns 0x%08x %d\n", iError, iError);
if (iError == ERROR_SUCCESS) {
wprintf (L"HCI Version : %d\n", hci_version);
wprintf (L"HCI Subversion : %d\n", hci_subversion);
wprintf (L"LMP Version : %d\n", lmp_version);
wprintf (L"LMP Subversion : %d\n", lmp_subversion);
wprintf (L"Manufacturer: ");
switch (manufacturer) {
case 0:
wprintf (L"Ericsson\n");
break;
case 1:
wprintf (L"Nokia\n");
break;
case 2:
wprintf (L"Intel\n");
break;
case 3:
wprintf (L"IBM\n");
break;
case 4:
wprintf (L"Toshiba\n");
break;
case 5:
wprintf (L"3COM\n");
break;
case 6:
wprintf (L"Microsoft\n");
break;
case 7:
wprintf (L"Lucent\n");
break;
case 8:
wprintf (L"Motorola\n");
break;
case 9:
wprintf (L"Infineon\n");
break;
case 10:
wprintf (L"CSR\n");
break;
case 11:
wprintf (L"Silicon Wave\n");
break;
case 12:
wprintf (L"Digianswer\n");
break;
default:
wprintf (L"Unknown, code %d\n", manufacturer);
break;
}
DumpFeatures (lmp_features);
}
continue;
} else if (wcsnicmp (szBuffer, L"setpin ", 7) == 0) {
WCHAR *p = szBuffer + 7;
BT_ADDR ba;
if (! GetBA(&p, &ba)) {
wprintf (L"Syntax: bt_addr\n");
continue;
}
int iLen = 16;
unsigned char pin[16];
if (! GetBytes(&p, pin, &iLen)) {
wprintf (L"Syntax: pin code\n");
continue;
}
int iError = BthSetPIN (&ba, iLen, pin);
wprintf (L"BthSetPIN returns 0x%08x %d\n", iError, iError);
continue;
} else if (wcsnicmp (szBuffer, L"setlink ", 8) == 0) {
WCHAR *p = szBuffer + 8;
BT_ADDR ba;
if (! GetBA(&p, &ba)) {
wprintf (L"Syntax: bt_addr\n");
continue;
}
int iLen = 16;
unsigned char key[16];
if ((! GetBytes(&p, key, &iLen)) || (iLen != 16)) {
wprintf (L"Syntax: link key (16 bytes)\n");
continue;
}
int iError = BthSetLinkKey (&ba, key);
wprintf (L"BthSetLinkKey returns 0x%08x %d\n", iError, iError);
continue;
} else if (wcsnicmp (szBuffer, L"getlink ", 8) == 0) {
WCHAR *p = szBuffer + 8;
BT_ADDR ba;
if (! GetBA(&p, &ba)) {
wprintf (L"Syntax: bt_addr\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -