快速业务通道

利用Java实现串口全双工通讯 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
the communication parameters to 9600, 8, 1, none.    try    {     serialPort.setSerialPortParams(9600,     SerialPort.DATABITS_8,     SerialPort.STOPBITS_1,     SerialPort.PARITY_NONE);    } catch (UnsupportedCommOperationException e)    {     return InitFail;    }   } catch (NoSuchPortException e)   {    return InitFail;   }   // when successfully open the serial port, create a new serial buffer,   // then create a thread that consistently accepts incoming signals from   // the serial port.Incoming signals are stored in the serial buffer.   SB = new SerialBuffer();   RT = new ReadSerial(SB, in);   RT.start();   // return success information     return InitSuccess;   }   /**   *   * This function returns a string with a certain length from the incoming   * messages.   *   * @param Length The length of the string to be returned.   *   */   public String ReadPort(int Length)   {    String Msg;    Msg = SB.GetMsg(Length);    return Msg;   }   /**   *   * This function sends a message through the serial port.   *   * @param Msg The string to be sent.   *   */   public void WritePort(String Msg)   {    int c;    try    {     for (int i = 0; i < Msg.length(); i++)      out.write(Msg.charAt(i));    } catch (IOException e) {}   }   /**   *   * This function closes the serial port in use.   *   */   public void ClosePort()   {    RT.stop();    serialPort.close();   } }

利用Java实现串口全双工通讯(3)

时间:2010-12-12

2.SerialBuffer

SerialBuffer是本类库中所定义的串口缓冲区,它定义了往该缓冲区中写入数据和从该缓冲区中读取数据所需要的函数。

public synchronized String GetMsg(int Length)

本函数从串口(缓冲区)中读取指定长度的一个字符串。参数Length指定所返回字符串的长度。

public synchronized void PutChar(int c)

本函数望串口缓冲区中写入一个字符,参数c 是需要写入的字符。

在往缓冲区写入数据或者是从缓冲区读取数据的时候,必须保证数据的同步,因此GetMsg和PutChar函数均被声明为synchronized并在具体实现中采措施实现的数据的同步。

SerialBuffer的源代码如下:

package serial; /** * * This class implements the buffer area to store incoming data from the serial * port. * */ public class SerialBuffer {   private String Content = "";   private String CurrentMsg, TempContent;   private boolean available = false;   private int LengthNeeded = 1;   /**   *   * This function returns a string with a certain length from the incoming   * messages.   *   * @param Length The length of the string to be returned.   *   */ public synchronized String GetMsg(int Length) {   LengthNeeded = Length;   notifyAll();   if (LengthNeeded > Content.length())   {    available = false;    while (available == false)    {     try     {      wait();     } catch (InterruptedException e) { }    }   }   CurrentMsg = Content.substring(0, LengthNeeded);   TempContent = Content.substring(LengthNeeded);   Content = TempContent;   LengthNeeded = 1;   noti

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号