using System.Threading.Tasks;

namespace Team.Utility
{
    public interface IRobotControlService
    {
        /// <summary>
        /// 写点地址
        /// </summary>
        /// <param name="id">字地址</param>
        /// <returns></returns>
        Task<bool> SavePointAsync(int id);
        /// <summary>
        /// 连接到modbus 服务
        /// </summary>
        /// <returns></returns>
        bool Connect();
        /// <summary>
        /// 读保持寄存器位地址
        /// </summary>
        /// <param name="address">字地址</param>
        /// <param name="bitNo">字位</param>
        /// <returns></returns>
        Task<bool> ReadAsync(int address, int bitNo);

        //void SetDataFormat(DataFormat dataFormat);
        /// <summary>
        /// 设置连接超时时间
        /// </summary>
        /// <param name="duration">单位second</param>
        void SetConnectTimeout(int duration);
        bool IsConnect { get; }

        /// <summary>
        /// 写字地址
        /// </summary>
        /// <param name="id">字地址</param>
        /// <param name="value"></param>
        /// <returns></returns>
        Task<bool> WriteShortAsync(int id,int value);
        Task<bool> WriteUshortAsync(int id, ushort value);
        Task<bool> WriteIntAsync(int id, int value);
        Task<bool> WriteUintAsync(int id, uint value);
        Task<bool> WriteFloatAsync(int id, float value);
        Task<bool> WriteDoubleAsync(int id, double value);
        Task<bool> WriteStringAsync(int id, string value);
        /// <summary>
        /// 在modbus服务器写入32位整数
        /// </summary>
        /// <param name="address">地址开始位</param>
        /// <returns></returns>
        Task<int> ReadInt32Async(int address);
        /// <summary>
        /// 在modbus服务器写入32正位整数
        /// </summary>
        /// <param name="address">地址开始位</param>
        /// <returns></returns>
        Task<uint> ReadUintAsync(int address);
        /// <summary>
        /// 在modbus服务器写入32浮点数
        /// </summary>
        /// <param name="address">地址开始位</param>
        /// <returns></returns>
        Task<float> ReadFloatAsync(int address);
        /// <summary>
        /// 在modbus服务器写入64浮点数
        /// </summary>
        /// <param name="address">地址开始位</param>
        /// <returns></returns>
        Task<double> ReadDoubleAsync(int address);
        /// <summary>
        /// 在modbus服务器写入16位整数
        /// </summary>
        /// <param name="address">地址开始位</param>
        /// <returns></returns>
        Task<short> ReadShortAsync(int address);
        /// <summary>
        /// 在modbus服务器写入16正位整数
        /// </summary>
        /// <param name="address">地址开始位</param>
        /// <returns></returns>
        Task<ushort> ReadUshortAsync(int address);
        /// <summary>
        /// 在modbus服务器写入字符串
        /// </summary>
        /// <param name="address">地址开始位</param>
        /// <param name="length">字符串长度</param>
        /// <returns></returns>
        Task<string> ReadStringAsync(int address, ushort length);
    }
}