BluetoothRadio.PrimaryRadio
and/or BluetoothRadio.AllRadios
are non-empty, and that one has SoftwareManufacter
containing value
StonesteetOne
.The first thing to note is that the Stonestreet One Bluetopia stack only allows one application at a time to use the stack; this includes the control-panel application provided by Stonestreet One called BTExplorer.exe. So if we can’t load the stack then check that no other Bluetooth application is active. At start-up we look for the BTExplorer.exe application and kill it if it is running. (Note one can tell whether any application is using Bluetooth from the Windows Mobile UI: if the Wireless Manager Bluetooth state is “On” and the Bluetooth icon at the bottom right of the Today screen does not have a yellow/black exclamation mark overlay).
It is also common on recent devices for the Microsoft stack to be installed alongside the Stonestreet One Bluetopia stack to allow the user a choice of which stack to use. The device I’m using current has a control-panel called “BT Select” (Settings: System) which allows one to select “StoneStreetOne” or “Microsoft” and reboot. However it doesn't actually change what API is useable. The “BT Select” setting only selects which stack’s Control Panels are active. If no other application is using Bluetooth (and when Microsoft is selected if its mode is ‘Off’) then an application can choose which API to use by using it first. 32feet.NET tries to load the Stonestreet One Bluetopia stack first.
This is a summary see below for the details of each classes supported methods and properties.
There is good support for BluetoothRadio, BluetoothDeviceInfo (including RSSI), and device discovery including ‘live’ discovery. There is preliminary support for BluetoothListener, see below. BluetoothSecurity is also well supported both PairRequest and RemoveDevice, and also SetPin both there and on BluetoothClient. There is only good support for SDP querying.
BluetoothClient.Connect is supported for all RFCOMM/SPP connections. BluetoothClient.Authenticate and Encrypt are not supported (haven't looked), and as noted above we do support SetPin.
Data transfer (for BluetoothClient and BluetoothListener) seems fine.
The current BluetoothListener support is preliminary. It isn't clear from the API how to support multiple connections to the same port number, or even whether multiple concurrent connections to the same port number are supportable. There is however good support for SDP records, including custom records.
ObexWebRequest and ObexListener both work — listener operation of course limited as above.
To check if Stonestreet One Bluetopia support is being loaded, check whether BluetoothRadio.PrimaryRadio or AllRadios returns a radio and whether it's SoftwareManufacturer is an enum value of StonestreetOne.
Please let me have any feedback.
It is not possible to use the Stonestreet One Bluetopia stack along with any other stack. As noted above is not even possible for two applications to use the stack together.
The ‘one application at a time limitation’ also means that the radio is apparently powered-down when no application is using the stack (third-party or BTExplorer.exe). It also means that the radio Mode (connectable/discoverable), Name and Class of Device are not persistent — at each stack open, they default respectively to non-connectable/non-discoverable (so can make client connections), a system specific value e.g. “mobile compia” and zero . 32feet.NET currently does not persist any of these values across sessions currently.
Radio settings (e.g. Mode and Name) are also lost when the devices goes into standby even when the stack connection stay open. We aim to look at this sometime in the future storing any settings made by the application and reapplying them on power resume.
To Do:
See the two tables after this one for the values of the properties when the radio is disabled or un-plugged.
Test | Expected | Result | Seen by MSFT support |
---|---|---|---|
ClassOfDevice ClassOfDevice { get; } | No default | 0 | 1A0114 |
IntPtr Handle { get; } | NotSupported | ||
HardwareStatus HardwareStatus { get; } | ✔ | Running | |
BluetoothAddress LocalAddress { get; } | 00:18:9A:11:6D:97 | 00:18:9A:11:6D:97 | |
Manufacturer Manufacturer { get; } | Broadcom Corporation | CambridgeSiliconRadio | CambridgeSiliconRadio |
RadioMode Mode { get; … |
Connectable & Discoverable:
|
Results:
|
Results:
|
set; } |
Results:
|
Results:
|
|
string Name { get; … | alanlt2w | mobile compia | <blank> |
set; } | ✘ NotImplemented | ✘ NotImplemented | |
Manufacturer SoftwareManufacturer { get; } | StonestreetOne | Microsoft | |
HciVersion HciVersion { get; } | v2_0wEdr | v2_0wEdr | |
int HciRevision { get; } | 3454 | 3454 | |
LmpVersion LmpVersion { get; } | v2_0wEdr | v2_0wEdr | |
int LmpSubversion { get; } | 3454 | 3454 |
Property | Value |
---|---|
HardwareStatus | Shutdown |
Mode | PowerOff |
Name | empty (String.Empty) |
Address | empty (BluetoothAddress.None) |
Status of other properties is undefined. |
Not applicable.
Similar to the radio situation, the Bluetopia stack does not persist any device information. So each application would have to store its own device records (e.g. address, name, CoD, LinkKey, etc). 32feet.NET stores known devices within a session but does not persist then across sessions. The stack does not even cache device names within one session, so 32feet.NET has to do so manually.
To Do:
To Do, for created-from:
Test Notes
Test | Result |
---|---|
bool Authenticated { get; } | ✘ |
ClassOfDevice ClassOfDevice { get; } | ✔ |
bool Connected { get; } | ✘ |
BluetoothAddress DeviceAddress { get; } | ✔ |
string DeviceName { get; … | ✔ |
set; } | ✘ NotImplemented |
byte[][] GetServiceRecordsUnparsed(Guid service); | ✘ NotSupported |
ServiceRecord[] GetServiceRecords(Guid service); | ✔ Fully supported |
Guid[] InstalledServices { get; } | ✘ NotSupportedException |
DateTime LastSeen { get; } | ✔ Set by device discovery. |
DateTime LastUsed { get; } | ✘ Returns DateTime.MinValue. |
void Refresh(); | ✔ Resets DeviceName alone. |
bool Remembered { get; } | ✘ |
int Rssi { get; } | ✔ Needs a connection to the remote device to work. |
void SetServiceState(Guid service, bool state, bool throwOnError); |
✘ NotSupportedException |
void SetServiceState(Guid service, bool state); | |
void ShowDialog(); | ✘ NotImplemented |
void Update(); | ✘ NotImplemented |
To Do:
32feet.NET | |
---|---|
BluetoothDeviceInfo[] DiscoverDevices(…) | ✔ All/Rmbd/DiscoOnly/etc |
BluetoothDeviceInfo[] Begin-/EndDiscoverDevices(…) | ✔ |
TimeSpan InquiryLength { get; | ✔ |
int InquiryAccessCode { get; set; } | ✘ NotImplemented |
void Connect(…); | ✔ |
void Begin-/EndConnect(…); | ✔ |
bool Connected { get; } | ✔ See NetworkStream below. |
NetworkStream GetStream(); | ✔ |
Socket Client { get; set; } | ✘ NotSupported |
int Available { get; } | ✔ |
LingerOption LingerState { get; set; } | |
void Dispose(); | ✔ (ToDo disallow/abort device discovery ). |
bool Authenticate { get; … | ✔ returns false |
set; } | ✘ NotSupported |
bool Encrypt { get; … | ✔ returns false |
set; } | ✘ NotSupported |
void SetPin(string pin); | ✔ |
void SetPin(BluetoothAddress device, string pin); | ✔ |
Guid LinkKey { get; } | ✘ NotImplemented |
LinkPolicy LinkPolicy { get; } | ✘ NotImplemented |
string GetRemoteMachineName(BluetoothAddress) | ✔ |
string RemoteMachineName { get; } | ✔ |
BluetoothEndPoint RemoteEndPoint { get; } | ✔ |
See BluetoothDeviceInfo for discovery testing.
To Do:
Test | Result | Error code on MSFT+Win32 |
---|---|---|
Test | Result | Error code on MSFT+Win32 |
---|---|---|
Service with SIG Class Id e.g. Wap | ✔ | |
Service with custom (non-SIG) Class Id (Use BtLsnr->ListSomeCustomUuids) |
✔ | |
Connect to a particular port number | ✔ | |
No Service with given Class Id | ✔ 10049 (PortLookup_Zero) | 10049 AddressNotAvailable |
No Device with given Address — to ClassId | ✔ 10038 @ 6seconds | 10060 TimedOut |
No Device with given Address — to Port | ✔ 10060 @ 6seconds (PortCONNECT_ERR) "0x1=ConnectionTimeout" | 10060 TimedOut |
Service doesn't have RFCOMM pdl | ✔ 10064 (PortLookup_NoneRfcomm) | 10064 HostDown |
Already a connection to the RFCOMM port/channel | ✔ 10048 (-70 = RFCOMM_UNABLE_TO_ADD_CONNECTION) | 10048 AddressAlreadyInUse |
Connect to 0x1101 SerialPort | ✔ | |
Connect to 0x1105 OBEX Push | ✔ (ObexWebRequest successful also) | |
Connect to 0x1106 OBEX FTP | ✔ (ObexWebRequest successful also) | |
Connect to server that has "require authentication" (and Pin etc not set) |
10061 PortCONNECT_ERR Log shows "0x2=ConnectionRefused" Slow & see auth events! Wc+XP: 52 seconds TODO Send Negative AuthEvent responses when no records to speed this up. |
To Do:
Test | Result |
---|---|
SendOneAtATime | ✔ |
SendLots (Write an amount bigger than the buffer size.) | ✔ |
ReceiveLots | ✔ (Took 2min15secs seconds to complete (UI updating...)) |
SendOneByteAtImmediatelyClose | ✔ (Done when connection opened as client and as server) |
Read when buffer empty, and send, see receive. | ✔ |
Connection closed automatically on app exit | ✔ |
Connection closed automatically on app crash GPF/etc | ✔ Killed by remote process viewer (and "No" to quit prompt). The close was seen belatedly by the peer — presumable after Link Supervisory. |
Connection closed automatically on Radio Off | N/A: Remember that RadioOff on this platform means Non-Connectable-Mode, and not radio-powered-down… |
Read after remote close when there is still data in the buffer. | ✔ |
Pending Read through remote close when the remote sends data immediately before close. | ✔ |
Finalizable? Drop references to client and stream and check that the connection closes. | ✔ |
✔ |
Supported, but can only accept one connection. It isn't clear from the API how to support multiple connections to the same port number, or even whether multiple concurrent connections to the same port number are supportable. The second and subsequent Accepts will fail. There is however good support for SDP records, including custom records.
Test | Result |
---|---|
void Start(int backlog); | |
void Start(); | ✔ |
void Stop(); | ✔ |
bool Pending(); | ✔ |
BluetoothEndPoint LocalEndPoint { get; } | ✔ Port is set, address (and service) are not |
Socket Server { get; } | ✘ |
BluetoothClient AcceptBluetoothClient(); | ✔ |
BluetoothClient Begin-/EndAcceptBluetoothClient(…); | ✔ |
Socket AcceptSocket(); | ✘ |
Socket Begin-/EndAcceptSocket(…); | ✘ |
ServiceClass ServiceClass { get; | ✔ |
set; } | ✔ |
string ServiceName { get; set; } | ✔ |
ServiceRecord ServiceRecord { get; } | ✔ |
bool Authenticate { get; set; } | ✘ |
bool Encrypt { get; set; } | ✘ |
void SetPin(BluetoothAddress device, string pin); | ✘ |
The exception that occurs when running the Chat2Device sample and a client connects. This exception occurs because the system does not allow the second listen operation.
InTheHand.Net.Bluetooth.StonestreetOne.BluetopiaSocketException was unhandled Message="An operation was attempted on something that is not a socket (Bluetopia: RFCOMM_ADDING_SERVER_INFORMATION (-68))." ErrorCode=10038 NativeErrorCode=10038 BluetopiaError="RFCOMM_ADDING_SERVER_INFORMATION" BluetopiaErrorCode=-68 StackTrace: at InTheHand.Net.Bluetooth.StonestreetOne.BluetopiaUtils.Throw(BluetopiaError ret, String descr) at InTheHand.Net.Bluetooth.StonestreetOne.BluetopiaUtils.CheckAndThrow(BluetopiaError ret, String descr) at InTheHand.Net.Bluetooth.StonestreetOne.BluetopiaRfcommStream.DoOpenServer(Int32 scn) at InTheHand.Net.Bluetooth.Factory.CommonRfcommStream.BeginAccept(BluetoothEndPoint bep, String serviceName, AsyncCallback asyncCallback, Object state) at InTheHand.Net.Bluetooth.Factory.CommonBluetoothListener._StartOneNewListenerPort_inLock() at InTheHand.Net.Bluetooth.Factory.CommonBluetoothListener.StartEnoughNewListenerPort_inLock() at InTheHand.Net.Bluetooth.Factory.CommonBluetoothListener.PortAcceptCallback(IAsyncResult ar) at InTheHand.Net.AsyncResultNoResult.CallbackRunner(Object state) at System.Threading.ThreadPool.WorkItem.doWork(Object o) at System.Threading.Timer.ring()
To Do:
Test | Expected | Result |
---|---|---|
PairRequest(BluetoothAddress device, string pin) | ✔ See below. | |
RemoveDevice(BluetoothAddress device) | ✘ NotImplemented | |
SetPin(BluetoothAddress device, string pin) | ✔ (Also used by BtCli.SetPin) | |
RevokePin(BluetoothAddress device) | ✔ (Also used by BtCli.SetPin) | |
BluetoothAddress GetPinRequest() | ✘ NotImplemented. | |
RefusePinRequest(BluetoothAddress device) | ✘ NotImplemented. | |
SetLinkKey(BluetoothAddress a, Guid linkkey) | ✘ NotImplemented. |
Test | Expected | Result | Internals |
---|---|---|---|
Success | True | True (peer: MSFT+Win32) |
Authenticate_Callback: type: LinkKeyRequest, addr: 008098244CA4 Sending Auth Response: -ve (no linkkey) Authenticate_Callback: type: PINCodeRequest, addr: 008098244CA4 Sending Auth Response: PinCode len: 6 [00-00-00-38-38-33-31-32-30-00-00-00-00-00-00-00-00-00-00]withPad Authenticate_Callback: type: LinkKeyCreation, addr: 008098244CA4 Authenticate_Callback: type: AuthenticationStatus, addr: 008098244CA4 Status: NO_ERROR) |
Local Radio PowerOff | Unknown (True) | True (peer: iPhone) |
Authenticate_Callback: type: LinkKeyRequest, addr: 0026B09C49CE Sending Auth Response: -ve (no linkkey) Authenticate_Callback: type: PINCodeRequest, addr: 0026B09C49CE Sending Auth Response: PinCode len: 6 [38-38-33-31-32-30-00-00-00-00-00-00-00-00-00-00] Authenticate_Callback: type: LinkKeyCreation, addr: 0026B09C49CE Authenticate_Callback: type: AuthenticationStatus, addr: 0026B09C49CE Status: NO_ERROR) |
Device not in range | False | False (12 seconds) |
Authenticate_Callback: type: AuthenticationStatus, addr: 002233445566 Status: PAGE_TIMEOUT) |
Fails with my WM6 Benq phone | (True) |
False – Do not see a prompt on the phone. |
Authenticate_Callback: type: LinkKeyRequest, addr: 001702005073 Have Pin: True, LinkKey: False Sending Auth Response: -ve (no linkkey) Authenticate_Callback: type: PINCodeRequest, addr: 001702005073 Have Pin: True, LinkKey: False Sending Auth Response: PinCode len: 6 [00-00-00-38-38-33-31-32-30-00-00-00-00-00-00-00-00-00-00]withPad Authenticate_Callback: type: AuthenticationStatus, addr: 001702005073 Status: AUTHENTICATION_FAILURE) Have Pin: True, LinkKey: False |
Peer slightly dead: Widcomm+XP | False | False (47 seconds) |
Authenticate_Callback: type: LinkKeyRequest, addr: 000A3A6865BB Sending Auth Response: -ve (no linkkey) Authenticate_Callback: type: PINCodeRequest, addr: 000A3A6865BB Sending Auth Response: PinCode len: 6 [38-38-33-31-32-30-00-00-00-00-00-00-00-00-00-00] Authenticate_Callback: type: AuthenticationStatus, addr: 000A3A6865BB Status: LMP_RESPONSE_TIMEOUT) |
Wrong passcode on peer | False | False (iPhone) |
Authenticate_Callback: type: LinkKeyRequest, addr: 0026B09C49CE Sending Auth Response: -ve (no linkkey) Authenticate_Callback: type: PINCodeRequest, addr: 0026B09C49CE Sending Auth Response: PinCode len: 6 [00-00-00-38-38-33-31-32-30-00-00-00-00-00-00-00-00-00-00]withPad Authenticate_Callback: type: AuthenticationStatus, addr: 0026B09C49CE Status: AUTHENTICATION_FAILURE) |
Test | Expected | Result | Internals |
---|---|---|---|
Connecting to device needing authentication — no PIN etc |
Fail to connect |
SUCCESS 30seconds (SocketException 10038(!TODO!)) |
BeginFillInPortState Authenticate_Callback: type: LinkKeyRequest, addr: 0007809CC2E9 No Pin or LinkKey for that device, exiting. HandleSDP_Response_Callback2: ConnectionError=0x1 |
Connecting to device needing authentication — where NOT previously connected/auth'd — with BtCli.SetPin(p) |
Success connect | SUCCESS |
BeginFillInPortState Authenticate_Callback: type: LinkKeyRequest, addr: 0007809CC2E9 Have Pin: True, LinkKey: False Sending Auth Response: -ve (no linkkey) Authenticate_Callback: type: PINCodeRequest, addr: 0007809CC2E9 Have Pin: True, LinkKey: False Sending Auth Response: PinCode len: 4 [33-30-39-39-00-00-00-00-00-00-00-00-00-00-00-00] Authenticate_Callback: type: LinkKeyCreation, addr: 0007809CC2E9 Have Pin: True, LinkKey: False HandleSDP_Response_Callback2: ServiceSearchAttributeResponse=0x5 FillInPort_ServiceDiscoveryCallback, got port: 1 Authenticate_Callback: type: LinkKeyRequest, addr: 0007809CC2E9 Have Pin: True, LinkKey: True Sending Auth Response: LinkKey) len: 16 HandleSPP_Event_Callback2: Port_Open_Confirmation=0x1 EventConnectConf: Success=0x0 CONNECTED DEBUGID; m_state: New; m_arConnect (set), IsCompleted: False. |
Connecting to device needing authentication — where NOT previously connected/auth'd — with BtCli.SetPin(a,p) |
Success connect | SUCCESS |
BeginFillInPortState Authenticate_Callback: type: LinkKeyRequest, addr: 0007809CC2E9 Have Pin: True, LinkKey: False Sending Auth Response: -ve (no linkkey) Authenticate_Callback: type: PINCodeRequest, addr: 0007809CC2E9 Have Pin: True, LinkKey: False Sending Auth Response: PinCode len: 4 [33-30-39-39-00-00-00-00-00-00-00-00-00-00-00-00] Authenticate_Callback: type: LinkKeyCreation, addr: 0007809CC2E9 Have Pin: True, LinkKey: False The thread 0x45fc9636 has exited with code 0 (0x0). HandleSDP_Response_Callback2: ServiceSearchAttributeResponse=0x5 BuildRecordList Number_Service_Records: 1 DoEndServiceDiscovery, got 1 records. FillInPort_ServiceDiscoveryCallback, got port: 1 Authenticate_Callback: type: LinkKeyRequest, addr: 0007809CC2E9 Have Pin: True, LinkKey: True Sending Auth Response: LinkKey) len: 16 HandleSPP_Event_Callback2: Port_Open_Confirmation=0x1 EventConnectConf: Success=0x0 CONNECTED DEBUGID; m_state: New; m_arConnect (set), IsCompleted: False. |
Connecting to device needing authentication — where were previously connected/auth'd — with BtCli.SetPin. |
Success connect | SUCCESS |
BeginFillInPortState Doing address-less PIN now. Authenticate_Callback: type: LinkKeyRequest, addr: 0007809CC2E9 Have Pin: True, LinkKey: True Sending Auth Response: LinkKey) len: 16 HandleSDP_Response_Callback2: ServiceSearchAttributeResponse=0x5 BuildRecordList Number_Service_Records: 1 DoEndServiceDiscovery, got 1 records. FillInPort_ServiceDiscoveryCallback, got port: 1 Authenticate_Callback: type: LinkKeyRequest, addr: 0007809CC2E9 Have Pin: True, LinkKey: True Sending Auth Response: LinkKey) len: 16 HandleSPP_Event_Callback2: Port_Open_Confirmation=0x1 EventConnectConf: Success=0x0 CONNECTED DEBUGID; m_state: New; m_arConnect (set), IsCompleted: False. |
Connecting to device needing authentication — where were previously connected/auth'd — with NO BtCli.SetPin. |
Success connect | SUCCESS |
BeginFillInPortState Authenticate_Callback: type: LinkKeyRequest, addr: 0007809CC2E9 Have Pin: True, LinkKey: True Sending Auth Response: LinkKey) len: 16 HandleSDP_Response_Callback2: ServiceSearchAttributeResponse=0x5 BuildRecordList Number_Service_Records: 1 DoEndServiceDiscovery, got 1 records. FillInPort_ServiceDiscoveryCallback, got port: 1 Authenticate_Callback: type: LinkKeyRequest, addr: 0007809CC2E9 Have Pin: True, LinkKey: True Sending Auth Response: LinkKey) len: 16 HandleSPP_Event_Callback2: Port_Open_Confirmation=0x1 EventConnectConf: Success=0x0 CONNECTED DEBUGID; m_state: New; m_arConnect (set), IsCompleted: False. |
Connecting to Port number to device needing authentication — where were not previously connected/auth'd — with BtCli.SetPin. |
Success connect | SUCCESS |
BeginFillInPortState BeginFillInPort, has port -> Completed Syncronously Authenticate_Callback: type: PINCodeRequest, addr: 001583B41BFA Have Pin: True, LinkKey: False Sending Auth Response: PinCode len: 6 [38-38-33-31-32-30-00-00-00-00-00-00-00-00-00-00] Authenticate_Callback: type: LinkKeyCreation, addr: 001583B41BFA Have Pin: True, LinkKey: False HandleSPP_Event_Callback2: Port_Open_Confirmation=0x1 EventConnectConf: Success=0x0 CONNECTED DEBUGID; m_state: New; m_arConnect (set), IsCompleted: False. HandleSPP_Event_Callback2: Port_Status_Indication=0x3 Revoking address-less PIN now. RevokePin<-RevokeAddressLessPin: True GAP_Remote_Name_Event_Data: status: NO_ERROR, addr: 001583B41BFA name: ALANPC1 DeviceMenuTesting stopping DEBUG at 22/04/11 14:11:16 |
Test | Expected | Result | Internals |
---|---|---|---|
PairRequest first time | Success | SUCCESS |
Authenticate_Callback: type: LinkKeyRequest, addr: 0007809CC2E9 Have Pin: True, LinkKey: False Sending Auth Response: -ve (no linkkey) Authenticate_Callback: type: PINCodeRequest, addr: 0007809CC2E9 Have Pin: True, LinkKey: False Sending Auth Response: PinCode len: 4 [33-30-39-39-00-00-00-00-00-00-00-00-00-00-00-00] Authenticate_Callback: type: LinkKeyCreation, addr: 0007809CC2E9 Have Pin: True, LinkKey: False Authenticate_Callback: type: AuthenticationStatus, addr: 0007809CC2E9 Status: NO_ERROR) Have Pin: True, LinkKey: False |
PairRequest second time | Success, and see it NOT send the stored-LinkKey | SUCCESS |
Authenticate_Callback: type: LinkKeyRequest, addr: 0007809CC2E9 Have Pin: True, LinkKey: False Sending Auth Response: -ve (no linkkey) Authenticate_Callback: type: PINCodeRequest, addr: 0007809CC2E9 Have Pin: True, LinkKey: False Sending Auth Response: PinCode len: 4 [33-30-39-39-00-00-00-00-00-00-00-00-00-00-00-00] The thread 0x687261e has exited with code 0 (0x0). Authenticate_Callback: type: LinkKeyCreation, addr: 0007809CC2E9 Have Pin: True, LinkKey: False Authenticate_Callback: type: AuthenticationStatus, addr: 0007809CC2E9 Status: NO_ERROR) Have Pin: True, LinkKey: False |
PairRequest third time, wrong PIN | Fail, and see it NOT send the stored-LinkKey | SUCCESS |
Authenticate_Callback: type: LinkKeyRequest, addr: 0007809CC2E9 Have Pin: True, LinkKey: False Sending Auth Response: -ve (no linkkey) Authenticate_Callback: type: PINCodeRequest, addr: 0007809CC2E9 Have Pin: True, LinkKey: False Sending Auth Response: PinCode len: 7 [38-38-33-31-32-30-20-00-00-00-00-00-00-00-00-00] Authenticate_Callback: type: AuthenticationStatus, addr: 0007809CC2E9 Status: AUTHENTICATION_FAILURE) Have Pin: True, LinkKey: False |
Supported.
Test | Result |
---|---|
To non-existent device | SUCCESS: WebEx=>SockEx (SDP) |
To fsquirt.exe on XP | SUCCESS (sent 70029 bytes) |
To Widcomm+XP | SUCCESS (sent 40034 bytes) |
GET, To Widcomm+XP | SUCCESS (received 84 bytes) |
Partially supported — BluetoothListener can accept only one connection.
Test | Result |
---|---|
From fMT on MSFT+XP | SUCCESS |
From fsquirt.exe on XP | SUCCESS (sent 1840 bytes) |
BTW before running: no SDP record. When running:
AttrId: 0x0000 -- ServiceRecordHandle UInt32: 0x10000 AttrId: 0x0001 -- ServiceClassIdList ElementSequence Uuid128: 00001105-0000-1000-8000-00805f9b34fb -- ObexObjectPush AttrId: 0x0002 -- ServiceRecordState UInt32: 0x2 AttrId: 0x0004 -- ProtocolDescriptorList ElementSequence ElementSequence Uuid16: 0x100 -- L2CapProtocol ElementSequence Uuid16: 0x3 -- RFCommProtocol UInt8: 0xB ElementSequence Uuid16: 0x8 -- ObexProtocol ( ( L2Cap ), ( Rfcomm, ChannelNumber=11 ), ( Obex ) ) AttrId: 0x0303 -- SupportedFormatsList ElementSequence UInt8: 0xFF
On my M3Sky I see start-up parameters:
Calling BSC_Initialize with:HCI_DriverInformation/COMM (COMM, 32), 'COM' 5, BCSP,
921600; 921600, 500.
That's COM5, BCSP wire protocol, at 921600bps, with initialisation parameters: 921600bps and timeout 500ms. "(COMM, 32)" is the data struct type and size. We don't have support for the USB parameters.
Our previous format was:
Calling BSC_Initialize with:HCI_DriverInformation__HCI_COMMDriverInformation COMM,
32, 5, 921600, BCSP, 500, 921600, 'COM'.
Within a session BluetopiaFactory stores a list (hashtable) of Device Address and Name information. Similarly BluetopiaSecurity maintains XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
- end of document -