Skip to content

A golang canbus library with support for multiple transports

License

Notifications You must be signed in to change notification settings

jaster-prj/go-can

 
 

Repository files navigation

go-can

github.com/jaster-prj/go-can is a canbus golang library supporting multiple transports (serial adapater, socketcan, etc).

Does not support extended frames, feel free to create a PR

Installation

go get github.com/jaster-prj/go-can

Basic usage

package main

import (
	"log"
	"time"

	"github.com/jaster-prj/go-can"
	"github.com/jaster-prj/go-can/transports"
)

const TestPort string = "/dev/tty.usbserial-14140"

func main() {
	// Configure transport
	tr := &transports.USBCanAnalyzer{
		Port:     TestPort,
		BaudRate: 2000000,
	}

	// Open bus
	bus := can.NewBus(tr)

	if err := bus.Open(); err != nil {
		log.Fatal(err)
	}

	// Write some frames

	log.Println("Write 10 frames")

	for i := 0; i < 9; i++ {
		frm := &can.Frame{
			ArbitrationID: uint32(i),
			Data:          [8]byte{0x00, 0X01, uint8(i)},
		}

		if err := bus.Write(frm); err != nil {
			log.Fatal(err)
		}

		log.Printf("Frame %v writed", frm)
	}

	// Read frames during

	log.Println("Wait a frame (10s timeout)")
	timer := time.NewTimer(10 * time.Second)

	select {
	case frm := <-bus.ReadChan():
		log.Println(frm)
	case <-timer.C:
		log.Println("Timeout")
	}

	if err := bus.Close(); err != nil {
		log.Fatal(err)
	}

	log.Println("done")
}

About

A golang canbus library with support for multiple transports

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 97.6%
  • Makefile 2.4%