#ifndef __BOOT_SETUP_H
#define __BOOT_SETUP_H

#include "stm32f1xx_hal.h"

// === BOOTLOADER defines ===
// KEY defines
#define BOOTLOADER_KEY_ADR (uint32_t)0x08009800UL
#define BOOTLOADER_KEY_PAGE 20

// MAIN APP defines
#define MAIN_APP_START_ADR (uint32_t)0x0800C000UL
#define MAIN_APP_PAGE 21
#define MAIN_APP_NUM_OF_PAGE 250-MAIN_APP_PAGE



/* Flash boundaries: подставьте реальные границы флеш-памяти вашего MCU */
#ifndef FLASH_START_ADR
#define FLASH_START_ADR   0x08000000UL
#endif
#ifndef FLASH_END_ADR
/* пример: 512KB flash -> 0x08080000. Поменяйте под ваш MCU */
#define FLASH_END_ADR     0x080FFFFFUL
#endif

/* SRAM boundaries: подставьте реальные адреса SRAM вашей MCU */
#ifndef SRAM_START_ADR
#define SRAM_START_ADR    0x20000000UL
#endif
#ifndef SRAM_END_ADR
/* пример: 128KB SRAM -> 0x2001FFFF. Поменяйте под ваш MCU */
#define SRAM_END_ADR      0x2003FFFFUL
#endif





// RECEIVE defines
#define FW_RECEIVE_TIMEOUT_MS 5000  // таймаут приёма страницы
#define PAGE_SIZE 2048              // страницы принимаются размером с page_size (размер страниц флеш должен быть кратен PAGE_SIZE)




// === RCC defines ===
#define __RCC_UART_BOOT_CLK_ENABLE() 	__HAL_RCC_USART3_CLK_ENABLE()
#define __RCC_UART_PORT_CLK_ENABLE() 	__HAL_RCC_GPIOB_CLK_ENABLE()
#define __RCC_CAN_BOOT_CLK_ENABLE()   __HAL_RCC_CAN1_CLK_ENABLE()
#define __RCC_CAN_PORT_CLK_ENABLE()   __HAL_RCC_GPIOA_CLK_ENABLE()


// === UART defines ===
#define UART_BOOT 			USART3
#define UART_SPEED 			256000
#define UART_BOOT_IRQn 	USART3_IRQn

#define UART_PORT 			GPIOB				// usart port
#define UART_PIN_TX 		GPIO_PIN_10
#define UART_PIN_RX 		GPIO_PIN_11


// === CAN defines ===
#define CAN_BOOT            CAN1
#define CAN_MODE            CAN_MODE_NORMAL
// Presacler = 1 для 500 kbps при 8 MHz
#define CAN_SPEED_PRESCALER 4           
#define CAN_SPEED_BS1       CAN_BS1_13TQ
#define CAN_SPEED_BS2       CAN_BS2_2TQ

#define CAN_PORT            GPIOA       // can port
#define CAN_PIN_RX          GPIO_PIN_11
#define CAN_PIN_TX          GPIO_PIN_12

#define CAN_BOOT_IRQn       USB_LP_CAN1_RX0_IRQn

#endif //__BOOT_SETUP_H