private async Task _GetBytes(Registers.reg registerAddress, uint length) { if ((packets / 1000) > 0 || (timeouts / 1000) > 0) { packets = packets / 4; timeouts = timeouts / 4; } packets++; var l = 4; var payload = new byte[l]; payload[0] = 0xAA; // Start Byte payload[1] = 0x01; // Read payload[2] = (byte)((byte)registerAddress & 0xFF); payload[3] = (byte)(length & 0xFF); await Task.Run(() => { bool passed = false; int r = 0; while (!passed && r <= retryMax) { try { port.DiscardInBuffer(); port.Write(payload, 0, l); for (int i = 0; i < length + 2; i++) { i2cBuffer[i] = (byte)port.ReadByte(); } passed = true; } catch (TimeoutException) { r++; timeouts++; } } if (!passed) { throw new Exception("Retried exceeded, request timed out"); } if (i2cBuffer[0] != 0xBB) { throw new Exception("Register read error - byte[0] != 0xBB"); } }); }
private async Task _SetBytes(Registers.reg registerAddress, byte[] values, bool noAck = false) { if ((packets / 1000) > 0 || (timeouts / 1000) > 0) { packets = packets / 4; timeouts = timeouts / 4; } packets++; var l = 4 + values.Length; var payload = new byte[l]; payload[0] = 0xAA; // Start Byte payload[1] = 0x00; // Write payload[2] = (byte)((byte)registerAddress & 0xFF); payload[3] = (byte)values.Length; var i = 4; foreach (var dat in values) { payload[i] = (byte)(dat & 0xFF); i++; } await Task.Run(() => { bool passed = false; int r = 0; while (!passed && r <= retryMax) { try { port.DiscardInBuffer(); port.Write(payload, 0, l); if (noAck) { return; } for (int x = 0; x < 2; x++) { i2cBuffer[x] = (byte)port.ReadByte(); } passed = true; } catch (TimeoutException) { r++; timeouts++; } } if (!passed) { throw new Exception("Retries exceeded, request timed out"); } if (i2cBuffer[0] != 0xEE && i2cBuffer[1] != 0x01) { throw new Exception("Register write error - byte[0] != 0xEE && byte[1] != 0x01"); } }); }