public static int GetAcquisition(this ISmartScopeHardwareUsb usb, byte[] buffer) { usb.GetData(buffer, 0, Constants.SZ_HDR); GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned); SmartScopeHeader hdr = (SmartScopeHeader)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(SmartScopeHeader)); handle.Free(); if (!hdr.IsValid()) { Logger.Error("Invalid header magic"); return(0); } if (hdr.flags.HasFlag(HeaderFlags.TimedOut)) { return(Constants.SZ_HDR); } if (hdr.flags.HasFlag(HeaderFlags.IsOverview)) { usb.GetData(buffer, Constants.SZ_HDR, Constants.SZ_OVERVIEW); return(Constants.SZ_HDR + Constants.SZ_OVERVIEW); } if (hdr.n_bursts == 0) { throw new ScopeIOException("number of bursts in this USB pacakge is 0, cannot fetch"); } int len = hdr.n_bursts * hdr.bytes_per_burst; usb.GetData(buffer, Constants.SZ_HDR, len); return(Constants.SZ_HDR + len); }
public int GetAcquisition(byte[] buffer) { try { if (dataSocket == null) { byte[] portBytes = Request(Net.Net.Command.DATA_PORT); this.dataPort = BitConverter.ToUInt16(portBytes, 0); dataClient.Connect(this.serverIp, this.dataPort); dataClient.ReceiveBufferSize = Net.Net.DATA_SOCKET_BUFFER_SIZE; dataSocket = dataClient.Client; dataSocket.ReceiveTimeout = Net.Net.TIMEOUT_RX; } SocketReceive(dataSocket, 0, Constants.SZ_HDR, buffer); GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned); SmartScopeHeader hdr = (SmartScopeHeader)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(SmartScopeHeader)); handle.Free(); if (!hdr.IsValid()) { Logger.Error("Invalid header magic"); return(0); } if (hdr.flags.HasFlag(HeaderFlags.TimedOut)) { return(Constants.SZ_HDR); } if (hdr.flags.HasFlag(HeaderFlags.IsOverview)) { SocketReceive(dataSocket, Constants.SZ_HDR, Constants.SZ_OVERVIEW, buffer); return(Constants.SZ_HDR + Constants.SZ_OVERVIEW); } if (hdr.n_bursts == 0) { throw new ScopeIOException("number of bursts in this USB pacakge is 0, cannot fetch"); } int len = hdr.n_bursts * hdr.bytes_per_burst; SocketReceive(dataSocket, Constants.SZ_HDR, len, buffer); return(Constants.SZ_HDR + len); } catch (SocketException se) { throw new ScopeIOException("Socket exception: " + se.Message); } }