public USBXpress.ReturnCodes WriteRAW(int cmd, byte[] buff) { if (this.IsOpen()) { byte[] buffer = new byte[64]; const int max_payload = 64 - 4; // 64 (long paquete) - 4 (long. cabecera) int nbytes = 0; USBXpress.ReturnCodes ret = USBXpress.ReturnCodes.SI_SUCCESS; ClearInputBuffer(handle); buffer[0] = (byte)'A'; buffer[1] = (byte)'T'; buffer[2] = (byte)'C'; buffer[3] = (byte)cmd; for (int i = 0; i < max_payload && i < buff.Length; i++) { buffer[4 + i] = buff[i]; } ret = usbXpress.SI_Write(handle, buffer, OLEN, ref nbytes, 0); WaitACK_USB(); if (ret != USBXpress.ReturnCodes.SI_SUCCESS) { isOpen = false; } return(ret); } else { return(USBXpress.ReturnCodes.SI_WRITE_ERROR); } }
protected byte[] ReadRAW(int cmd, int addr) { if (this.IsOpen()) { byte[] buff = new byte[64]; byte[] buffer = new byte[64]; uint numbytes = 0; int i; int nbytes = 0; USBXpress.ReturnCodes ret = USBXpress.ReturnCodes.SI_SUCCESS; ClearInputBuffer(handle); buffer[0] = (byte)'F'; buffer[1] = (byte)'R'; buffer[2] = (byte)'M'; buffer[3] = (byte)cmd; buffer[4] = (byte)(addr & 0xff); buffer[5] = (byte)((addr >> 8) & 0xff); for (i = 4; i < 64; i++) { buffer[i] = 0; } usbXpress.SI_Write(handle, buffer, OLEN, ref nbytes, 0); USBXpress.RXQueueStatus queueStatus = USBXpress.RXQueueStatus.SI_RX_EMPTY; numbytes = 0; for (i = 0; i < 50 && numbytes < ILEN; i++) { usbXpress.SI_CheckRXQueue(handle, ref numbytes, ref queueStatus); Thread.Sleep(20); } ret = usbXpress.SI_Read(handle, buffer, 64, ref nbytes, 0); for (i = 0; i < 64; i++) { buff[i] = buffer[i]; } if (ret != USBXpress.ReturnCodes.SI_SUCCESS) { isOpen = false; } return(buff); } else { return(null); } }
public USBXpress.ReturnCodes Write(int cmd, int id, int offset, byte[] buff) { if (this.IsOpen()) { byte[] buffer = new byte[64]; const int max_payload = 64 - 7; // 64 (long paquete) - 7 (long. cabecera) int nbytes = 0; USBXpress.ReturnCodes ret = USBXpress.ReturnCodes.SI_SUCCESS; for (int j = 0; j < buff.Length; j += max_payload) { ClearInputBuffer(handle); buffer[0] = (byte)'A'; buffer[1] = (byte)'T'; buffer[2] = (byte)'C'; buffer[3] = (byte)((int)cmd | 0x10); buffer[4] = (byte)id; buffer[5] = (byte)(offset + j); if (buff.Length - j >= max_payload) { buffer[6] = (byte)max_payload; } else { buffer[6] = (byte)(buff.Length - j); } for (int i = 0; i < max_payload && i < (buff.Length - j); i++) { buffer[7 + i] = buff[i + j]; } ret = usbXpress.SI_Write(handle, buffer, OLEN, ref nbytes, 0); WaitACK_USB(); } if (ret != USBXpress.ReturnCodes.SI_SUCCESS) { isOpen = false; } return(ret); } else { return(USBXpress.ReturnCodes.SI_WRITE_ERROR); } }
protected byte[] WriteRAW(int cmd, int addr, byte[] buff) { if (this.IsOpen()) { byte[] buffer = new byte[64]; const int max_payload = 32; int nbytes = 0; USBXpress.ReturnCodes ret = USBXpress.ReturnCodes.SI_SUCCESS; ClearInputBuffer(handle); buffer[0] = (byte)'F'; buffer[1] = (byte)'R'; buffer[2] = (byte)'M'; buffer[3] = (byte)cmd; buffer[4] = (byte)(addr & 0xff); buffer[5] = (byte)((addr >> 8) & 0xff); if (buff != null) { for (int i = 0; i < max_payload && i < buff.Length; i++) { buffer[6 + i] = buff[i]; } } ret = usbXpress.SI_Write(handle, buffer, OLEN, ref nbytes, 0); buffer = WaitACK_USB(); if (ret != USBXpress.ReturnCodes.SI_SUCCESS) { isOpen = false; } return(buffer); } else { return(null); } }
public byte[] Read(int cmd, byte id, int offset, int len) { if (this.IsOpen()) { byte[] buff = new byte[len]; byte[] buffer = new byte[64]; const int max_payload = 64; // 64 (long paquete) uint numbytes = 0; int nbytes = 0; USBXpress.ReturnCodes ret = USBXpress.ReturnCodes.SI_SUCCESS; ClearInputBuffer(handle); for (int j = 0; j < buff.Length; j += max_payload) { buffer[0] = (byte)'A'; buffer[1] = (byte)'T'; buffer[2] = (byte)'C'; buffer[3] = (byte)cmd; buffer[4] = (byte)id; buffer[5] = (byte)j; if (len - j > max_payload) { buffer[6] = (byte)max_payload; } else { buffer[6] = (byte)(len - j); } for (int i = 7; i < 64; i++) { buffer[i] = 0; } usbXpress.SI_Write(handle, buffer, OLEN, ref nbytes, 0); USBXpress.RXQueueStatus queueStatus = USBXpress.RXQueueStatus.SI_RX_EMPTY; numbytes = 0; for (int i = 0; i < 100 && numbytes < ILEN; i++) { usbXpress.SI_CheckRXQueue(handle, ref numbytes, ref queueStatus); Thread.Sleep(10); } if (numbytes >= ILEN) { ret = usbXpress.SI_Read(handle, buffer, 64, ref nbytes, 0); for (int i = 0; i < 64 && i + j < len; i++) { buff[j + i] = buffer[i]; } } } if (ret != USBXpress.ReturnCodes.SI_SUCCESS) { isOpen = false; } return(buff); } else { return(null); } }