//go:build swan

package machine

import (
	"device/stm32"
	"runtime/interrupt"
)

const (
	// LED on the SWAN
	LED = PE2

	// UART pins
	//    PA9 and PA10 are connected to the SWAN Tx/Rx
	UART_TX_PIN = PA9
	UART_RX_PIN = PA10

	// I2C pins
	//    PB6 is SCL
	//    PB7 is SDA
	I2C0_SCL_PIN = PB6
	I2C0_SDA_PIN = PB7

	// SPI pins
	SPI1_SCK_PIN = PD1
	SPI1_SDI_PIN = PB14
	SPI1_SDO_PIN = PB15
	SPI0_SCK_PIN = SPI1_SCK_PIN
	SPI0_SDI_PIN = SPI1_SDI_PIN
	SPI0_SDO_PIN = SPI1_SDO_PIN
)

var (
	// USART1 is connected to the TX/RX pins
	UART1  = &_UART1
	_UART1 = UART{
		Buffer:            NewRingBuffer(),
		Bus:               stm32.USART1,
		TxAltFuncSelector: 7,
		RxAltFuncSelector: 7,
	}
	DefaultUART = UART1

	// I2C1 is documented, alias to I2C0 as well
	I2C1 = &I2C{
		Bus:             stm32.I2C1,
		AltFuncSelector: 4,
	}
	I2C0 = I2C1

	// SPI1 is documented, alias to SPI0 as well
	SPI1 = &SPI{
		Bus:             stm32.SPI2,
		AltFuncSelector: 5,
	}
	SPI0 = SPI1
)

func init() {
	UART1.Interrupt = interrupt.New(stm32.IRQ_USART1, _UART1.handleInterrupt)
}
