mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-15 12:23:41 +00:00
all: changeover to eliminate all direct use of master/slave terminology
Signed-off-by: deadprogram <ron@hybridgroup.com>
This commit is contained in:
+1
-1
@@ -20,7 +20,7 @@ Please first open a Github issue. We want to help, and also make sure that there
|
|||||||
|
|
||||||
## How to use our Github repository
|
## How to use our Github repository
|
||||||
|
|
||||||
The `master` branch of this repo will always have the latest released version of the TinyGo drivers. All of the active development work for the next release will take place in the `dev` branch. The TinyGo drivers will use semantic versioning and will create a tag/release for each release.
|
The `release` branch of this repo will always have the latest released version of the TinyGo drivers. All of the active development work for the next release will take place in the `dev` branch. The TinyGo drivers will use semantic versioning and will create a tag/release for each release.
|
||||||
|
|
||||||
Here is how to contribute back some code or documentation:
|
Here is how to contribute back some code or documentation:
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -42,8 +42,8 @@ func New(b SPI) Device {
|
|||||||
|
|
||||||
// NewSoftwareSPI returns a new APA102 driver that will use a software based
|
// NewSoftwareSPI returns a new APA102 driver that will use a software based
|
||||||
// implementation of the SPI protocol.
|
// implementation of the SPI protocol.
|
||||||
func NewSoftwareSPI(sckPin, mosiPin machine.Pin, delay uint32) Device {
|
func NewSoftwareSPI(sckPin, sdoPin machine.Pin, delay uint32) Device {
|
||||||
return New(&bbSPI{SCK: sckPin, MOSI: mosiPin, Delay: delay})
|
return New(&bbSPI{SCK: sckPin, SDO: sdoPin, Delay: delay})
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteColors writes the given RGBA color slice out using the APA102 protocol.
|
// WriteColors writes the given RGBA color slice out using the APA102 protocol.
|
||||||
|
|||||||
+8
-8
@@ -9,16 +9,16 @@ import "machine"
|
|||||||
// this more generic and include it in the TinyGo "machine" package instead.
|
// this more generic and include it in the TinyGo "machine" package instead.
|
||||||
type bbSPI struct {
|
type bbSPI struct {
|
||||||
SCK machine.Pin
|
SCK machine.Pin
|
||||||
MOSI machine.Pin
|
SDO machine.Pin
|
||||||
Delay uint32
|
Delay uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
// Configure sets up the SCK and MOSI pins as outputs and sets them low
|
// Configure sets up the SCK and SDO pins as outputs and sets them low
|
||||||
func (s *bbSPI) Configure() {
|
func (s *bbSPI) Configure() {
|
||||||
s.SCK.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
s.SCK.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
||||||
s.MOSI.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
s.SDO.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
||||||
s.SCK.Low()
|
s.SCK.Low()
|
||||||
s.MOSI.Low()
|
s.SDO.Low()
|
||||||
if s.Delay == 0 {
|
if s.Delay == 0 {
|
||||||
s.Delay = 1
|
s.Delay = 1
|
||||||
}
|
}
|
||||||
@@ -50,11 +50,11 @@ func (s *bbSPI) Transfer(b byte) (byte, error) {
|
|||||||
s.SCK.High()
|
s.SCK.High()
|
||||||
s.delay()
|
s.delay()
|
||||||
|
|
||||||
// write the value to MOSI (MSB first)
|
// write the value to SDO (MSB first)
|
||||||
if b&(1<<(7-i)) == 0 {
|
if b&(1<<(7-i)) == 0 {
|
||||||
s.MOSI.Low()
|
s.SDO.Low()
|
||||||
} else {
|
} else {
|
||||||
s.MOSI.High()
|
s.SDO.High()
|
||||||
}
|
}
|
||||||
s.delay()
|
s.delay()
|
||||||
|
|
||||||
@@ -62,7 +62,7 @@ func (s *bbSPI) Transfer(b byte) (byte, error) {
|
|||||||
s.SCK.Low()
|
s.SCK.Low()
|
||||||
s.delay()
|
s.delay()
|
||||||
|
|
||||||
// for actual SPI would try to read the MISO value here
|
// for actual SPI would try to read the SDI value here
|
||||||
s.delay()
|
s.delay()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ func main() {
|
|||||||
|
|
||||||
machine.SPI1.Configure(machine.SPIConfig{
|
machine.SPI1.Configure(machine.SPIConfig{
|
||||||
SCK: machine.SPI1_SCK_PIN,
|
SCK: machine.SPI1_SCK_PIN,
|
||||||
MOSI: machine.SPI1_MOSI_PIN,
|
SDO: machine.SPI1_SDO_PIN,
|
||||||
MISO: machine.SPI1_MISO_PIN,
|
SDI: machine.SPI1_SDI_PIN,
|
||||||
Frequency: 8000000,
|
Frequency: 8000000,
|
||||||
})
|
})
|
||||||
machine.I2C0.Configure(machine.I2CConfig{SCL: machine.SCL_PIN, SDA: machine.SDA_PIN})
|
machine.I2C0.Configure(machine.I2CConfig{SCL: machine.SCL_PIN, SDA: machine.SDA_PIN})
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"machine"
|
"machine"
|
||||||
|
|
||||||
"tinygo.org/x/drivers/examples/flash/console"
|
console_example "tinygo.org/x/drivers/examples/flash/console"
|
||||||
"tinygo.org/x/drivers/flash"
|
"tinygo.org/x/drivers/flash"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -11,8 +11,8 @@ func main() {
|
|||||||
console_example.RunFor(
|
console_example.RunFor(
|
||||||
flash.NewSPI(
|
flash.NewSPI(
|
||||||
&machine.SPI1,
|
&machine.SPI1,
|
||||||
machine.SPI1_MOSI_PIN,
|
machine.SPI1_SDO_PIN,
|
||||||
machine.SPI1_MISO_PIN,
|
machine.SPI1_SDI_PIN,
|
||||||
machine.SPI1_SCK_PIN,
|
machine.SPI1_SCK_PIN,
|
||||||
machine.SPI1_CS_PIN,
|
machine.SPI1_CS_PIN,
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ var (
|
|||||||
func init() {
|
func init() {
|
||||||
machine.SPI3.Configure(machine.SPIConfig{
|
machine.SPI3.Configure(machine.SPIConfig{
|
||||||
SCK: machine.LCD_SCK_PIN,
|
SCK: machine.LCD_SCK_PIN,
|
||||||
MOSI: machine.LCD_MOSI_PIN,
|
SDO: machine.LCD_SDO_PIN,
|
||||||
MISO: machine.LCD_MISO_PIN,
|
SDI: machine.LCD_SDI_PIN,
|
||||||
Frequency: 40000000,
|
Frequency: 40000000,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ var (
|
|||||||
func init() {
|
func init() {
|
||||||
machine.SPI3.Configure(machine.SPIConfig{
|
machine.SPI3.Configure(machine.SPIConfig{
|
||||||
SCK: machine.LCD_SCK_PIN,
|
SCK: machine.LCD_SCK_PIN,
|
||||||
MOSI: machine.LCD_MOSI_PIN,
|
SDO: machine.LCD_SDO_PIN,
|
||||||
MISO: machine.LCD_MISO_PIN,
|
SDI: machine.LCD_SDI_PIN,
|
||||||
Frequency: 40000000,
|
Frequency: 40000000,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ var (
|
|||||||
func init() {
|
func init() {
|
||||||
machine.SPI3.Configure(machine.SPIConfig{
|
machine.SPI3.Configure(machine.SPIConfig{
|
||||||
SCK: machine.LCD_SCK_PIN,
|
SCK: machine.LCD_SCK_PIN,
|
||||||
MOSI: machine.LCD_MOSI_PIN,
|
SDO: machine.LCD_SDO_PIN,
|
||||||
MISO: machine.LCD_MISO_PIN,
|
SDI: machine.LCD_SDI_PIN,
|
||||||
Frequency: 40000000,
|
Frequency: 40000000,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,8 +62,8 @@ func main() {
|
|||||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||||
spi.Configure(machine.SPIConfig{
|
spi.Configure(machine.SPIConfig{
|
||||||
Frequency: 8 * 1e6,
|
Frequency: 8 * 1e6,
|
||||||
MOSI: machine.NINA_MOSI,
|
SDO: machine.NINA_SDO,
|
||||||
MISO: machine.NINA_MISO,
|
SDI: machine.NINA_SDI,
|
||||||
SCK: machine.NINA_SCK,
|
SCK: machine.NINA_SCK,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -69,8 +69,8 @@ func main() {
|
|||||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||||
spi.Configure(machine.SPIConfig{
|
spi.Configure(machine.SPIConfig{
|
||||||
Frequency: 8 * 1e6,
|
Frequency: 8 * 1e6,
|
||||||
MOSI: machine.NINA_MOSI,
|
SDO: machine.NINA_SDO,
|
||||||
MISO: machine.NINA_MISO,
|
SDI: machine.NINA_SDI,
|
||||||
SCK: machine.NINA_SCK,
|
SCK: machine.NINA_SCK,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -46,8 +46,8 @@ func main() {
|
|||||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||||
machine.NINA_SPI.Configure(machine.SPIConfig{
|
machine.NINA_SPI.Configure(machine.SPIConfig{
|
||||||
Frequency: 8 * 1e6,
|
Frequency: 8 * 1e6,
|
||||||
MOSI: machine.NINA_MOSI,
|
SDO: machine.NINA_SDO,
|
||||||
MISO: machine.NINA_MISO,
|
SDI: machine.NINA_SDI,
|
||||||
SCK: machine.NINA_SCK,
|
SCK: machine.NINA_SCK,
|
||||||
})
|
})
|
||||||
adaptor.Configure()
|
adaptor.Configure()
|
||||||
|
|||||||
@@ -55,8 +55,8 @@ func main() {
|
|||||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||||
spi.Configure(machine.SPIConfig{
|
spi.Configure(machine.SPIConfig{
|
||||||
Frequency: 8 * 1e6,
|
Frequency: 8 * 1e6,
|
||||||
MOSI: machine.NINA_MOSI,
|
SDO: machine.NINA_SDO,
|
||||||
MISO: machine.NINA_MISO,
|
SDI: machine.NINA_SDI,
|
||||||
SCK: machine.NINA_SCK,
|
SCK: machine.NINA_SCK,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ func main() {
|
|||||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||||
machine.NINA_SPI.Configure(machine.SPIConfig{
|
machine.NINA_SPI.Configure(machine.SPIConfig{
|
||||||
Frequency: 8 * 1e6,
|
Frequency: 8 * 1e6,
|
||||||
MOSI: machine.NINA_MOSI,
|
SDO: machine.NINA_SDO,
|
||||||
MISO: machine.NINA_MISO,
|
SDI: machine.NINA_SDI,
|
||||||
SCK: machine.NINA_SCK,
|
SCK: machine.NINA_SCK,
|
||||||
})
|
})
|
||||||
adaptor.Configure()
|
adaptor.Configure()
|
||||||
|
|||||||
@@ -56,8 +56,8 @@ func main() {
|
|||||||
// Configure SPI for 8Mhz, Mode 0, MSB First
|
// Configure SPI for 8Mhz, Mode 0, MSB First
|
||||||
spi.Configure(machine.SPIConfig{
|
spi.Configure(machine.SPIConfig{
|
||||||
Frequency: 8 * 1e6,
|
Frequency: 8 * 1e6,
|
||||||
MOSI: machine.NINA_MOSI,
|
SDO: machine.NINA_SDO,
|
||||||
MISO: machine.NINA_MISO,
|
SDI: machine.NINA_SDI,
|
||||||
SCK: machine.NINA_SCK,
|
SCK: machine.NINA_SCK,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
+13
-13
@@ -16,24 +16,24 @@ type transport interface {
|
|||||||
|
|
||||||
// NewSPI returns a pointer to a flash device that uses a SPI peripheral to
|
// NewSPI returns a pointer to a flash device that uses a SPI peripheral to
|
||||||
// communicate with a serial memory chip.
|
// communicate with a serial memory chip.
|
||||||
func NewSPI(spi *machine.SPI, mosi, miso, sck, cs machine.Pin) *Device {
|
func NewSPI(spi *machine.SPI, sdo, sdi, sck, cs machine.Pin) *Device {
|
||||||
return &Device{
|
return &Device{
|
||||||
trans: &spiTransport{
|
trans: &spiTransport{
|
||||||
spi: spi,
|
spi: spi,
|
||||||
mosi: mosi,
|
sdo: sdo,
|
||||||
miso: miso,
|
sdi: sdi,
|
||||||
sck: sck,
|
sck: sck,
|
||||||
ss: cs,
|
ss: cs,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type spiTransport struct {
|
type spiTransport struct {
|
||||||
spi *machine.SPI
|
spi *machine.SPI
|
||||||
mosi machine.Pin
|
sdo machine.Pin
|
||||||
miso machine.Pin
|
sdi machine.Pin
|
||||||
sck machine.Pin
|
sck machine.Pin
|
||||||
ss machine.Pin
|
ss machine.Pin
|
||||||
}
|
}
|
||||||
|
|
||||||
func (tr *spiTransport) configure(config *DeviceConfig) {
|
func (tr *spiTransport) configure(config *DeviceConfig) {
|
||||||
@@ -53,8 +53,8 @@ func (tr *spiTransport) setClockSpeed(hz uint32) error {
|
|||||||
}
|
}
|
||||||
tr.spi.Configure(machine.SPIConfig{
|
tr.spi.Configure(machine.SPIConfig{
|
||||||
Frequency: hz,
|
Frequency: hz,
|
||||||
MISO: tr.miso,
|
SDI: tr.sdi,
|
||||||
MOSI: tr.mosi,
|
SDO: tr.sdo,
|
||||||
SCK: tr.sck,
|
SCK: tr.sck,
|
||||||
LSBFirst: false,
|
LSBFirst: false,
|
||||||
Mode: 0,
|
Mode: 0,
|
||||||
|
|||||||
@@ -91,11 +91,11 @@ const (
|
|||||||
EXT_SENS_DATA_22 = 0x5F
|
EXT_SENS_DATA_22 = 0x5F
|
||||||
EXT_SENS_DATA_23 = 0x60
|
EXT_SENS_DATA_23 = 0x60
|
||||||
|
|
||||||
// I2C slave data out
|
// I2C peripheral data out
|
||||||
I2C_SLV0_DO = 0x63
|
I2C_PER0_DO = 0x63
|
||||||
I2C_SLV1_DO = 0x64
|
I2C_PER1_DO = 0x64
|
||||||
I2C_SLV2_DO = 0x65
|
I2C_PER2_DO = 0x65
|
||||||
I2C_SLV3_DO = 0x66
|
I2C_PER3_DO = 0x66
|
||||||
I2C_MST_DELAY_CT = 0x67
|
I2C_MST_DELAY_CT = 0x67
|
||||||
|
|
||||||
SIGNAL_PATH_RES = 0x68 // Signal path reset
|
SIGNAL_PATH_RES = 0x68 // Signal path reset
|
||||||
|
|||||||
+63
-63
@@ -134,23 +134,23 @@ const (
|
|||||||
CmdSetDigitalWrite = 0x51
|
CmdSetDigitalWrite = 0x51
|
||||||
CmdSetAnalogWrite = 0x52
|
CmdSetAnalogWrite = 0x52
|
||||||
|
|
||||||
ErrTimeoutSlaveReady Error = 0x01
|
ErrTimeoutChipReady Error = 0x01
|
||||||
ErrTimeoutSlaveSelect Error = 0x02
|
ErrTimeoutChipSelect Error = 0x02
|
||||||
ErrCheckStartCmd Error = 0x03
|
ErrCheckStartCmd Error = 0x03
|
||||||
ErrWaitRsp Error = 0x04
|
ErrWaitRsp Error = 0x04
|
||||||
ErrUnexpectedLength Error = 0xE0
|
ErrUnexpectedLength Error = 0xE0
|
||||||
ErrNoParamsReturned Error = 0xE1
|
ErrNoParamsReturned Error = 0xE1
|
||||||
ErrIncorrectSentinel Error = 0xE2
|
ErrIncorrectSentinel Error = 0xE2
|
||||||
ErrCmdErrorReceived Error = 0xEF
|
ErrCmdErrorReceived Error = 0xEF
|
||||||
ErrNotImplemented Error = 0xF0
|
ErrNotImplemented Error = 0xF0
|
||||||
ErrUnknownHost Error = 0xF1
|
ErrUnknownHost Error = 0xF1
|
||||||
ErrSocketAlreadySet Error = 0xF2
|
ErrSocketAlreadySet Error = 0xF2
|
||||||
ErrConnectionTimeout Error = 0xF3
|
ErrConnectionTimeout Error = 0xF3
|
||||||
ErrNoData Error = 0xF4
|
ErrNoData Error = 0xF4
|
||||||
ErrDataNotWritten Error = 0xF5
|
ErrDataNotWritten Error = 0xF5
|
||||||
ErrCheckDataError Error = 0xF6
|
ErrCheckDataError Error = 0xF6
|
||||||
ErrBufferTooSmall Error = 0xF7
|
ErrBufferTooSmall Error = 0xF7
|
||||||
ErrNoSocketAvail Error = 0xFF
|
ErrNoSocketAvail Error = 0xFF
|
||||||
|
|
||||||
NoSocketAvail uint8 = 0xFF
|
NoSocketAvail uint8 = 0xFF
|
||||||
)
|
)
|
||||||
@@ -296,8 +296,8 @@ func (d *Device) StartClient(addr uint32, port uint16, sock uint8, mode uint8) e
|
|||||||
println("[StartClient] called StartClient()\r")
|
println("[StartClient] called StartClient()\r")
|
||||||
fmt.Printf("[StartClient] addr: % 02X, port: %d, sock: %d\r\n", addr, port, sock)
|
fmt.Printf("[StartClient] addr: % 02X, port: %d, sock: %d\r\n", addr, port, sock)
|
||||||
}
|
}
|
||||||
if err := d.waitForSlaveSelect(); err != nil {
|
if err := d.waitForChipSelect(); err != nil {
|
||||||
d.spiSlaveDeselect()
|
d.spiChipDeselect()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
l := d.sendCmd(CmdStartClientTCP, 4)
|
l := d.sendCmd(CmdStartClientTCP, 4)
|
||||||
@@ -306,7 +306,7 @@ func (d *Device) StartClient(addr uint32, port uint16, sock uint8, mode uint8) e
|
|||||||
l += d.sendParam8(sock, false)
|
l += d.sendParam8(sock, false)
|
||||||
l += d.sendParam8(mode, true)
|
l += d.sendParam8(mode, true)
|
||||||
d.addPadding(l)
|
d.addPadding(l)
|
||||||
d.spiSlaveDeselect()
|
d.spiChipDeselect()
|
||||||
_, err := d.waitRspCmd1(CmdStartClientTCP)
|
_, err := d.waitRspCmd1(CmdStartClientTCP)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -320,15 +320,15 @@ func (d *Device) GetClientState(sock uint8) (uint8, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) SendData(buf []byte, sock uint8) (uint16, error) {
|
func (d *Device) SendData(buf []byte, sock uint8) (uint16, error) {
|
||||||
if err := d.waitForSlaveSelect(); err != nil {
|
if err := d.waitForChipSelect(); err != nil {
|
||||||
d.spiSlaveDeselect()
|
d.spiChipDeselect()
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
l := d.sendCmd(CmdSendDataTCP, 2)
|
l := d.sendCmd(CmdSendDataTCP, 2)
|
||||||
l += d.sendParamBuf([]byte{sock}, false)
|
l += d.sendParamBuf([]byte{sock}, false)
|
||||||
l += d.sendParamBuf(buf, true)
|
l += d.sendParamBuf(buf, true)
|
||||||
d.addPadding(l)
|
d.addPadding(l)
|
||||||
d.spiSlaveDeselect()
|
d.spiChipDeselect()
|
||||||
return d.getUint16(d.waitRspCmd1(CmdSendDataTCP))
|
return d.getUint16(d.waitRspCmd1(CmdSendDataTCP))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -348,8 +348,8 @@ func (d *Device) CheckDataSent(sock uint8) (bool, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) GetDataBuf(sock uint8, buf []byte) (int, error) {
|
func (d *Device) GetDataBuf(sock uint8, buf []byte) (int, error) {
|
||||||
if err := d.waitForSlaveSelect(); err != nil {
|
if err := d.waitForChipSelect(); err != nil {
|
||||||
d.spiSlaveDeselect()
|
d.spiChipDeselect()
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
p := uint16(len(buf))
|
p := uint16(len(buf))
|
||||||
@@ -357,13 +357,13 @@ func (d *Device) GetDataBuf(sock uint8, buf []byte) (int, error) {
|
|||||||
l += d.sendParamBuf([]byte{sock}, false)
|
l += d.sendParamBuf([]byte{sock}, false)
|
||||||
l += d.sendParamBuf([]byte{uint8(p & 0x00FF), uint8((p) >> 8)}, true)
|
l += d.sendParamBuf([]byte{uint8(p & 0x00FF), uint8((p) >> 8)}, true)
|
||||||
d.addPadding(l)
|
d.addPadding(l)
|
||||||
d.spiSlaveDeselect()
|
d.spiChipDeselect()
|
||||||
if err := d.waitForSlaveSelect(); err != nil {
|
if err := d.waitForChipSelect(); err != nil {
|
||||||
d.spiSlaveDeselect()
|
d.spiChipDeselect()
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
n, err := d.waitRspBuf16(CmdGetDatabufTCP, buf)
|
n, err := d.waitRspBuf16(CmdGetDatabufTCP, buf)
|
||||||
d.spiSlaveDeselect()
|
d.spiChipDeselect()
|
||||||
return int(n), err
|
return int(n), err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -376,8 +376,8 @@ func (d *Device) StopClient(sock uint8) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) StartServer(port uint16, sock uint8, mode uint8) error {
|
func (d *Device) StartServer(port uint16, sock uint8, mode uint8) error {
|
||||||
if err := d.waitForSlaveSelect(); err != nil {
|
if err := d.waitForChipSelect(); err != nil {
|
||||||
d.spiSlaveDeselect()
|
d.spiChipDeselect()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
l := d.sendCmd(CmdStartServerTCP, 3)
|
l := d.sendCmd(CmdStartServerTCP, 3)
|
||||||
@@ -385,36 +385,36 @@ func (d *Device) StartServer(port uint16, sock uint8, mode uint8) error {
|
|||||||
l += d.sendParam8(sock, false)
|
l += d.sendParam8(sock, false)
|
||||||
l += d.sendParam8(mode, true)
|
l += d.sendParam8(mode, true)
|
||||||
d.addPadding(l)
|
d.addPadding(l)
|
||||||
d.spiSlaveDeselect()
|
d.spiChipDeselect()
|
||||||
_, err := d.waitRspCmd1(CmdStartClientTCP)
|
_, err := d.waitRspCmd1(CmdStartClientTCP)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// InsertDataBuf adds data to the buffer used for sending UDP data
|
// InsertDataBuf adds data to the buffer used for sending UDP data
|
||||||
func (d *Device) InsertDataBuf(buf []byte, sock uint8) (bool, error) {
|
func (d *Device) InsertDataBuf(buf []byte, sock uint8) (bool, error) {
|
||||||
if err := d.waitForSlaveSelect(); err != nil {
|
if err := d.waitForChipSelect(); err != nil {
|
||||||
d.spiSlaveDeselect()
|
d.spiChipDeselect()
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
l := d.sendCmd(CmdInsertDataBuf, 2)
|
l := d.sendCmd(CmdInsertDataBuf, 2)
|
||||||
l += d.sendParamBuf([]byte{sock}, false)
|
l += d.sendParamBuf([]byte{sock}, false)
|
||||||
l += d.sendParamBuf(buf, true)
|
l += d.sendParamBuf(buf, true)
|
||||||
d.addPadding(l)
|
d.addPadding(l)
|
||||||
d.spiSlaveDeselect()
|
d.spiChipDeselect()
|
||||||
n, err := d.getUint8(d.waitRspCmd1(CmdInsertDataBuf))
|
n, err := d.getUint8(d.waitRspCmd1(CmdInsertDataBuf))
|
||||||
return n == 1, err
|
return n == 1, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// SendUDPData sends the data previously added to the UDP buffer
|
// SendUDPData sends the data previously added to the UDP buffer
|
||||||
func (d *Device) SendUDPData(sock uint8) (bool, error) {
|
func (d *Device) SendUDPData(sock uint8) (bool, error) {
|
||||||
if err := d.waitForSlaveSelect(); err != nil {
|
if err := d.waitForChipSelect(); err != nil {
|
||||||
d.spiSlaveDeselect()
|
d.spiChipDeselect()
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
l := d.sendCmd(CmdSendDataUDP, 1)
|
l := d.sendCmd(CmdSendDataUDP, 1)
|
||||||
l += d.sendParam8(sock, true)
|
l += d.sendParam8(sock, true)
|
||||||
d.addPadding(l)
|
d.addPadding(l)
|
||||||
d.spiSlaveDeselect()
|
d.spiChipDeselect()
|
||||||
n, err := d.getUint8(d.waitRspCmd1(CmdSendDataUDP))
|
n, err := d.getUint8(d.waitRspCmd1(CmdSendDataUDP))
|
||||||
return n == 1, err
|
return n == 1, err
|
||||||
}
|
}
|
||||||
@@ -710,8 +710,8 @@ func (d *Device) reqRspStr0(cmd uint8, sl []string) (l uint8, err error) {
|
|||||||
if err := d.sendCmd0(cmd); err != nil {
|
if err := d.sendCmd0(cmd); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
defer d.spiSlaveDeselect()
|
defer d.spiChipDeselect()
|
||||||
if err = d.waitForSlaveSelect(); err != nil {
|
if err = d.waitForChipSelect(); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return d.waitRspStr(cmd, sl)
|
return d.waitRspStr(cmd, sl)
|
||||||
@@ -722,16 +722,16 @@ func (d *Device) reqRspStr1(cmd uint8, data uint8, sl []string) (uint8, error) {
|
|||||||
if err := d.sendCmdPadded1(cmd, data); err != nil {
|
if err := d.sendCmdPadded1(cmd, data); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
defer d.spiSlaveDeselect()
|
defer d.spiChipDeselect()
|
||||||
if err := d.waitForSlaveSelect(); err != nil {
|
if err := d.waitForChipSelect(); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
return d.waitRspStr(cmd, sl)
|
return d.waitRspStr(cmd, sl)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) sendCmd0(cmd uint8) error {
|
func (d *Device) sendCmd0(cmd uint8) error {
|
||||||
defer d.spiSlaveDeselect()
|
defer d.spiChipDeselect()
|
||||||
if err := d.waitForSlaveSelect(); err != nil {
|
if err := d.waitForChipSelect(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d.sendCmd(cmd, 0)
|
d.sendCmd(cmd, 0)
|
||||||
@@ -739,8 +739,8 @@ func (d *Device) sendCmd0(cmd uint8) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) sendCmdPadded1(cmd uint8, data uint8) error {
|
func (d *Device) sendCmdPadded1(cmd uint8, data uint8) error {
|
||||||
defer d.spiSlaveDeselect()
|
defer d.spiChipDeselect()
|
||||||
if err := d.waitForSlaveSelect(); err != nil {
|
if err := d.waitForChipSelect(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d.sendCmd(cmd, 1)
|
d.sendCmd(cmd, 1)
|
||||||
@@ -751,8 +751,8 @@ func (d *Device) sendCmdPadded1(cmd uint8, data uint8) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) sendCmdStr(cmd uint8, p1 string) (err error) {
|
func (d *Device) sendCmdStr(cmd uint8, p1 string) (err error) {
|
||||||
defer d.spiSlaveDeselect()
|
defer d.spiChipDeselect()
|
||||||
if err := d.waitForSlaveSelect(); err != nil {
|
if err := d.waitForChipSelect(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
l := d.sendCmd(cmd, 1)
|
l := d.sendCmd(cmd, 1)
|
||||||
@@ -762,8 +762,8 @@ func (d *Device) sendCmdStr(cmd uint8, p1 string) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) sendCmdStr2(cmd uint8, p1 string, p2 string) (err error) {
|
func (d *Device) sendCmdStr2(cmd uint8, p1 string, p2 string) (err error) {
|
||||||
defer d.spiSlaveDeselect()
|
defer d.spiChipDeselect()
|
||||||
if err := d.waitForSlaveSelect(); err != nil {
|
if err := d.waitForChipSelect(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
l := d.sendCmd(cmd, 2)
|
l := d.sendCmd(cmd, 2)
|
||||||
@@ -774,8 +774,8 @@ func (d *Device) sendCmdStr2(cmd uint8, p1 string, p2 string) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) waitRspCmd1(cmd uint8) (l uint8, err error) {
|
func (d *Device) waitRspCmd1(cmd uint8) (l uint8, err error) {
|
||||||
defer d.spiSlaveDeselect()
|
defer d.spiChipDeselect()
|
||||||
if err = d.waitForSlaveSelect(); err != nil {
|
if err = d.waitForChipSelect(); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return d.waitRspCmd(cmd, 1)
|
return d.waitRspCmd(cmd, 1)
|
||||||
@@ -900,29 +900,29 @@ func (d *Device) checkStartCmd() (bool, error) {
|
|||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) waitForSlaveSelect() (err error) {
|
func (d *Device) waitForChipSelect() (err error) {
|
||||||
err = d.waitForSlaveReady()
|
err = d.waitForChipReady()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
err = d.spiSlaveSelect()
|
err = d.spiChipSelect()
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) waitForSlaveReady() error {
|
func (d *Device) waitForChipReady() error {
|
||||||
if _debug {
|
if _debug {
|
||||||
println("waitForSlaveReady()\r")
|
println("waitForChipReady()\r")
|
||||||
}
|
}
|
||||||
for t := newTimer(10 * time.Second); !(d.ACK.Get() == false); {
|
for t := newTimer(10 * time.Second); !(d.ACK.Get() == false); {
|
||||||
if t.Expired() {
|
if t.Expired() {
|
||||||
return ErrTimeoutSlaveReady
|
return ErrTimeoutChipReady
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) spiSlaveSelect() error {
|
func (d *Device) spiChipSelect() error {
|
||||||
if _debug {
|
if _debug {
|
||||||
println("spiSlaveSelect()\r")
|
println("spiChipSelect()\r")
|
||||||
}
|
}
|
||||||
d.CS.Low()
|
d.CS.Low()
|
||||||
for t := newTimer(5 * time.Millisecond); !t.Expired(); {
|
for t := newTimer(5 * time.Millisecond); !t.Expired(); {
|
||||||
@@ -930,12 +930,12 @@ func (d *Device) spiSlaveSelect() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ErrTimeoutSlaveSelect
|
return ErrTimeoutChipSelect
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Device) spiSlaveDeselect() {
|
func (d *Device) spiChipDeselect() {
|
||||||
if _debug {
|
if _debug {
|
||||||
println("spiSlaveDeselect\r")
|
println("spiChipDeselect\r")
|
||||||
}
|
}
|
||||||
d.CS.High()
|
d.CS.High()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user