private async Task WriteAsync(object msg) { Logger.Log($"Write: {msg}", null, LogSection); var byteArray = Serialize(msg); //This confirms that the message data is correct // var testMessage = Deserialize(msg.GetType(), byteArray); var msgSize = byteArray.Length; var msgName = msg.GetType().Name; var messageTypeString = "MessageType" + msgName; var messageType = GetEnumValue(messageTypeString); var msgId = (int)messageType; var data = new ByteBuffer(msgSize + 1024); // 32768); data.Put((byte)'#'); data.Put((byte)'#'); data.Put((byte)((msgId >> 8) & 0xFF)); data.Put((byte)(msgId & 0xFF)); data.Put((byte)((msgSize >> 24) & 0xFF)); data.Put((byte)((msgSize >> 16) & 0xFF)); data.Put((byte)((msgSize >> 8) & 0xFF)); data.Put((byte)(msgSize & 0xFF)); data.Put(byteArray); while (data.Position % 63 > 0) { data.Put(0); } var chunks = data.Position / 63; var wholeArray = data.ToArray(); for (var i = 0; i < chunks; i++) { var range = new byte[64]; range[0] = (byte)'?'; for (var x = 0; x < 63; x++) { range[x + 1] = wholeArray[(i * 63) + x]; } await _HidDevice.WriteAsync(range); } _LastWrittenMessage = msg; }