//go:build bluepill

package machine

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

const xtalHz = 8_000_000

// Pins printed on the silkscreen
const (
	C13 = PC13
	C14 = PC14
	C15 = PC15
	A0  = PA0
	A1  = PA1
	A2  = PA2
	A3  = PA3
	A4  = PA4
	A5  = PA5
	A6  = PA6
	A7  = PA7
	B0  = PB0
	B1  = PB1
	B10 = PB10
	B11 = PB11
	B12 = PB12
	B13 = PB13
	B14 = PB14
	B15 = PB15
	A8  = PA8
	A9  = PA9
	A10 = PA10
	A11 = PA11
	A12 = PA12
	A13 = PA13
	A14 = PA14
	A15 = PA15
	B3  = PB3
	B4  = PB4
	B5  = PB5
	B6  = PB6
	B7  = PB7
	B8  = PB8
	B9  = PB9
)

// Analog Pins
const (
	ADC0 = PA0
	ADC1 = PA1
	ADC2 = PA2
	ADC3 = PA3
	ADC4 = PA4
	ADC5 = PA5
	ADC6 = PA6
	ADC7 = PA7
	ADC8 = PB0
	ADC9 = PB1
)

const (
	// This board does not have a user button, so
	// use first GPIO pin by default
	BUTTON = PA0

	LED = PC13
)

var DefaultUART = UART1

// UART pins
const (
	UART_TX_PIN     = PA9
	UART_RX_PIN     = PA10
	UART_ALT_TX_PIN = PB6
	UART_ALT_RX_PIN = PB7
)

var (
	// USART1 is the first hardware serial port on the STM32.
	UART1  = &_UART1
	_UART1 = UART{
		Buffer: NewRingBuffer(),
		Bus:    stm32.USART1,
	}
	UART2  = &_UART2
	_UART2 = UART{
		Buffer: NewRingBuffer(),
		Bus:    stm32.USART2,
	}
)

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

// SPI pins
const (
	SPI0_SCK_PIN = PA5
	SPI0_SDO_PIN = PA7
	SPI0_SDI_PIN = PA6
)

// I2C pins
const (
	I2C0_SDA_PIN = PB7
	I2C0_SCL_PIN = PB6
)
