/*

SPI example

*/

package main

import (
	"github.com/stianeikeland/go-rpio/v4"
	"fmt"
)

func main() {
	if err := rpio.Open(); err != nil {
		panic(err)
	}

	if err := rpio.SpiBegin(rpio.Spi0); err != nil {
		panic(err)
	}

	rpio.SpiChipSelect(0) // Select CE0 slave

	// Send
	rpio.SpiTransmit(0xFF)             // send single byte
	rpio.SpiTransmit(0xDE, 0xAD, 0xBE) // send several bytes

	data := []byte{'H', 'e', 'l', 'l', 'o', 0}
	rpio.SpiTransmit(data...)          // send slice of bytes

	// Receive

	received := rpio.SpiReceive(5)     // receive 5 bytes, (sends 5 x 0s)
	fmt.Println(received)

	// Send & Receive

	buffer := []byte{ 0xDE, 0xED, 0xBE, 0xEF }
	rpio.SpiExchange(buffer)           // buffer is populated with received data
	fmt.Println(buffer)

	rpio.SpiEnd(rpio.Spi0)
	rpio.Close()
}