public override bool Start()
{
if (!IsActive) return State == DsState.Connected;
State = DsState.Connected;
PacketCounter = 0;
Task.Factory.StartNew(HidWorker, _hidCancellationTokenSource.Token);
_outputReportTask = _outputReportSchedule.Subscribe(tick => Process(DateTime.Now));
Rumble(0, 0);
Log.DebugFormat("-- Started Device Instance [{0}] Local [{1}] Remote [{2}]", m_Instance,
DeviceAddress.AsFriendlyName(), HostAddress.AsFriendlyName());
// connection sound
if (GlobalConfiguration.Instance.IsUsbConnectSoundEnabled)
AudioPlayer.Instance.PlayCustomFile(GlobalConfiguration.Instance.UsbConnectSoundFile);
#region Request HID Report Descriptor
// try to retrieve HID Report Descriptor
var buffer = new byte[512];
var transfered = 0;
if (SendTransfer(UsbHidRequestType.GetDescriptor, UsbHidRequest.GetDescriptor,
ToValue(UsbHidClassDescriptorType.Report),
buffer, ref transfered) && transfered > 0)
{
Log.DebugFormat("-- HID Report Descriptor: {0}", buffer.ToHexString(transfered));
// store report descriptor
ReportDescriptor.Parse(buffer);
}
#endregion
return State == DsState.Connected;
}