serial

package module
v0.0.0-...-521b47e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 14, 2020 License: BSD-3-Clause Imports: 7 Imported by: 3

README

GoDoc

Serial

Serial 是一个Go语言实现的串口(Uart)接口包,可使用操作系统标准的 read 和 write 文件接口 实现串口字节流的接收和发送。

默认配置

8 N 1 N (数据位: 8 奇偶校验: N 停止位: 1 数据流控: N)

代码使用

package main

import (
	"log"

	"github.com/xluohome/serial"
)

func main() {
	c := &serial.Config{Name: "COM9", Baud: 9600}
	s, err := serial.OpenPort(c)
	if err != nil {
		log.Fatal(err)
	}

	txbuf := []byte{0xAA, 0x01, 0x0f, 0x00, 0x00, 0xBA}

	n, err := s.Write(txbuf)
	if err != nil {
		log.Fatal(err)
	}

	buf := make([]byte, 128)
	n, err = s.Read(buf)
	if err != nil {
		log.Fatal(err)
	}
	log.Printf("%X\n", buf[:n])
}

非阻塞模式

By default the returned Port reads in blocking mode. Which means Read() will block until at least one byte is returned. If that's not what you want, specify a positive ReadTimeout and the Read() will timeout returning 0 bytes if no bytes are read. Please note that this is the total timeout the read operation will wait and not the interval timeout between two bytes.

	c := &serial.Config{Name: "COM45", Baud: 115200, ReadTimeout: time.Second * 5}
	
	// In this mode, you will want to suppress error for read
	// as 0 bytes return EOF error on Linux / POSIX
	n, _ = s.Read(buf)

Documentation

Overview

serial 是一个Go代码实现的串口(Uart)收发包。使用操作系统标准的 read 和 write 文件接口 实现串口字节流的接收和发送。

默认配置: 8 N 1 N (数据位: 8 奇偶校验: N 停止位: 1 数据流控: N)

例子:

package main

import (
      "github.com/xluohome/serial"
      "log"
)

func main() {
      c := &serial.Config{Name: "COM9", Baud: 9600}
      s, err := serial.OpenPort(c)
      if err != nil {
              log.Fatal(err)
      }

      n, err := s.Write([]byte("test"))
      if err != nil {
              log.Fatal(err)
      }

      buf := make([]byte, 128)
      n, err = s.Read(buf)
      if err != nil {
              log.Fatal(err)
      }
      log.Print("%q", buf[:n])
}

Index

Constants

View Source
const DefaultSize = 8 // Default value for Config.Size

Variables

View Source
var ErrBadParity error = errors.New("unsupported parity setting")

ErrBadParity is returned if the parity is not supported.

View Source
var ErrBadSize error = errors.New("unsupported serial data size")

ErrBadSize is returned if Size is not supported.

View Source
var ErrBadStopBits error = errors.New("unsupported stop bit setting")

ErrBadStopBits is returned if the specified StopBits setting not supported.

Functions

func TestConnection

func TestConnection(t *testing.T)

Types

type Config

type Config struct {
	Name        string
	Baud        int
	ReadTimeout time.Duration // Total timeout

	// Size is the number of data bits. If 0, DefaultSize is used.
	Size byte

	// Parity is the bit to use and defaults to ParityNone (no parity bit).
	Parity Parity

	// Number of stop bits to use. Default is 1 (1 stop bit).
	StopBits StopBits
}

Config contains the information needed to open a serial port.

Currently few options are implemented, but more may be added in the future (patches welcome), so it is recommended that you create a new config addressing the fields by name rather than by order.

For example:

c0 := &serial.Config{Name: "COM45", Baud: 115200, ReadTimeout: time.Millisecond * 500}

or

c1 := new(serial.Config)
c1.Name = "/dev/tty.usbserial"
c1.Baud = 115200
c1.ReadTimeout = time.Millisecond * 500

type Parity

type Parity byte
const (
	ParityNone  Parity = 'N'
	ParityOdd   Parity = 'O'
	ParityEven  Parity = 'E'
	ParityMark  Parity = 'M' // parity bit is always 1
	ParitySpace Parity = 'S' // parity bit is always 0
)

type Port

type Port struct {
	// contains filtered or unexported fields
}

func OpenPort

func OpenPort(c *Config) (*Port, error)

OpenPort opens a serial port with the specified configuration

func (*Port) Close

func (p *Port) Close() (err error)

func (*Port) Flush

func (p *Port) Flush() error

Discards data written to the port but not transmitted, or data received but not read

func (*Port) Read

func (p *Port) Read(b []byte) (n int, err error)

func (*Port) Write

func (p *Port) Write(b []byte) (n int, err error)

type StopBits

type StopBits byte
const (
	Stop1     StopBits = 1
	Stop1Half StopBits = 15
	Stop2     StopBits = 2
)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL