/// <summary>
        /// Uploads program from manipulator to PC memory
        /// </summary>
        /// <param name="remoteProgram">Program downloaded from manipulator</param>
        /// <returns>Requested program or null when program with given name does not exist</returns>
        public async Task <Program> DownloadProgram(RemoteProgram remoteProgram)
        {
            manipulator.Number(remoteProgram.Name);
            await Task.Delay(1000);

            var errorCode = await manipulator.ErrorRead();

            if (errorCode != 0)
            {
                throw new AlarmException(errorCode);
            }

            var content = string.Empty;

            for (uint i = 1;; i++)
            {
                var line = await manipulator.StepRead(i);

                if (line.Equals("\r"))
                {
                    break;
                }
                content += line + "\n";
            }
            return(Program.CreateFromRemoteProgram(remoteProgram, content));
        }
示例#2
0
        public async Task <List <RemoteProgram> > ReadProgramInfo(CancellationToken cancellationToken)
        {
            var remoteProgramList = new List <RemoteProgram>();

            // Decode data
            for (var i = 1; ; i++)
            {
                manipulator.SendCustom(i == 1 ? "EXE0, \"Fd<*\"" : $"EXE0, \"Fd{i}\"");

                await manipulator.Port.WaitForMessageAsync();

                var QoK = manipulator.Port.Read();
                if (QoK.Equals("QoK\r") || Regex.IsMatch(QoK, @"^QoK\s*$"))
                {
                    break;
                }

                try
                {
                    cancellationToken.ThrowIfCancellationRequested();
                }
                catch (OperationCanceledException)
                {
                    break;
                }

                var remoteProgram = RemoteProgram.Create(QoK);
                if (remoteProgram != null)
                {
                    remoteProgramList.Add(remoteProgram);
                }
            }
            return(remoteProgramList);
        }
        public async Task <List <RemoteProgram> > ReadProgramInfo()
        {
            var remoteProgramList = new List <RemoteProgram>();

            // Decode data
            for (var i = 1; ; i++)
            {
                manipulator.SendCustom(i == 1 ? "EXE0, \"Fd<*\"" : $"EXE0, \"Fd{i}\"");

                await manipulator.Port.WaitForMessageAsync();

                var QoK = manipulator.Port.Read();
                if (QoK.Equals("QoK\r"))
                {
                    break;
                }

                var remoteProgram = RemoteProgram.Create(QoK);
                if (remoteProgram != null)
                {
                    remoteProgramList.Add(remoteProgram);
                }
            }
            return(remoteProgramList);
        }
示例#4
0
        /// <summary>
        /// Uploads program from manipulator to PC memory
        /// </summary>
        /// <param name="remoteProgram">Program downloaded from manipulator</param>
        /// <returns>Requested program or null when program with given name does not exist</returns>
        public async Task <Program> DownloadProgram(RemoteProgram remoteProgram, CancellationToken cancellationToken)
        {
            manipulator.Number(remoteProgram.Name);
            await Task.Delay(1000, cancellationToken);

            var errorCode = await manipulator.ErrorRead();

            if (errorCode != 0)
            {
                throw new AlarmException(errorCode);
            }

            var content = string.Empty;

            for (uint i = 1; ; i++)
            {
                var line = await manipulator.StepRead(i);

                if (line.Equals("\r"))
                {
                    break;
                }
                content += line + "\n";

                try
                {
                    cancellationToken.ThrowIfCancellationRequested();
                }
                catch (OperationCanceledException)
                {
                    break;
                }
            }
            return(Program.CreateFromRemoteProgram(remoteProgram, content));
        }
        /// <summary>
        /// Uploads program from manipulator to PC memory
        /// </summary>
        /// <param name="programName">Name of program on manipulator</param>
        /// <returns>Requested program or null when program with given name does not exist</returns>
        public async Task <Program> DownloadProgram(RemoteProgram remoteProgram)
        {
            var dialog = new SaveFileDialog();

            if (dialog.ShowDialog() == false)
            {
                return(null);
            }

            manipulator.Number(remoteProgram.Name);
            await Task.Delay(1000);

            var errorCode = await manipulator.ErrorRead();

            if (errorCode != 0)
            {
                throw new AlarmException(errorCode);
            }

            var content = String.Empty;

            for (uint i = 1;; i++)
            {
                var line = await manipulator.StepRead(i);

                if (line.Equals("\r"))
                {
                    break;
                }
                content += line + "\n";
            }
            File.WriteAllText(dialog.FileName, content);
            return(Program.CreateFromRemoteProgram(remoteProgram, content));
        }
示例#6
0
 public static Program CreateFromRemoteProgram(RemoteProgram program, string content)
 {
     return(new Program(program.Name)
     {
         Size = program.Size,
         Timestamp = program.Timestamp,
         Content = content
     });
 }
示例#7
0
 public async void RunProgram(RemoteProgram remoteProgram)
 {
     if (!manipulator.Connected) return;
     try
     {
         manipulator.Number(remoteProgram.Name);
         await Task.Delay(1000);
         manipulator.Run();
     }
     catch (Exception ex)
     {
         Console.Error.WriteLine(ex.Message);
     }
 }
示例#8
0
        public async Task RunProgram(RemoteProgram remoteProgram, CancellationToken cancellationToken)
        {
            if (!manipulator.Connected)
            {
                return;
            }
            try
            {
                cancellationToken.ThrowIfCancellationRequested();
                manipulator.Number(remoteProgram.Name);
                await Task.Delay(1000, cancellationToken);

                manipulator.Run();
            }
            catch (OperationCanceledException)
            {
                // Cancellation does not require handling as method returns immediately after catch clause
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine(ex.Message);
            }
        }
示例#9
0
 public async Task RunProgram(RemoteProgram remoteProgram)
 {
     await RunProgram(remoteProgram, default(CancellationToken));
 }
示例#10
0
 public async Task <Program> DownloadProgram(RemoteProgram remoteProgram)
 {
     return(await DownloadProgram(remoteProgram, default(CancellationToken)));
 }