public HidDeviceData.HID_RETURN GetFeature(HidDeviceReport r) { if (deviceOpened) { try { byte[] buffer = CreateBuffer(FeatureReportByteLength - 1); buffer[0] = r.reportID; bool isGetFeature = HidD_GetFeature(device, buffer, buffer.Length); if (isGetFeature) { var str = BitConverter.ToString(buffer, 0).Replace("-", string.Empty).ToLower(); Console.WriteLine(str); return(HidDeviceData.HID_RETURN.SUCCESS); } return(HidDeviceData.HID_RETURN.NO_DEVICE_CONECTED); } catch { EventArgs ex = new EventArgs(); OnDeviceRemoved(ex);//发出设备移除消息 CloseDevice(); return(HidDeviceData.HID_RETURN.NO_DEVICE_CONECTED); } } return(HidDeviceData.HID_RETURN.WRITE_FAILD);; }
/// <summary> /// 事件:数据到达,处理此事件以接收输入数据 /// </summary> protected virtual void OnDataReceived(HidDeviceReport e) { if (DataReceived != null) { DataReceived(this, e); } }
public HidDeviceData.HID_RETURN SetFeature(HidDeviceReport r) { if (deviceOpened) { try { byte[] buffer = CreateBuffer(FeatureReportByteLength - 1); buffer[0] = r.reportID; Array.Copy(r.reportBuff, 0, buffer, 0, r.reportBuff.Length); bool isSetFeature = HidD_SetFeature(device, buffer, buffer.Length); if (isSetFeature) { return(HidDeviceData.HID_RETURN.SUCCESS); } return(HidDeviceData.HID_RETURN.NO_DEVICE_CONECTED); } catch { EventArgs ex = new EventArgs(); OnDeviceRemoved(ex);//发出设备移除消息 CloseDevice(); return(HidDeviceData.HID_RETURN.NO_DEVICE_CONECTED); } } return(HidDeviceData.HID_RETURN.WRITE_FAILD); }
/// <summary> /// 异步读取结束,发出有数据到达事件 /// </summary> /// <param name="iResult">这里是输入报告的数组</param> private void ReadCompleted(IAsyncResult iResult) { byte[] readBuff = (byte[])(iResult.AsyncState); try { hidDevice.EndRead(iResult);//读取结束,如果读取错误就会产生一个异常 byte[] reportData = new byte[readBuff.Length - 1]; for (int i = 1; i < readBuff.Length; i++) { reportData[i - 1] = readBuff[i]; } HidDeviceReport hid = new HidDeviceReport(readBuff[0], reportData); OnDataReceived(hid); //发出数据到达消息 if (!deviceOpened) { return; } BeginAsyncRead(); //启动下一次读操作 } catch //读写错误,设备已经被移除 { //MyConsole.WriteLine("设备无法连接,请重新插入设备"); EventArgs ex = new EventArgs(); OnDeviceRemoved(ex);//发出设备移除消息 CloseDevice(); } }
public void HidDataReceived(object sender, HidDeviceReport e) { try { //第一个字节为数据长度,因为Device 的HID数据固定长度为64字节,取有效数据 byte[] buf = new byte[e.reportBuff[0]]; Array.Copy(e.reportBuff, 1, buf, 0, e.reportBuff[0]); //推送数据 RaiseEventDataReceived(buf); } catch { #region 消息通知 ReusltString result = new ReusltString(); result.Result = false; result.message = "Receive Error"; RaiseEventConnectedState(result.Result); #endregion } }