diff --git a/SmartA4/A4.cs b/SmartA4/A4.cs
index d40ca68..d0b5753 100644
--- a/SmartA4/A4.cs
+++ b/SmartA4/A4.cs
@@ -1,7 +1,6 @@
using System.ComponentModel;
-using System.IO.Ports;
using NewLife;
-using NewLife.IoT.Protocols;
+using NewLife.IoT.Controllers;
using NewLife.Serial.Protocols;
namespace SmartA4;
@@ -23,59 +22,96 @@ public enum Coms
}
/// <summary>A2硬件工厂</summary>
-public class A4
+public class A4 : Board
{
#region 属性
/// <summary>SYS LED 指示灯</summary>
[DisplayName("指示灯")]
- public OutputPort Led { get; } = new OutputPort { FileName = "/dev/led" };
+ public IOutputPort Led { get; } = new FileOutputPort("/dev/led");
/// <summary>SYS LED 指示灯</summary>
[DisplayName("指示灯")]
- public OutputPort Led2 { get; } = new OutputPort { FileName = "/dev/led2" };
+ public IOutputPort Led2 { get; } = new FileOutputPort("/dev/led2");
/// <summary>SYS LED 指示灯</summary>
[DisplayName("指示灯")]
- public OutputPort Led3 { get; } = new OutputPort { FileName = "/dev/led3" };
+ public IOutputPort Led3 { get; } = new FileOutputPort("/dev/led3");
/// <summary>蜂鸣器</summary>
[DisplayName("蜂鸣器")]
- public OutputPort Buzzer { get; } = new OutputPort { FileName = "/dev/buzzer" };
+ public IOutputPort Buzzer { get; } = new FileOutputPort("/dev/buzzer");
/// <summary>FUN按键</summary>
[DisplayName("FUN按键")]
- public InputPort Key { get; } = new InputPort { FileName = "/dev/key" };
+ public IInputPort Key { get; } = new FileInputPort("/dev/key");
/// <summary>USB电源</summary>
[DisplayName("USB电源")]
- public OutputPort UsbPower { get; } = new OutputPort { FileName = "/dev/usbpwr" };
+ public IOutputPort UsbPower { get; } = new FileOutputPort("/dev/usbpwr");
/// <summary>看门狗</summary>
public Watchdog Watchdog { get; } = new Watchdog { FileName = "/dev/watchdog" };
/// <summary>串口名</summary>
- public String[] ComNames = new[] { "/dev/ttyS1", "/dev/ttyS2", "/dev/ttyS3", "/dev/ttyS4" };
+ public String[] ComNames = ["/dev/ttyS1", "/dev/ttyS2", "/dev/ttyS3", "/dev/ttyS4"];
+ #endregion
+
+ #region 端口
+ /// <summary>创建输出口</summary>
+ /// <param name="name"></param>
+ /// <returns></returns>
+ public override IOutputPort CreateOutput(String name)
+ {
+ if (name.EndsWithIgnoreCase("led")) return Led;
+ if (name.EndsWithIgnoreCase("buzzer")) return Buzzer;
+ if (name.EndsWithIgnoreCase("usbpwr")) return UsbPower;
+
+ return base.CreateOutput(name);
+ }
+
+ /// <summary>创建输入口</summary>
+ /// <param name="name"></param>
+ /// <returns></returns>
+ public override IInputPort CreateInput(String name)
+ {
+ if (name.EndsWithIgnoreCase("key")) return Key;
+
+ return base.CreateInput(name);
+ }
#endregion
#region 串口
/// <summary>创建串口</summary>
+ /// <param name="portName"></param>
+ /// <param name="baudrate"></param>
+ /// <returns></returns>
+ public override ISerialPort CreateSerial(String portName, Int32 baudrate = 9600) => new DefaultSerialPort { PortName = portName, Baudrate = baudrate };
+
+ /// <summary>创建串口</summary>
/// <param name="com">串口COM1/COM2/COM3/COM4,全部支持RS485,其中COM3/COM4复用RS232</param>
/// <param name="baudrate"></param>
/// <returns></returns>
/// <exception cref="ArgumentOutOfRangeException"></exception>
- public SerialPort CreateSerial(Coms com, Int32 baudrate = 9600)
+ public ISerialPort CreateSerial(Coms com, Int32 baudrate = 9600)
{
if (com < 0 || com > Coms.COM4) throw new ArgumentOutOfRangeException(nameof(com), $"无效串口{com},支持COM1/COM2/COM3/COM4");
- return new SerialPort(ComNames[(Int32)com], baudrate);
+ //return new SerialPort(ComNames[(Int32)com], baudrate);
+ return new DefaultSerialPort { PortName = ComNames[(Int32)com], Baudrate = baudrate };
}
/// <summary>创建Modbus</summary>
+ /// <param name="portName"></param>
+ /// <param name="baudrate"></param>
+ /// <returns></returns>
+ public override IModbus CreateModbus(String portName, Int32 baudrate = 9600) => new ModbusRtu { PortName = portName, Baudrate = baudrate };
+
+ /// <summary>创建Modbus</summary>
/// <param name="com"></param>
/// <param name="baudrate"></param>
/// <returns></returns>
/// <exception cref="ArgumentOutOfRangeException"></exception>
- public Modbus CreateModbus(Coms com, Int32 baudrate = 9600)
+ public IModbus CreateModbus(Coms com, Int32 baudrate = 9600)
{
if (com < 0 || com > Coms.COM4) throw new ArgumentOutOfRangeException(nameof(com), $"无效串口{com},支持COM1/COM2/COM3/COM4");