Advertisement
Guest User

Untitled

a guest
Feb 24th, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.07 KB | None | 0 0
  1.  
  2.  
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.Timers;
  9.  
  10. namespace PeriodicMessage
  11. {
  12.     class Program
  13.     {
  14.         static Timer _timer1 = new Timer(TimeSpan.FromMilliseconds(600).TotalMilliseconds) { Enabled = true };
  15.  
  16.         // This value should have been 1500ms
  17.         static Timer _timer2 = new Timer(TimeSpan.FromMilliseconds(700).TotalMilliseconds) { Enabled = true };
  18.  
  19.         static Timer _timerCounter = new Timer(TimeSpan.FromMilliseconds(CounterTimeIncrementMs).TotalMilliseconds){Enabled = true};
  20.  
  21.         private static int _counter = 0;
  22.         private static int _elapsedMs = 0;
  23.  
  24.         static Device _device = new Device();
  25.         static Message _message = new Message();
  26.  
  27.         const int CounterTimeIncrementMs = 80;
  28.  
  29.         static void Main(string[] args)
  30.         {
  31.             _timer1.Elapsed += Timer1_Elapsed;
  32.             _timer2.Elapsed += Timer2_Elapsed;
  33.             _timerCounter.Elapsed += TimerCounter_Elapsed;
  34.  
  35.             Console.WriteLine("Press enter to terminate");
  36.             Console.ReadLine();
  37.         }
  38.  
  39.         private static void Timer1_Elapsed(object sender, ElapsedEventArgs e) => _device.SendMessage(" I", _message.GetNextMessage(),_counter);
  40.         private static void Timer2_Elapsed(object sender, ElapsedEventArgs e) => _device.SendMessage("II", _message.GetNextMessage(),_counter);
  41.         private static void TimerCounter_Elapsed(object sender, ElapsedEventArgs e)
  42.         {
  43.             _elapsedMs += CounterTimeIncrementMs;
  44.  
  45.             if (_elapsedMs > 150 && _elapsedMs< 850) // Even though the chart shows that the bits seem to shift every 80ms, the first 80ms there is no change.
  46.             {
  47.                 if (_counter == 0) // Give it a bit for the second hit
  48.                     _counter = 1;
  49.                 else if (_elapsedMs != 480) // From the chart we should be bit shifting by one every 80ms, apart from 480
  50.                     _counter <<= 1;
  51.             }
  52.             else if (_elapsedMs >= 1000) // Roll Over
  53.                 _counter = _elapsedMs = 0;
  54.  
  55.         }
  56.     }
  57.  
  58.     class Device
  59.     {
  60.         public void SendMessage(string prefix, IEnumerable<byte> message, int counter)
  61.         {
  62.             //First, Second, <Counter>, Second to last, Last
  63.             var first = message.First();
  64.             var second = message.Skip(1).First();
  65.             var thrid = message.Skip(message.Count() - 2).First();
  66.             var fourth = message.Last();
  67.             Console.WriteLine($"Sending {prefix} message: {first:x2}-{second:x2}-{counter:x2}-{thrid:x2}-{fourth:x2}");
  68.         }
  69.     }
  70.  
  71.     class Message
  72.     {
  73.         byte[] _randomMessage = new byte[4];
  74.         Random _random = new Random();
  75.  
  76.         public IEnumerable<byte> GetNextMessage()
  77.         {
  78.             _random.NextBytes(_randomMessage);
  79.             var result = new List<byte>();
  80.  
  81.             for (int i = 0; i < _randomMessage.Length; i++)
  82.                 result.Add(_randomMessage[i]);
  83.  
  84.             return result;
  85.         }
  86.     }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement