Esempio n. 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="buffer"></param>
        /// <returns></returns>
        public HID_RETURN Write(report r)
        {
            if (deviceOpened)
            {
                try
                {
                    byte[] buffer = new byte[outputReportLength];
                    buffer[0] = r.reportID;
                    int maxBufferLength = 0;
                    if (r.reportBuff.Length < outputReportLength - 1)
                    {
                        maxBufferLength = r.reportBuff.Length;
                    }
                    else
                    {
                        maxBufferLength = outputReportLength - 1;
                    }

                    for (int i = 0; i < maxBufferLength; i++)
                    {
                        buffer[i + 1] = r.reportBuff[i];
                    }
                    hidDevice.Write(buffer, 0, OutputReportLength);
                    return(HID_RETURN.SUCCESS);
                }
                catch
                {
                    EventArgs ex = new EventArgs();
                    OnDeviceRemoved(ex);//发出设备移除消息
                    CloseDevice();
                    return(HID_RETURN.NO_DEVICE_CONECTED);
                }
            }
            return(HID_RETURN.WRITE_FAILD);
        }
Esempio n. 2
0
 /// <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];
         }
         report e = new report(readBuff[0], reportData);
         OnDataReceived(e); //发出数据到达消息
         if (!deviceOpened)
         {
             return;
         }
         BeginAsyncRead(); //启动下一次读操作
     }
     catch                 //读写错误,设备已经被移除
     {
         //MyConsole.WriteLine("设备无法连接,请重新插入设备");
         EventArgs ex = new EventArgs();
         OnDeviceRemoved(ex);//发出设备移除消息
         CloseDevice();
     }
 }
Esempio n. 3
0
        /// <summary>
        /// 事件:数据到达,处理此事件以接收输入数据
        /// </summary>

        protected virtual void OnDataReceived(report e)
        {
            if (DataReceived != null)
            {
                DataReceived(this, e);
            }
        }
        public void HidDataReceived(object sender, report 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
            }
        }