public void WriteMemory(UInt32 address, byte[] buffer, OnFelProgress callback = null) { if (address >= dram_base) { InitDram(); } UInt32 length = (UInt32)buffer.Length; if (length != (length & ~((UInt32)3))) { length = (length + 3) & ~((UInt32)3); var newBuffer = new byte[length]; Array.Copy(buffer, 0, newBuffer, 0, buffer.Length); buffer = newBuffer; } int pos = 0; while (pos < buffer.Length) { callback?.Invoke(CurrentAction.WritingMemory, null); var buf = new byte[Math.Min(buffer.Length - pos, MaxBulkSize)]; Array.Copy(buffer, pos, buf, 0, buf.Length); FelRequest(AWFELStandardRequest.RequestType.FEL_DOWNLOAD, (UInt32)(address + pos), (uint)buf.Length); FelWrite(buf); var status = new AWFELStatusResponse(FelRead(8)); if (status.State != 0) { throw new FelException("FEL write error"); } pos += buf.Length; } }
private byte[] ReadMemory(UInt32 address, UInt32 length, OnFelProgress callback = null) { if (address >= dram_base) { InitDram(); } length = (length + 3) & ~((UInt32)3); var result = new List <byte>(); while (length > 0) { callback?.Invoke(CurrentAction.ReadingMemory, null); var l = Math.Min(length, MaxBulkSize); FelRequest(AWFELStandardRequest.RequestType.FEL_UPLOAD, address, l); var r = FelRead((UInt32)l); result.AddRange(r); var status = new AWFELStatusResponse(FelRead(8)); if (status.State != 0) { throw new FelException("FEL read error"); } length -= l; address += l; } return(result.ToArray()); }
public void Exec(UInt32 address) { FelRequest(AWFELStandardRequest.RequestType.FEL_RUN, address, 0); var status = new AWFELStatusResponse(FelRead(8)); if (status.State != 0) { throw new FelException("FEL run error"); } }
public AWFELVerifyDeviceResponse VerifyDevice() { FelRequest(AWFELStandardRequest.RequestType.FEL_VERIFY_DEVICE); byte[] resp; try { resp = FelRead(32); } catch { resp = new byte[32]; } var status = new AWFELStatusResponse(FelRead(8)); return(new AWFELVerifyDeviceResponse(resp)); }