/// <summary> /// Generate the command frame /// </summary> /// <param name="command">command</param> /// <param name="parameters">parameters</param> /// <returns>commmand frame byte array</returns> private byte[] GenerateCommandFrame(ePaperCommand command, byte[] parameters) { int frameLength = ePaper.FrameHeaderSegment_Length + ePaper.FrameLengthSegment_Length + ePaper.CommandTypeSegment_Length + parameters.Length + ePaper.FrameEndSegment_Length + ePaper.FrameParitySegment_Length; MemoryStream stream = new MemoryStream(); using (BinaryWriter writer = new BinaryWriter(stream)) { writer.Write(ePaper.Frame_Header); byte[] frameLengthBytes = BitConverter.GetBytes((short)frameLength); writer.Write(frameLengthBytes[1]); writer.Write(frameLengthBytes[0]); writer.Write((byte)command); if (parameters.Length > 0) { writer.Write(parameters); } writer.Write(ePaper.Frame_End); byte[] frame = stream.ToArray(); byte parity = GenerateParity(frame); writer.Write(parity); } return(stream.ToArray()); }
/// <summary> /// Send command to e-Paper /// </summary> /// <param name="command">Command</param> /// <param name="parameters">Parameters</param> /// <returns>Result from e-Paper</returns> private async Task <string> SendCommand(ePaperCommand command, byte[] parameters) { string rxBuffer; byte[] commandFrame = GenerateCommandFrame(command, parameters); DataWriter dw = new DataWriter(this.serial.OutputStream); try { dw.WriteBytes(commandFrame); await dw.StoreAsync(); } catch (Exception e) { throw new ePaperException(ePaperExceptionCode.Unknow, e.Message); } finally { dw.DetachStream(); dw = null; } const uint maxReadLength = 32; DataReader dr = new DataReader(this.serial.InputStream); try { uint bytesToRead = await dr.LoadAsync(maxReadLength); rxBuffer = dr.ReadString(bytesToRead); } catch (Exception e) { throw new ePaperException(ePaperExceptionCode.Unknow, e.Message); } finally { dr.DetachStream(); dr = null; } System.Diagnostics.Debug.WriteLine(command.ToString() + " return:" + rxBuffer); return(rxBuffer); }
/// <summary> /// Send command /// </summary> /// <param name="command">command</param> /// <returns>return from e-Paper</returns> private async Task <string> SendCommand(ePaperCommand command) { return(await SendCommand(command, new byte[0])); }