mirror of
https://github.com/reactos/reactos.git
synced 2024-06-01 02:01:57 +00:00
[FBTUSB]
- Import the FreeBT USB generic bluetooth driver (abandoned) - Some slight modifications to make it build - WMI is currently commented out because our WMI headers are lacking (particularly wmistr.h) - Not building by default for now svn path=/trunk/; revision=47761
This commit is contained in:
parent
f073c977ef
commit
37323a84c9
7
reactos/drivers/bluetooth/directory.rbuild
Normal file
7
reactos/drivers/bluetooth/directory.rbuild
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0"?>
|
||||
<!DOCTYPE group SYSTEM "../../tools/rbuild/project.dtd">
|
||||
<group xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
<!--directory name="fbtusb">
|
||||
<xi:include href="fbtusb/fbtusb.rbuild" />
|
||||
</directory-->
|
||||
</group>
|
1198
reactos/drivers/bluetooth/fbtusb/fbtdev.c
Executable file
1198
reactos/drivers/bluetooth/fbtusb/fbtdev.c
Executable file
File diff suppressed because it is too large
Load diff
1910
reactos/drivers/bluetooth/fbtusb/fbtpnp.c
Executable file
1910
reactos/drivers/bluetooth/fbtusb/fbtpnp.c
Executable file
File diff suppressed because it is too large
Load diff
1062
reactos/drivers/bluetooth/fbtusb/fbtpwr.c
Executable file
1062
reactos/drivers/bluetooth/fbtusb/fbtpwr.c
Executable file
File diff suppressed because it is too large
Load diff
543
reactos/drivers/bluetooth/fbtusb/fbtrwr.c
Executable file
543
reactos/drivers/bluetooth/fbtusb/fbtrwr.c
Executable file
|
@ -0,0 +1,543 @@
|
|||
// Copyright (c) 2004, Antony C. Roberts
|
||||
|
||||
// Use of this file is subject to the terms
|
||||
// described in the LICENSE.TXT file that
|
||||
// accompanies this file.
|
||||
//
|
||||
// Your use of this file indicates your
|
||||
// acceptance of the terms described in
|
||||
// LICENSE.TXT.
|
||||
//
|
||||
// http://www.freebt.net
|
||||
|
||||
#include "fbtusb.h"
|
||||
#include "fbtpnp.h"
|
||||
#include "fbtpwr.h"
|
||||
#include "fbtdev.h"
|
||||
#include "fbtrwr.h"
|
||||
#include "fbtwmi.h"
|
||||
|
||||
#include "fbtusr.h"
|
||||
|
||||
// Read/Write handler
|
||||
NTSTATUS FreeBT_DispatchRead(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
|
||||
{
|
||||
PMDL mdl;
|
||||
PURB urb;
|
||||
ULONG totalLength;
|
||||
ULONG stageLength;
|
||||
NTSTATUS ntStatus;
|
||||
ULONG_PTR virtualAddress;
|
||||
PFILE_OBJECT fileObject;
|
||||
PDEVICE_EXTENSION deviceExtension;
|
||||
PIO_STACK_LOCATION irpStack;
|
||||
PIO_STACK_LOCATION nextStack;
|
||||
PFREEBT_RW_CONTEXT rwContext;
|
||||
ULONG maxLength=0;
|
||||
|
||||
urb = NULL;
|
||||
mdl = NULL;
|
||||
rwContext = NULL;
|
||||
totalLength = 0;
|
||||
irpStack = IoGetCurrentIrpStackLocation(Irp);
|
||||
fileObject = irpStack->FileObject;
|
||||
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead: Entered\n"));
|
||||
|
||||
if (deviceExtension->DeviceState != Working)
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_DispatchRead: Invalid device state\n"));
|
||||
ntStatus = STATUS_INVALID_DEVICE_STATE;
|
||||
goto FreeBT_DispatchRead_Exit;
|
||||
|
||||
}
|
||||
|
||||
// Make sure that any selective suspend request has been completed.
|
||||
if (deviceExtension->SSEnable)
|
||||
{
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead: Waiting on the IdleReqPendEvent\n"));
|
||||
KeWaitForSingleObject(&deviceExtension->NoIdleReqPendEvent,
|
||||
Executive,
|
||||
KernelMode,
|
||||
FALSE,
|
||||
NULL);
|
||||
|
||||
}
|
||||
|
||||
rwContext = (PFREEBT_RW_CONTEXT) ExAllocatePool(NonPagedPool, sizeof(FREEBT_RW_CONTEXT));
|
||||
if (rwContext == NULL)
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_DispatchRead: Failed to alloc mem for rwContext\n"));
|
||||
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
|
||||
goto FreeBT_DispatchRead_Exit;
|
||||
|
||||
}
|
||||
|
||||
if (Irp->MdlAddress)
|
||||
{
|
||||
totalLength = MmGetMdlByteCount(Irp->MdlAddress);
|
||||
|
||||
}
|
||||
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_DispatchRead: Transfer data length = %d\n", totalLength));
|
||||
if (totalLength == 0)
|
||||
{
|
||||
ntStatus = STATUS_SUCCESS;
|
||||
ExFreePool(rwContext);
|
||||
goto FreeBT_DispatchRead_Exit;
|
||||
|
||||
}
|
||||
|
||||
virtualAddress = (ULONG_PTR) MmGetMdlVirtualAddress(Irp->MdlAddress);
|
||||
if (totalLength > deviceExtension->DataInPipe.MaximumPacketSize)
|
||||
{
|
||||
stageLength = deviceExtension->DataInPipe.MaximumPacketSize;
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
stageLength = totalLength;
|
||||
|
||||
}
|
||||
|
||||
mdl = IoAllocateMdl((PVOID) virtualAddress, totalLength, FALSE, FALSE, NULL);
|
||||
if (mdl == NULL)
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_DispatchRead: Failed to alloc mem for mdl\n"));
|
||||
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
|
||||
ExFreePool(rwContext);
|
||||
goto FreeBT_DispatchRead_Exit;
|
||||
|
||||
}
|
||||
|
||||
// map the portion of user-buffer described by an mdl to another mdl
|
||||
IoBuildPartialMdl(Irp->MdlAddress, mdl, (PVOID) virtualAddress, stageLength);
|
||||
urb = (PURB) ExAllocatePool(NonPagedPool, sizeof(struct _URB_BULK_OR_INTERRUPT_TRANSFER));
|
||||
if (urb == NULL)
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_DispatchRead: Failed to alloc mem for urb\n"));
|
||||
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
|
||||
ExFreePool(rwContext);
|
||||
IoFreeMdl(mdl);
|
||||
goto FreeBT_DispatchRead_Exit;
|
||||
|
||||
}
|
||||
|
||||
UsbBuildInterruptOrBulkTransferRequest(
|
||||
urb,
|
||||
sizeof(struct _URB_BULK_OR_INTERRUPT_TRANSFER),
|
||||
deviceExtension->DataInPipe.PipeHandle,
|
||||
NULL,
|
||||
mdl,
|
||||
stageLength,
|
||||
USBD_SHORT_TRANSFER_OK | USBD_TRANSFER_DIRECTION_IN,
|
||||
NULL);
|
||||
|
||||
// set FREEBT_RW_CONTEXT parameters.
|
||||
rwContext->Urb = urb;
|
||||
rwContext->Mdl = mdl;
|
||||
rwContext->Length = totalLength - stageLength;
|
||||
rwContext->Numxfer = 0;
|
||||
rwContext->VirtualAddress = virtualAddress + stageLength;
|
||||
|
||||
// use the original read/write irp as an internal device control irp
|
||||
nextStack = IoGetNextIrpStackLocation(Irp);
|
||||
nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
|
||||
nextStack->Parameters.Others.Argument1 = (PVOID) urb;
|
||||
nextStack->Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_USB_SUBMIT_URB;
|
||||
IoSetCompletionRoutine(Irp,
|
||||
(PIO_COMPLETION_ROUTINE)FreeBT_ReadCompletion,
|
||||
rwContext,
|
||||
TRUE,
|
||||
TRUE,
|
||||
TRUE);
|
||||
|
||||
// We return STATUS_PENDING; call IoMarkIrpPending.
|
||||
IoMarkIrpPending(Irp);
|
||||
|
||||
ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject, Irp);
|
||||
if (!NT_SUCCESS(ntStatus))
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_DispatchRead: IoCallDriver fails with status %X\n", ntStatus));
|
||||
|
||||
// if the device was yanked out, then the pipeInformation
|
||||
// field is invalid.
|
||||
// similarly if the request was cancelled, then we need not
|
||||
// invoked reset pipe/device.
|
||||
if((ntStatus != STATUS_CANCELLED) && (ntStatus != STATUS_DEVICE_NOT_CONNECTED))
|
||||
{
|
||||
ntStatus = FreeBT_ResetPipe(DeviceObject, deviceExtension->DataInPipe.PipeHandle);
|
||||
if(!NT_SUCCESS(ntStatus))
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_DispatchRead: FreeBT_ResetPipe failed\n"));
|
||||
ntStatus = FreeBT_ResetDevice(DeviceObject);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead: ntStatus is STATUS_CANCELLED or STATUS_DEVICE_NOT_CONNECTED\n"));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead::"));
|
||||
FreeBT_IoIncrement(deviceExtension);
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead: URB sent to lower driver, IRP is pending\n"));
|
||||
|
||||
// we return STATUS_PENDING and not the status returned by the lower layer.
|
||||
return STATUS_PENDING;
|
||||
|
||||
FreeBT_DispatchRead_Exit:
|
||||
Irp->IoStatus.Status = ntStatus;
|
||||
Irp->IoStatus.Information = 0;
|
||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead: Leaving\n"));
|
||||
|
||||
return ntStatus;
|
||||
|
||||
}
|
||||
|
||||
NTSTATUS FreeBT_ReadCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
|
||||
{
|
||||
ULONG stageLength;
|
||||
NTSTATUS ntStatus;
|
||||
PIO_STACK_LOCATION nextStack;
|
||||
PFREEBT_RW_CONTEXT rwContext;
|
||||
PDEVICE_EXTENSION deviceExtension;
|
||||
|
||||
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
|
||||
rwContext = (PFREEBT_RW_CONTEXT) Context;
|
||||
ntStatus = Irp->IoStatus.Status;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_ReadCompletion: Entered\n"));
|
||||
|
||||
if (NT_SUCCESS(ntStatus))
|
||||
{
|
||||
Irp->IoStatus.Information = rwContext->Urb->UrbBulkOrInterruptTransfer.TransferBufferLength;
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
Irp->IoStatus.Information = 0;
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_ReadCompletion: - failed with status = %X\n", ntStatus));
|
||||
|
||||
}
|
||||
|
||||
if (rwContext)
|
||||
{
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_ReadCompletion: ::"));
|
||||
FreeBT_IoDecrement(deviceExtension);
|
||||
|
||||
ExFreePool(rwContext->Urb);
|
||||
IoFreeMdl(rwContext->Mdl);
|
||||
ExFreePool(rwContext);
|
||||
|
||||
}
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_ReadCompletion: Leaving\n"));
|
||||
|
||||
return ntStatus;
|
||||
|
||||
}
|
||||
|
||||
// Read/Write handler
|
||||
NTSTATUS FreeBT_DispatchWrite(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
|
||||
{
|
||||
PMDL mdl;
|
||||
PURB urb;
|
||||
ULONG totalLength;
|
||||
ULONG stageLength;
|
||||
NTSTATUS ntStatus;
|
||||
ULONG_PTR virtualAddress;
|
||||
PFILE_OBJECT fileObject;
|
||||
PDEVICE_EXTENSION deviceExtension;
|
||||
PIO_STACK_LOCATION irpStack;
|
||||
PIO_STACK_LOCATION nextStack;
|
||||
PFREEBT_RW_CONTEXT rwContext;
|
||||
ULONG maxLength=0;
|
||||
|
||||
urb = NULL;
|
||||
mdl = NULL;
|
||||
rwContext = NULL;
|
||||
totalLength = 0;
|
||||
irpStack = IoGetCurrentIrpStackLocation(Irp);
|
||||
fileObject = irpStack->FileObject;
|
||||
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchWrite: Entered\n"));
|
||||
|
||||
if (deviceExtension->DeviceState != Working)
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Invalid device state\n"));
|
||||
ntStatus = STATUS_INVALID_DEVICE_STATE;
|
||||
goto FreeBT_DispatchWrite_Exit;
|
||||
|
||||
}
|
||||
|
||||
// Make sure that any selective suspend request has been completed.
|
||||
if (deviceExtension->SSEnable)
|
||||
{
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_WriteDispatch: Waiting on the IdleReqPendEvent\n"));
|
||||
KeWaitForSingleObject(&deviceExtension->NoIdleReqPendEvent,
|
||||
Executive,
|
||||
KernelMode,
|
||||
FALSE,
|
||||
NULL);
|
||||
|
||||
}
|
||||
|
||||
rwContext = (PFREEBT_RW_CONTEXT) ExAllocatePool(NonPagedPool, sizeof(FREEBT_RW_CONTEXT));
|
||||
if (rwContext == NULL)
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: Failed to alloc mem for rwContext\n"));
|
||||
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
|
||||
goto FreeBT_DispatchWrite_Exit;
|
||||
|
||||
}
|
||||
|
||||
if (Irp->MdlAddress)
|
||||
{
|
||||
totalLength = MmGetMdlByteCount(Irp->MdlAddress);
|
||||
|
||||
}
|
||||
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Transfer data length = %d\n", totalLength));
|
||||
if (totalLength>FBT_HCI_DATA_MAX_SIZE)
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Buffer exceeds maximum packet length (%d), failing IRP\n", FBT_HCI_DATA_MAX_SIZE));
|
||||
ntStatus = STATUS_INVALID_BUFFER_SIZE;
|
||||
ExFreePool(rwContext);
|
||||
goto FreeBT_DispatchWrite_Exit;
|
||||
|
||||
}
|
||||
|
||||
if (totalLength<FBT_HCI_DATA_MIN_SIZE)
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Zero length buffer, completing IRP\n"));
|
||||
ntStatus = STATUS_BUFFER_TOO_SMALL;
|
||||
ExFreePool(rwContext);
|
||||
goto FreeBT_DispatchWrite_Exit;
|
||||
|
||||
}
|
||||
|
||||
virtualAddress = (ULONG_PTR) MmGetMdlVirtualAddress(Irp->MdlAddress);
|
||||
if (totalLength > deviceExtension->DataOutPipe.MaximumPacketSize)
|
||||
{
|
||||
stageLength = deviceExtension->DataOutPipe.MaximumPacketSize;
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
stageLength = totalLength;
|
||||
|
||||
}
|
||||
|
||||
mdl = IoAllocateMdl((PVOID) virtualAddress, totalLength, FALSE, FALSE, NULL);
|
||||
if (mdl == NULL)
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Failed to alloc mem for mdl\n"));
|
||||
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
|
||||
ExFreePool(rwContext);
|
||||
goto FreeBT_DispatchWrite_Exit;
|
||||
|
||||
}
|
||||
|
||||
// map the portion of user-buffer described by an mdl to another mdl
|
||||
IoBuildPartialMdl(Irp->MdlAddress, mdl, (PVOID) virtualAddress, stageLength);
|
||||
urb = (PURB) ExAllocatePool(NonPagedPool, sizeof(struct _URB_BULK_OR_INTERRUPT_TRANSFER));
|
||||
if (urb == NULL)
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Failed to alloc mem for urb\n"));
|
||||
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
|
||||
ExFreePool(rwContext);
|
||||
IoFreeMdl(mdl);
|
||||
goto FreeBT_DispatchWrite_Exit;
|
||||
|
||||
}
|
||||
|
||||
UsbBuildInterruptOrBulkTransferRequest(
|
||||
urb,
|
||||
sizeof(struct _URB_BULK_OR_INTERRUPT_TRANSFER),
|
||||
deviceExtension->DataOutPipe.PipeHandle,
|
||||
NULL,
|
||||
mdl,
|
||||
stageLength,
|
||||
USBD_SHORT_TRANSFER_OK | USBD_TRANSFER_DIRECTION_OUT,
|
||||
NULL);
|
||||
|
||||
// set FREEBT_RW_CONTEXT parameters.
|
||||
rwContext->Urb = urb;
|
||||
rwContext->Mdl = mdl;
|
||||
rwContext->Length = totalLength - stageLength;
|
||||
rwContext->Numxfer = 0;
|
||||
rwContext->VirtualAddress = virtualAddress + stageLength;
|
||||
|
||||
// use the original read/write irp as an internal device control irp
|
||||
nextStack = IoGetNextIrpStackLocation(Irp);
|
||||
nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
|
||||
nextStack->Parameters.Others.Argument1 = (PVOID) urb;
|
||||
nextStack->Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_USB_SUBMIT_URB;
|
||||
IoSetCompletionRoutine(Irp,
|
||||
(PIO_COMPLETION_ROUTINE)FreeBT_WriteCompletion,
|
||||
rwContext,
|
||||
TRUE,
|
||||
TRUE,
|
||||
TRUE);
|
||||
|
||||
// We return STATUS_PENDING; call IoMarkIrpPending.
|
||||
IoMarkIrpPending(Irp);
|
||||
|
||||
ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject, Irp);
|
||||
if (!NT_SUCCESS(ntStatus))
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: IoCallDriver fails with status %X\n", ntStatus));
|
||||
|
||||
// if the device was yanked out, then the pipeInformation
|
||||
// field is invalid.
|
||||
// similarly if the request was cancelled, then we need not
|
||||
// invoked reset pipe/device.
|
||||
if((ntStatus != STATUS_CANCELLED) && (ntStatus != STATUS_DEVICE_NOT_CONNECTED))
|
||||
{
|
||||
ntStatus = FreeBT_ResetPipe(DeviceObject, deviceExtension->DataOutPipe.PipeHandle);
|
||||
if(!NT_SUCCESS(ntStatus))
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_ResetPipe failed\n"));
|
||||
ntStatus = FreeBT_ResetDevice(DeviceObject);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: ntStatus is STATUS_CANCELLED or STATUS_DEVICE_NOT_CONNECTED\n"));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchWrite::"));
|
||||
FreeBT_IoIncrement(deviceExtension);
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchWrite: URB sent to lower driver, IRP is pending\n"));
|
||||
|
||||
// we return STATUS_PENDING and not the status returned by the lower layer.
|
||||
return STATUS_PENDING;
|
||||
|
||||
FreeBT_DispatchWrite_Exit:
|
||||
Irp->IoStatus.Status = ntStatus;
|
||||
Irp->IoStatus.Information = 0;
|
||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchWrite: Leaving\n"));
|
||||
|
||||
return ntStatus;
|
||||
|
||||
}
|
||||
|
||||
NTSTATUS FreeBT_WriteCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
|
||||
{
|
||||
ULONG stageLength;
|
||||
NTSTATUS ntStatus;
|
||||
PIO_STACK_LOCATION nextStack;
|
||||
PFREEBT_RW_CONTEXT rwContext;
|
||||
PDEVICE_EXTENSION deviceExtension;
|
||||
|
||||
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
|
||||
rwContext = (PFREEBT_RW_CONTEXT) Context;
|
||||
ntStatus = Irp->IoStatus.Status;
|
||||
|
||||
UNREFERENCED_PARAMETER(DeviceObject);
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_WriteCompletion: Entered\n"));
|
||||
|
||||
if (NT_SUCCESS(ntStatus))
|
||||
{
|
||||
if (rwContext)
|
||||
{
|
||||
rwContext->Numxfer += rwContext->Urb->UrbBulkOrInterruptTransfer.TransferBufferLength;
|
||||
if (rwContext->Length)
|
||||
{
|
||||
// More data to transfer
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_WriteCompletion: Initiating next transfer\n"));
|
||||
if (rwContext->Length > deviceExtension->DataOutPipe.MaximumPacketSize)
|
||||
{
|
||||
stageLength = deviceExtension->DataOutPipe.MaximumPacketSize;
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
stageLength = rwContext->Length;
|
||||
|
||||
}
|
||||
|
||||
IoBuildPartialMdl(Irp->MdlAddress, rwContext->Mdl, (PVOID) rwContext->VirtualAddress, stageLength);
|
||||
|
||||
// reinitialize the urb
|
||||
rwContext->Urb->UrbBulkOrInterruptTransfer.TransferBufferLength = stageLength;
|
||||
rwContext->VirtualAddress += stageLength;
|
||||
rwContext->Length -= stageLength;
|
||||
|
||||
nextStack = IoGetNextIrpStackLocation(Irp);
|
||||
nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
|
||||
nextStack->Parameters.Others.Argument1 = rwContext->Urb;
|
||||
nextStack->Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_USB_SUBMIT_URB;
|
||||
|
||||
IoSetCompletionRoutine(Irp,
|
||||
FreeBT_ReadCompletion,
|
||||
rwContext,
|
||||
TRUE,
|
||||
TRUE,
|
||||
TRUE);
|
||||
|
||||
IoCallDriver(deviceExtension->TopOfStackDeviceObject, Irp);
|
||||
|
||||
return STATUS_MORE_PROCESSING_REQUIRED;
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
// No more data to transfer
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeNT_WriteCompletion: Write completed, %d bytes written\n", Irp->IoStatus.Information));
|
||||
Irp->IoStatus.Information = rwContext->Numxfer;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeNT_WriteCompletion - failed with status = %X\n", ntStatus));
|
||||
|
||||
}
|
||||
|
||||
if (rwContext)
|
||||
{
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_WriteCompletion: ::"));
|
||||
FreeBT_IoDecrement(deviceExtension);
|
||||
|
||||
ExFreePool(rwContext->Urb);
|
||||
IoFreeMdl(rwContext->Mdl);
|
||||
ExFreePool(rwContext);
|
||||
|
||||
}
|
||||
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_WriteCompletion: Leaving\n"));
|
||||
|
||||
return ntStatus;
|
||||
|
||||
}
|
||||
|
341
reactos/drivers/bluetooth/fbtusb/fbtusb.c
Executable file
341
reactos/drivers/bluetooth/fbtusb/fbtusb.c
Executable file
|
@ -0,0 +1,341 @@
|
|||
// Copyright (c) 2004, Antony C. Roberts
|
||||
|
||||
// Use of this file is subject to the terms
|
||||
// described in the LICENSE.TXT file that
|
||||
// accompanies this file.
|
||||
//
|
||||
// Your use of this file indicates your
|
||||
// acceptance of the terms described in
|
||||
// LICENSE.TXT.
|
||||
//
|
||||
// http://www.freebt.net
|
||||
|
||||
#include "stdio.h"
|
||||
#include "fbtusb.h"
|
||||
#include "fbtpnp.h"
|
||||
#include "fbtpwr.h"
|
||||
#include "fbtdev.h"
|
||||
#include "fbtwmi.h"
|
||||
#include "fbtrwr.h"
|
||||
|
||||
#include "fbtusr.h"
|
||||
|
||||
|
||||
// Globals
|
||||
GLOBALS Globals;
|
||||
ULONG DebugLevel=255;
|
||||
|
||||
// Forward declaration
|
||||
NTSTATUS NTAPI DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING UniRegistryPath );
|
||||
VOID NTAPI FreeBT_DriverUnload(IN PDRIVER_OBJECT DriverObject);
|
||||
NTSTATUS NTAPI FreeBT_AddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject);
|
||||
|
||||
#ifdef PAGE_CODE
|
||||
#ifdef ALLOC_PRAGMA
|
||||
#pragma alloc_text(INIT, DriverEntry)
|
||||
#pragma alloc_text(PAGE, FreeBT_DriverUnload)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
NTSTATUS NTAPI DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING UniRegistryPath)
|
||||
{
|
||||
NTSTATUS ntStatus;
|
||||
PUNICODE_STRING registryPath;
|
||||
|
||||
registryPath = &Globals.FreeBT_RegistryPath;
|
||||
|
||||
registryPath->MaximumLength = UniRegistryPath->Length + sizeof(UNICODE_NULL);
|
||||
registryPath->Length = UniRegistryPath->Length;
|
||||
registryPath->Buffer = (PWSTR) ExAllocatePool(PagedPool, registryPath->MaximumLength);
|
||||
|
||||
if (!registryPath->Buffer)
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: Failed to allocate memory for registryPath\n"));
|
||||
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
|
||||
goto DriverEntry_Exit;
|
||||
|
||||
}
|
||||
|
||||
|
||||
RtlZeroMemory (registryPath->Buffer, registryPath->MaximumLength);
|
||||
RtlMoveMemory (registryPath->Buffer, UniRegistryPath->Buffer, UniRegistryPath->Length);
|
||||
|
||||
ntStatus = STATUS_SUCCESS;
|
||||
|
||||
// Initialize the driver object with this driver's entry points.
|
||||
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = FreeBT_DispatchDevCtrl;
|
||||
DriverObject->MajorFunction[IRP_MJ_POWER] = FreeBT_DispatchPower;
|
||||
DriverObject->MajorFunction[IRP_MJ_PNP] = FreeBT_DispatchPnP;
|
||||
DriverObject->MajorFunction[IRP_MJ_CREATE] = FreeBT_DispatchCreate;
|
||||
DriverObject->MajorFunction[IRP_MJ_CLOSE] = FreeBT_DispatchClose;
|
||||
DriverObject->MajorFunction[IRP_MJ_CLEANUP] = FreeBT_DispatchClean;
|
||||
DriverObject->MajorFunction[IRP_MJ_READ] = FreeBT_DispatchRead;
|
||||
DriverObject->MajorFunction[IRP_MJ_WRITE] = FreeBT_DispatchWrite;
|
||||
#ifdef ENABLE_WMI
|
||||
DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = FreeBT_DispatchSysCtrl;
|
||||
#endif
|
||||
DriverObject->DriverUnload = FreeBT_DriverUnload;
|
||||
DriverObject->DriverExtension->AddDevice = (PDRIVER_ADD_DEVICE) FreeBT_AddDevice;
|
||||
|
||||
DriverEntry_Exit:
|
||||
return ntStatus;
|
||||
|
||||
}
|
||||
|
||||
VOID NTAPI FreeBT_DriverUnload(IN PDRIVER_OBJECT DriverObject)
|
||||
{
|
||||
PUNICODE_STRING registryPath;
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DriverUnload: Entered\n"));
|
||||
|
||||
registryPath = &Globals.FreeBT_RegistryPath;
|
||||
if(registryPath->Buffer)
|
||||
{
|
||||
ExFreePool(registryPath->Buffer);
|
||||
registryPath->Buffer = NULL;
|
||||
|
||||
}
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DriverUnload: Leaving\n"));
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
// AddDevice, called when an instance of our supported hardware is found
|
||||
// Returning anything other than NT_SUCCESS here causes the device to fail
|
||||
// to initialise
|
||||
NTSTATUS NTAPI FreeBT_AddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject)
|
||||
{
|
||||
NTSTATUS ntStatus;
|
||||
PDEVICE_OBJECT deviceObject;
|
||||
PDEVICE_EXTENSION deviceExtension;
|
||||
POWER_STATE state;
|
||||
KIRQL oldIrql;
|
||||
UNICODE_STRING uniDeviceName;
|
||||
WCHAR wszDeviceName[255]={0};
|
||||
UNICODE_STRING uniDosDeviceName;
|
||||
LONG instanceNumber=0;
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_AddDevice: Entered\n"));
|
||||
|
||||
deviceObject = NULL;
|
||||
|
||||
swprintf(wszDeviceName, L"\\Device\\FbtUsb%02d", instanceNumber);
|
||||
RtlInitUnicodeString(&uniDeviceName, wszDeviceName);
|
||||
ntStatus=STATUS_OBJECT_NAME_COLLISION;
|
||||
while (instanceNumber<99 && !NT_SUCCESS(ntStatus))
|
||||
{
|
||||
swprintf(wszDeviceName, L"\\Device\\FbtUsb%02d", instanceNumber);
|
||||
uniDeviceName.Length = wcslen(wszDeviceName) * sizeof(WCHAR);
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: Attempting to create device %ws\n", wszDeviceName));
|
||||
ntStatus = IoCreateDevice(
|
||||
DriverObject, // our driver object
|
||||
sizeof(DEVICE_EXTENSION), // extension size for us
|
||||
&uniDeviceName, // name for this device
|
||||
FILE_DEVICE_UNKNOWN,
|
||||
0, // device characteristics
|
||||
FALSE, // Not exclusive
|
||||
&deviceObject); // Our device object
|
||||
|
||||
if (!NT_SUCCESS(ntStatus))
|
||||
instanceNumber++;
|
||||
|
||||
}
|
||||
|
||||
if (!NT_SUCCESS(ntStatus))
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: Failed to create device object\n"));
|
||||
return ntStatus;
|
||||
|
||||
}
|
||||
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: Created device %ws\n", wszDeviceName));
|
||||
|
||||
deviceExtension = (PDEVICE_EXTENSION) deviceObject->DeviceExtension;
|
||||
deviceExtension->FunctionalDeviceObject = deviceObject;
|
||||
deviceExtension->PhysicalDeviceObject = PhysicalDeviceObject;
|
||||
deviceObject->Flags |= DO_DIRECT_IO;
|
||||
|
||||
swprintf(deviceExtension->wszDosDeviceName, L"\\DosDevices\\FbtUsb%02d", instanceNumber);
|
||||
RtlInitUnicodeString(&uniDosDeviceName, deviceExtension->wszDosDeviceName);
|
||||
ntStatus=IoCreateSymbolicLink(&uniDosDeviceName, &uniDeviceName);
|
||||
if (!NT_SUCCESS(ntStatus))
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: Failed to create symbolic link %ws to %ws, status=0x%08x\n", deviceExtension->wszDosDeviceName, wszDeviceName, ntStatus));
|
||||
IoDeleteDevice(deviceObject);
|
||||
return ntStatus;
|
||||
|
||||
}
|
||||
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: Created symbolic link %ws\n", deviceExtension->wszDosDeviceName));
|
||||
|
||||
KeInitializeSpinLock(&deviceExtension->DevStateLock);
|
||||
|
||||
INITIALIZE_PNP_STATE(deviceExtension);
|
||||
|
||||
deviceExtension->OpenHandleCount = 0;
|
||||
|
||||
// Initialize the selective suspend variables
|
||||
KeInitializeSpinLock(&deviceExtension->IdleReqStateLock);
|
||||
deviceExtension->IdleReqPend = 0;
|
||||
deviceExtension->PendingIdleIrp = NULL;
|
||||
|
||||
// Hold requests until the device is started
|
||||
deviceExtension->QueueState = HoldRequests;
|
||||
|
||||
// Initialize the queue and the queue spin lock
|
||||
InitializeListHead(&deviceExtension->NewRequestsQueue);
|
||||
KeInitializeSpinLock(&deviceExtension->QueueLock);
|
||||
|
||||
// Initialize the remove event to not-signaled.
|
||||
KeInitializeEvent(&deviceExtension->RemoveEvent, SynchronizationEvent, FALSE);
|
||||
|
||||
// Initialize the stop event to signaled.
|
||||
// This event is signaled when the OutstandingIO becomes 1
|
||||
KeInitializeEvent(&deviceExtension->StopEvent, SynchronizationEvent, TRUE);
|
||||
|
||||
// OutstandingIo count biased to 1.
|
||||
// Transition to 0 during remove device means IO is finished.
|
||||
// Transition to 1 means the device can be stopped
|
||||
deviceExtension->OutStandingIO = 1;
|
||||
KeInitializeSpinLock(&deviceExtension->IOCountLock);
|
||||
|
||||
#ifdef ENABLE_WMI
|
||||
// Delegating to WMILIB
|
||||
ntStatus = FreeBT_WmiRegistration(deviceExtension);
|
||||
if (!NT_SUCCESS(ntStatus))
|
||||
{
|
||||
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WmiRegistration failed with %X\n", ntStatus));
|
||||
IoDeleteDevice(deviceObject);
|
||||
IoDeleteSymbolicLink(&uniDosDeviceName);
|
||||
return ntStatus;
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
// Set the flags as underlying PDO
|
||||
if (PhysicalDeviceObject->Flags & DO_POWER_PAGABLE)
|
||||
{
|
||||
deviceObject->Flags |= DO_POWER_PAGABLE;
|
||||
|
||||
}
|
||||
|
||||
// Typically, the function driver for a device is its
|
||||
// power policy owner, although for some devices another
|
||||
// driver or system component may assume this role.
|
||||
// Set the initial power state of the device, if known, by calling
|
||||
// PoSetPowerState.
|
||||
deviceExtension->DevPower = PowerDeviceD0;
|
||||
deviceExtension->SysPower = PowerSystemWorking;
|
||||
|
||||
state.DeviceState = PowerDeviceD0;
|
||||
PoSetPowerState(deviceObject, DevicePowerState, state);
|
||||
|
||||
// attach our driver to device stack
|
||||
// The return value of IoAttachDeviceToDeviceStack is the top of the
|
||||
// attachment chain. This is where all the IRPs should be routed.
|
||||
deviceExtension->TopOfStackDeviceObject = IoAttachDeviceToDeviceStack(deviceObject, PhysicalDeviceObject);
|
||||
if (NULL == deviceExtension->TopOfStackDeviceObject)
|
||||
{
|
||||
#ifdef ENABLE_WMI
|
||||
FreeBT_WmiDeRegistration(deviceExtension);
|
||||
#endif
|
||||
IoDeleteDevice(deviceObject);
|
||||
IoDeleteSymbolicLink(&uniDosDeviceName);
|
||||
return STATUS_NO_SUCH_DEVICE;
|
||||
|
||||
}
|
||||
|
||||
// Register device interfaces
|
||||
ntStatus = IoRegisterDeviceInterface(deviceExtension->PhysicalDeviceObject,
|
||||
&GUID_CLASS_FREEBT_USB,
|
||||
NULL,
|
||||
&deviceExtension->InterfaceName);
|
||||
if (!NT_SUCCESS(ntStatus))
|
||||
{
|
||||
#ifdef ENABLE_WMI
|
||||
FreeBT_WmiDeRegistration(deviceExtension);
|
||||
#endif
|
||||
IoDetachDevice(deviceExtension->TopOfStackDeviceObject);
|
||||
IoDeleteDevice(deviceObject);
|
||||
IoDeleteSymbolicLink(&uniDosDeviceName);
|
||||
return ntStatus;
|
||||
|
||||
}
|
||||
|
||||
if (IoIsWdmVersionAvailable(1, 0x20))
|
||||
{
|
||||
deviceExtension->WdmVersion = WinXpOrBetter;
|
||||
|
||||
}
|
||||
|
||||
else if (IoIsWdmVersionAvailable(1, 0x10))
|
||||
{
|
||||
deviceExtension->WdmVersion = Win2kOrBetter;
|
||||
|
||||
}
|
||||
|
||||
else if (IoIsWdmVersionAvailable(1, 0x5))
|
||||
{
|
||||
deviceExtension->WdmVersion = WinMeOrBetter;
|
||||
|
||||
}
|
||||
|
||||
else if (IoIsWdmVersionAvailable(1, 0x0))
|
||||
{
|
||||
deviceExtension->WdmVersion = Win98OrBetter;
|
||||
|
||||
}
|
||||
|
||||
deviceExtension->SSRegistryEnable = 0;
|
||||
deviceExtension->SSEnable = 0;
|
||||
|
||||
// WinXP only: check the registry flag indicating whether
|
||||
// the device should selectively suspend when idle
|
||||
if (WinXpOrBetter == deviceExtension->WdmVersion)
|
||||
{
|
||||
FreeBT_GetRegistryDword(FREEBT_REGISTRY_PARAMETERS_PATH,
|
||||
L"BulkUsbEnable",
|
||||
(PULONG)(&deviceExtension->SSRegistryEnable));
|
||||
if (deviceExtension->SSRegistryEnable)
|
||||
{
|
||||
// initialize DPC
|
||||
KeInitializeDpc(&deviceExtension->DeferredProcCall, DpcRoutine, deviceObject);
|
||||
|
||||
// initialize the timer.
|
||||
// the DPC and the timer in conjunction,
|
||||
// monitor the state of the device to
|
||||
// selectively suspend the device.
|
||||
KeInitializeTimerEx(&deviceExtension->Timer, NotificationTimer);
|
||||
|
||||
// Initialize the NoDpcWorkItemPendingEvent to signaled state.
|
||||
// This event is cleared when a Dpc is fired and signaled
|
||||
// on completion of the work-item.
|
||||
KeInitializeEvent(&deviceExtension->NoDpcWorkItemPendingEvent, NotificationEvent, TRUE);
|
||||
|
||||
// Initialize the NoIdleReqPendEvent to ensure that the idle request
|
||||
// is indeed complete before we unload the drivers.
|
||||
KeInitializeEvent(&deviceExtension->NoIdleReqPendEvent, NotificationEvent, TRUE);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Initialize the NoIdleReqPendEvent to ensure that the idle request
|
||||
// is indeed complete before we unload the drivers.
|
||||
KeInitializeEvent(&deviceExtension->DelayEvent, NotificationEvent, FALSE);
|
||||
|
||||
// Clear the DO_DEVICE_INITIALIZING flag.
|
||||
// Note: Do not clear this flag until the driver has set the
|
||||
// device power state and the power DO flags.
|
||||
deviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
|
||||
InterlockedIncrement(&instanceNumber);
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_AddDevice: Leaving\n"));
|
||||
|
||||
return ntStatus;
|
||||
|
||||
}
|
||||
|
||||
|
15
reactos/drivers/bluetooth/fbtusb/fbtusb.rbuild
Normal file
15
reactos/drivers/bluetooth/fbtusb/fbtusb.rbuild
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0"?>
|
||||
<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
|
||||
<module name="fbtusb" type="kernelmodedriver" installbase="system32/drivers" installname="fbtusb.sys" allowwarnings="true">
|
||||
<include base="fbtusb">include</include>
|
||||
<library>ntoskrnl</library>
|
||||
<library>hal</library>
|
||||
<library>usbd</library>
|
||||
<file>fbtdev.c</file>
|
||||
<file>fbtpnp.c</file>
|
||||
<file>fbtpwr.c</file>
|
||||
<file>fbtrwr.c</file>
|
||||
<file>fbtusb.c</file>
|
||||
<!--file>fbtwmi.c</file-->
|
||||
<file>fbtusb.rc</file>
|
||||
</module>
|
5
reactos/drivers/bluetooth/fbtusb/fbtusb.rc
Normal file
5
reactos/drivers/bluetooth/fbtusb/fbtusb.rc
Normal file
|
@ -0,0 +1,5 @@
|
|||
#define REACTOS_VERSION_DLL
|
||||
#define REACTOS_STR_FILE_DESCRIPTION "Generic USB Bluetooth Driver\0"
|
||||
#define REACTOS_STR_INTERNAL_NAME "fbtusb\0"
|
||||
#define REACTOS_STR_ORIGINAL_FILENAME "fbtusb.sys\0"
|
||||
#include <reactos/version.rc>
|
548
reactos/drivers/bluetooth/fbtusb/fbtwmi.c
Executable file
548
reactos/drivers/bluetooth/fbtusb/fbtwmi.c
Executable file
|
@ -0,0 +1,548 @@
|
|||
// Copyright (c) 2004, Antony C. Roberts
|
||||
|
||||
// Use of this file is subject to the terms
|
||||
// described in the LICENSE.TXT file that
|
||||
// accompanies this file.
|
||||
//
|
||||
// Your use of this file indicates your
|
||||
// acceptance of the terms described in
|
||||
// LICENSE.TXT.
|
||||
//
|
||||
// http://www.freebt.net
|
||||
|
||||
#include "fbtusb.h"
|
||||
#include "fbtpwr.h"
|
||||
#include "fbtpnp.h"
|
||||
#include "fbtdev.h"
|
||||
#include "fbtrwr.h"
|
||||
#include "fbtwmi.h"
|
||||
|
||||
#include "fbtusr.h"
|
||||
|
||||
#define MOFRESOURCENAME L"MofResourceName"
|
||||
|
||||
#define WMI_FREEBT_DRIVER_INFORMATION 0
|
||||
|
||||
DEFINE_GUID (FREEBT_WMI_STD_DATA_GUID, 0x871B1A60, 0xD3EA, 0x4f2f, 0x81, 0x7b, 0x46, 0x5e, 0x44, 0x86, 0x7b, 0xf5);
|
||||
|
||||
WMIGUIDREGINFO FreeBTWmiGuidList[1] =
|
||||
{
|
||||
{
|
||||
&FREEBT_WMI_STD_DATA_GUID, 1, 0 // driver information
|
||||
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
NTSTATUS FreeBT_WmiRegistration(IN OUT PDEVICE_EXTENSION DeviceExtension)
|
||||
{
|
||||
NTSTATUS ntStatus;
|
||||
|
||||
PAGED_CODE();
|
||||
|
||||
DeviceExtension->WmiLibInfo.GuidCount = sizeof (FreeBTWmiGuidList) / sizeof (WMIGUIDREGINFO);
|
||||
DeviceExtension->WmiLibInfo.GuidList = FreeBTWmiGuidList;
|
||||
DeviceExtension->WmiLibInfo.QueryWmiRegInfo = FreeBT_QueryWmiRegInfo;
|
||||
DeviceExtension->WmiLibInfo.QueryWmiDataBlock = FreeBT_QueryWmiDataBlock;
|
||||
DeviceExtension->WmiLibInfo.SetWmiDataBlock = FreeBT_SetWmiDataBlock;
|
||||
DeviceExtension->WmiLibInfo.SetWmiDataItem = FreeBT_SetWmiDataItem;
|
||||
DeviceExtension->WmiLibInfo.ExecuteWmiMethod = NULL;
|
||||
DeviceExtension->WmiLibInfo.WmiFunctionControl = NULL;
|
||||
|
||||
// Register with WMI
|
||||
ntStatus = IoWMIRegistrationControl(DeviceExtension->FunctionalDeviceObject, WMIREG_ACTION_REGISTER);
|
||||
|
||||
return ntStatus;
|
||||
|
||||
}
|
||||
|
||||
NTSTATUS FreeBT_WmiDeRegistration(IN OUT PDEVICE_EXTENSION DeviceExtension)
|
||||
{
|
||||
PAGED_CODE();
|
||||
return IoWMIRegistrationControl(DeviceExtension->FunctionalDeviceObject, WMIREG_ACTION_DEREGISTER);
|
||||
|
||||
}
|
||||
|
||||
NTSTATUS FreeBT_DispatchSysCtrl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
|
||||
{
|
||||
PDEVICE_EXTENSION deviceExtension;
|
||||
SYSCTL_IRP_DISPOSITION disposition;
|
||||
NTSTATUS ntStatus;
|
||||
PIO_STACK_LOCATION irpStack;
|
||||
|
||||
PAGED_CODE();
|
||||
|
||||
irpStack = IoGetCurrentIrpStackLocation (Irp);
|
||||
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: "));
|
||||
FreeBT_DbgPrint(3, (WMIMinorFunctionString(irpStack->MinorFunction)));
|
||||
if (Removed == deviceExtension->DeviceState)
|
||||
{
|
||||
ntStatus = STATUS_DELETE_PENDING;
|
||||
|
||||
Irp->IoStatus.Status = ntStatus;
|
||||
Irp->IoStatus.Information = 0;
|
||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
|
||||
return ntStatus;
|
||||
|
||||
}
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchSysCtrl::"));
|
||||
FreeBT_IoIncrement(deviceExtension);
|
||||
|
||||
ntStatus = WmiSystemControl(&deviceExtension->WmiLibInfo,
|
||||
DeviceObject,
|
||||
Irp,
|
||||
&disposition);
|
||||
|
||||
switch(disposition)
|
||||
{
|
||||
case IrpProcessed:
|
||||
{
|
||||
// This irp has been processed and may be completed or pending.
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
case IrpNotCompleted:
|
||||
{
|
||||
// This irp has not been completed, but has been fully processed.
|
||||
// we will complete it now
|
||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
case IrpForward:
|
||||
case IrpNotWmi:
|
||||
{
|
||||
// This irp is either not a WMI irp or is a WMI irp targeted
|
||||
// at a device lower in the stack.
|
||||
IoSkipCurrentIrpStackLocation (Irp);
|
||||
ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject, Irp);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
// We really should never get here, but if we do just forward....
|
||||
ASSERT(FALSE);
|
||||
IoSkipCurrentIrpStackLocation (Irp);
|
||||
ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject, Irp);
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchSysCtrl::"));
|
||||
FreeBT_IoDecrement(deviceExtension);
|
||||
|
||||
return ntStatus;
|
||||
|
||||
}
|
||||
|
||||
NTSTATUS FreeBT_QueryWmiRegInfo(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
OUT ULONG *RegFlags,
|
||||
OUT PUNICODE_STRING InstanceName,
|
||||
OUT PUNICODE_STRING *RegistryPath,
|
||||
OUT PUNICODE_STRING MofResourceName,
|
||||
OUT PDEVICE_OBJECT *Pdo
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
This routine is a callback into the driver to retrieve the list of
|
||||
guids or data blocks that the driver wants to register with WMI. This
|
||||
routine may not pend or block. Driver should NOT call
|
||||
WmiCompleteRequest.
|
||||
|
||||
Arguments:
|
||||
|
||||
DeviceObject is the device whose data block is being queried
|
||||
|
||||
*RegFlags returns with a set of flags that describe the guids being
|
||||
registered for this device. If the device wants enable and disable
|
||||
collection callbacks before receiving queries for the registered
|
||||
guids then it should return the WMIREG_FLAG_EXPENSIVE flag. Also the
|
||||
returned flags may specify WMIREG_FLAG_INSTANCE_PDO in which case
|
||||
the instance name is determined from the PDO associated with the
|
||||
device object. Note that the PDO must have an associated devnode. If
|
||||
WMIREG_FLAG_INSTANCE_PDO is not set then Name must return a unique
|
||||
name for the device.
|
||||
|
||||
InstanceName returns with the instance name for the guids if
|
||||
WMIREG_FLAG_INSTANCE_PDO is not set in the returned *RegFlags. The
|
||||
caller will call ExFreePool with the buffer returned.
|
||||
|
||||
*RegistryPath returns with the registry path of the driver
|
||||
|
||||
*MofResourceName returns with the name of the MOF resource attached to
|
||||
the binary file. If the driver does not have a mof resource attached
|
||||
then this can be returned as NULL.
|
||||
|
||||
*Pdo returns with the device object for the PDO associated with this
|
||||
device if the WMIREG_FLAG_INSTANCE_PDO flag is returned in
|
||||
*RegFlags.
|
||||
|
||||
Return Value:
|
||||
|
||||
status
|
||||
|
||||
--*/
|
||||
{
|
||||
PDEVICE_EXTENSION deviceExtension;
|
||||
|
||||
PAGED_CODE();
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_QueryWmiRegInfo: Entered\n"));
|
||||
|
||||
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
|
||||
|
||||
*RegFlags = WMIREG_FLAG_INSTANCE_PDO;
|
||||
*RegistryPath = &Globals.FreeBT_RegistryPath;
|
||||
*Pdo = deviceExtension->PhysicalDeviceObject;
|
||||
RtlInitUnicodeString(MofResourceName, MOFRESOURCENAME);
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_QueryWmiRegInfo: Leaving\n"));
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
|
||||
}
|
||||
|
||||
NTSTATUS FreeBT_QueryWmiDataBlock(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PIRP Irp,
|
||||
IN ULONG GuidIndex,
|
||||
IN ULONG InstanceIndex,
|
||||
IN ULONG InstanceCount,
|
||||
IN OUT PULONG InstanceLengthArray,
|
||||
IN ULONG OutBufferSize,
|
||||
OUT PUCHAR Buffer
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
This routine is a callback into the driver to query for the contents of
|
||||
a data block. When the driver has finished filling the data block it
|
||||
must call WmiCompleteRequest to complete the irp. The driver can
|
||||
return STATUS_PENDING if the irp cannot be completed immediately.
|
||||
|
||||
Arguments:
|
||||
|
||||
DeviceObject is the device whose data block is being queried
|
||||
|
||||
Irp is the Irp that makes this request
|
||||
|
||||
GuidIndex is the index into the list of guids provided when the
|
||||
device registered
|
||||
|
||||
InstanceIndex is the index that denotes which instance of the data block
|
||||
is being queried.
|
||||
|
||||
InstanceCount is the number of instances expected to be returned for
|
||||
the data block.
|
||||
|
||||
InstanceLengthArray is a pointer to an array of ULONG that returns the
|
||||
lengths of each instance of the data block. If this is NULL then
|
||||
there was not enough space in the output buffer to fulfill the request
|
||||
so the irp should be completed with the buffer needed.
|
||||
|
||||
OutBufferSize has the maximum size available to write the data
|
||||
block.
|
||||
|
||||
Buffer on return is filled with the returned data block
|
||||
|
||||
|
||||
Return Value:
|
||||
|
||||
status
|
||||
|
||||
--*/
|
||||
{
|
||||
PDEVICE_EXTENSION deviceExtension;
|
||||
NTSTATUS ntStatus;
|
||||
ULONG size;
|
||||
WCHAR modelName[] = L"Aishverya\0\0";
|
||||
USHORT modelNameLen;
|
||||
|
||||
PAGED_CODE();
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_QueryWmiDataBlock: Entered\n"));
|
||||
|
||||
size = 0;
|
||||
modelNameLen = (wcslen(modelName) + 1) * sizeof(WCHAR);
|
||||
|
||||
// Only ever registers 1 instance per guid
|
||||
ASSERT((InstanceIndex == 0) && (InstanceCount == 1));
|
||||
|
||||
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
|
||||
switch (GuidIndex)
|
||||
{
|
||||
case WMI_FREEBT_DRIVER_INFORMATION:
|
||||
size = sizeof(ULONG) + modelNameLen + sizeof(USHORT);
|
||||
if (OutBufferSize < size )
|
||||
{
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: OutBuffer too small\n"));
|
||||
ntStatus = STATUS_BUFFER_TOO_SMALL;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
* (PULONG) Buffer = DebugLevel;
|
||||
Buffer += sizeof(ULONG);
|
||||
|
||||
// put length of string ahead of string
|
||||
*((PUSHORT)Buffer) = modelNameLen;
|
||||
Buffer = (PUCHAR)Buffer + sizeof(USHORT);
|
||||
RtlCopyBytes((PVOID)Buffer, (PVOID)modelName, modelNameLen);
|
||||
*InstanceLengthArray = size ;
|
||||
|
||||
ntStatus = STATUS_SUCCESS;
|
||||
break;
|
||||
|
||||
default:
|
||||
ntStatus = STATUS_WMI_GUID_NOT_FOUND;
|
||||
|
||||
}
|
||||
|
||||
ntStatus = WmiCompleteRequest(DeviceObject,
|
||||
Irp,
|
||||
ntStatus,
|
||||
size,
|
||||
IO_NO_INCREMENT);
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_QueryWmiDataBlock: Leaving\n"));
|
||||
|
||||
return ntStatus;
|
||||
|
||||
}
|
||||
|
||||
|
||||
NTSTATUS FreeBT_SetWmiDataItem(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PIRP Irp,
|
||||
IN ULONG GuidIndex,
|
||||
IN ULONG InstanceIndex,
|
||||
IN ULONG DataItemId,
|
||||
IN ULONG BufferSize,
|
||||
IN PUCHAR Buffer
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
This routine is a callback into the driver to set for the contents of
|
||||
a data block. When the driver has finished filling the data block it
|
||||
must call WmiCompleteRequest to complete the irp. The driver can
|
||||
return STATUS_PENDING if the irp cannot be completed immediately.
|
||||
|
||||
Arguments:
|
||||
|
||||
DeviceObject is the device whose data block is being queried
|
||||
|
||||
Irp is the Irp that makes this request
|
||||
|
||||
GuidIndex is the index into the list of guids provided when the
|
||||
device registered
|
||||
|
||||
InstanceIndex is the index that denotes which instance of the data block
|
||||
is being queried.
|
||||
|
||||
DataItemId has the id of the data item being set
|
||||
|
||||
BufferSize has the size of the data item passed
|
||||
|
||||
Buffer has the new values for the data item
|
||||
|
||||
|
||||
Return Value:
|
||||
|
||||
status
|
||||
|
||||
--*/
|
||||
{
|
||||
PDEVICE_EXTENSION deviceExtension;
|
||||
NTSTATUS ntStatus;
|
||||
ULONG info;
|
||||
|
||||
PAGED_CODE();
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_SetWmiDataItem: Entered\n"));
|
||||
|
||||
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
|
||||
info = 0;
|
||||
|
||||
switch(GuidIndex)
|
||||
{
|
||||
case WMI_FREEBT_DRIVER_INFORMATION:
|
||||
if(DataItemId == 1)
|
||||
{
|
||||
if(BufferSize == sizeof(ULONG))
|
||||
{
|
||||
DebugLevel = *((PULONG)Buffer);
|
||||
ntStatus = STATUS_SUCCESS;
|
||||
info = sizeof(ULONG);
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
ntStatus = STATUS_INFO_LENGTH_MISMATCH;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
ntStatus = STATUS_WMI_READ_ONLY;
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
ntStatus = STATUS_WMI_GUID_NOT_FOUND;
|
||||
|
||||
}
|
||||
|
||||
ntStatus = WmiCompleteRequest(DeviceObject,
|
||||
Irp,
|
||||
ntStatus,
|
||||
info,
|
||||
IO_NO_INCREMENT);
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_SetWmiDataItem: Leaving\n"));
|
||||
|
||||
return ntStatus;
|
||||
|
||||
}
|
||||
|
||||
NTSTATUS FreeBT_SetWmiDataBlock(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PIRP Irp,
|
||||
IN ULONG GuidIndex,
|
||||
IN ULONG InstanceIndex,
|
||||
IN ULONG BufferSize,
|
||||
IN PUCHAR Buffer
|
||||
)
|
||||
/*++
|
||||
|
||||
Routine Description:
|
||||
|
||||
This routine is a callback into the driver to set the contents of
|
||||
a data block. When the driver has finished filling the data block it
|
||||
must call WmiCompleteRequest to complete the irp. The driver can
|
||||
return STATUS_PENDING if the irp cannot be completed immediately.
|
||||
|
||||
Arguments:
|
||||
|
||||
DeviceObject is the device whose data block is being queried
|
||||
|
||||
Irp is the Irp that makes this request
|
||||
|
||||
GuidIndex is the index into the list of guids provided when the
|
||||
device registered
|
||||
|
||||
InstanceIndex is the index that denotes which instance of the data block
|
||||
is being queried.
|
||||
|
||||
BufferSize has the size of the data block passed
|
||||
|
||||
Buffer has the new values for the data block
|
||||
|
||||
--*/
|
||||
{
|
||||
PDEVICE_EXTENSION deviceExtension;
|
||||
NTSTATUS ntStatus;
|
||||
ULONG info;
|
||||
|
||||
PAGED_CODE();
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_SetWmiDataBlock: Entered\n"));
|
||||
|
||||
deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
|
||||
info = 0;
|
||||
|
||||
switch(GuidIndex)
|
||||
{
|
||||
case WMI_FREEBT_DRIVER_INFORMATION:
|
||||
if(BufferSize == sizeof(ULONG))
|
||||
{
|
||||
DebugLevel = *(PULONG) Buffer;
|
||||
ntStatus = STATUS_SUCCESS;
|
||||
info = sizeof(ULONG);
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
ntStatus = STATUS_INFO_LENGTH_MISMATCH;
|
||||
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
ntStatus = STATUS_WMI_GUID_NOT_FOUND;
|
||||
|
||||
}
|
||||
|
||||
ntStatus = WmiCompleteRequest(DeviceObject,
|
||||
Irp,
|
||||
ntStatus,
|
||||
info,
|
||||
IO_NO_INCREMENT);
|
||||
|
||||
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_SetWmiDataBlock: Leaving\n"));
|
||||
|
||||
return ntStatus;
|
||||
|
||||
}
|
||||
|
||||
PCHAR WMIMinorFunctionString(UCHAR MinorFunction)
|
||||
{
|
||||
switch (MinorFunction)
|
||||
{
|
||||
case IRP_MN_CHANGE_SINGLE_INSTANCE:
|
||||
return "IRP_MN_CHANGE_SINGLE_INSTANCE\n";
|
||||
|
||||
case IRP_MN_CHANGE_SINGLE_ITEM:
|
||||
return "IRP_MN_CHANGE_SINGLE_ITEM\n";
|
||||
|
||||
case IRP_MN_DISABLE_COLLECTION:
|
||||
return "IRP_MN_DISABLE_COLLECTION\n";
|
||||
|
||||
case IRP_MN_DISABLE_EVENTS:
|
||||
return "IRP_MN_DISABLE_EVENTS\n";
|
||||
|
||||
case IRP_MN_ENABLE_COLLECTION:
|
||||
return "IRP_MN_ENABLE_COLLECTION\n";
|
||||
|
||||
case IRP_MN_ENABLE_EVENTS:
|
||||
return "IRP_MN_ENABLE_EVENTS\n";
|
||||
|
||||
case IRP_MN_EXECUTE_METHOD:
|
||||
return "IRP_MN_EXECUTE_METHOD\n";
|
||||
|
||||
case IRP_MN_QUERY_ALL_DATA:
|
||||
return "IRP_MN_QUERY_ALL_DATA\n";
|
||||
|
||||
case IRP_MN_QUERY_SINGLE_INSTANCE:
|
||||
return "IRP_MN_QUERY_SINGLE_INSTANCE\n";
|
||||
|
||||
case IRP_MN_REGINFO:
|
||||
return "IRP_MN_REGINFO\n";
|
||||
|
||||
default:
|
||||
return "IRP_MN_?????\n";
|
||||
|
||||
}
|
||||
|
||||
}
|
721
reactos/drivers/bluetooth/fbtusb/include/fbtHciCmdStructs.h
Executable file
721
reactos/drivers/bluetooth/fbtusb/include/fbtHciCmdStructs.h
Executable file
|
@ -0,0 +1,721 @@
|
|||
#ifndef _FBT_HCI_CMD_STRUCTS_H
|
||||
#define _FBT_HCI_CMD_STRUCTS_H
|
||||
|
||||
// Pack structures to single unsigned char boundries
|
||||
#pragma pack(push, 1)
|
||||
|
||||
// Command Header
|
||||
typedef struct
|
||||
{
|
||||
unsigned short OpCode;
|
||||
unsigned char ParameterLength;
|
||||
|
||||
} FBT_HCI_CMD_HEADER, *PFBT_HCI_CMD_HEADER;
|
||||
|
||||
// Link control commands
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char LAP[FBT_HCI_LAP_SIZE];
|
||||
unsigned char InquiryLength;
|
||||
unsigned char NumResponses;
|
||||
|
||||
} FBT_HCI_INQUIRY, *PFBT_HCI_INQUIRY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_INQUIRY_CANCEL, *PFBT_HCI_INQUIRY_CANCEL;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short MaxPeriodLength;
|
||||
unsigned short MinPeriodLength;
|
||||
unsigned char LAP[FBT_HCI_LAP_SIZE];
|
||||
unsigned char InquiryLength;
|
||||
unsigned char NumResponses;
|
||||
|
||||
} FBT_HCI_PERIODIC_INQUIRY_MODE, *PFBT_HCI_PERIODIC_INQUIRY_MODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_EXIT_PERIODIC_INQUIRY_MODE, *PFBT_HCI_EXIT_PERIODIC_INQUIRY_MODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
unsigned short PacketType;
|
||||
unsigned char PageScanRepetitionMode;
|
||||
unsigned char PageScanMode;
|
||||
unsigned short ClockOffset;
|
||||
unsigned char AllowRoleSwitch;
|
||||
|
||||
} FBT_HCI_CREATE_CONNECTION, *PFBT_HCI_CREATE_CONNECTION;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned char Reason;
|
||||
|
||||
} FBT_HCI_DISCONNECT, *PFBT_HCI_DISCONNECT;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned short PacketType;
|
||||
|
||||
} FBT_HCI_ADD_SCO_CONNECTION, *PFBT_HCI_ADD_SCO_CONNECTION;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char Role;
|
||||
|
||||
} FBT_HCI_ACCEPT_CONNECTION_REQUEST, *PFBT_HCI_ACCEPT_CONNECTION_REQUEST;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char Reason;
|
||||
|
||||
} FBT_HCI_REJECT_CONNECTION_REQUEST, *PFBT_HCI_REJECT_CONNECTION_REQUEST;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char LinkKey[FBT_HCI_LINK_KEY_SIZE];
|
||||
|
||||
} FBT_HCI_LINK_KEY_REQUEST_REPLY, *PFBT_HCI_LINK_KEY_REQUEST_REPLY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
|
||||
} FBT_HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY, *PFBT_HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char PINCodeLength;
|
||||
unsigned char PINCode[FBT_HCI_PIN_CODE_SIZE];
|
||||
|
||||
} FBT_HCI_PIN_CODE_REQUEST_REPLY, *PFBT_HCI_PIN_CODE_REQUEST_REPLY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
|
||||
} FBT_HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY, *PFBT_HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned short PacketType;
|
||||
|
||||
} FBT_HCI_CHANGE_CONNECTION_PACKET_TYPE, *PFBT_HCI_CHANGE_CONNECTION_PACKET_TYPE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_AUTHENTICATION_REQUESTED, *PFBT_HCI_AUTHENTICATION_REQUESTED;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned char EncryptionEnable;
|
||||
|
||||
} FBT_HCI_SET_CONNECTION_ENCRYPTION, *PFBT_HCI_SET_CONNECTION_ENCRYPTION;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_CHANGE_CONNECTION_LINK_KEY, *PFBT_HCI_CHANGE_CONNECTION_LINK_KEY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char KeyFlag;
|
||||
|
||||
} FBT_HCI_MASTER_LINK_KEY, *PFBT_HCI_MASTER_LINK_KEY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char PageScanRepetitionMode;
|
||||
unsigned char PageScanMode;
|
||||
unsigned short ClockOffset;
|
||||
|
||||
} FBT_HCI_REMOTE_NAME_REQUEST, *PFBT_HCI_REMOTE_NAME_REQUEST;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_READ_REMOTE_SUPPORTED_FEATURES, *PFBT_HCI_READ_REMOTE_SUPPORTED_FEATURES;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_READ_REMOTE_VERSION_INFORMATION, *PFBT_HCI_READ_REMOTE_VERSION_INFORMATION;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_READ_CLOCK_OFFSET, *PFBT_HCI_READ_CLOCK_OFFSET;
|
||||
|
||||
|
||||
// Link policy commands
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned short HoldModeMaxInterval;
|
||||
unsigned short HoldModeMinInterval;
|
||||
|
||||
} FBT_HCI_HOLD_MODE, *PFBT_HCI_HOLD_MODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned short SniffMaxInterval;
|
||||
unsigned short SniffMinInterval;
|
||||
unsigned short SniffAttempt;
|
||||
unsigned short SniffTimeout;
|
||||
|
||||
} FBT_HCI_SNIFF_MODE, *PFBT_HCI_SNIFF_MODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_EXIT_SNIFF_MODE, *PFBT_HCI_EXIT_SNIFF_MODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned short BeaconMaxInterval;
|
||||
unsigned short BeaconMinInterval;
|
||||
|
||||
} FBT_HCI_PARK_MODE, *PFBT_HCI_PARK_MODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_EXIT_PARK_MODE, *PFBT_HCI_EXIT_PARK_MODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned char Flags;
|
||||
unsigned char ServiceType;
|
||||
unsigned long TokenRate;
|
||||
unsigned long PeakBandwidth;
|
||||
unsigned long Latency;
|
||||
unsigned long DelayVariation;
|
||||
|
||||
} FBT_HCI_QOS_SETUP, *PFBT_HCI_QOS_SETUP;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_ROLE_DISCOVERY, *PFBT_HCI_ROLE_DISCOVERY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char Role;
|
||||
|
||||
} FBT_HCI_SWITCH_ROLE, *PFBT_HCI_SWITCH_ROLE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_READ_LINK_POLICY_SETTINGS, *PFBT_HCI_READ_LINK_POLICY_SETTINGS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned short LinkPolicySettings;
|
||||
|
||||
} FBT_HCI_WRITE_LINK_POLICY_SETTINGS, *PFBT_HCI_WRITE_LINK_POLICY_SETTINGS;
|
||||
|
||||
|
||||
// Host Controller and Baseband commands
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char EventMask[8];
|
||||
|
||||
} FBT_HCI_SET_EVENT_MASK, *PFBT_HCI_SET_EVENT_MASK;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_RESET, *PFBT_HCI_RESET;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char FilterType;
|
||||
unsigned char FilterConditionType;
|
||||
unsigned char Condition[7];
|
||||
|
||||
} FBT_HCI_SET_EVENT_FILTER, *PFBT_HCI_SET_EVENT_FILTER;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_FLUSH, *PFBT_HCI_FLUSH;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_PIN_TYPE, *PFBT_HCI_READ_PIN_TYPE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char PinType;
|
||||
|
||||
} FBT_HCI_WRITE_PIN_TYPE, *PFBT_HCI_WRITE_PIN_TYPE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_CREATE_NEW_UNIT_KEY, *PFBT_HCI_CREATE_NEW_UNIT_KEY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char ReadAllFlag;
|
||||
|
||||
} FBT_HCI_READ_STORED_LINK_KEY, *PFBT_HCI_READ_STORED_LINK_KEY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char NumKeysToWrite;
|
||||
unsigned char BD_ADDR[FBT_HCI_VARIABLE_SIZE][FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char LinkKey[FBT_HCI_VARIABLE_SIZE][FBT_HCI_LINK_KEY_SIZE];
|
||||
|
||||
} FBT_HCI_WRITE_STORED_LINK_KEY, *PFBT_HCI_WRITE_STORED_LINK_KEY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char DeleteAllFlag;
|
||||
|
||||
} FBT_HCI_DELETE_STORED_LINK_KEY, *PFBT_HCI_DELETE_STORED_LINK_KEY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char Name[FBT_HCI_NAME_SIZE];
|
||||
|
||||
} FBT_HCI_CHANGE_LOCAL_NAME, *PFBT_HCI_CHANGE_LOCAL_NAME;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_LOCAL_NAME, *PFBT_HCI_READ_LOCAL_NAME;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_CONNECTION_ACCEPT_TIMEOUT, *PFBT_HCI_READ_CONNECTION_ACCEPT_TIMEOUT;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnAcceptTimeout;
|
||||
|
||||
} FBT_HCI_WRITE_CONNECTION_ACCEPT_TIMEOUT, *PFBT_HCI_WRITE_CONNECTION_ACCEPT_TIMEOUT;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_PAGE_TIMEOUT, *PFBT_HCI_READ_PAGE_TIMEOUT;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short PageTimeout;
|
||||
|
||||
} FBT_HCI_WRITE_PAGE_TIMEOUT, *PFBT_HCI_WRITE_PAGE_TIMEOUT;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_SCAN_ENABLE, *PFBT_HCI_READ_SCAN_ENABLE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char ScanEnable;
|
||||
|
||||
} FBT_HCI_WRITE_SCAN_ENABLE, *PFBT_HCI_WRITE_SCAN_ENABLE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_PAGE_SCAN_ACTIVITY, *PFBT_HCI_READ_PAGE_SCAN_ACTIVITY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short PageScanInterval;
|
||||
unsigned short PageScanWindow;
|
||||
|
||||
} FBT_HCI_WRITE_PAGE_SCAN_ACTIVITY, *PFBT_HCI_WRITE_PAGE_SCAN_ACTIVITY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_INQUIRY_SCAN_ACTIVITY, *PFBT_HCI_READ_INQUIRY_SCAN_ACTIVITY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short InquiryScanInterval;
|
||||
unsigned short InquiryScanWindow;
|
||||
|
||||
} FBT_HCI_WRITE_INQUIRY_SCAN_ACTIVITY, *PFBT_HCI_WRITE_INQUIRY_SCAN_ACTIVITY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_AUTHENTICATION_ENABLE, *PFBT_HCI_READ_AUTHENTICATION_ENABLE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char AuthenticationEnable;
|
||||
|
||||
} FBT_HCI_WRITE_AUTHENTICATION_ENABLE, *PFBT_HCI_WRITE_AUTHENTICATION_ENABLE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_ENCRYPTION_MODE, *PFBT_HCI_READ_ENCRYPTION_MODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char EncryptionMode;
|
||||
|
||||
} FBT_HCI_WRITE_ENCRYPTION_MODE, *PFBT_HCI_WRITE_ENCRYPTION_MODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_CLASS_OF_DEVICE, *PFBT_HCI_READ_CLASS_OF_DEVICE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char ClassOfDevice[FBT_HCI_DEVICE_CLASS_SIZE];
|
||||
|
||||
} FBT_HCI_WRITE_CLASS_OF_DEVICE, *PFBT_HCI_WRITE_CLASS_OF_DEVICE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_VOICE_SETTING, *PFBT_HCI_READ_VOICE_SETTING;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short VoiceSetting;
|
||||
|
||||
} FBT_HCI_WRITE_VOICE_SETTING, *PFBT_HCI_WRITE_VOICE_SETTING;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_READ_AUTOMATIC_FLUSH_TIMEOUT, *PFBT_HCI_READ_AUTOMATIC_FLUSH_TIMEOUT;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned short FlushTimeout;
|
||||
|
||||
} FBT_HCI_WRITE_AUTOMATIC_FLUSH_TIMEOUT, *PFBT_HCI_WRITE_AUTOMATIC_FLUSH_TIMEOUT;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_NUM_BROADCAST_RETRANSMISSIONS, *PFBT_HCI_READ_NUM_BROADCAST_RETRANSMISSIONS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char NumBroadcastRetran;
|
||||
|
||||
} FBT_HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS, *PFBT_HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_HOLD_MODE_ACTIVITY, *PFBT_HCI_READ_HOLD_MODE_ACTIVITY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char HoldModeActivity;
|
||||
|
||||
} FBT_HCI_WRITE_HOLD_MODE_ACTIVITY, *PFBT_HCI_WRITE_HOLD_MODE_ACTIVITY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned char Type;
|
||||
|
||||
} FBT_HCI_READ_TRANSMIT_POWER_LEVEL, *PFBT_HCI_READ_TRANSMIT_POWER_LEVEL;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_SCO_FLOW_CONTROL_ENABLE, *PFBT_HCI_READ_SCO_FLOW_CONTROL_ENABLE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char ScoFlowControlEnable;
|
||||
|
||||
} FBT_HCI_WRITE_SCO_FLOW_CONTROL_ENABLE, *PFBT_HCI_WRITE_SCO_FLOW_CONTROL_ENABLE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char FlowControlEnable;
|
||||
|
||||
} FBT_HCI_SET_HOST_CONTROLLER_TO_HOST_FLOW_CONTROL, *PFBT_HCI_SET_HOST_CONTROLLER_TO_HOST_FLOW_CONTROL;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short AclDataPacketLength;
|
||||
unsigned char ScoDataPacketLength;
|
||||
unsigned short TotalNumAclDataPackets;
|
||||
unsigned short TotalNumScoDataPackets;
|
||||
|
||||
} FBT_HCI_HOST_BUFFER_SIZE, *PFBT_HCI_HOST_BUFFER_SIZE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char NumberOfHandles;
|
||||
unsigned short ConnectionHandle[FBT_HCI_VARIABLE_SIZE];
|
||||
unsigned short HostNumOfCompletedPackets[FBT_HCI_VARIABLE_SIZE];
|
||||
|
||||
} FBT_HCI_HOST_NUMBER_OF_COMPLETED_PACKETS, *PFBT_HCI_HOST_NUMBER_OF_COMPLETED_PACKETS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_READ_LINK_SUPERVISION_TIMEOUT, *PFBT_HCI_READ_LINK_SUPERVISION_TIMEOUT;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned short LinkSupervisionTimeout;
|
||||
|
||||
} FBT_HCI_WRITE_LINK_SUPERVISION_TIMEOUT, *PFBT_HCI_WRITE_LINK_SUPERVISION_TIMEOUT;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_NUMBER_OF_SUPPORTED_IAC, *PFBT_HCI_READ_NUMBER_OF_SUPPORTED_IAC;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_CURRENT_IAC_LAP, *PFBT_HCI_READ_CURRENT_IAC_LAP;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char NumCurrentIac;
|
||||
unsigned char IacLap[FBT_HCI_VARIABLE_SIZE][FBT_HCI_LAP_SIZE];
|
||||
|
||||
} FBT_HCI_WRITE_CURRENT_IAC_LAP, *PFBT_HCI_WRITE_CURRENT_IAC_LAP;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_PAGE_SCAN_PERIOD_MODE, *PFBT_HCI_READ_PAGE_SCAN_PERIOD_MODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char PageScanPeriodMode;
|
||||
|
||||
} FBT_HCI_WRITE_PAGE_SCAN_PERIOD_MODE, *PFBT_HCI_WRITE_PAGE_SCAN_PERIOD_MODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_PAGE_SCAN_MODE, *PFBT_HCI_READ_PAGE_SCAN_MODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char PageScanMode;
|
||||
|
||||
} FBT_HCI_WRITE_PAGE_SCAN_MODE, *PFBT_HCI_WRITE_PAGE_SCAN_MODE;
|
||||
|
||||
|
||||
// Informational parameters
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_LOCAL_VERSION_INFORMATION, *PFBT_HCI_READ_LOCAL_VERSION_INFORMATION;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_LOCAL_SUPPORTED_FEATURES, *PFBT_HCI_READ_LOCAL_SUPPORTED_FEATURES;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_BUFFER_SIZE, *PFBT_HCI_READ_BUFFER_SIZE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_COUNTRY_CODE, *PFBT_HCI_READ_COUNTRY_CODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_BD_ADDR, *PFBT_HCI_READ_BD_ADDR;
|
||||
|
||||
|
||||
// Status parameter commands
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_READ_FAILED_CONTACT_COUNTER, *PFBT_HCI_READ_FAILED_CONTACT_COUNTER;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_RESET_FAILED_CONTACT_COUNTER, *PFBT_HCI_RESET_FAILED_CONTACT_COUNTER;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_GET_LINK_QUALITY, *PFBT_HCI_GET_LINK_QUALITY;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_READ_RSSI, *PFBT_HCI_READ_RSSI;
|
||||
|
||||
|
||||
// Testing commands
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_READ_LOOPBACK_MODE, *PFBT_HCI_READ_LOOPBACK_MODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
unsigned char LoopbackMode;
|
||||
|
||||
} FBT_HCI_WRITE_LOOPBACK_MODE, *PFBT_HCI_WRITE_LOOPBACK_MODE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_CMD_HEADER CommandHeader;
|
||||
|
||||
} FBT_HCI_ENABLE_DEVICE_UNDER_TEST_MODE, *PFBT_HCI_ENABLE_DEVICE_UNDER_TEST_MODE;
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#endif // _FBT_HCI_CMD_STRUCTS_H
|
153
reactos/drivers/bluetooth/fbtusb/include/fbtHciCmds.h
Executable file
153
reactos/drivers/bluetooth/fbtusb/include/fbtHciCmds.h
Executable file
|
@ -0,0 +1,153 @@
|
|||
#ifndef _FBT_HCI_COMMANDS_H
|
||||
#define _FBT_HCI_COMMANDS_H
|
||||
|
||||
#include "fbtHciOpcodes.h"
|
||||
#include "fbtHciSizes.h"
|
||||
|
||||
#include "fbtHciCmdStructs.h"
|
||||
#include "fbtHciParms.h"
|
||||
|
||||
// Utility macro to build a command CMD from ints constituent OCF/OGF
|
||||
#define FBT_HCI_CMD(nOCF, nOGF) ((unsigned short) nOCF + (unsigned short)(nOGF << 10))
|
||||
|
||||
// HCI Command CMDs
|
||||
// Link control CMDs
|
||||
#define FBT_HCI_CMD_INQUIRY FBT_HCI_CMD(FBT_HCI_OCF_INQUIRY, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_INQUIRY_CANCEL FBT_HCI_CMD(FBT_HCI_OCF_INQUIRY_CANCEL, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_PERIODIC_INQUIRY_MODE FBT_HCI_CMD(FBT_HCI_OCF_PERIODIC_INQUIRY_MODE, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_EXIT_PERIODIC_INQUIRY_MODE FBT_HCI_CMD(FBT_HCI_OCF_EXIT_PERIODIC_INQUIRY_MODE, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_CREATE_CONNECTION FBT_HCI_CMD(FBT_HCI_OCF_CREATE_CONNECTION, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_DISCONNECT FBT_HCI_CMD(FBT_HCI_OCF_DISCONNECT, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_ADD_SCO_CONNECTION FBT_HCI_CMD(FBT_HCI_OCF_ADD_SCO_CONNECTION, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_ACCEPT_CONNECTION_REQUEST FBT_HCI_CMD(FBT_HCI_OCF_ACCEPT_CONNECTION_REQUEST, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_REJECT_CONNECTION_REQUEST FBT_HCI_CMD(FBT_HCI_OCF_REJECT_CONNECTION_REQUEST, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_LINK_KEY_REQUEST_REPLY FBT_HCI_CMD(FBT_HCI_OCF_LINK_KEY_REQUEST_REPLY, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_LINK_KEY_REQUEST_NEGATIVE_REPLY FBT_HCI_CMD(FBT_HCI_OCF_LINK_KEY_REQUEST_NEGATIVE_REPLY, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_PIN_CODE_REQUEST_REPLY FBT_HCI_CMD(FBT_HCI_OCF_PIN_CODE_REQUEST_REPLY, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_PIN_CODE_REQUEST_NEGATIVE_REPLY FBT_HCI_CMD(FBT_HCI_OCF_PIN_CODE_REQUEST_NEGATIVE_REPLY, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_CHANGE_CONNECTION_PACKET_TYPE FBT_HCI_CMD(FBT_HCI_OCF_CHANGE_CONNECTION_PACKET_TYPE, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_AUTHENTICATION_REQUESTED FBT_HCI_CMD(FBT_HCI_OCF_AUTHENTICATION_REQUESTED, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_SET_CONNECTION_ENCRYPTION FBT_HCI_CMD(FBT_HCI_OCF_SET_CONNECTION_ENCRYPTION, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_CHANGE_CONNECTION_LINK_KEY FBT_HCI_CMD(FBT_HCI_OCF_CHANGE_CONNECTION_LINK_KEY, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_MASTER_LINK_KEY FBT_HCI_CMD(FBT_HCI_OCF_MASTER_LINK_KEY, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_REMOTE_NAME_REQUEST FBT_HCI_CMD(FBT_HCI_OCF_REMOTE_NAME_REQUEST, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_READ_REMOTE_SUPPORTED_FEATURES FBT_HCI_CMD(FBT_HCI_OCF_READ_REMOTE_SUPPORTED_FEATURES, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_READ_REMOTE_VERSION_INFORMATION FBT_HCI_CMD(FBT_HCI_OCF_READ_REMOTE_VERSION_INFORMATION, FBT_HCI_OGF_LINK_CONTROL)
|
||||
#define FBT_HCI_CMD_READ_CLOCK_OFFSET FBT_HCI_CMD(FBT_HCI_OCF_READ_CLOCK_OFFSET, FBT_HCI_OGF_LINK_CONTROL)
|
||||
|
||||
// Link policy CMDs
|
||||
#define FBT_HCI_CMD_HOLD_MODE FBT_HCI_CMD(FBT_HCI_OCF_HOLD_MODE, FBT_HCI_OGF_LINK_POLICY)
|
||||
#define FBT_HCI_CMD_SNIFF_MODE FBT_HCI_CMD(FBT_HCI_OCF_SNIFF_MODE, FBT_HCI_OGF_LINK_POLICY)
|
||||
#define FBT_HCI_CMD_EXIT_SNIFF_MODE FBT_HCI_CMD(FBT_HCI_OCF_EXIT_SNIFF_MODE, FBT_HCI_OGF_LINK_POLICY)
|
||||
#define FBT_HCI_CMD_PARK_MODE FBT_HCI_CMD(FBT_HCI_OCF_PARK_MODE, FBT_HCI_OGF_LINK_POLICY)
|
||||
#define FBT_HCI_CMD_EXIT_PARK_MODE FBT_HCI_CMD(FBT_HCI_OCF_EXIT_PARK_MODE, FBT_HCI_OGF_LINK_POLICY)
|
||||
#define FBT_HCI_CMD_QOS_SETUP FBT_HCI_CMD(FBT_HCI_OCF_QOS_SETUP, FBT_HCI_OGF_LINK_POLICY)
|
||||
#define FBT_HCI_CMD_ROLE_DISCOVERY FBT_HCI_CMD(FBT_HCI_OCF_ROLE_DISCOVERY, FBT_HCI_OGF_LINK_POLICY)
|
||||
#define FBT_HCI_CMD_SWITCH_ROLE FBT_HCI_CMD(FBT_HCI_OCF_SWITCH_ROLE, FBT_HCI_OGF_LINK_POLICY)
|
||||
#define FBT_HCI_CMD_READ_LINK_POLICY_SETTINGS FBT_HCI_CMD(FBT_HCI_OCF_READ_LINK_POLICY_SETTINGS, FBT_HCI_OGF_LINK_POLICY)
|
||||
#define FBT_HCI_CMD_WRITE_LINK_POLICY_SETTINGS FBT_HCI_CMD(FBT_HCI_OCF_WRITE_LINK_POLICY_SETTINGS, FBT_HCI_OGF_LINK_POLICY)
|
||||
|
||||
// Host controller & baseband command CMDs
|
||||
#define FBT_HCI_CMD_SET_EVENT_MASK FBT_HCI_CMD(FBT_HCI_OCF_SET_EVENT_MASK, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_RESET FBT_HCI_CMD(FBT_HCI_OCF_RESET, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_SET_EVENT_FILTER FBT_HCI_CMD(FBT_HCI_OCF_SET_EVENT_FILTER, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_FLUSH FBT_HCI_CMD(FBT_HCI_OCF_FLUSH, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_PIN_TYPE FBT_HCI_CMD(FBT_HCI_OCF_READ_PIN_TYPE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_PIN_TYPE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_PIN_TYPE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_CREATE_NEW_UNIT_KEY FBT_HCI_CMD(FBT_HCI_OCF_CREATE_NEW_UNIT_KEY, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_STORED_LINK_KEY FBT_HCI_CMD(FBT_HCI_OCF_READ_STORED_LINK_KEY, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_STORED_LINK_KEY FBT_HCI_CMD(FBT_HCI_OCF_WRITE_STORED_LINK_KEY, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_DELETE_STORED_LINK_KEY FBT_HCI_CMD(FBT_HCI_OCF_DELETE_STORED_LINK_KEY, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_CHANGE_LOCAL_NAME FBT_HCI_CMD(FBT_HCI_OCF_CHANGE_LOCAL_NAME, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_LOCAL_NAME FBT_HCI_CMD(FBT_HCI_OCF_READ_LOCAL_NAME, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_CONNECTION_ACCEPT_TIMEOUT FBT_HCI_CMD(FBT_HCI_OCF_READ_CONNECTION_ACCEPT_TIMEOUT, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_CONNECTION_ACCEPT_TIMEOUT FBT_HCI_CMD(FBT_HCI_OCF_WRITE_CONNECTION_ACCEPT_TIMEOUT, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_PAGE_TIMEOUT FBT_HCI_CMD(FBT_HCI_OCF_READ_PAGE_TIMEOUT, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_PAGE_TIMEOUT FBT_HCI_CMD(FBT_HCI_OCF_WRITE_PAGE_TIMEOUT, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_SCAN_ENABLE FBT_HCI_CMD(FBT_HCI_OCF_READ_SCAN_ENABLE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_SCAN_ENABLE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_SCAN_ENABLE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_PAGE_SCAN_ACTIVITY FBT_HCI_CMD(FBT_HCI_OCF_READ_PAGE_SCAN_ACTIVITY, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_PAGE_SCAN_ACTIVITY FBT_HCI_CMD(FBT_HCI_OCF_WRITE_PAGE_SCAN_ACTIVITY, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_INQUIRY_SCAN_ACTIVITY FBT_HCI_CMD(FBT_HCI_OCF_READ_INQUIRY_SCAN_ACTIVITY, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_INQUIRY_SCAN_ACTIVITY FBT_HCI_CMD(FBT_HCI_OCF_WRITE_INQUIRY_SCAN_ACTIVITY, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_AUTHENTICATION_ENABLE FBT_HCI_CMD(FBT_HCI_OCF_READ_AUTHENTICATION_ENABLE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_AUTHENTICATION_ENABLE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_AUTHENTICATION_ENABLE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_ENCRYPTION_MODE FBT_HCI_CMD(FBT_HCI_OCF_READ_ENCRYPTION_MODE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_ENCRYPTION_MODE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_ENCRYPTION_MODE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_CLASS_OF_DEVICE FBT_HCI_CMD(FBT_HCI_OCF_READ_CLASS_OF_DEVICE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_CLASS_OF_DEVICE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_CLASS_OF_DEVICE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_VOICE_SETTING FBT_HCI_CMD(FBT_HCI_OCF_READ_VOICE_SETTING, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_VOICE_SETTING FBT_HCI_CMD(FBT_HCI_OCF_WRITE_VOICE_SETTING, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_AUTOMATIC_FLUSH_TIMEOUT FBT_HCI_CMD(FBT_HCI_OCF_READ_AUTOMATIC_FLUSH_TIMEOUT, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_AUTOMATIC_FLUSH_TIMEOUT FBT_HCI_CMD(FBT_HCI_OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_NUM_BROADCAST_RETRANSMISSIONS FBT_HCI_CMD(FBT_HCI_OCF_READ_NUM_BROADCAST_RETRANSMISSIONS, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_NUM_BROADCAST_RETRANSMISSIONS FBT_HCI_CMD(FBT_HCI_OCF_WRITE_NUM_BROADCAST_RETRANSMISSIONS, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_HOLD_MODE_ACTIVITY FBT_HCI_CMD(FBT_HCI_OCF_READ_HOLD_MODE_ACTIVITY, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_HOLD_MODE_ACTIVITY FBT_HCI_CMD(FBT_HCI_OCF_WRITE_HOLD_MODE_ACTIVITY, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_TRANSMIT_POWER_LEVEL FBT_HCI_CMD(FBT_HCI_OCF_READ_TRANSMIT_POWER_LEVEL, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_SCO_FLOW_CONTROL_ENABLE FBT_HCI_CMD(FBT_HCI_OCF_READ_SCO_FLOW_CONTROL_ENABLE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_SCO_FLOW_CONTROL_ENABLE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_SCO_FLOW_CONTROL_ENABLE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_SET_HOST_CONTROLLER_TO_HOST_FLOW_CONTROL FBT_HCI_CMD(FBT_HCI_OCF_SET_HOST_CONTROLLER_TO_HOST_FLOW_CONTROL, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_HOST_BUFFER_SIZE FBT_HCI_CMD(FBT_HCI_OCF_HOST_BUFFER_SIZE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_HOST_NUMBER_OF_COMPLETED_PACKETS FBT_HCI_CMD(FBT_HCI_OCF_HOST_NUMBER_OF_COMPLETED_PACKETS, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_LINK_SUPERVISION_TIMEOUT FBT_HCI_CMD(FBT_HCI_OCF_READ_LINK_SUPERVISION_TIMEOUT, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_LINK_SUPERVISION_TIMEOUT FBT_HCI_CMD(FBT_HCI_OCF_WRITE_LINK_SUPERVISION_TIMEOUT, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_NUMBER_OF_SUPPORTED_IAC FBT_HCI_CMD(FBT_HCI_OCF_READ_NUMBER_OF_SUPPORTED_IAC, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_CURRENT_IAC_LAP FBT_HCI_CMD(FBT_HCI_OCF_READ_CURRENT_IAC_LAP, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_CURRENT_IAC_LAP FBT_HCI_CMD(FBT_HCI_OCF_WRITE_CURRENT_IAC_LAP, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_PAGE_SCAN_PERIOD_MODE FBT_HCI_CMD(FBT_HCI_OCF_READ_PAGE_SCAN_PERIOD_MODE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_PAGE_SCAN_PERIOD_MODE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_PAGE_SCAN_PERIOD_MODE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_READ_PAGE_SCAN_MODE FBT_HCI_CMD(FBT_HCI_OCF_READ_PAGE_SCAN_MODE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
#define FBT_HCI_CMD_WRITE_PAGE_SCAN_MODE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_PAGE_SCAN_MODE, FBT_HCI_OGF_CONTROL_BASEBAND)
|
||||
|
||||
// Informational parameters CMDs
|
||||
#define FBT_HCI_CMD_READ_LOCAL_VERSION_INFORMATION FBT_HCI_CMD(FBT_HCI_OCF_READ_LOCAL_VERSION_INFORMATION, FBT_HCI_OGF_INFORMATIONAL_PARAMETERS)
|
||||
#define FBT_HCI_CMD_LOCAL_SUPPPROTED_FEATURES FBT_HCI_CMD(FBT_HCI_OCF_LOCAL_SUPPPROTED_FEATURES, FBT_HCI_OGF_INFORMATIONAL_PARAMETERS)
|
||||
#define FBT_HCI_CMD_READ_BUFFER_SIZE FBT_HCI_CMD(FBT_HCI_OCF_READ_BUFFER_SIZE, FBT_HCI_OGF_INFORMATIONAL_PARAMETERS)
|
||||
#define FBT_HCI_CMD_READ_COUNTRY_CODE FBT_HCI_CMD(FBT_HCI_OCF_READ_COUNTRY_CODE, FBT_HCI_OGF_INFORMATIONAL_PARAMETERS)
|
||||
#define FBT_HCI_CMD_READ_BD_ADDR FBT_HCI_CMD(FBT_HCI_OCF_READ_BD_ADDR, FBT_HCI_OGF_INFORMATIONAL_PARAMETERS)
|
||||
|
||||
// Status parameters CMDs
|
||||
#define FBT_HCI_CMD_READ_FAILED_CONTACT_COUNTER FBT_HCI_CMD(FBT_HCI_OCF_READ_FAILED_CONTACT_COUNTER, FBT_HCI_OGF_STATUS_PARAMETERS)
|
||||
#define FBT_HCI_CMD_RESET_FAILED_CONTACT_COUNTER FBT_HCI_CMD(FBT_HCI_OCF_RESET_FAILED_CONTACT_COUNTER, FBT_HCI_OGF_STATUS_PARAMETERS)
|
||||
#define FBT_HCI_CMD_GET_LINK_QUALITY FBT_HCI_CMD(FBT_HCI_OCF_GET_LINK_QUALITY, FBT_HCI_OGF_STATUS_PARAMETERS)
|
||||
#define FBT_HCI_CMD_READ_RSSI FBT_HCI_CMD(FBT_HCI_OCF_READ_RSSI, FBT_HCI_OGF_STATUS_PARAMETERS)
|
||||
|
||||
// Testing CMDs
|
||||
#define FBT_HCI_CMD_READ_LOOPBACK_MODE FBT_HCI_CMD(FBT_HCI_OCF_READ_LOOPBACK_MODE, FBT_HCI_OGF_TESTING)
|
||||
#define FBT_HCI_CMD_WRITE_LOOPBACK_MODE FBT_HCI_CMD(FBT_HCI_OCF_WRITE_LOOPBACK_MODE, FBT_HCI_OGF_TESTING)
|
||||
#define FBT_HCI_CMD_ENABLE_DEVICE_UNDER_TEST_MODE FBT_HCI_CMD(FBT_HCI_OCF_ENABLE_DEVICE_UNDER_TEST_MODE, FBT_HCI_OGF_TESTING)
|
||||
|
||||
// Packet Boundry Flags (ORed into the upper 8 bits of the connection handle)
|
||||
#define FBT_HCI_PACKET_BOUNDRY_FIRST 0x20
|
||||
#define FBT_HCI_PACKET_BOUNDRY_NEXT 0x10
|
||||
|
||||
// HCI header types
|
||||
#define FBT_HCI_SYNC_HCI_COMMAND_PACKET 0x01
|
||||
#define FBT_HCI_SYNC_ACL_DATA_PACKET 0x02
|
||||
#define FBT_HCI_SYNC_SCO_DATA_PACKET 0x03
|
||||
#define FBT_HCI_SYNC_HCI_EVENT_PACKET 0x04
|
||||
|
||||
// Packet types for use in CreateConnection
|
||||
#define FBT_HCI_PACKET_TYPE_DM1 0x0008 // 1 time slot, 1-18 bytes of data, FEC encoded
|
||||
#define FBT_HCI_PACKET_TYPE_DH1 0x0010 // 1 time slot, 1-28 bytes of data, not FEC encoded
|
||||
|
||||
#define FBT_HCI_PACKET_TYPE_DM3 0x0400 // 3 time slots, 2-123 bytes of data, FEC encoded
|
||||
#define FBT_HCI_PACKET_TYPE_DH3 0x0800 // 3 time slots, 2-185 bytes of data, not FEC encoded
|
||||
|
||||
#define FBT_HCI_PACKET_TYPE_DM5 0x4000 // 5 time slots, 2-226 bytes of data, FEC encoded
|
||||
#define FBT_HCI_PACKET_TYPE_DH5 0x8000 // 3 time slots, 2-341 bytes of data, not FEC encoded
|
||||
|
||||
// LAP codes for use in Inquiry
|
||||
#define FBT_HCI_LAP_GIAC 0x9E8B33
|
||||
#define FBT_HCI_LAP_LIAC 0x9E8B00
|
||||
|
||||
// Link Types
|
||||
#define FBT_HCI_LINK_TYPE_SCO 0x00
|
||||
#define FBT_HCI_LINK_TYPE_ACL 0x01
|
||||
|
||||
// Maximum number of each type of handle
|
||||
#define FBT_HCI_MAX_ALLOWED_ACL_HANDLES 32
|
||||
#define FBT_HCI_MAX_ALLOWED_SCO_HANDLES 4
|
||||
|
||||
#endif // _FBT_HCI_COMMANDS_H
|
8
reactos/drivers/bluetooth/fbtusb/include/fbtHciDefs.h
Executable file
8
reactos/drivers/bluetooth/fbtusb/include/fbtHciDefs.h
Executable file
|
@ -0,0 +1,8 @@
|
|||
#ifndef _FBT_HCI_DEFS_H
|
||||
#define _FBT_HCI_DEFS_H
|
||||
|
||||
#include "fbtHciCmds.h"
|
||||
#include "fbtHciEvents.h"
|
||||
#include "fbtHciErrors.h"
|
||||
|
||||
#endif // _FBT_HCI_DEFS_H
|
58
reactos/drivers/bluetooth/fbtusb/include/fbtHciErrors.h
Executable file
58
reactos/drivers/bluetooth/fbtusb/include/fbtHciErrors.h
Executable file
|
@ -0,0 +1,58 @@
|
|||
#ifndef _FBT_HCI_ERROR_H
|
||||
#define _FBT_HCI_ERROR_H
|
||||
|
||||
#define FBT_HCI_ERROR_SUCCESS 0x00
|
||||
#define FBT_HCI_UNKNOWN_HCI_COMMAND 0x01
|
||||
#define FBT_HCI_UNKNOWN_CONNECTION_IDENTIFIER 0x02
|
||||
#define FBT_HCI_HARDWARE_FAILURE 0x03
|
||||
#define FBT_HCI_PAGE_TIMEOUT 0x04
|
||||
#define FBT_HCI_AUTHENTICATION_FAILURE 0x05
|
||||
#define FBT_HCI_PIN_MISSING 0x06
|
||||
#define FBT_HCI_MEMORY_CAPACITY_EXCEEDED 0x07
|
||||
#define FBT_HCI_CONNECTION_TIMEOUT 0x08
|
||||
#define FBT_HCI_CONNECTION_LIMIT EXCEEDED 0x09
|
||||
#define FBT_HCI_SYNCHRONOUS_CONNECTION_LIMIT_TO_A_DEVICE EXCEEDED 0x0a
|
||||
#define FBT_HCI_ACL_CONNECTION_ALREADY_EXISTS 0x0b
|
||||
#define FBT_HCI_COMMAND_DISALLOWED 0x0c
|
||||
#define FBT_HCI_CONNECTION_REJECTED_DUE_TO_LIMITED RESOURCES 0x0d
|
||||
#define FBT_HCI_CONNECTION_REJECTED_DUE_TO_SECURITY REASONS 0x0e
|
||||
#define FBT_HCI_CONNECTION_REJECTED_DUE_TO_UNACCEPTABLE BD_ADDR 0x0f
|
||||
#define FBT_HCI_CONNECTION_ACCEPT_TIMEOUT_EXCEEDED 0x10
|
||||
#define FBT_HCI_UNSUPPORTED_FEATURE_OR_PARAMETER VALUE 0x11
|
||||
#define FBT_HCI_INVALID_HCI_COMMAND_PARAMETERS 0x12
|
||||
#define FBT_HCI_REMOTE_USER_TERMINATED_CONNECTION 0x13
|
||||
#define FBT_HCI_REMOTE_DEVICE_TERMINATED_CONNECTION_DUE_TO_LOW_RESOURCES 0x14
|
||||
#define FBT_HCI_REMOTE_DEVICE_TERMINATED_CONNECTION_DUE_TO_POWER OFF 0x15
|
||||
#define FBT_HCI_CONNECTION_TERMINATED_BY_LOCAL_HOST 0x16
|
||||
#define FBT_HCI_REPEATED_ATTEMPTS 0x17
|
||||
#define FBT_HCI_PAIRING_NOT ALLOWED 0x18
|
||||
#define FBT_HCI_UNKNOWN_LMP_PDU 0x19
|
||||
#define FBT_HCI_UNSUPPORTED_REMOTE_FEATURE 0x1a
|
||||
#define FBT_HCI_SCO_OFFSET_REJECTED 0x1b
|
||||
#define FBT_HCI_SCO_INTERVAL_REJECTED 0x1c
|
||||
#define FBT_HCI_SCO_AIR_MODE_REJECTED 0x1d
|
||||
#define FBT_HCI_INVALID_LMP_PARAMETERS 0x1e
|
||||
#define FBT_HCI_UNSPECIFIED_ERROR 0x1f
|
||||
#define FBT_HCI_UNSUPPORTED_LMP_PARAMETER_VALUE 0x20
|
||||
#define FBT_HCI_ROLE_CHANGE_NOT_ALLOWED 0x21
|
||||
#define FBT_HCI_LMP_RESPONSE_TIMEOUT 0x22
|
||||
#define FBT_HCI_LMP_ERROR_TRANSACTION_COLLISION 0x23
|
||||
#define FBT_HCI_LMP_PDU_NOT_ALLOWED 0x24
|
||||
#define FBT_HCI_ENCRYPTION_MODE_NOT_ACCEPTABLE 0x25
|
||||
#define FBT_HCI_LINK_KEY_CAN_NOT_BE_CHANGED 0x26
|
||||
#define FBT_HCI_REQUESTED_QOS_NOT_SUPPORTED 0x27
|
||||
#define FBT_HCI_INSTANT_PASSED 0x28
|
||||
#define FBT_HCI_PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED 0x29
|
||||
#define FBT_HCI_DIFFERENT_TRANSACTION_COLLISION 0x2a
|
||||
#define FBT_HCI_QOS_UNACCEPTABLE PARAMETER 0x2c
|
||||
#define FBT_HCI_QOS_REJECTED 0x2d
|
||||
#define FBT_HCI_CHANNEL_CLASSIFICATION_NOT_SUPPORTED 0x2e
|
||||
#define FBT_HCI_INSUFFICIENT_SECURITY 0x2f
|
||||
#define FBT_HCI_PARAMETER_OUT_OF_MANDATORY_RANGE 0x30
|
||||
#define FBT_HCI_ROLE_SWITCH_PENDING 0x32
|
||||
#define FBT_HCI_RESERVED_SLOT_VIOLATION 0x34
|
||||
#define FBT_HCI_ROLE_SWITCH_FAILED 0x35
|
||||
|
||||
#define FBT_HCI_SUCCESS(x) (x==FBT_HCI_ERROR_SUCCESS)
|
||||
|
||||
#endif // _FBT_HCI_ERROR_H
|
319
reactos/drivers/bluetooth/fbtusb/include/fbtHciEventStructs.h
Executable file
319
reactos/drivers/bluetooth/fbtusb/include/fbtHciEventStructs.h
Executable file
|
@ -0,0 +1,319 @@
|
|||
#ifndef _FBT_HCI_EVENT_STRUCTS_H
|
||||
#define _FBT_HCI_EVENT_STRUCTS_H
|
||||
|
||||
// Pack structures to single unsigned char boundries
|
||||
#pragma pack(push, 1)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char EventCode;
|
||||
unsigned char ParameterLength;
|
||||
|
||||
} FBT_HCI_EVENT_HEADER, *PFBT_HCI_EVENT_HEADER;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char Status;
|
||||
unsigned char NumResponses;
|
||||
|
||||
} FBT_HCI_INQUIRY_COMPLETE, *PFBT_HCI_INQUIRY_COMPLETE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char NumResponses;
|
||||
unsigned char BD_ADDR[FBT_HCI_VARIABLE_SIZE][FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char PageScanRepetitionMode[FBT_HCI_VARIABLE_SIZE];
|
||||
unsigned char PageScanPeriodMode[FBT_HCI_VARIABLE_SIZE];
|
||||
unsigned char PageScanMode[FBT_HCI_VARIABLE_SIZE];
|
||||
unsigned char ClassOfDevice[FBT_HCI_VARIABLE_SIZE][FBT_HCI_DEVICE_CLASS_SIZE];
|
||||
unsigned short ClockOffset[FBT_HCI_VARIABLE_SIZE];
|
||||
|
||||
} FBT_HCI_INQUIRY_RESULT, *PFBT_HCI_INQUIRY_RESULT;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char Status;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char LinkType;
|
||||
unsigned char EncryptionMode;
|
||||
|
||||
} FBT_HCI_CONNECTION_COMPLETE, *PFBT_HCI_CONNECTION_COMPLETE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
unsigned long ClassOfDevice[FBT_HCI_DEVICE_CLASS_SIZE];
|
||||
unsigned char LinkType;
|
||||
|
||||
} FBT_HCI_CONNECTION_REQUEST, *PFBT_HCI_CONNECTION_REQUEST;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char Status;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned char Reason;
|
||||
|
||||
} FBT_HCI_DISCONNECTION_COMPLETE, *PFBT_HCI_DISCONNECTION_COMPLETE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char Status;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_AUTHENTICATION_COMPLETE, *PFBT_HCI_AUTHENTICATION_COMPLETE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char Status;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char RemoteName[FBT_HCI_NAME_SIZE];
|
||||
|
||||
} FBT_HCI_REMOTE_NAME_REQUEST_COMPLETE, *PFBT_HCI_REMOTE_NAME_REQUEST_COMPLETE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char Status;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned char EncryptionEnable;
|
||||
|
||||
} FBT_HCI_ENCRYPTION_CHANGE, *PFBT_HCI_ENCRYPTION_CHANGE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char Status;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_CHANGE_CONNECTION_LINK_KEY_COMPLETE, *PFBT_HCI_CHANGE_CONNECTION_LINK_KEY_COMPLETE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char Status;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned char KeyFlag;
|
||||
|
||||
} FBT_HCI_MASTER_LINK_KEY_COMPLETE, *PFBT_HCI_MASTER_LINK_KEY_COMPLETE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char Status;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned char LmpFeatures[8];
|
||||
|
||||
} FBT_HCI_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE, *PFBT_HCI_READ_REMOTE_SUPPORTED_FEATURES_COMPLETE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char Status;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned char LmpVersion;
|
||||
unsigned short ManufacturerName;
|
||||
unsigned short LmpSubversion;
|
||||
|
||||
} FBT_HCI_READ_REMOTE_VERSION_INFORMATION_COMPLETE, *PFBT_HCI_READ_REMOTE_VERSION_INFORMATION_COMPLETE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char Status;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned char Flags;
|
||||
unsigned char ServiceType;
|
||||
unsigned long TokenRate;
|
||||
unsigned long PeakBandwidth;
|
||||
unsigned long Latency;
|
||||
unsigned long DelayVariation;
|
||||
|
||||
} FBT_HCI_QOS_SETUP_COMPLETE, *PFBT_HCI_QOS_SETUP_COMPLETE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char NumHCICommandPackets;
|
||||
unsigned short OpCode;
|
||||
unsigned char Parameters[FBT_HCI_VARIABLE_SIZE];
|
||||
|
||||
} FBT_HCI_COMMAND_COMPLETE, *PFBT_HCI_COMMAND_COMPLETE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char Status;
|
||||
unsigned char NumHCICommandPackets;
|
||||
unsigned short OpCode;
|
||||
|
||||
} FBT_HCI_COMMAND_STATUS, *PFBT_HCI_COMMAND_STATUS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char HardwareCode;
|
||||
|
||||
} FBT_HCI_HARDWARE_ERROR, *PFBT_HCI_HARDWARE_ERROR;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_FLUSH_OCCURRED, *PFBT_HCI_FLUSH_OCCURRED;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char Status;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char NewRole;
|
||||
|
||||
} FBT_HCI_ROLE_CHANGE, *PFBT_HCI_ROLE_CHANGE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char NumberOfHandles;
|
||||
unsigned short ConnectionHandle[FBT_HCI_VARIABLE_SIZE];
|
||||
unsigned short NumberOfCompletedPackets[FBT_HCI_VARIABLE_SIZE];
|
||||
|
||||
} FBT_HCI_NUMBER_OF_COMPLETED_PACKETS, *PFBT_HCI_NUMBER_OF_COMPLETED_PACKETS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char Status;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned char CurrentMode;
|
||||
unsigned short Interval;
|
||||
|
||||
} FBT_HCI_MODE_CHANGE, *PFBT_HCI_MODE_CHANGE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char NumKeys;
|
||||
unsigned char BD_ADDR[FBT_HCI_VARIABLE_SIZE][FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char LinkKey[FBT_HCI_VARIABLE_SIZE][FBT_HCI_LINK_KEY_SIZE];
|
||||
|
||||
} FBT_HCI_RETURN_LINK_KEYS, *PFBT_HCI_RETURN_LINK_KEYS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
|
||||
} FBT_HCI_PIN_CODE_REQUEST, *PFBT_HCI_PIN_CODE_REQUEST;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
|
||||
} FBT_HCI_LINK_KEY_REQUEST, *PFBT_HCI_LINK_KEY_REQUEST;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char LinkKey[FBT_HCI_LINK_KEY_SIZE];
|
||||
|
||||
} FBT_HCI_LINK_KEY_NOTIFICATION, *PFBT_HCI_LINK_KEY_NOTIFICATION;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char HCICommandPacket[FBT_HCI_CMD_MAX_SIZE];
|
||||
|
||||
} FBT_HCI_LOOPBACK_COMMAND, *PFBT_HCI_LOOPBACK_COMMAND;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char LinkType;
|
||||
|
||||
} FBT_HCI_DATA_BUFFER_OVERFLOW, *PFBT_HCI_DATA_BUFFER_OVERFLOW;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned char LmpMaxSlots;
|
||||
|
||||
} FBT_HCI_MAX_SLOTS_CHANGE, *PFBT_HCI_MAX_SLOTS_CHANGE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char Status;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned short ClockOffset;
|
||||
|
||||
} FBT_HCI_READ_CLOCK_OFFSET_COMPLETE, *PFBT_HCI_READ_CLOCK_OFFSET_COMPLETE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char Status;
|
||||
unsigned short ConnectionHandle;
|
||||
unsigned short PacketType;
|
||||
|
||||
} FBT_HCI_CONNECTION_PACKET_TYPE_CHANGED, *PFBT_HCI_CONNECTION_PACKET_TYPE_CHANGED;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned short ConnectionHandle;
|
||||
|
||||
} FBT_HCI_QOS_VIOLATION, *PFBT_HCI_QOS_VIOLATION;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char PageScanMode;
|
||||
|
||||
} FBT_HCI_PAGE_SCAN_MODE_CHANGE, *PFBT_HCI_PAGE_SCAN_MODE_CHANGE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
FBT_HCI_EVENT_HEADER EventHeader;
|
||||
unsigned char BD_ADDR[FBT_HCI_BDADDR_SIZE];
|
||||
unsigned char PageScanRepetitionMode;
|
||||
|
||||
} FBT_HCI_PAGE_SCAN_REPETITION_MODE_CHANGE, *PFBT_HCI_PAGE_SCAN_REPETITION_MODE_CHANGE;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char Status;
|
||||
unsigned char HCIVersion;
|
||||
unsigned short HCIRevision;
|
||||
unsigned char LMPVersion;
|
||||
unsigned short Manufacturer;
|
||||
unsigned short LMPSubVersion;
|
||||
|
||||
} FBT_HCI_READ_LOCAL_VERSION_INFORMATION_COMPLETE;
|
||||
|
||||
// Data Packet Structure
|
||||
typedef struct
|
||||
{
|
||||
unsigned short ConnectionHandle: 12;
|
||||
unsigned short PacketBoundary: 2;
|
||||
unsigned short Broadcast: 2;
|
||||
unsigned short DataLength;
|
||||
unsigned char Data[1];
|
||||
|
||||
} FBT_HCI_DATA_PACKET, *PFBT_HCI_DATA_PACKET;
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#endif // _FBT_HCI_EVENT_STRUCTS_H
|
45
reactos/drivers/bluetooth/fbtusb/include/fbtHciEvents.h
Executable file
45
reactos/drivers/bluetooth/fbtusb/include/fbtHciEvents.h
Executable file
|
@ -0,0 +1,45 @@
|
|||
#ifndef _FBT_HCI_EVENTS_H
|
||||
#define _FBT_HCI_EVENTS_H
|
||||
|
||||
#include "fbtHciEventStructs.h"
|
||||
|
||||
#define FBT_HCI_EVENT_INVALID 0x00
|
||||
#define FBT_HCI_EVENT_INQUIRY_COMPLETE 0x01
|
||||
#define FBT_HCI_EVENT_INQUIRY_RESULT 0x02
|
||||
#define FBT_HCI_EVENT_CONNECTION_COMPLETE 0x03
|
||||
#define FBT_HCI_EVENT_CONNECTION_REQUEST 0x04
|
||||
#define FBT_HCI_EVENT_DISCONNECTION_COMPLETE 0x05
|
||||
#define FBT_HCI_EVENT_AUTHENTICATION_COMPLETE 0x06
|
||||
#define FBT_HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE 0x07
|
||||
#define FBT_HCI_EVENT_ENCRYPTION_CHANGE_EVENT 0x08
|
||||
#define FBT_HCI_EVENT_CHANGE_CONNECTION_LINK_KEY_COMPLETE 0x09
|
||||
#define FBT_HCI_EVENT_MASTER_LINK_KEY_COMPLETE 0x0a
|
||||
#define FBT_HCI_EVENT_READ_REMOTE_SUPPORTED_FEATURES 0x0b
|
||||
#define FBT_HCI_EVENT_READ_REMOTE_VERSION_INFORMATION 0x0c
|
||||
#define FBT_HCI_EVENT_QOS_SETUP_COMPLETE 0x0d
|
||||
#define FBT_HCI_EVENT_COMMAND_COMPLETE 0x0e
|
||||
#define FBT_HCI_EVENT_COMMAND_STATUS 0x0f
|
||||
#define FBT_HCI_EVENT_HARDWARE_ERROR 0x10
|
||||
#define FBT_HCI_EVENT_FLUSH_OCCURRED 0x11
|
||||
#define FBT_HCI_EVENT_ROLE_CHANGE 0x12
|
||||
#define FBT_HCI_EVENT_NUMBER_OF_COMPLETED_PACKETS 0x13
|
||||
#define FBT_HCI_EVENT_MODE_CHANGE 0x14
|
||||
#define FBT_HCI_EVENT_RETURN_LINK_KEYS 0x15
|
||||
#define FBT_HCI_EVENT_PIN_CODE_REQUEST 0x16
|
||||
#define FBT_HCI_EVENT_LINK_KEY_REQUEST 0x17
|
||||
#define FBT_HCI_EVENT_LINK_KEY_NOTIFICATION 0x18
|
||||
#define FBT_HCI_EVENT_LOOPBACK_COMMAND 0x19
|
||||
#define FBT_HCI_EVENT_DATA_BUFFER_OVERFLOW_EVENT 0x1a
|
||||
#define FBT_HCI_EVENT_MAX_SLOTS_CHANGE 0x1b
|
||||
#define FBT_HCI_EVENT_READ_CLOCK_OFFSET 0x1c
|
||||
#define FBT_HCI_EVENT_CONNECTION_PACKET_TYPE_CHANGED 0x1d
|
||||
#define FBT_HCI_EVENT_QOS_VIOLATION 0x1e
|
||||
#define FBT_HCI_EVENT_PAGE_SCAN_MODE_CHANGE 0x1f
|
||||
#define FBT_HCI_EVENT_PAGE_SCAN_REPETITION_MODE_CHANGE 0x20
|
||||
#define FBT_HCI_EVENT_FLOW_SPECIFICATION_COMPLETE 0x21
|
||||
#define FBT_HCI_EVENT_INQUIRY_RESULT_WITH_RSSI 0x22
|
||||
#define FBT_HCI_EVENT_READ_REMOTE_EXTENDED_FEATURES_COMPLETE 0x23
|
||||
#define FBT_HCI_EVENT_SYNCHRONOUS_CONNECTION_COMPLETE 0x24
|
||||
#define FBT_HCI_EVENT_SYNCHRONOUS_CONNECTION_CHANGED 0x25
|
||||
|
||||
#endif // _FBT_HCI_EVENTS_H
|
71
reactos/drivers/bluetooth/fbtusb/include/fbtHciLocal.h
Executable file
71
reactos/drivers/bluetooth/fbtusb/include/fbtHciLocal.h
Executable file
|
@ -0,0 +1,71 @@
|
|||
#ifndef _LOCAL_HCI_H_
|
||||
#define _LOCAL_HCI_H_
|
||||
|
||||
#include "fbtHci.h"
|
||||
|
||||
#define MAX_QUEUED_COMMANDS 100
|
||||
|
||||
typedef struct _QueuedCommand
|
||||
{
|
||||
USHORT nCommand;
|
||||
BYTE *pResultBuffer;
|
||||
DWORD dwBufferSize;
|
||||
HANDLE hEvent;
|
||||
|
||||
} QueuedCommand, *PQueuedCommand;
|
||||
|
||||
// Local HCI command abstraction
|
||||
// 1. Send Command
|
||||
// 2. Wait for Command status / Command complete
|
||||
class CHciLocal : public CHci
|
||||
{
|
||||
public:
|
||||
CHciLocal(void);
|
||||
virtual ~CHciLocal(void);
|
||||
|
||||
virtual int QueueCommand(USHORT nCommand, BYTE *pResultBuffer=NULL, DWORD dwBufferSize=0);
|
||||
virtual int QueueCommandStatus(USHORT nCommand);
|
||||
virtual void DeQueueCommand(int nSlot);
|
||||
virtual DWORD ClearQueue(void);
|
||||
virtual PQueuedCommand GetQueuedCommand(int nSlot);
|
||||
|
||||
virtual DWORD WaitForCommandComplete(int nSlot);
|
||||
virtual DWORD WaitForCommandStatus(int nSlot, BYTE &nStatus);
|
||||
|
||||
virtual DWORD SendReset(void);
|
||||
virtual DWORD SendWriteClassOfDevice(BYTE ClassOfDevice[FBT_HCI_DEVICE_CLASS_SIZE]);
|
||||
virtual DWORD SendSetEventFilter(
|
||||
BYTE nFilterType,
|
||||
BYTE nFilterConditionType,
|
||||
BYTE nCondition[FBT_HCI_MAX_CONDITION_SIZE],
|
||||
BYTE nConditionBytes);
|
||||
|
||||
virtual DWORD SendInquiry(ULONG nLAP, BYTE nInquiryLength, BYTE nNumResponses);
|
||||
virtual DWORD SendInquiryCancel(void);
|
||||
virtual DWORD SendCreateConnection(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE],
|
||||
USHORT nPacketType,
|
||||
BYTE nPageScanRepetitionMode,
|
||||
BYTE nPageScanMode,
|
||||
USHORT nClockOffset,
|
||||
BYTE nAllowRoleSwitch);
|
||||
|
||||
virtual DWORD SendDisconnect(USHORT nConnectionHandle, BYTE nReason);
|
||||
virtual DWORD SendSwitchRole(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE nRole);
|
||||
virtual DWORD SendRemoteNameRequest(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE nPageScanRepetitionMode, BYTE nPageScanMode, USHORT nClockOffset);
|
||||
virtual DWORD SendReadLocalVersionInformation(FBT_HCI_READ_LOCAL_VERSION_INFORMATION_COMPLETE &CommandComplete);
|
||||
|
||||
virtual DWORD OnEvent(PFBT_HCI_EVENT_HEADER pEvent, DWORD dwLength);
|
||||
|
||||
virtual DWORD CommandCompleteHandler(USHORT nCommand, BYTE *pParameters, DWORD dwParameterLength);
|
||||
virtual DWORD CommandStatusHandler(BYTE nStatus, USHORT nCommand);
|
||||
|
||||
protected:
|
||||
virtual int FindCommandSlot(USHORT nCommand);
|
||||
|
||||
QueuedCommand m_QueuedCommands[MAX_QUEUED_COMMANDS];
|
||||
CRITICAL_SECTION m_QueueCriticalSection;
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // _LOCAL_HCI_H_
|
125
reactos/drivers/bluetooth/fbtusb/include/fbtHciOpCodes.h
Executable file
125
reactos/drivers/bluetooth/fbtusb/include/fbtHciOpCodes.h
Executable file
|
@ -0,0 +1,125 @@
|
|||
#ifndef _FBT_HCI_OPCODES_H
|
||||
#define _FBT_HCI_OPCODES_H
|
||||
|
||||
// Opcode Group Field (OGF) codes
|
||||
#define FBT_HCI_OGF_LINK_CONTROL 0x01 // Link control group
|
||||
#define FBT_HCI_OGF_LINK_POLICY 0x02 // Link polic group
|
||||
#define FBT_HCI_OGF_CONTROL_BASEBAND 0x03 // Host Controller & Baseband group
|
||||
#define FBT_HCI_OGF_INFORMATIONAL_PARAMETERS 0x04 // Information parameters group
|
||||
#define FBT_HCI_OGF_STATUS_PARAMETERS 0x05 // Status parameters group
|
||||
#define FBT_HCI_OGF_TESTING 0x06 // Test group
|
||||
|
||||
// Opcode Command Field (OCF) codes
|
||||
// Link control commands
|
||||
#define FBT_HCI_OCF_INQUIRY 0x0001
|
||||
#define FBT_HCI_OCF_INQUIRY_CANCEL 0x0002
|
||||
#define FBT_HCI_OCF_PERIODIC_INQUIRY_MODE 0x0003
|
||||
#define FBT_HCI_OCF_EXIT_PERIODIC_INQUIRY_MODE 0x0004
|
||||
#define FBT_HCI_OCF_CREATE_CONNECTION 0x0005
|
||||
#define FBT_HCI_OCF_DISCONNECT 0x0006
|
||||
#define FBT_HCI_OCF_ADD_SCO_CONNECTION 0x0007
|
||||
|
||||
#define FBT_HCI_OCF_ACCEPT_CONNECTION_REQUEST 0x0009
|
||||
#define FBT_HCI_OCF_REJECT_CONNECTION_REQUEST 0x000A
|
||||
#define FBT_HCI_OCF_LINK_KEY_REQUEST_REPLY 0x000B
|
||||
#define FBT_HCI_OCF_LINK_KEY_REQUEST_NEGATIVE_REPLY 0x000C
|
||||
#define FBT_HCI_OCF_PIN_CODE_REQUEST_REPLY 0x000D
|
||||
#define FBT_HCI_OCF_PIN_CODE_REQUEST_NEGATIVE_REPLY 0x000E
|
||||
#define FBT_HCI_OCF_CHANGE_CONNECTION_PACKET_TYPE 0x000F
|
||||
|
||||
#define FBT_HCI_OCF_AUTHENTICATION_REQUESTED 0x0011
|
||||
#define FBT_HCI_OCF_SET_CONNECTION_ENCRYPTION 0x0013
|
||||
#define FBT_HCI_OCF_CHANGE_CONNECTION_LINK_KEY 0x0015
|
||||
#define FBT_HCI_OCF_MASTER_LINK_KEY 0x0017
|
||||
#define FBT_HCI_OCF_REMOTE_NAME_REQUEST 0x0019
|
||||
#define FBT_HCI_OCF_READ_REMOTE_SUPPORTED_FEATURES 0x001B
|
||||
#define FBT_HCI_OCF_READ_REMOTE_VERSION_INFORMATION 0x001D
|
||||
#define FBT_HCI_OCF_READ_CLOCK_OFFSET 0x001F
|
||||
|
||||
// Link policy commands
|
||||
#define FBT_HCI_OCF_HOLD_MODE 0x0001
|
||||
#define FBT_HCI_OCF_SNIFF_MODE 0x0003
|
||||
#define FBT_HCI_OCF_EXIT_SNIFF_MODE 0x0004
|
||||
#define FBT_HCI_OCF_PARK_MODE 0x0005
|
||||
#define FBT_HCI_OCF_EXIT_PARK_MODE 0x0006
|
||||
#define FBT_HCI_OCF_QOS_SETUP 0x0007
|
||||
#define FBT_HCI_OCF_ROLE_DISCOVERY 0x0009
|
||||
#define FBT_HCI_OCF_SWITCH_ROLE 0x000B
|
||||
#define FBT_HCI_OCF_READ_LINK_POLICY_SETTINGS 0x000C
|
||||
#define FBT_HCI_OCF_WRITE_LINK_POLICY_SETTINGS 0x000D
|
||||
|
||||
// Host controller & baseband commands
|
||||
#define FBT_HCI_OCF_SET_EVENT_MASK 0x0001
|
||||
#define FBT_HCI_OCF_RESET 0x0003
|
||||
#define FBT_HCI_OCF_SET_EVENT_FILTER 0x0005
|
||||
#define FBT_HCI_OCF_FLUSH 0x0008
|
||||
#define FBT_HCI_OCF_READ_PIN_TYPE 0x0009
|
||||
#define FBT_HCI_OCF_WRITE_PIN_TYPE 0x000A
|
||||
#define FBT_HCI_OCF_CREATE_NEW_UNIT_KEY 0x000B
|
||||
#define FBT_HCI_OCF_READ_STORED_LINK_KEY 0x000D
|
||||
#define FBT_HCI_OCF_WRITE_STORED_LINK_KEY 0x0011
|
||||
#define FBT_HCI_OCF_DELETE_STORED_LINK_KEY 0x0012
|
||||
#define FBT_HCI_OCF_CHANGE_LOCAL_NAME 0x0013
|
||||
#define FBT_HCI_OCF_READ_LOCAL_NAME 0x0014
|
||||
#define FBT_HCI_OCF_READ_CONNECTION_ACCEPT_TIMEOUT 0x0015
|
||||
#define FBT_HCI_OCF_WRITE_CONNECTION_ACCEPT_TIMEOUT 0x0016
|
||||
#define FBT_HCI_OCF_READ_PAGE_TIMEOUT 0x0017
|
||||
#define FBT_HCI_OCF_WRITE_PAGE_TIMEOUT 0x0018
|
||||
#define FBT_HCI_OCF_READ_SCAN_ENABLE 0x0019
|
||||
#define FBT_HCI_OCF_WRITE_SCAN_ENABLE 0x001A
|
||||
#define FBT_HCI_OCF_READ_PAGE_SCAN_ACTIVITY 0x001B
|
||||
#define FBT_HCI_OCF_WRITE_PAGE_SCAN_ACTIVITY 0x001C
|
||||
#define FBT_HCI_OCF_READ_INQUIRY_SCAN_ACTIVITY 0x001D
|
||||
#define FBT_HCI_OCF_WRITE_INQUIRY_SCAN_ACTIVITY 0x001E
|
||||
#define FBT_HCI_OCF_READ_AUTHENTICATION_ENABLE 0x001F
|
||||
#define FBT_HCI_OCF_WRITE_AUTHENTICATION_ENABLE 0x0020
|
||||
#define FBT_HCI_OCF_READ_ENCRYPTION_MODE 0x0021
|
||||
#define FBT_HCI_OCF_WRITE_ENCRYPTION_MODE 0x0022
|
||||
#define FBT_HCI_OCF_READ_CLASS_OF_DEVICE 0x0023
|
||||
#define FBT_HCI_OCF_WRITE_CLASS_OF_DEVICE 0x0024
|
||||
#define FBT_HCI_OCF_READ_VOICE_SETTING 0x0025
|
||||
#define FBT_HCI_OCF_WRITE_VOICE_SETTING 0x0026
|
||||
#define FBT_HCI_OCF_READ_AUTOMATIC_FLUSH_TIMEOUT 0x0027
|
||||
#define FBT_HCI_OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT 0x0028
|
||||
#define FBT_HCI_OCF_READ_NUM_BROADCAST_RETRANSMISSIONS 0x0029
|
||||
#define FBT_HCI_OCF_WRITE_NUM_BROADCAST_RETRANSMISSIONS 0x002A
|
||||
#define FBT_HCI_OCF_READ_HOLD_MODE_ACTIVITY 0x002B
|
||||
#define FBT_HCI_OCF_WRITE_HOLD_MODE_ACTIVITY 0x002C
|
||||
#define FBT_HCI_OCF_READ_TRANSMIT_POWER_LEVEL 0x002D
|
||||
#define FBT_HCI_OCF_READ_SCO_FLOW_CONTROL_ENABLE 0x002E
|
||||
#define FBT_HCI_OCF_WRITE_SCO_FLOW_CONTROL_ENABLE 0x002F
|
||||
#define FBT_HCI_OCF_SET_HOST_CONTROLLER_TO_HOST_FLOW_CONTROL 0x0031
|
||||
#define FBT_HCI_OCF_HOST_BUFFER_SIZE 0x0033
|
||||
#define FBT_HCI_OCF_HOST_NUMBER_OF_COMPLETED_PACKETS 0x0035
|
||||
#define FBT_HCI_OCF_READ_LINK_SUPERVISION_TIMEOUT 0x0036
|
||||
#define FBT_HCI_OCF_WRITE_LINK_SUPERVISION_TIMEOUT 0x0037
|
||||
#define FBT_HCI_OCF_READ_NUMBER_OF_SUPPORTED_IAC 0x0038
|
||||
#define FBT_HCI_OCF_READ_CURRENT_IAC_LAP 0x0039
|
||||
#define FBT_HCI_OCF_WRITE_CURRENT_IAC_LAP 0x003A
|
||||
#define FBT_HCI_OCF_READ_PAGE_SCAN_PERIOD_MODE 0x003B
|
||||
#define FBT_HCI_OCF_WRITE_PAGE_SCAN_PERIOD_MODE 0x003C
|
||||
#define FBT_HCI_OCF_READ_PAGE_SCAN_MODE 0x003D
|
||||
#define FBT_HCI_OCF_WRITE_PAGE_SCAN_MODE 0x003E
|
||||
|
||||
// Informational parameter commands
|
||||
#define FBT_HCI_OCF_READ_LOCAL_VERSION_INFORMATION 0x0001
|
||||
#define FBT_HCI_OCF_LOCAL_SUPPPROTED_FEATURES 0x0003
|
||||
#define FBT_HCI_OCF_READ_BUFFER_SIZE 0x0005
|
||||
#define FBT_HCI_OCF_READ_COUNTRY_CODE 0x0007
|
||||
#define FBT_HCI_OCF_READ_BD_ADDR 0x0009
|
||||
|
||||
// Status parameters commands
|
||||
#define FBT_HCI_OCF_READ_FAILED_CONTACT_COUNTER 0x0001
|
||||
#define FBT_HCI_OCF_RESET_FAILED_CONTACT_COUNTER 0x0002
|
||||
#define FBT_HCI_OCF_GET_LINK_QUALITY 0x0003
|
||||
#define FBT_HCI_OCF_READ_RSSI 0x0005
|
||||
|
||||
// Test commands
|
||||
#define FBT_HCI_OCF_READ_LOOPBACK_MODE 0x0001
|
||||
#define FBT_HCI_OCF_WRITE_LOOPBACK_MODE 0x0002
|
||||
#define FBT_HCI_OCF_ENABLE_DEVICE_UNDER_TEST_MODE 0x0003
|
||||
|
||||
#define FBT_HCI_OGF_FROM_COMMAND(cmd) (cmd>>10)
|
||||
#define FBT_HCI_OCF_FROM_COMMAND(cmd) (cmd&0x3FF)
|
||||
|
||||
#endif // _FBT_HCI_OPCODES_H
|
51
reactos/drivers/bluetooth/fbtusb/include/fbtHciParms.h
Executable file
51
reactos/drivers/bluetooth/fbtusb/include/fbtHciParms.h
Executable file
|
@ -0,0 +1,51 @@
|
|||
#ifndef _FBT_HCI_PARAMETERS_H
|
||||
#define _FBT_HCI_PARAMETERS_H
|
||||
|
||||
// HCI header types
|
||||
#define FBT_HCI_SYNC_HCI_COMMAND_PACKET 0x01
|
||||
#define FBT_HCI_SYNC_ACL_DATA_PACKET 0x02
|
||||
#define FBT_HCI_SYNC_SCO_DATA_PACKET 0x03
|
||||
#define FBT_HCI_SYNC_HCI_EVENT_PACKET 0x04
|
||||
|
||||
// Packet types for use in CreateConnection
|
||||
#define FBT_HCI_PACKET_TYPE_DM1 0x0008 // 1 time slot, 1-18 bytes of data, FEC encoded
|
||||
#define FBT_HCI_PACKET_TYPE_DH1 0x0010 // 1 time slot, 1-28 bytes of data, not FEC encoded
|
||||
|
||||
#define FBT_HCI_PACKET_TYPE_DM3 0x0400 // 3 time slots, 2-123 bytes of data, FEC encoded
|
||||
#define FBT_HCI_PACKET_TYPE_DH3 0x0800 // 3 time slots, 2-185 bytes of data, not FEC encoded
|
||||
|
||||
#define FBT_HCI_PACKET_TYPE_DM5 0x4000 // 5 time slots, 2-226 bytes of data, FEC encoded
|
||||
#define FBT_HCI_PACKET_TYPE_DH5 0x8000 // 3 time slots, 2-341 bytes of data, not FEC encoded
|
||||
|
||||
#define FBT_HCI_PACKET_TYPE_ALL (FBT_HCI_PACKET_TYPE_DM1|FBT_HCI_PACKET_TYPE_DH1|FBT_HCI_PACKET_TYPE_DM3|FBT_HCI_PACKET_TYPE_DH3|FBT_HCI_PACKET_TYPE_DM5|FBT_HCI_PACKET_TYPE_DH5)
|
||||
|
||||
// LAP codes for use in Inquiry
|
||||
#define FBT_HCI_LAP_GIAC 0x9E8B33
|
||||
#define FBT_HCI_LAP_LIAC 0x9E8B00
|
||||
|
||||
// Link Types
|
||||
#define FBT_HCI_LINK_TYPE_SCO 0x00
|
||||
#define FBT_HCI_LINK_TYPE_ACL 0x01
|
||||
|
||||
// Roles
|
||||
#define FBT_HCI_ROLE_MASTER 0x00
|
||||
#define FBT_HCI_ROLE_SLAVE 0x01
|
||||
|
||||
// Event Filters
|
||||
#define FBT_HCI_FILTER_NONE 0x00
|
||||
#define FBT_HCI_FILTER_INQUIRY_RESULT 0x01
|
||||
#define FBT_HCI_FILTER_CONNECTION_SETUP 0x02
|
||||
|
||||
#define FBT_HCI_FILTER_ALL 0x00
|
||||
#define FBT_HCI_FILTER_CLASS_OF_DEVICE 0x01
|
||||
#define FBT_HCI_FILTER_BDADDR 0x02
|
||||
|
||||
// Data packet parameters
|
||||
#define FBT_HCI_PACKET_BOUNDARY_FRAGMENT 0x01
|
||||
#define FBT_HCI_PACKET_BOUNDARY_START 0x02
|
||||
|
||||
#define FBT_HCI_BROADCAST_POINT_TO_POINT 0x00
|
||||
#define FBT_HCI_BROADCAST_ACTIVE_SLAVE 0x01
|
||||
#define FBT_HCI_BROADCAST_PARKED_SLAVE 0x02
|
||||
|
||||
#endif // _FBT_HCI_PARAMETERS_H
|
51
reactos/drivers/bluetooth/fbtusb/include/fbtHciRoundTrip.h
Executable file
51
reactos/drivers/bluetooth/fbtusb/include/fbtHciRoundTrip.h
Executable file
|
@ -0,0 +1,51 @@
|
|||
#ifndef _ROUND_TRIP_HCI_H_
|
||||
#define _ROUND_TRIP_HCI_H_
|
||||
|
||||
#include "fbtHciLocal.h"
|
||||
|
||||
// Complete round trip HCI abstraction
|
||||
// 1. Send Command
|
||||
// 2. Wait for Command status / Command complete
|
||||
// 3. Wait fo event
|
||||
class CHciRoundTrip : public CHciLocal
|
||||
{
|
||||
public:
|
||||
|
||||
CHciRoundTrip();
|
||||
virtual ~CHciRoundTrip();
|
||||
|
||||
virtual DWORD QueueEvent(BYTE EventCode, LPVOID pParameters, DWORD dwParameterLength);
|
||||
virtual DWORD WaitForEvent();
|
||||
|
||||
virtual DWORD OnEvent(PFBT_HCI_EVENT_HEADER pEvent, DWORD Length);
|
||||
|
||||
virtual DWORD ReadBDADDR(BYTE *BDADDR);
|
||||
virtual DWORD ReadClassOfDevice(BYTE *ClassOfDevice);
|
||||
virtual DWORD ReadLocalName(BYTE *Name);
|
||||
virtual DWORD CreateConnection(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE],
|
||||
USHORT PacketType,
|
||||
BYTE PageScanRepetitionMode,
|
||||
BYTE PageScanMode,
|
||||
USHORT ClockOffset,
|
||||
BYTE AllowRoleSwitch,
|
||||
USHORT &ConnectionHandle);
|
||||
|
||||
virtual DWORD Disconnect(USHORT ConnectionHandler, BYTE Reason);
|
||||
virtual DWORD SwitchRole(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE Role);
|
||||
virtual DWORD RemoteNameRequest(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE],
|
||||
BYTE PageScanRepetitionMode,
|
||||
BYTE PageScanMode,
|
||||
USHORT ClockOffset,
|
||||
BYTE Name[FBT_HCI_NAME_SIZE]);
|
||||
|
||||
protected:
|
||||
BYTE m_PendingEvent;
|
||||
LPVOID m_pEventParameters;
|
||||
DWORD m_dwEventParameterLength;
|
||||
|
||||
HANDLE m_hEventSignal;
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // _ROUND_TRIP_HCI_H_
|
27
reactos/drivers/bluetooth/fbtusb/include/fbtHciSizes.h
Executable file
27
reactos/drivers/bluetooth/fbtusb/include/fbtHciSizes.h
Executable file
|
@ -0,0 +1,27 @@
|
|||
#ifndef _FBT_HCI_SIZES_H
|
||||
#define _FBT_HCI_SIZES_H
|
||||
|
||||
// Sizes
|
||||
#define FBT_HCI_CMD_MIN_SIZE 3
|
||||
#define FBT_HCI_CMD_MAX_SIZE 258
|
||||
|
||||
#define FBT_HCI_EVENT_MAX_SIZE 257
|
||||
|
||||
#define FBT_HCI_DATA_MIN_SIZE 5
|
||||
#define FBT_HCI_DATA_MAX_SIZE 343
|
||||
|
||||
#define FBT_HCI_BDADDR_SIZE 6
|
||||
#define FBT_HCI_NAME_SIZE 248
|
||||
|
||||
#define FBT_HCI_DEVICE_CLASS_SIZE 3
|
||||
|
||||
#define FBT_HCI_LAP_SIZE 3
|
||||
#define FBT_HCI_MAX_CONDITION_SIZE 7
|
||||
|
||||
#define FBT_HCI_LINK_KEY_SIZE 16
|
||||
#define FBT_HCI_PIN_CODE_SIZE 16
|
||||
|
||||
#define FBT_HCI_VARIABLE_SIZE 1
|
||||
|
||||
|
||||
#endif // _FBT_HCI_SIZES_H
|
22
reactos/drivers/bluetooth/fbtusb/include/fbtSeXcpt.h
Executable file
22
reactos/drivers/bluetooth/fbtusb/include/fbtSeXcpt.h
Executable file
|
@ -0,0 +1,22 @@
|
|||
#ifndef __SEEXCEPTION_H__
|
||||
#define __SEEXCEPTION_H__
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
class fbtSeException
|
||||
{
|
||||
public:
|
||||
fbtSeException(unsigned int nSeCode, _EXCEPTION_POINTERS* pExcPointers);
|
||||
fbtSeException(fbtSeException & CseExc);
|
||||
|
||||
unsigned int GetSeCode(void);
|
||||
|
||||
private:
|
||||
unsigned int m_nSeCode;
|
||||
_EXCEPTION_POINTERS* m_pExcPointers;
|
||||
|
||||
};
|
||||
|
||||
void fbtXcptEnableSEHandling();
|
||||
|
||||
#endif //__SEEXCEPTION_H__
|
61
reactos/drivers/bluetooth/fbtusb/include/fbtdev.h
Executable file
61
reactos/drivers/bluetooth/fbtusb/include/fbtdev.h
Executable file
|
@ -0,0 +1,61 @@
|
|||
// Copyright (c) 2004, Antony C. Roberts
|
||||
|
||||
// Use of this file is subject to the terms
|
||||
// described in the LICENSE.TXT file that
|
||||
// accompanies this file.
|
||||
//
|
||||
// Your use of this file indicates your
|
||||
// acceptance of the terms described in
|
||||
// LICENSE.TXT.
|
||||
//
|
||||
// http://www.freebt.net
|
||||
|
||||
#ifndef _FREEBT_DEV_H
|
||||
#define _FREEBT_DEV_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
NTSTATUS FreeBT_DispatchCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS FreeBT_DispatchClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS FreeBT_DispatchDevCtrl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS FreeBT_ResetPipe(IN PDEVICE_OBJECT DeviceObject, IN USBD_PIPE_HANDLE PipeInfo);
|
||||
NTSTATUS FreeBT_ResetDevice(IN PDEVICE_OBJECT DeviceObject);
|
||||
NTSTATUS FreeBT_GetPortStatus(IN PDEVICE_OBJECT DeviceObject, IN PULONG PortStatus);
|
||||
NTSTATUS FreeBT_ResetParentPort(IN IN PDEVICE_OBJECT DeviceObject);
|
||||
|
||||
NTSTATUS SubmitIdleRequestIrp(IN PDEVICE_EXTENSION DeviceExtension);
|
||||
VOID IdleNotificationCallback(IN PDEVICE_EXTENSION DeviceExtension);
|
||||
NTSTATUS IdleNotificationRequestComplete(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PIRP Irp,
|
||||
IN PDEVICE_EXTENSION DeviceExtension);
|
||||
|
||||
VOID CancelSelectSuspend(IN PDEVICE_EXTENSION DeviceExtension);
|
||||
VOID PoIrpCompletionFunc(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN UCHAR MinorFunction,
|
||||
IN POWER_STATE PowerState,
|
||||
IN PVOID Context,
|
||||
IN PIO_STATUS_BLOCK IoStatus);
|
||||
|
||||
VOID PoIrpAsyncCompletionFunc(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN UCHAR MinorFunction,
|
||||
IN POWER_STATE PowerState,
|
||||
IN PVOID Context,
|
||||
IN PIO_STATUS_BLOCK IoStatus);
|
||||
|
||||
VOID WWIrpCompletionFunc(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN UCHAR MinorFunction,
|
||||
IN POWER_STATE PowerState,
|
||||
IN PVOID Context,
|
||||
IN PIO_STATUS_BLOCK IoStatus);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
134
reactos/drivers/bluetooth/fbtusb/include/fbthci.h
Executable file
134
reactos/drivers/bluetooth/fbtusb/include/fbthci.h
Executable file
|
@ -0,0 +1,134 @@
|
|||
#ifndef _HCI_H_
|
||||
#define _HCI_H_
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#include "fbthw.h"
|
||||
#include "fbtHciDefs.h"
|
||||
|
||||
// Number of overlapped requests to have pending in the driver
|
||||
#define HCI_NUMBER_OF_OVERLAPPED_LISTENS MAXIMUM_WAIT_OBJECTS-1
|
||||
|
||||
// HCI Abstraction layer
|
||||
class CHci;
|
||||
typedef struct
|
||||
{
|
||||
PFBT_HCI_EVENT_HEADER pEvent;
|
||||
DWORD dwLength;
|
||||
CHci *pThis;
|
||||
|
||||
} HCI_EVENT, *PHCI_EVENT;
|
||||
|
||||
class CHci : public CBTHW
|
||||
{
|
||||
public:
|
||||
CHci(void);
|
||||
virtual ~CHci(void);
|
||||
|
||||
virtual DWORD StartEventListener(void);
|
||||
virtual DWORD StopEventListener(void);
|
||||
virtual DWORD OnEvent(PFBT_HCI_EVENT_HEADER pEvent, DWORD Length);
|
||||
|
||||
static LPCTSTR GetEventText(BYTE Event);
|
||||
static LPCTSTR GetStatusText(BYTE Status);
|
||||
static LPCTSTR GetManufacturerName(USHORT Company);
|
||||
|
||||
virtual DWORD OnCommandComplete(BYTE NumHCICommandPackets, USHORT CommandOpcode, BYTE *Parameters, DWORD ParameterLength);
|
||||
virtual DWORD OnCommandStatus(BYTE Status, BYTE NumHCICommandPackets, USHORT CommandOpcode);
|
||||
|
||||
virtual DWORD OnConnectionRequest(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], ULONG ClassOfDevice[FBT_HCI_DEVICE_CLASS_SIZE], BYTE LinkType);
|
||||
virtual DWORD OnConnectionComplete(BYTE Status, USHORT ConnectionHandle, BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE LinkType, BYTE EncryptionMode);
|
||||
virtual DWORD OnDisconnectionComplete(BYTE Status, USHORT ConnectionHandle, BYTE Reason);
|
||||
|
||||
virtual DWORD OnInquiryComplete(BYTE Status, BYTE NumResponses);
|
||||
virtual DWORD OnInquiryResult(BYTE NumResponses, BYTE BD_ADDR[FBT_HCI_VARIABLE_SIZE][FBT_HCI_BDADDR_SIZE], BYTE PageScanRepetitionMode[FBT_HCI_VARIABLE_SIZE], BYTE PageScanPeriodMode[FBT_HCI_VARIABLE_SIZE], BYTE PageScanMode[FBT_HCI_VARIABLE_SIZE], BYTE ClassOfDevice[FBT_HCI_VARIABLE_SIZE][FBT_HCI_DEVICE_CLASS_SIZE], USHORT ClockOffset[FBT_HCI_VARIABLE_SIZE]);
|
||||
|
||||
virtual DWORD OnRemoteNameRequestComplete(BYTE Status, BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE RemoteName[FBT_HCI_NAME_SIZE]);
|
||||
|
||||
virtual DWORD OnRoleChange(BYTE Status, BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE Role);
|
||||
|
||||
virtual DWORD OnPINCodeRequest(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE]);
|
||||
|
||||
virtual DWORD OnLinkKeyNotification(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE LinkKey[FBT_HCI_LINK_KEY_SIZE]);
|
||||
virtual DWORD OnLinkKeyRequest(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE]);
|
||||
|
||||
virtual DWORD OnAuthenticationComplete(BYTE Status, USHORT ConnectionHandle);
|
||||
|
||||
virtual DWORD OnReadLocalNameComplete(BYTE Status, BYTE Name[FBT_HCI_NAME_SIZE]);
|
||||
|
||||
virtual DWORD OnUnknown(PFBT_HCI_EVENT_HEADER pEvent, DWORD Length);
|
||||
|
||||
virtual DWORD SendReset(void);
|
||||
|
||||
virtual DWORD SendInquiry(ULONG LAP, BYTE InquiryLength, BYTE NumResponses);
|
||||
virtual DWORD SendInquiryCancel(void);
|
||||
|
||||
virtual DWORD SendReadBDADDR(void);
|
||||
|
||||
virtual DWORD SendWriteScanEnable(BYTE ScanEnable);
|
||||
|
||||
virtual DWORD SendWriteAuthenticationEnable(BYTE ScanEnable);
|
||||
|
||||
virtual DWORD SendSetEventFilter(BYTE FilterType,
|
||||
BYTE FilterConditionType,
|
||||
BYTE Condition[FBT_HCI_MAX_CONDITION_SIZE],
|
||||
BYTE ConditionBytes);
|
||||
|
||||
virtual DWORD SendReadClassOfDevice(void);
|
||||
|
||||
virtual DWORD SendWriteClassOfDevice(BYTE ClassOfDevice[FBT_HCI_DEVICE_CLASS_SIZE]);
|
||||
|
||||
virtual DWORD SendCreateConnection(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE],
|
||||
USHORT PacketType,
|
||||
BYTE PageScanRepetitionMode,
|
||||
BYTE PageScanMode,
|
||||
USHORT ClockOffset,
|
||||
BYTE AllowRoleSwitch);
|
||||
|
||||
virtual DWORD SendAcceptConnectionRequest(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE RoleSwitch);
|
||||
|
||||
virtual DWORD SendDisconnect(USHORT ConnectionHandle, BYTE Reason);
|
||||
|
||||
virtual DWORD SendWriteLinkSupervisionTimeout(USHORT ConnectionHandle, USHORT LinkSupervisionTimeout);
|
||||
|
||||
virtual DWORD SendWritePageTimeout(USHORT PageTimeout);
|
||||
|
||||
virtual DWORD SendRemoteNameRequest(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE PageScanRepetitionMode, BYTE PageScanMode, USHORT ClockOffset);
|
||||
|
||||
virtual DWORD SendReadLocalName(void);
|
||||
|
||||
virtual DWORD SendChangeLocalName(BYTE Name[FBT_HCI_NAME_SIZE]);
|
||||
|
||||
virtual DWORD SendSwitchRole(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE Role);
|
||||
|
||||
virtual DWORD SendPINCodeRequestReply(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE PINCodeLength, BYTE PINCode[FBT_HCI_PIN_CODE_SIZE]);
|
||||
virtual DWORD SendPINCodeRequestNegativeReply(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE]);
|
||||
|
||||
virtual DWORD SendLinkKeyRequestReply(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE], BYTE LinkKey[FBT_HCI_LINK_KEY_SIZE]);
|
||||
virtual DWORD SendLinkKeyRequestNegativeReply(BYTE BD_ADDR[FBT_HCI_BDADDR_SIZE]);
|
||||
|
||||
virtual DWORD SendReadLocalVersionInformation(void);
|
||||
|
||||
DWORD CompareBDADDRs(BYTE BD_ADDR1[FBT_HCI_BDADDR_SIZE], BYTE BD_ADDR2[FBT_HCI_BDADDR_SIZE]);
|
||||
|
||||
protected:
|
||||
friend static DWORD CALLBACK Listener(LPVOID pContext);
|
||||
friend static DWORD EventHandler(PFBT_HCI_EVENT_HEADER pEvent, DWORD Length);
|
||||
|
||||
virtual DWORD SendHciCommand(PFBT_HCI_CMD_HEADER lpCommand, DWORD dwBufferSize);
|
||||
|
||||
DWORD SendListenForEvent(OVERLAPPED *pOverlapped, BYTE *pEventBuffer);
|
||||
|
||||
HANDLE m_hStopListeningEvent;
|
||||
HANDLE m_hListenerReadyEvent;
|
||||
HANDLE m_hListenerThread;
|
||||
|
||||
DWORD m_dwListenerThreadId;
|
||||
|
||||
OVERLAPPED m_Overlappeds[HCI_NUMBER_OF_OVERLAPPED_LISTENS];
|
||||
BYTE m_pEventBuffers[HCI_NUMBER_OF_OVERLAPPED_LISTENS][FBT_HCI_EVENT_MAX_SIZE];
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // _HCI_H_
|
36
reactos/drivers/bluetooth/fbtusb/include/fbthw.h
Executable file
36
reactos/drivers/bluetooth/fbtusb/include/fbthw.h
Executable file
|
@ -0,0 +1,36 @@
|
|||
#ifndef _FBT_HW_H_
|
||||
#define _FBT_HW_H_
|
||||
|
||||
#include <winioctl.h>
|
||||
|
||||
// HW Driver Abstraction layer
|
||||
class CBTHW
|
||||
{
|
||||
public:
|
||||
// The driver is opened for OVERLAPPED I/O
|
||||
CBTHW();
|
||||
virtual ~CBTHW();
|
||||
|
||||
// Set the driver instances symbolic name
|
||||
void SetDeviceName(LPCTSTR szDeviceName);
|
||||
DWORD GetDeviceName(LPTSTR szBuffer, DWORD dwBufferSize);
|
||||
|
||||
// Open a handle to the driver instance
|
||||
virtual DWORD Attach(LPCSTR szDeviceName);
|
||||
virtual DWORD Detach();
|
||||
HANDLE GetDriverHandle();
|
||||
BOOL IsAttached() {return GetDriverHandle()!=INVALID_HANDLE_VALUE;}
|
||||
|
||||
// Send a command to the driver
|
||||
DWORD SendCommand(DWORD dwCommand, LPVOID lpInBuffer=NULL, DWORD dwInBufferSize=0, LPVOID lpOutBuffer=NULL, DWORD dwOutBufferSize=0, OVERLAPPED *pOverlapped=NULL);
|
||||
DWORD SendData(LPVOID lpBuffer, DWORD dwBufferSize, DWORD *dwBytesSent, OVERLAPPED *pOverlapped);
|
||||
DWORD GetData(LPVOID lpBuffer, DWORD dwBufferSize, DWORD *dwBytesRead, OVERLAPPED *pOverlapped);
|
||||
|
||||
protected:
|
||||
HANDLE m_hDriver;
|
||||
TCHAR m_szDeviceName[1024];
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // _FBT_HW_H_
|
26
reactos/drivers/bluetooth/fbtusb/include/fbtlog.h
Executable file
26
reactos/drivers/bluetooth/fbtusb/include/fbtlog.h
Executable file
|
@ -0,0 +1,26 @@
|
|||
#ifndef _FBT_DEBUG
|
||||
#define _FBT_DEBUG
|
||||
|
||||
#define fbtLog_None 0
|
||||
#define fbtLog_Failure 1
|
||||
#define fbtLog_Warning 2
|
||||
#define fbtLog_Notice 3
|
||||
#define fbtLog_Enter 4
|
||||
#define fbtLog_Exit 4
|
||||
#define fbtLog_Verbose 5
|
||||
#define fbtLog_Exception 0
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void fbtLog(unsigned int nLevel, const char *szText, ...);
|
||||
BOOL fbtLogSetFile(char *szDebugFile);
|
||||
void fbtLogSetLevel(unsigned int nLevel);
|
||||
unsigned int fbtLogGetLevel(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
61
reactos/drivers/bluetooth/fbtusb/include/fbtpnp.h
Executable file
61
reactos/drivers/bluetooth/fbtusb/include/fbtpnp.h
Executable file
|
@ -0,0 +1,61 @@
|
|||
// Copyright (c) 2004, Antony C. Roberts
|
||||
|
||||
// Use of this file is subject to the terms
|
||||
// described in the LICENSE.TXT file that
|
||||
// accompanies this file.
|
||||
//
|
||||
// Your use of this file indicates your
|
||||
// acceptance of the terms described in
|
||||
// LICENSE.TXT.
|
||||
//
|
||||
// http://www.freebt.net
|
||||
|
||||
#ifndef _FREEBT_PNP_H
|
||||
#define _FREEBT_PNP_H
|
||||
|
||||
#define REMOTE_WAKEUP_MASK 0x20
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
NTSTATUS FreeBT_DispatchPnP(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS HandleStartDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS HandleQueryStopDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS HandleQueryRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS HandleCancelRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS HandleSurpriseRemoval(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS HandleRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS HandleCancelStopDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS HandleStopDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS HandleQueryCapabilities(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS ReadandSelectDescriptors(IN PDEVICE_OBJECT DeviceObject);
|
||||
NTSTATUS ConfigureDevice(IN PDEVICE_OBJECT DeviceObject);
|
||||
NTSTATUS SelectInterfaces(IN PDEVICE_OBJECT DeviceObject, IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor);
|
||||
NTSTATUS DeconfigureDevice(IN PDEVICE_OBJECT DeviceObject);
|
||||
NTSTATUS CallUSBD(IN PDEVICE_OBJECT DeviceObject, IN PURB Urb);
|
||||
VOID ProcessQueuedRequests(IN OUT PDEVICE_EXTENSION DeviceExtension);
|
||||
NTSTATUS FreeBT_GetRegistryDword(IN PWCHAR RegPath, IN PWCHAR ValueName, IN OUT PULONG Value);
|
||||
NTSTATUS FreeBT_DispatchClean(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
VOID DpcRoutine(
|
||||
IN PKDPC Dpc,
|
||||
IN PVOID DeferredContext,
|
||||
IN PVOID SystemArgument1,
|
||||
IN PVOID SystemArgument2);
|
||||
|
||||
VOID IdleRequestWorkerRoutine(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context);
|
||||
NTSTATUS FreeBT_AbortPipes(IN PDEVICE_OBJECT DeviceObject);
|
||||
NTSTATUS IrpCompletionRoutine(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context);
|
||||
NTSTATUS CanStopDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS CanRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS ReleaseMemory(IN PDEVICE_OBJECT DeviceObject);
|
||||
LONG FreeBT_IoIncrement(IN OUT PDEVICE_EXTENSION DeviceExtension);
|
||||
LONG FreeBT_IoDecrement(IN OUT PDEVICE_EXTENSION DeviceExtension);
|
||||
BOOLEAN CanDeviceSuspend(IN PDEVICE_EXTENSION DeviceExtension);
|
||||
PCHAR PnPMinorFunctionString (IN UCHAR MinorFunction);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
74
reactos/drivers/bluetooth/fbtusb/include/fbtpwr.h
Executable file
74
reactos/drivers/bluetooth/fbtusb/include/fbtpwr.h
Executable file
|
@ -0,0 +1,74 @@
|
|||
// Copyright (c) 2004, Antony C. Roberts
|
||||
|
||||
// Use of this file is subject to the terms
|
||||
// described in the LICENSE.TXT file that
|
||||
// accompanies this file.
|
||||
//
|
||||
// Your use of this file indicates your
|
||||
// acceptance of the terms described in
|
||||
// LICENSE.TXT.
|
||||
//
|
||||
// http://www.freebt.net
|
||||
|
||||
#ifndef _FREEBT_POWER_H
|
||||
#define _FREEBT_POWER_H
|
||||
|
||||
typedef struct _POWER_COMPLETION_CONTEXT
|
||||
{
|
||||
PDEVICE_OBJECT DeviceObject;
|
||||
PIRP SIrp;
|
||||
|
||||
} POWER_COMPLETION_CONTEXT, *PPOWER_COMPLETION_CONTEXT;
|
||||
|
||||
typedef struct _WORKER_THREAD_CONTEXT
|
||||
{
|
||||
PDEVICE_OBJECT DeviceObject;
|
||||
PIRP Irp;
|
||||
PIO_WORKITEM WorkItem;
|
||||
|
||||
} WORKER_THREAD_CONTEXT, *PWORKER_THREAD_CONTEXT;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
NTSTATUS FreeBT_DispatchPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS HandleSystemQueryPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS HandleSystemSetPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS HandleDeviceQueryPower(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
||||
NTSTATUS SysPoCompletionRoutine(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PDEVICE_EXTENSION DeviceExtension);
|
||||
VOID SendDeviceIrp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
VOID DevPoCompletionRoutine(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN UCHAR MinorFunction,
|
||||
IN POWER_STATE PowerState,
|
||||
IN PVOID Context,
|
||||
IN PIO_STATUS_BLOCK IoStatus
|
||||
);
|
||||
|
||||
NTSTATUS HandleDeviceSetPower(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS FinishDevPoUpIrp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PDEVICE_EXTENSION DeviceExtension);
|
||||
NTSTATUS SetDeviceFunctional(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PDEVICE_EXTENSION DeviceExtension);
|
||||
NTSTATUS FinishDevPoDnIrp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PDEVICE_EXTENSION DeviceExtension);
|
||||
NTSTATUS HoldIoRequests(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
VOID HoldIoRequestsWorkerRoutine(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context);
|
||||
NTSTATUS QueueRequest(IN OUT PDEVICE_EXTENSION DeviceExtension, IN PIRP Irp);
|
||||
VOID CancelQueued(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS WaitWakeCompletionRoutine(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PDEVICE_EXTENSION DeviceExtension);
|
||||
NTSTATUS IssueWaitWake(IN PDEVICE_EXTENSION DeviceExtension);
|
||||
VOID CancelWaitWake(IN PDEVICE_EXTENSION DeviceExtension);
|
||||
VOID WaitWakeCallback(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN UCHAR MinorFunction,
|
||||
IN POWER_STATE PowerState,
|
||||
IN PVOID Context,
|
||||
IN PIO_STATUS_BLOCK IoStatus
|
||||
);
|
||||
|
||||
PCHAR PowerMinorFunctionString(IN UCHAR MinorFunction);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
58
reactos/drivers/bluetooth/fbtusb/include/fbtreg.h
Executable file
58
reactos/drivers/bluetooth/fbtusb/include/fbtreg.h
Executable file
|
@ -0,0 +1,58 @@
|
|||
#ifndef REG_H
|
||||
#define REG_H
|
||||
|
||||
class CReg
|
||||
{
|
||||
public:
|
||||
// Constructor
|
||||
CReg(LPCSTR lpszSubKey, HKEY hRootKey=HKEY_CURRENT_USER, REGSAM regSam=KEY_ALL_ACCESS, BOOL bCreate=TRUE);
|
||||
|
||||
// Destructor
|
||||
~CReg();
|
||||
|
||||
// Get the specified registry value
|
||||
BOOL GetValue(LPCSTR lpszValueName, LPVOID lpvData, DWORD *dwBuffSize=NULL, DWORD *dwDataType=NULL);
|
||||
BOOL GetValue(LPCSTR lpszValueName, LPSTR lpszValue, DWORD dwBalueSize);
|
||||
// BOOL GetValue(LPCSTR lpszValueName, CString &szData, DWORD *dwDataType=NULL);
|
||||
BOOL GetValue(LPCSTR lpszValueName, DWORD &dwData);
|
||||
BOOL GetValue(LPCSTR lpszValueName, BOOL &bData);
|
||||
|
||||
// Set the specified registry value
|
||||
BOOL SetValue(LPCSTR lpszValueName, const LPVOID lpvData, DWORD dwDataSize, DWORD dwDataType=REG_SZ);
|
||||
BOOL SetValue(LPCSTR lpszValueName, LPCSTR lpszValue, DWORD dwDataSize=0, DWORD dwDataType=REG_SZ);
|
||||
BOOL SetValue(LPCSTR lpszValueName, LPSTR lpszValue, DWORD dwValueSize);
|
||||
// BOOL SetValue(LPCSTR lpszValueName, CString &szData, DWORD dwDataSize=0, DWORD dwDataType=REG_SZ);
|
||||
BOOL SetValue(LPCSTR lpszValueName, DWORD dwData);
|
||||
BOOL SetValue(LPCSTR lpszValueName, BOOL bData);
|
||||
|
||||
// Delete a value in the key
|
||||
BOOL DeleteValue(LPCSTR lpszValueName);
|
||||
|
||||
// Delete all the values in the key
|
||||
BOOL DeleteValues();
|
||||
|
||||
// Delete a sub key
|
||||
BOOL DeleteKey(LPCSTR lpszKeyName);
|
||||
|
||||
// Retrieve the names of the values in the key
|
||||
// BOOL EnumerateValues(CStringArray &nszValueNames);
|
||||
|
||||
BOOL IsValid() {return m_hKey!=NULL;}
|
||||
|
||||
protected:
|
||||
// Create a new registry key
|
||||
LONG Create(LPCSTR lpszSubKey, HKEY hRootKey, HKEY *hKey=NULL, REGSAM regSam=NULL);
|
||||
|
||||
// Open the specified registry key (creates if non-existant)
|
||||
LONG Open(LPCSTR lpszSubKey, HKEY hRootKey, HKEY *hKey=NULL, REGSAM regSam=NULL, BOOL bCreate=TRUE);
|
||||
|
||||
BOOL DeleteKey(HKEY hRootKey, HKEY hKey, LPCSTR szKey, LPCSTR szSubKey);
|
||||
|
||||
// CString m_szKey; // Name of key this object wraps
|
||||
char m_szKey[1024]; // Name of key this object wraps
|
||||
HKEY m_hRootKey; // Root key of the wrapped key
|
||||
HKEY m_hKey; // Key generated by Open/Create
|
||||
|
||||
};
|
||||
|
||||
#endif
|
39
reactos/drivers/bluetooth/fbtusb/include/fbtrwr.h
Executable file
39
reactos/drivers/bluetooth/fbtusb/include/fbtrwr.h
Executable file
|
@ -0,0 +1,39 @@
|
|||
// Copyright (c) 2004, Antony C. Roberts
|
||||
|
||||
// Use of this file is subject to the terms
|
||||
// described in the LICENSE.TXT file that
|
||||
// accompanies this file.
|
||||
//
|
||||
// Your use of this file indicates your
|
||||
// acceptance of the terms described in
|
||||
// LICENSE.TXT.
|
||||
//
|
||||
// http://www.freebt.net
|
||||
|
||||
#ifndef _FREEBT_RWR_H
|
||||
#define _FREEBT_RWR_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct _FREEBT_RW_CONTEXT
|
||||
{
|
||||
PURB Urb;
|
||||
PMDL Mdl;
|
||||
ULONG Length; // remaining to xfer
|
||||
ULONG Numxfer; // cumulate xfer
|
||||
ULONG_PTR VirtualAddress; // va for next segment of xfer.
|
||||
|
||||
} FREEBT_RW_CONTEXT, * PFREEBT_RW_CONTEXT;
|
||||
|
||||
NTSTATUS FreeBT_DispatchRead(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS FreeBT_ReadCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context);
|
||||
NTSTATUS FreeBT_DispatchWrite(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS FreeBT_WriteCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
262
reactos/drivers/bluetooth/fbtusb/include/fbtusb.h
Executable file
262
reactos/drivers/bluetooth/fbtusb/include/fbtusb.h
Executable file
|
@ -0,0 +1,262 @@
|
|||
// Copyright (c) 2004, Antony C. Roberts
|
||||
|
||||
// Use of this file is subject to the terms
|
||||
// described in the LICENSE.TXT file that
|
||||
// accompanies this file.
|
||||
//
|
||||
// Your use of this file indicates your
|
||||
// acceptance of the terms described in
|
||||
// LICENSE.TXT.
|
||||
//
|
||||
// http://www.freebt.net
|
||||
|
||||
#ifndef _FREEBT_H
|
||||
#define _FREEBT_H
|
||||
|
||||
#include <initguid.h>
|
||||
#include <wdm.h>
|
||||
#include <wmilib.h>
|
||||
#include <wmistr.h>
|
||||
#include <windef.h>
|
||||
#include "usbdi.h"
|
||||
#include "usbdlib.h"
|
||||
|
||||
// Pull in all the command, event and structure definitions
|
||||
#include "fbtHciDefs.h"
|
||||
|
||||
// Standard USB Wireless/Bluetooth class, etc
|
||||
#define FREEBT_USB_STDCLASS 0xE0 // Wireless Controller
|
||||
#define FREEBT_USB_STDSUBCLASS 0x01 // RF Controller
|
||||
#define FREEBT_USB_STDPROTOCOL 0x01 // Bluetooth Programming
|
||||
|
||||
// Recommended Bluetooth Endpoints
|
||||
#define FREEBT_STDENDPOINT_HCICMD 0x00 // HCI Command
|
||||
#define FREEBT_STDENDPOINT_HCIEVENT 0x81 // HCI Event
|
||||
#define FREEBT_STDENDPOINT_ACLIN 0x82 // HCI Data In
|
||||
#define FREEBT_STDENDPOINT_ACLOUT 0x02 // HCI Data Out
|
||||
#define FREEBT_STDENDPOINT_AUDIOIN 0x83 // SCO In
|
||||
#define FREEBT_STDENDPOINT_AUDIOOUT 0x03 // SCO Out
|
||||
|
||||
|
||||
#define OBTTAG (ULONG) 'OBTU'
|
||||
|
||||
#undef ExAllocatePool
|
||||
#define ExAllocatePool(type, size) ExAllocatePoolWithTag(type, size, OBTTAG);
|
||||
|
||||
#if DBG
|
||||
|
||||
#define FreeBT_DbgPrint(level, _x_) \
|
||||
if((level) <= DebugLevel) { \
|
||||
DbgPrint _x_; \
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#define FreeBT_DbgPrint(level, _x_)
|
||||
|
||||
#endif
|
||||
|
||||
typedef struct _GLOBALS
|
||||
{
|
||||
UNICODE_STRING FreeBT_RegistryPath;
|
||||
|
||||
} GLOBALS;
|
||||
|
||||
#define IDLE_INTERVAL 5000
|
||||
|
||||
typedef enum _PIPETYPE
|
||||
{
|
||||
HciCommandPipe,
|
||||
HciEventPipe,
|
||||
AclDataIn,
|
||||
AclDataOut,
|
||||
SCODataIn,
|
||||
SCODataOut
|
||||
|
||||
} FREEBT_PIPETYPE;
|
||||
|
||||
typedef enum _DEVSTATE
|
||||
{
|
||||
NotStarted, // not started
|
||||
Stopped, // device stopped
|
||||
Working, // started and working
|
||||
PendingStop, // stop pending
|
||||
PendingRemove, // remove pending
|
||||
SurpriseRemoved, // removed by surprise
|
||||
Removed // removed
|
||||
|
||||
} DEVSTATE;
|
||||
|
||||
typedef enum _QUEUE_STATE
|
||||
{
|
||||
HoldRequests, // device is not started yet
|
||||
AllowRequests, // device is ready to process
|
||||
FailRequests // fail both existing and queued up requests
|
||||
|
||||
} QUEUE_STATE;
|
||||
|
||||
typedef enum _WDM_VERSION
|
||||
{
|
||||
WinXpOrBetter,
|
||||
Win2kOrBetter,
|
||||
WinMeOrBetter,
|
||||
Win98OrBetter
|
||||
|
||||
} WDM_VERSION;
|
||||
|
||||
#define INITIALIZE_PNP_STATE(_Data_) \
|
||||
(_Data_)->DeviceState = NotStarted;\
|
||||
(_Data_)->PrevDevState = NotStarted;
|
||||
|
||||
#define SET_NEW_PNP_STATE(_Data_, _state_) \
|
||||
(_Data_)->PrevDevState = (_Data_)->DeviceState;\
|
||||
(_Data_)->DeviceState = (_state_);
|
||||
|
||||
#define RESTORE_PREVIOUS_PNP_STATE(_Data_) \
|
||||
(_Data_)->DeviceState = (_Data_)->PrevDevState;
|
||||
|
||||
|
||||
// registry path used for parameters
|
||||
// global to all instances of the driver
|
||||
#define FREEBT_REGISTRY_PARAMETERS_PATH L"\\REGISTRY\\Machine\\System\\CurrentControlSet\\SERVICES\\BULKUSB\\Parameters"
|
||||
|
||||
typedef struct _FREEBT_PIPE_CONTEXT
|
||||
{
|
||||
BOOLEAN PipeOpen;
|
||||
FREEBT_PIPETYPE PipeType;
|
||||
|
||||
} FREEBT_PIPE_CONTEXT, *PFREEBT_PIPE_CONTEXT;
|
||||
|
||||
// A structure representing the instance information associated with
|
||||
// this particular device.
|
||||
typedef struct _DEVICE_EXTENSION
|
||||
{
|
||||
// Functional Device Object
|
||||
PDEVICE_OBJECT FunctionalDeviceObject;
|
||||
|
||||
// Device object we call when submitting Urbs
|
||||
PDEVICE_OBJECT TopOfStackDeviceObject;
|
||||
|
||||
// The bus driver object
|
||||
PDEVICE_OBJECT PhysicalDeviceObject;
|
||||
|
||||
// Name buffer for our named Functional device object link
|
||||
// The name is generated based on the driver's class GUID
|
||||
UNICODE_STRING InterfaceName;
|
||||
|
||||
// Bus drivers set the appropriate values in this structure in response
|
||||
// to an IRP_MN_QUERY_CAPABILITIES IRP. Function and filter drivers might
|
||||
// alter the capabilities set by the bus driver.
|
||||
DEVICE_CAPABILITIES DeviceCapabilities;
|
||||
|
||||
// Configuration Descriptor
|
||||
PUSB_CONFIGURATION_DESCRIPTOR UsbConfigurationDescriptor;
|
||||
|
||||
// Interface Information structure
|
||||
PUSBD_INTERFACE_INFORMATION UsbInterface;
|
||||
|
||||
// Pipe context for the driver
|
||||
PFREEBT_PIPE_CONTEXT PipeContext;
|
||||
|
||||
// current state of device
|
||||
DEVSTATE DeviceState;
|
||||
|
||||
// state prior to removal query
|
||||
DEVSTATE PrevDevState;
|
||||
|
||||
// obtain and hold this lock while changing the device state,
|
||||
// the queue state and while processing the queue.
|
||||
KSPIN_LOCK DevStateLock;
|
||||
|
||||
// current system power state
|
||||
SYSTEM_POWER_STATE SysPower;
|
||||
|
||||
// current device power state
|
||||
DEVICE_POWER_STATE DevPower;
|
||||
|
||||
// Pending I/O queue state
|
||||
QUEUE_STATE QueueState;
|
||||
|
||||
// Pending I/O queue
|
||||
LIST_ENTRY NewRequestsQueue;
|
||||
|
||||
// I/O Queue Lock
|
||||
KSPIN_LOCK QueueLock;
|
||||
|
||||
KEVENT RemoveEvent;
|
||||
|
||||
KEVENT StopEvent;
|
||||
|
||||
ULONG OutStandingIO;
|
||||
|
||||
KSPIN_LOCK IOCountLock;
|
||||
|
||||
// Selective Suspend variables
|
||||
LONG SSEnable;
|
||||
LONG SSRegistryEnable;
|
||||
PUSB_IDLE_CALLBACK_INFO IdleCallbackInfo;
|
||||
PIRP PendingIdleIrp;
|
||||
LONG IdleReqPend;
|
||||
LONG FreeIdleIrpCount;
|
||||
KSPIN_LOCK IdleReqStateLock;
|
||||
KEVENT NoIdleReqPendEvent;
|
||||
|
||||
// Default power state to power down to on self-susped
|
||||
ULONG PowerDownLevel;
|
||||
|
||||
// remote wakeup variables
|
||||
PIRP WaitWakeIrp;
|
||||
LONG FlagWWCancel;
|
||||
LONG FlagWWOutstanding;
|
||||
LONG WaitWakeEnable;
|
||||
|
||||
// Open handle count
|
||||
LONG OpenHandleCount;
|
||||
|
||||
// Selective suspend model uses timers, dpcs and work item.
|
||||
KTIMER Timer;
|
||||
|
||||
KDPC DeferredProcCall;
|
||||
|
||||
// This event is cleared when a DPC/Work Item is queued.
|
||||
// and signaled when the work-item completes.
|
||||
// This is essential to prevent the driver from unloading
|
||||
// while we have DPC or work-item queued up.
|
||||
KEVENT NoDpcWorkItemPendingEvent;
|
||||
|
||||
// WMI information
|
||||
WMILIB_CONTEXT WmiLibInfo;
|
||||
|
||||
// WDM version
|
||||
WDM_VERSION WdmVersion;
|
||||
|
||||
// Pipe type
|
||||
FREEBT_PIPETYPE PipeType;
|
||||
|
||||
// User accessible object name
|
||||
WCHAR wszDosDeviceName[50];
|
||||
|
||||
// A never triggered event used for delaying execution
|
||||
KEVENT DelayEvent;
|
||||
|
||||
// Significant pipes
|
||||
USBD_PIPE_INFORMATION EventPipe;
|
||||
USBD_PIPE_INFORMATION DataInPipe;
|
||||
USBD_PIPE_INFORMATION DataOutPipe;
|
||||
USBD_PIPE_INFORMATION AudioInPipe;
|
||||
USBD_PIPE_INFORMATION AudioOutPipe;
|
||||
|
||||
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
|
||||
|
||||
|
||||
typedef struct _IRP_COMPLETION_CONTEXT
|
||||
{
|
||||
PDEVICE_EXTENSION DeviceExtension;
|
||||
PKEVENT Event;
|
||||
|
||||
} IRP_COMPLETION_CONTEXT, *PIRP_COMPLETION_CONTEXT;
|
||||
|
||||
extern GLOBALS Globals;
|
||||
extern ULONG DebugLevel;
|
||||
|
||||
#endif
|
42
reactos/drivers/bluetooth/fbtusb/include/fbtusr.h
Executable file
42
reactos/drivers/bluetooth/fbtusb/include/fbtusr.h
Executable file
|
@ -0,0 +1,42 @@
|
|||
// Copyright (c) 2004, Antony C. Roberts
|
||||
|
||||
// Use of this file is subject to the terms
|
||||
// described in the LICENSE.TXT file that
|
||||
// accompanies this file.
|
||||
//
|
||||
// Your use of this file indicates your
|
||||
// acceptance of the terms described in
|
||||
// LICENSE.TXT.
|
||||
//
|
||||
// http://www.freebt.net
|
||||
|
||||
#ifndef _FREEBT_USER_H
|
||||
#define _FREEBT_USER_H
|
||||
|
||||
#include <initguid.h>
|
||||
//#include <winioctl.h>
|
||||
|
||||
// {7591F7C7-E760-434a-92D3-C1869930423C}
|
||||
DEFINE_GUID(GUID_CLASS_FREEBT_USB,
|
||||
0x7591f7c7, 0xe760, 0x434a, 0x92, 0xd3, 0xc1, 0x86, 0x99, 0x30, 0x42, 0x3c);
|
||||
|
||||
#define FREEBT_IOCTL_INDEX 0x0000
|
||||
|
||||
|
||||
#define IOCTL_FREEBT_GET_CONFIG_DESCRIPTOR CTL_CODE(FILE_DEVICE_UNKNOWN, \
|
||||
FREEBT_IOCTL_INDEX, \
|
||||
METHOD_BUFFERED, \
|
||||
FILE_ANY_ACCESS)
|
||||
|
||||
#define IOCTL_FREEBT_HCI_SEND_CMD CTL_CODE(FILE_DEVICE_UNKNOWN, \
|
||||
FREEBT_IOCTL_INDEX + 1, \
|
||||
METHOD_BUFFERED, \
|
||||
FILE_ANY_ACCESS)
|
||||
|
||||
#define IOCTL_FREEBT_HCI_GET_EVENT CTL_CODE(FILE_DEVICE_UNKNOWN, \
|
||||
FREEBT_IOCTL_INDEX + 2, \
|
||||
METHOD_BUFFERED, \
|
||||
FILE_ANY_ACCESS)
|
||||
|
||||
#endif
|
||||
|
3
reactos/drivers/bluetooth/fbtusb/include/fbtutil.h
Executable file
3
reactos/drivers/bluetooth/fbtusb/include/fbtutil.h
Executable file
|
@ -0,0 +1,3 @@
|
|||
#include "fbtXcpt.h"
|
||||
#include "fbtLog.h"
|
||||
#include "fbtReg.h"
|
58
reactos/drivers/bluetooth/fbtusb/include/fbtwmi.h
Executable file
58
reactos/drivers/bluetooth/fbtusb/include/fbtwmi.h
Executable file
|
@ -0,0 +1,58 @@
|
|||
// Copyright (c) 2004, Antony C. Roberts
|
||||
|
||||
// Use of this file is subject to the terms
|
||||
// described in the LICENSE.TXT file that
|
||||
// accompanies this file.
|
||||
//
|
||||
// Your use of this file indicates your
|
||||
// acceptance of the terms described in
|
||||
// LICENSE.TXT.
|
||||
//
|
||||
// http://www.freebt.net
|
||||
|
||||
#ifndef _FREEBT_WMI_H
|
||||
#define _FREEBT_WMI_H
|
||||
|
||||
//#define ENABLE_WMI
|
||||
|
||||
NTSTATUS FreeBT_WmiRegistration(IN OUT PDEVICE_EXTENSION DeviceExtension);
|
||||
NTSTATUS FreeBT_WmiDeRegistration(IN OUT PDEVICE_EXTENSION DeviceExtension);
|
||||
NTSTATUS FreeBT_DispatchSysCtrl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
|
||||
NTSTATUS FreeBT_QueryWmiRegInfo(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
OUT ULONG *RegFlags,
|
||||
OUT PUNICODE_STRING InstanceName,
|
||||
OUT PUNICODE_STRING *RegistryPath,
|
||||
OUT PUNICODE_STRING MofResourceName,
|
||||
OUT PDEVICE_OBJECT *Pdo);
|
||||
|
||||
NTSTATUS FreeBT_SetWmiDataItem(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PIRP Irp,
|
||||
IN ULONG GuidIndex,
|
||||
IN ULONG InstanceIndex,
|
||||
IN ULONG DataItemId,
|
||||
IN ULONG BufferSize,
|
||||
IN PUCHAR Buffer);
|
||||
|
||||
NTSTATUS FreeBT_SetWmiDataBlock(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PIRP Irp,
|
||||
IN ULONG GuidIndex,
|
||||
IN ULONG InstanceIndex,
|
||||
IN ULONG BufferSize,
|
||||
IN PUCHAR Buffer);
|
||||
|
||||
NTSTATUS FreeBT_QueryWmiDataBlock(
|
||||
IN PDEVICE_OBJECT DeviceObject,
|
||||
IN PIRP Irp,
|
||||
IN ULONG GuidIndex,
|
||||
IN ULONG InstanceIndex,
|
||||
IN ULONG InstanceCount,
|
||||
IN OUT PULONG InstanceLengthArray,
|
||||
IN ULONG OutBufferSize,
|
||||
OUT PUCHAR Buffer);
|
||||
|
||||
PCHAR WMIMinorFunctionString(UCHAR MinorFunction);
|
||||
|
||||
#endif
|
24
reactos/drivers/bluetooth/fbtusb/include/fbtxcpt.h
Executable file
24
reactos/drivers/bluetooth/fbtusb/include/fbtxcpt.h
Executable file
|
@ -0,0 +1,24 @@
|
|||
#ifndef _FBT_EXCEPT_H
|
||||
|
||||
#include "fbtLog.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
#include "fbtSeXcpt.h"
|
||||
|
||||
#define FBT_TRY try {
|
||||
#define FBT_CATCH } catch (fbtSeException *e) { fbtLog(fbtLog_Failure, "Exception %08X caught at line %u in file %s", e->GetSeCode(), __LINE__, __FILE__); fbtLog(fbtLog_Exception, "Exception %08X caught at line %u in file %s", e->GetSeCode(), __LINE__, __FILE__);
|
||||
#define FBT_CATCH_RETURN(RETVAL) FBT_CATCH return RETVAL;}
|
||||
#define FBT_CATCH_NORETURN FBT_CATCH return;}
|
||||
|
||||
#else
|
||||
|
||||
#define FBT_TRY __try{
|
||||
#define FBT_CATCH } __except(EXCEPTION_EXECUTE_HANDLER) { fbtLog(fbtLog_Failure, "Exception %08X caught at line %u in file %s (%s)", GetExceptionCode(), __LINE__, __FILE__, GetCommandLine()); fbtLog(fbtLog_Exception, "Exception %08X caught at line %u in file %s (%s)", GetExceptionCode(), __LINE__, __FILE__, GetCommandLine());
|
||||
#define FBT_CATCH_RETURN(RETVAL) FBT_CATCH return RETVAL;}
|
||||
#define FBT_CATCH_NORETURN FBT_CATCH return;}
|
||||
#define FBT_CATCH_NODEBUG_RETURN(x) } __except(EXCEPTION_EXECUTE_HANDLER) { return x;}
|
||||
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif _FBT_EXCEPT_H
|
|
@ -7,6 +7,9 @@
|
|||
<directory name="battery">
|
||||
<xi:include href="battery/directory.rbuild" />
|
||||
</directory>
|
||||
<directory name="bluetooth">
|
||||
<xi:include href="bluetooth/directory.rbuild" />
|
||||
</directory>
|
||||
<directory name="bus">
|
||||
<xi:include href="bus/directory.rbuild" />
|
||||
</directory>
|
||||
|
|
|
@ -4,10 +4,10 @@
|
|||
<directory name="nt4compat">
|
||||
<xi:include href="nt4compat/directory.rbuild" />
|
||||
</directory>
|
||||
<!--directory name="usbd">
|
||||
<directory name="usbd">
|
||||
<xi:include href="usbd/usbd.rbuild" />
|
||||
</directory>
|
||||
<directory name="usbhub">
|
||||
<!--directory name="usbhub">
|
||||
<xi:include href="usbhub/usbhub.rbuild" />
|
||||
</directory>
|
||||
<directory name="usbstor">
|
||||
|
|
Loading…
Reference in a new issue