public void AddRequest(Request request) { lock (locker) { Requests.Add(request); } }
public Response AddRequest(int usbRequestNo, List<List<byte>> bytesList, int delay, int timeout, bool isSyncronuos, int countRacall, string name, string deviceName = null) { Responses = new List<Response>(); RequestCollection.Clear(); foreach (var bytes in bytesList) { if (usbRequestNo != -1) { if (bytesList.Count > 1) { usbRequestNo++; } } var request = new Request(); if (UseId) { request.Id = usbRequestNo; if (usbRequestNo != -1) { bytes.InsertRange(0, BitConverter.GetBytes(usbRequestNo).Reverse()); } } request.Bytes = CreateOutputBytes(bytes); RequestCollection.AddRequest(request); if (request.Bytes.Count > 64) { AutoWaitEvent = new AutoResetEvent(false); for (int i = 0; i < request.Bytes.Count / 64; i++) { var bytesToSend = request.Bytes.GetRange(i * 64, 64); bytesToSend.Insert(0, 0); Send(bytesToSend, name, deviceName, -1); } AutoWaitEvent.WaitOne(1000); RequestCollection.Clear(); return Responses.FirstOrDefault(); } else { request.Bytes.Insert(0, 0); if (isSyncronuos) { AutoWaitEvent = new AutoResetEvent(false); } Send(request.Bytes, name, deviceName, -1); if (isSyncronuos) { AutoWaitEvent.WaitOne(delay); } } } if (isSyncronuos) { foreach (var request in new List<Request>(RequestCollection.Requests)) { if (request != null) { for (int i = 0; i < countRacall; i++) { if (IsDisposed) { RequestCollection.Clear(); return null; } if (RequestCollection.Count() == 0) break; AutoWaitEvent.Reset(); var result = Send(request.Bytes, name, deviceName, i); if (!result) { RequestCollection.Clear(); return null; } if (RequestCollection.Count() == 0) break; AutoWaitEvent.WaitOne(timeout); if (i > 5) { Trace.WriteLine("CountRacall = " + i + " - " + name); } } } } RequestCollection.Clear(); return Responses.FirstOrDefault(); } RequestCollection.Clear(); return null; }
public static void SendAsync(Device device, string name, Request request) { lock (Locker) { var usbHid = GetUsbUsbHid(device); if (usbHid != null) { var bytes = request.Bytes.ToList(); var rootBytes = CreateRootBytes(device, usbHid.UseId); bytes.InsertRange(0, rootBytes); var requestNo = NextRequestNo; if (usbHid.UseId) { request.Id = requestNo; } else { request.Id = 0; } request.RootBytes = rootBytes; usbHid.AddRequest(requestNo, new List<List<byte>> { bytes }, 1000, 1000, false, 15, name, device.DottedPresentationNameAndAddress); } else { request.Id = -1; } } }