FfuMayAirHandler.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using System;
  2. using System.Collections.Generic;
  3. using MECF.Framework.Common.Communications;
  4. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.FFUs.MayAir
  5. {
  6. public abstract class FfuMayAirHandler : HandlerBase
  7. {
  8. public FfuMayAir Device { get; }
  9. protected FfuMayAirHandler(FfuMayAir device, byte prefix, byte command, byte deviceAddress, byte groupAddress, byte data1, byte data2)
  10. : base(BuildMessage(prefix, command, deviceAddress, groupAddress, data1, data2))
  11. {
  12. Device = device;
  13. }
  14. protected FfuMayAirHandler(FfuMayAir device, byte prefix, byte command, byte deviceAddress, byte groupAddress, byte data1)
  15. : base(BuildMessage(prefix, command, deviceAddress, groupAddress, data1))
  16. {
  17. Device = device;
  18. }
  19. protected FfuMayAirHandler(FfuMayAir device, byte prefix, byte command, byte deviceAddress, byte groupAddress)
  20. : base(BuildMessage(prefix, command, deviceAddress, groupAddress))
  21. {
  22. Device = device;
  23. }
  24. private static byte[] BuildMessage(byte prefix, byte command, byte deviceAddress, byte groupAddress)
  25. {
  26. List<byte> result = new List<byte>() { prefix, (byte)(command | deviceAddress), groupAddress };
  27. result.Add(CalcSum(result));
  28. return result.ToArray();
  29. }
  30. private static byte[] BuildMessage(byte prefix, byte command, byte deviceAddress, byte groupAddress, byte data1)
  31. {
  32. List<byte> result = new List<byte>(){prefix, (byte)(command | deviceAddress), groupAddress, data1};
  33. result.Add(CalcSum(result));
  34. return result.ToArray();
  35. }
  36. private static byte[] BuildMessage(byte prefix, byte command, byte deviceAddress, byte groupAddress, byte data1, byte data2)
  37. {
  38. List<byte> result = new List<byte>() { prefix, (byte)(command | deviceAddress), groupAddress, data1, data2 };
  39. result.Add(CalcSum(result));
  40. return result.ToArray();
  41. }
  42. public override bool HandleMessage(MessageBase msg, out bool handled)
  43. {
  44. ResponseMessage = msg;
  45. handled = true;
  46. return true;
  47. }
  48. private static byte CalcSum(List<byte> value)
  49. {
  50. int sum = 0;
  51. foreach (var item in value)
  52. {
  53. sum += (int)item;
  54. }
  55. return 0;
  56. }
  57. }
  58. public class FfuMayAirQuerySpeedHandler : FfuMayAirHandler
  59. {
  60. public FfuMayAirQuerySpeedHandler(FfuMayAir device, byte deviceAddress, byte groupAddress)
  61. : base(device, 0x15, 0x20, deviceAddress, groupAddress)
  62. {
  63. Name = "Query Speed";
  64. }
  65. public override bool HandleMessage(MessageBase msg, out bool handled)
  66. {
  67. var result = msg as FfuMayAirMessage;
  68. ResponseMessage = msg;
  69. handled = true;
  70. return true;
  71. }
  72. }
  73. public class FfuMayAirQueryStatusHandler : FfuMayAirHandler
  74. {
  75. public FfuMayAirQueryStatusHandler(FfuMayAir device, byte deviceAddress, byte groupAddress)
  76. : base(device, 0x35, 0x00, deviceAddress, groupAddress, 0x00)
  77. {
  78. Name = "Query Status";
  79. }
  80. public override bool HandleMessage(MessageBase msg, out bool handled)
  81. {
  82. var result = msg as FfuMayAirMessage;
  83. //if (result.IsError)
  84. //{
  85. // Device.SetError(result.Data);
  86. //}
  87. //else
  88. //{
  89. // if (int.TryParse(result.Data, out int code))
  90. // {
  91. // Device.SetErrorCode(code);
  92. // }
  93. // else
  94. // {
  95. // Device.SetError(result.Data + "format error");
  96. // }
  97. //}
  98. ResponseMessage = msg;
  99. handled = true;
  100. return true;
  101. }
  102. }
  103. }