Exemplo n.º 1
0
        private byte[] SerializePointsCommand(DataCommandDto cmd)
        {
            using (MemoryStream stream = new MemoryStream())
            {
                using (BinaryWriter writer = new BinaryWriter(stream))
                {
                    writer.Write(cmd.Command);
                    writer.Write(cmd.NPoints);

                    foreach (var point in cmd.Points)
                    {
                        writer.Write(point.Control);
                        writer.Write(point.X);
                        writer.Write(point.Y);
                        writer.Write(point.R);
                        writer.Write(point.G);
                        writer.Write(point.B);
                        writer.Write(point.I);
                        writer.Write(point.U1);
                        writer.Write(point.U2);
                    }

                }
                return stream.ToArray();
            }
        }
Exemplo n.º 2
0
        public void StreamPoints(DacPointDto[] points, ushort pointRate = 30000)
        {
            // Try prepare 
            var response = Prepare();
            var played = 0;
            ReadOnlySpan<DacPointDto> buffer = new ReadOnlySpan<DacPointDto>(points);

            for (; ; )
            {
                var pointCap = (buffer.Length < BUFFER_SIZE) ? buffer.Length - 1 : (BUFFER_SIZE - response.DacStatus.BufferFullness);

                if (pointCap < 0)
                {
                    response = Ping();
                }
                else
                {
                    if ((played + pointCap) >= buffer.Length)
                    {
                        // playback done
                        break;
                    }

                    var playablePoints = buffer.Slice(played, pointCap);
                    DataCommandDto cmd = new DataCommandDto()
                    {
                        Command = COMMAND_DATA,
                        NPoints = Convert.ToUInt16(pointCap),
                        Points = playablePoints.ToArray()
                    };

                    //serialize points

                    var serialized = SerializePointsCommand(cmd);

                    //transmit

                    response = Transmit(serialized);
                    played += pointCap;

                    Begin(pointRate);
                }

            }

        }