Пример #1
0
        /// <summary>
        /// 获取端口错误的字符
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public static string GetErrorStr(PortAPI.ErrorCodes code)
        {
            switch (code)
            {
            default: return("OK");

            case PortAPI.ErrorCodes.SIO_BADPORT: return("没有此端口或端口未打开");

            case PortAPI.ErrorCodes.SIO_OUTCONTROL: return("无法控制此板");

            case PortAPI.ErrorCodes.SIO_NODATA: return("没有数据代读取或没有缓冲区供写");

            case PortAPI.ErrorCodes.SIO_OPENFAIL: return("没有此端口或端口已打开");

            case PortAPI.ErrorCodes.SIO_RTS_BY_HW: return("因为H/W流量控制而不能设置");

            case PortAPI.ErrorCodes.SIO_BADPARM: return("无效参数");

            case PortAPI.ErrorCodes.SIO_WIN32FAIL: return("调用win32函数失败请调用GetLastError函数以获取错误代码");

            case PortAPI.ErrorCodes.SIO_BOARDNOTSUPPORT: return("此版本不支持这个函数");

            case PortAPI.ErrorCodes.SIO_FAIL: return("PCOMM函数运行结果失败");

            case PortAPI.ErrorCodes.SIO_ABORT_WRITE: return("写入已被锁定,用户已放弃写入");

            case PortAPI.ErrorCodes.SIO_WRITETIMEOUT: return("已发生写入超时");
            }
        }
Пример #2
0
 /// <summary>
 /// 获取端口读取超时时间
 /// </summary>
 /// <param name="totalTimeouts">超时总值</param>
 /// <param name="intervalTimeouts">间隔超时值</param>
 public void GetReadTimeouts(out int totalTimeouts, out int intervalTimeouts)
 {
     PortAPI.ErrorCodes code = GetReadTimeouts(Port, out totalTimeouts, out intervalTimeouts);
     if (code != PortAPI.ErrorCodes.SIO_OK)
     {
         throw new Exception(GetErrorStr(code));
     }
 }
Пример #3
0
 /// <summary>
 /// 设置端口数据接收回调
 /// </summary>
 private void SetDataReceived()
 {
     PortAPI.ErrorCodes code = SetDataReceived(Port, m_dataReceived);
     if (code != PortAPI.ErrorCodes.SIO_OK)
     {
         throw new Exception(GetErrorStr(code));
     }
 }
Пример #4
0
 /// <summary>
 /// 设置端口写入超时时间
 /// </summary>
 /// <param name="totaltimeouts">总超时值</param>
 /// <param name="intervalTimeouts">间隔超时值 默认0</param>
 public void SetWriteTimeouts(int totalTimeouts, int intervalTimeouts)
 {
     PortAPI.ErrorCodes code = SetWriteTimeouts(Port, totalTimeouts, intervalTimeouts);
     if (code != PortAPI.ErrorCodes.SIO_OK)
     {
         throw new Exception(GetErrorStr(code));
     }
 }
Пример #5
0
 /// <summary>
 /// 向缓冲区写入数据
 /// </summary>
 /// <param name="str">发送的字符数据</param>
 /// <param name="hex">是否十六进制 true - 十六进制发送</param>
 public void Write(string str, bool hex)
 {
     PortAPI.ErrorCodes code = Write(Port, str, hex);
     if (code != PortAPI.ErrorCodes.SIO_OK)
     {
         throw new Exception(GetErrorStr(code));
     }
 }
Пример #6
0
 /// <summary>
 /// 向缓冲区写入数据
 /// </summary>
 /// <param name="buffer">数据流</param>
 public void Write(byte[] buffer)
 {
     PortAPI.ErrorCodes code = Write(Port, buffer);
     if (code != PortAPI.ErrorCodes.SIO_OK)
     {
         throw new Exception(GetErrorStr(code));
     }
 }
Пример #7
0
 /// <summary>
 /// 清除端口缓冲区数据
 /// </summary>
 /// <param name="func">0 - 清除写入缓冲区数据  1 - 清除读缓冲区数据    2 - 清除读写缓冲区数据</param>
 public void Flush(int func)
 {
     PortAPI.ErrorCodes code = Flush(Port, func);
     if (code != PortAPI.ErrorCodes.SIO_OK)
     {
         throw new Exception(GetErrorStr(code));
     }
 }
Пример #8
0
 /// <summary>
 /// 读取端口数据
 /// </summary>
 /// <param name="buffer">数据流</param>
 public void Read(byte[] buffer)
 {
     PortAPI.ErrorCodes code = Read(Port, buffer, buffer.Length);
     if (code != PortAPI.ErrorCodes.SIO_OK)
     {
         throw new Exception(GetErrorStr(code));
     }
 }
Пример #9
0
 /// <summary>
 /// 设置端口波特率、数据位、停止位、检验位
 /// </summary>
 public void Setioctl()
 {
     PortAPI.ErrorCodes code = Setioctl(Port, BaudRate, (int)StopBit | (int)DataBit | (int)Parity);
     if (code != PortAPI.ErrorCodes.SIO_OK)
     {
         throw new Exception(GetErrorStr(code));
     }
 }
Пример #10
0
 /// <summary>
 /// 关闭端口
 /// </summary>
 public void Close()
 {
     PortAPI.ErrorCodes code = Close(Port);
     if (code != PortAPI.ErrorCodes.SIO_OK)
     {
         throw new Exception(GetErrorStr(code));
     }
     IsOpen = false;
     SerialPortChange?.Invoke(this);
 }
Пример #11
0
        /// <summary>
        /// 获取端口写入超时时间
        /// </summary>
        /// <returns></returns>
        public int GetWriteTimeouts()
        {
            int totalTimeout;

            PortAPI.ErrorCodes code = GetWriteTimeouts(Port, out totalTimeout);
            if (code != PortAPI.ErrorCodes.SIO_OK)
            {
                throw new Exception(GetErrorStr(code));
            }
            return(totalTimeout);
        }
Пример #12
0
        /// <summary>
        /// 打开端口
        /// </summary>
        public void Open()
        {
            PortAPI.ErrorCodes code = Open(Port);
            if (code == PortAPI.ErrorCodes.SIO_OK)
            {
                IsOpen = true;

                Setioctl();

                SetDataReceived();

                SerialPortChange?.Invoke(this);
            }
            else
            {
                throw new Exception(GetErrorStr(code));
            }
        }