Bluetooth - Downlevel - Inband SCO Tests (Windows 8)
This automated test examines the Bluetooth logo requirements and verifies that the system that you are testing is using valid Bluetooth specifications.
Test details
Associated requirements |
Device.BusController.Bluetooth.USB.ScoDataTransportLayer |
Platforms |
Windows RT (ARM-based) Windows 8 (x64) Windows 8 (x86) |
Expected run time |
~30 minutes |
Categories |
Certification Functional |
Type |
Automated |
Running the test
Before you run the test, complete the test setup as described in Bluetooth Controller Testing Prerequisites.
This test requires two test computers (one acts as Primary, the other Secondary). The test computers must have the same operating system, support In-Band SCO and have a Bluetooth 2.1 compliant radio. The primary test computer must have the radio being certified for logo (Device Under Test).
The Bluetooth radio must use the Microsoft Bluetooth Driver Stack for testing.
Install Bluetooth Test Driver (BTHCSTI) on both machines (this is done automatically when scheduling through the WHCK Studio).
Radio needs to support in-band SCO. Computers which do not support in-band SCO will be skipped.
Tests are copied locally to the WTTJobsWorking directory and logs are copied to the default Logs server for WTT.
Enabling collection of Event Tracing for Windows (ETW) traces assists with diagnosing test failures.
These traces capture the HCI traffic sent to and from the Bluetooth stack. They can be decoded using Netmon and the Bluetooth ETW parsers. It is recommended to first investigate the issue internally using these traces or some other method of capturing over-the-air traces because many controller/stack inter-operability issues can be observed in these traces.
You can view the collected logs using Netmon and the Bluetooth NPL parsers. These parsers can be obtained through installing the WDK.
Troubleshooting
For troubleshooting information, see Troubleshooting Bus Controller Testing.
If the SCO data tests fail because of higher than expected error rates, make sure that the radios are in the same line of sight and are within a few feet of each other.
To debug test failures, you must have complete log files. The test will generate a text log file that you specify in the <logFileName> parameter. Include this file together with any questions about failing results. You might also have to include a kernel debugger remote session.
More information
You can run this test manually by using the command-line options only after you install bthcsti (the test driver) and restart all of the computers. This test requires two computers, one primary computer and one secondary computer. You can run the test as follows:
On the primary computer, at a command prompt, run the following command:
Mjolnir -c SCO_HCT -l <logFileName>
On the secondary computer, at a command prompt, run the following command:
Mjolnir -m <PrimaryMachineName>
To install the bthcsti driver, follow these steps:
Copy the bthcsti.inf, bthcsti.sys, bthcsti.cat, bthcstisetup.exe, and devcon.exe files into a directory. Run the remaining steps from this directory.
Run bthcstisetup.exe.
Run devcon dp_add bthcsti.inf.
Restart the computer.
In Device Manager, verify that the bthcsti driver is installed.
This section includes details for each test case that this test initiates.
SCO1.1.1.1 - Create and close SCO Cxn test case
This test case verifies that the radio can create a single SCO channel.
Overview
The test case performs the following steps:
Tries to open a single SCO channel.
Disconnects.
Results Interpretation
The test case writes the pass/fail results to a log file.
The test case fails if:
The SCO connection attempt fails.
The disconnect operation fails.
SCO1.1.3.2 - Create SCO Cxn with SCO_CF_LINK_ENCRYPTED, master role sets Flag
This test case verifies that the radio under test can establish an SCO channel on an authenticated or encrypted link.
Overview
The test case performs the following steps:
The test unpairs the remote device if the device is currently paired.
The test master role tries to create an ACL link.
The test master role tries to authenticate and encrypt the ACL link.
The test master role tries to open an SCO channel on the encrypted link.
The test disconnects.
The test unpairs the remote device.
Results Interpretation
The test case writes the pass/fail results to a log file.
The test case fails if:
The SCO connection attempt fails.
The attempt to authenticate or encrypt the link fails.
The disconnect operation fails.
SCO1.2.3.2 - Create SCO Cxn with SCO_CF_LINK_ENCRYPTED, subordinate role sets Flag
This test case verifies that the radio under test can establish an SCO channel on an authenticated or encrypted link.
Overview
The test case performs the following steps:
The test unpairs the remote device if the device is currently paired.
The test master role tries to create an ACL link.
The test master role tries to open an SCO channel.
The test subordinate role tries to authenticate and encrypt the link after the subordinate role accepts the SCO connection request.
The test disconnects.
The test unpairs the remote device.
Results Interpretation
The test case writes the pass/fail results to a log file.
The test case fails if:
The SCO connection attempt fails.
The attempt to authenticate or encrypt the link fails.
The disconnect operation fails.
SCO2.3.3.1 - Disconnect both sides simultaneously
This test case tries to disconnect the ACL link from both sides at the same time.
Overview
The test case performs the following steps:
Tries to open a single SCO channel.
Disconnects both sides at the same time.
Results Interpretation
The test case writes the pass/fail results to a log file.
The test case fails if:
The SCO connection attempt fails.
The disconnect operation fails.
Note
The information about the following data verification tests helps the qualifying customers to troubleshoot any failures they may experience when they run these tests. In the following data verification tests, data that is sent across the air uses the following repeated pattern:
typedef struct _TEST_UNIT{USHORT Header; // 0xDEADUSHORT Size; // The actual size of the test unit, including data. size from callerUSHORT Sequence; // Identifier (count) for a stream of test units.USHORT Crc16; // This is not currently used as CRC. It is a complement of the sequence and is made up of 1s.USHORT Data; // The variable size. This starts with a lower byte of the sequence and is incremented.USHORT Footer; // 0xBEEF} TEST_UNIT, *PTEST_UNIT;
Note
The sequence value is incremented for every test unit that is sent across the air. If necessary, these packets can be easily picked out in an air trace and decoded manually.
SCO1.5.5.1 - Full duplex read and write test case, 700 kb, clear data
This test case verifies that the radio under test can send and receive SCO data without error.
Overview
The test case performs the following steps:
The test tries to open a single SCO channel.
The test triesto send approximately 700 kilobits (kb) of data and receive an equal amount at the same time.
The test validates the data after receipt.
The test disconnects.
Results Interpretation
The test case writes the pass/fail results to a log file.
The test case fails if:
The SCO connection attempt fails.
The amount of dropped data or errors is more than 10% of the total transferred.
The average throughput of the data transmissions deviates from 64 kilobits per second (kbps) by more than 2 kbps.
The disconnect operation fails.
SCO1.5.11.2 - Full duplex read and write test case with ACL data, 700 kb, mu-Law
This test case verifies that the radio under test can send and receive SCO data without error when an active ACL link in the background is also transmitting data.
Overview
The test case performs the following steps:
Creates a single L2CAP channel.
Tries to open a single SCO channel.
Starts transferring L2CAP data back and forth in the background.
Tries to send approximately 700 kb of data while receiving an equal amount.
Validates the SCO data after receipt.
Disconnects both L2CAP and SCO channels.
Results Interpretation
The test case writes the pass/fail results to a log file.
The test case fails if:
The SCO connection attempt fails.
The amount of dropped SCO data or errors is more than 10% of the total transferred.
The average throughput of the SCO data transmissions deviates from 64 kbps by more than 2 kbps.
The L2CAP channel fails any data transfers or is prematurely lost.
The disconnect operation fails.
SCO1.5.14.1 - Full duplex read and write test case with Inquiries, 700 kb, clear data
This test verifies that the radio under test can send and receive SCO data without error while the radio is inquiring for remote devices.
Overview
The test case performs the following steps:
Tries to open a single SCO channel.
Starts requesting inquiries, in a loop, on both master role and subordinate role radios.
Tries to send approximately 700 kb of SCO data while receiving an equal amount.
Validates the SCO data after receipt.
Disconnects.
Results Interpretation
The test case writes the pass/fail results to a log file.
The test case fails if:
The SCO connection attempt fails.
The amount of dropped SCO data or errors is more than 10% of the total transferred.
The average throughput of the SCO data transmissions deviates from 64 kbps by more than 2 kbps.
Any inquiry requests fail.
The disconnect operation fails.
SCO1.5.30.2 - Loopback latency measurement, 700 kb, mu-Law
This test case verifies that the round-trip latency of Bluetooth transfers that use the radio under test is in an acceptable range.
Overview
The test case performs the following steps:
The subordinate role test computer is set up to receive SCO data and immediately reflect the same data back to the master role test computer.
A single SCO channel is created.
The master role computer streams 10,000 72-byte blocks to the radio. Every tenth block consists of a specific byte value (the "token" value) repeated over the 72 bytes. That token value is incremented for every tenth block and wraps around after 255. All other blocks are zero. A timestamp is taken when each tenth block is sent.
At the same time, the master role side listens for these token blocks in a separate thread. The master role computer takes a timestamp when the computer receives each token block. The time delta divided by two is the approximate latency in one direction.
A sniffer trace shows blocks of data that resemble the following (each byte is repeated 72 times, but is just listed one time here):
01, 00, 00, 00, 00, 00, 00, 00, 00, 00, 02, ... 03, ... 04, ... and then much later ... FF, ... 01 and so on...
The receiving thread only waits to find a small chunk of this data before the thread takes the timestamp and increments the token.
After the master test computer receives all 10,000 blocks, the test disconnects the links.
Results Interpretation
The test case writes the pass/fail results to a log file.
The test case fails if:
The SCO connection attempt fails.
The amount of dropped token data packets is more than 30% of the total transferred.
The average throughput of the SCO data transmissions deviates from 64 kbps by more than 2 kbps.
The one-way latency is more than 50 milliseconds (ms) for any single token packet transfer.
The disconnect operation fails.
Parameters
Parameter | Description |
---|---|
ENABLETRACING |
Enables collection of ETW traces. If True, the ETW traces are enabled on the collection. If False, the ETW traces on the collection are turned off. Default value: False |