Example #1
0
        /// <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());
        }
Example #2
0
        /// <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);
        }
Example #3
0
 /// <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]));
 }