Sic.Framework-Nanjing-Baishi/MECF.Framework.RT.Equipment.../HardwareUnits/FFUs/MayAir/FfuMayAirHandler.cs

125 lines
3.9 KiB
C#
Raw Normal View History

2023-04-13 11:51:03 +08:00
using System;
using System.Collections.Generic;
using MECF.Framework.Common.Communications;
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.FFUs.MayAir
{
public abstract class FfuMayAirHandler : HandlerBase
{
public FfuMayAir Device { get; }
protected FfuMayAirHandler(FfuMayAir device, byte prefix, byte command, byte deviceAddress, byte groupAddress, byte data1, byte data2)
: base(BuildMessage(prefix, command, deviceAddress, groupAddress, data1, data2))
{
Device = device;
}
protected FfuMayAirHandler(FfuMayAir device, byte prefix, byte command, byte deviceAddress, byte groupAddress, byte data1)
: base(BuildMessage(prefix, command, deviceAddress, groupAddress, data1))
{
Device = device;
}
protected FfuMayAirHandler(FfuMayAir device, byte prefix, byte command, byte deviceAddress, byte groupAddress)
: base(BuildMessage(prefix, command, deviceAddress, groupAddress))
{
Device = device;
}
private static byte[] BuildMessage(byte prefix, byte command, byte deviceAddress, byte groupAddress)
{
List<byte> result = new List<byte>() { prefix, (byte)(command | deviceAddress), groupAddress };
result.Add(CalcSum(result));
return result.ToArray();
}
private static byte[] BuildMessage(byte prefix, byte command, byte deviceAddress, byte groupAddress, byte data1)
{
List<byte> result = new List<byte>(){prefix, (byte)(command | deviceAddress), groupAddress, data1};
result.Add(CalcSum(result));
return result.ToArray();
}
private static byte[] BuildMessage(byte prefix, byte command, byte deviceAddress, byte groupAddress, byte data1, byte data2)
{
List<byte> result = new List<byte>() { prefix, (byte)(command | deviceAddress), groupAddress, data1, data2 };
result.Add(CalcSum(result));
return result.ToArray();
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
ResponseMessage = msg;
handled = true;
return true;
}
private static byte CalcSum(List<byte> value)
{
int sum = 0;
foreach (var item in value)
{
sum += (int)item;
}
return 0;
}
}
public class FfuMayAirQuerySpeedHandler : FfuMayAirHandler
{
public FfuMayAirQuerySpeedHandler(FfuMayAir device, byte deviceAddress, byte groupAddress)
: base(device, 0x15, 0x20, deviceAddress, groupAddress)
{
Name = "Query Speed";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as FfuMayAirMessage;
ResponseMessage = msg;
handled = true;
return true;
}
}
public class FfuMayAirQueryStatusHandler : FfuMayAirHandler
{
public FfuMayAirQueryStatusHandler(FfuMayAir device, byte deviceAddress, byte groupAddress)
: base(device, 0x35, 0x00, deviceAddress, groupAddress, 0x00)
{
Name = "Query Status";
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as FfuMayAirMessage;
//if (result.IsError)
//{
// Device.SetError(result.Data);
//}
//else
//{
// if (int.TryParse(result.Data, out int code))
// {
// Device.SetErrorCode(code);
// }
// else
// {
// Device.SetError(result.Data + "format error");
// }
//}
ResponseMessage = msg;
handled = true;
return true;
}
}
}