Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Timers;
- namespace PeriodicMessage
- {
- class Program
- {
- static Timer _timer1 = new Timer(TimeSpan.FromMilliseconds(600).TotalMilliseconds) { Enabled = true };
- // This value should have been 1500ms
- static Timer _timer2 = new Timer(TimeSpan.FromMilliseconds(700).TotalMilliseconds) { Enabled = true };
- static Timer _timerCounter = new Timer(TimeSpan.FromMilliseconds(CounterTimeIncrementMs).TotalMilliseconds){Enabled = true};
- private static int _counter = 0;
- private static int _elapsedMs = 0;
- static Device _device = new Device();
- static Message _message = new Message();
- const int CounterTimeIncrementMs = 80;
- static void Main(string[] args)
- {
- _timer1.Elapsed += Timer1_Elapsed;
- _timer2.Elapsed += Timer2_Elapsed;
- _timerCounter.Elapsed += TimerCounter_Elapsed;
- Console.WriteLine("Press enter to terminate");
- Console.ReadLine();
- }
- private static void Timer1_Elapsed(object sender, ElapsedEventArgs e) => _device.SendMessage(" I", _message.GetNextMessage(),_counter);
- private static void Timer2_Elapsed(object sender, ElapsedEventArgs e) => _device.SendMessage("II", _message.GetNextMessage(),_counter);
- private static void TimerCounter_Elapsed(object sender, ElapsedEventArgs e)
- {
- _elapsedMs += CounterTimeIncrementMs;
- 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.
- {
- if (_counter == 0) // Give it a bit for the second hit
- _counter = 1;
- else if (_elapsedMs != 480) // From the chart we should be bit shifting by one every 80ms, apart from 480
- _counter <<= 1;
- }
- else if (_elapsedMs >= 1000) // Roll Over
- _counter = _elapsedMs = 0;
- }
- }
- class Device
- {
- public void SendMessage(string prefix, IEnumerable<byte> message, int counter)
- {
- //First, Second, <Counter>, Second to last, Last
- var first = message.First();
- var second = message.Skip(1).First();
- var thrid = message.Skip(message.Count() - 2).First();
- var fourth = message.Last();
- Console.WriteLine($"Sending {prefix} message: {first:x2}-{second:x2}-{counter:x2}-{thrid:x2}-{fourth:x2}");
- }
- }
- class Message
- {
- byte[] _randomMessage = new byte[4];
- Random _random = new Random();
- public IEnumerable<byte> GetNextMessage()
- {
- _random.NextBytes(_randomMessage);
- var result = new List<byte>();
- for (int i = 0; i < _randomMessage.Length; i++)
- result.Add(_randomMessage[i]);
- return result;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement