From 67d316851a372fc1b2ebea4f04a4c79fe56fff1a Mon Sep 17 00:00:00 2001 From: kunalpowar Date: Thu, 22 May 2014 02:19:01 +0530 Subject: [PATCH] spi: finishing touches --- convertors/mcp3008/mcp3008.go | 21 ++++++++++++--------- host/bbb/bbb.go | 1 - host/generic/spibus.go | 31 +++++++++++-------------------- samples/mcp3008.go | 11 ++++++++--- samples/spi.go | 3 +-- samples/spimcp3008.go | 11 +++++++++-- spi.go | 16 ++++++++-------- 7 files changed, 49 insertions(+), 45 deletions(-) diff --git a/convertors/mcp3008/mcp3008.go b/convertors/mcp3008/mcp3008.go index 7636e29..64f6106 100644 --- a/convertors/mcp3008/mcp3008.go +++ b/convertors/mcp3008/mcp3008.go @@ -3,11 +3,10 @@ package mcp3008 import ( "github.com/golang/glog" "github.com/kidoman/embd" - - _ "github.com/kidoman/embd/host/all" ) -type mcp3008 struct { +// MCP3008 represents a mcp3008 8bit DAC +type MCP3008 struct { mode byte bus embd.SPIBus @@ -16,18 +15,22 @@ type mcp3008 struct { var SingleMode byte = 1 var DifferenceMode byte = 0 -func New(mode byte, bus embd.SPIBus) *mcp3008 { - return &mcp3008{mode, bus} +func New(mode byte, bus embd.SPIBus) *MCP3008 { + return &MCP3008{mode, bus} } -func (m *mcp3008) AnalogValueAt(chanNum int) (int, error) { - data := make([]uint8, 3) - data[0] = 1 +const ( + startBit = 1 +) + +func (m *MCP3008) AnalogValueAt(chanNum int) (int, error) { + var data [3]uint8 + data[0] = startBit data[1] = uint8(m.mode)<<7 | uint8(chanNum)<<4 data[2] = 0 glog.V(2).Infof("mcp3008: sendingdata buffer %v", data) - if err := m.bus.TransferAndRecieveData(data); err != nil { + if err := m.bus.TransferAndRecieveData(data[:]); err != nil { return 0, err } diff --git a/host/bbb/bbb.go b/host/bbb/bbb.go index 4564c72..f909627 100644 --- a/host/bbb/bbb.go +++ b/host/bbb/bbb.go @@ -16,7 +16,6 @@ import ( "strings" "github.com/golang/glog" - "github.com/kidoman/embd" "github.com/kidoman/embd/host/generic" ) diff --git a/host/generic/spibus.go b/host/generic/spibus.go index 35b3472..9857a38 100644 --- a/host/generic/spibus.go +++ b/host/generic/spibus.go @@ -129,11 +129,9 @@ func (b *spiBus) setMode() error { } func (b *spiBus) setSpeed() error { - var speed uint32 + speed := defaultSPISpeed if b.speed > 0 { speed = uint32(b.speed) - } else { - speed = defaultSPISpeed } glog.V(3).Infof("spi: setting spi speedMax to %v", speed) @@ -150,12 +148,9 @@ func (b *spiBus) setSpeed() error { } func (b *spiBus) setBPW() error { - var bpw uint8 - + bpw := defaultSPIBPW if b.bpw > 0 { bpw = uint8(b.bpw) - } else { - bpw = defaultSPIBPW } glog.V(3).Infof("spi: setting spi bpw to %v", bpw) @@ -171,13 +166,11 @@ func (b *spiBus) setBPW() error { } func (b *spiBus) setDelay() { - var delay uint16 - + delay := defaultDelayms if b.delayms > 0 { delay = uint16(b.delayms) - } else { - delay = defaultDelayms } + glog.V(3).Infof("spi: delayms set to %v", delay) b.spiTransferData.delayus = delay } @@ -210,11 +203,11 @@ func (b *spiBus) ReceiveData(len int) ([]uint8, error) { return nil, err } - data := make([]uint8, len) - if err := b.TransferAndRecieveData(data); err != nil { + var data [len]uint8 + if err := b.TransferAndRecieveData(data[:]); err != nil { return nil, err } - return data, nil + return data[:], nil } func (b *spiBus) TransferAndReceiveByte(data byte) (byte, error) { @@ -222,9 +215,8 @@ func (b *spiBus) TransferAndReceiveByte(data byte) (byte, error) { return 0, err } - d := make([]uint8, 1) - d[0] = uint8(data) - if err := b.TransferAndRecieveData(d); err != nil { + d := [1]uint8{uint8(data)} + if err := b.TransferAndRecieveData(d[:]); err != nil { return 0, err } return d[0], nil @@ -235,9 +227,8 @@ func (b *spiBus) ReceiveByte() (byte, error) { return 0, err } - d := make([]uint8, 1) - err := b.TransferAndRecieveData(d) - if err != nil { + var d [1]uint8 + if err := b.TransferAndRecieveData(d[:]); err != nil { return 0, err } return byte(d[0]), nil diff --git a/samples/mcp3008.go b/samples/mcp3008.go index ff2f09f..28c8ff6 100644 --- a/samples/mcp3008.go +++ b/samples/mcp3008.go @@ -1,5 +1,6 @@ // +build ignore +// this sample uses the mcp3008 package to interface with the 8-bit ADC and works without code change on bbb and rpi package main import ( @@ -7,9 +8,9 @@ import ( "fmt" "time" - "github.com/kidoman/embd/convertors/mcp3008" - "github.com/kidoman/embd" + "github.com/kidoman/embd/convertors/mcp3008" + _ "github.com/kidoman/embd/host/all" ) func main() { @@ -21,7 +22,11 @@ func main() { } defer embd.CloseSPI() - spiBus := embd.NewSPIBus(embd.SpiMode0, 0, 1000000, 8, 0) + channel := 0 + speed := 1000000 + bpw := 8 + delay := 0 + spiBus := embd.NewSPIBus(embd.SPIMode0, channel, speed, bpw, delay) defer spiBus.Close() adc := mcp3008.New(mcp3008.SingleMode, spiBus) diff --git a/samples/spi.go b/samples/spi.go index 8ed81f2..72ef4f2 100644 --- a/samples/spi.go +++ b/samples/spi.go @@ -6,7 +6,6 @@ import ( "fmt" "github.com/kidoman/embd" - _ "github.com/kidoman/embd/host/all" ) @@ -16,7 +15,7 @@ func main() { } defer embd.CloseSPI() - spiBus := embd.NewSPIBus(embd.SpiMode0, 0, 1000000, 8, 0) + spiBus := embd.NewSPIBus(embd.SPIMode0, 0, 1000000, 8, 0) defer spiBus.Close() dataBuf := []uint8{1, 2, 3} diff --git a/samples/spimcp3008.go b/samples/spimcp3008.go index 48405e1..e862cc6 100644 --- a/samples/spimcp3008.go +++ b/samples/spimcp3008.go @@ -18,12 +18,19 @@ func main() { } defer embd.CloseSPI() - bus := embd.NewSPIBus(embd.SpiMode0, 0, 1000000, 8, 0) + channel := 0 + speed := 1000000 + bpw := 8 + delay := 0 + bus := embd.NewSPIBus(embd.SPIMode0, channel, speed, bpw, delay) defer bus.Close() for i := 0; i < 30; i++ { time.Sleep(1 * time.Second) - val, _ := getSensorValue(bus) + val, err := getSensorValue(bus) + if err != nil { + panic(err) + } fmt.Printf("value is: %v\n", val) } } diff --git a/spi.go b/spi.go index 63ad89e..1568f2d 100644 --- a/spi.go +++ b/spi.go @@ -6,17 +6,17 @@ const ( spiCpha = 0x01 spiCpol = 0x02 - // SpiMode0 represents the mode0 operation (CPOL=0 CPHA=0) of spi. - SpiMode0 = (0 | 0) + // SPIMode0 represents the mode0 operation (CPOL=0 CPHA=0) of spi. + SPIMode0 = (0 | 0) - // SpiMode0 represents the mode0 operation (CPOL=0 CPHA=1) of spi. - SpiMode1 = (0 | spiCpha) + // SPIMode1 represents the mode0 operation (CPOL=0 CPHA=1) of spi. + SPIMode1 = (0 | spiCpha) - // SpiMode0 represents the mode0 operation (CPOL=1 CPHA=0) of spi. - SpiMode2 = (spiCpol | 0) + // SPIMode2 represents the mode0 operation (CPOL=1 CPHA=0) of spi. + SPIMode2 = (spiCpol | 0) - // SpiMode0 represents the mode0 operation (CPOL=1 CPHA=1) of spi. - SpiMode3 = (spiCpol | spiCpha) + // SPIMode3 represents the mode0 operation (CPOL=1 CPHA=1) of spi. + SPIMode3 = (spiCpol | spiCpha) ) // SPI interface allows interaction with the SPI bus.