The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.
Dependents: hello SerialTestv11 SerialTestv12 Sierpinski ... more
mbed 2
This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.
Diff: TARGET_SAMR21G18A/TOOLCHAIN_ARM_STD/samr21_xplained_pro.h
- Revision:
- 171:3a7713b1edbc
- Parent:
- 111:4336505e4b1c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TARGET_SAMR21G18A/TOOLCHAIN_ARM_STD/samr21_xplained_pro.h Thu Nov 08 11:45:42 2018 +0000 @@ -0,0 +1,475 @@ +#ifndef SAMR21_XPLAINED_PRO_H_INCLUDED +#define SAMR21_XPLAINED_PRO_H_INCLUDED + +#include <conf_board.h> +#include <compiler.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \ingroup group_common_boards + * \defgroup samr21_xplained_pro_group SAM R21 Xplained Pro board + * + * @{ + */ + +void system_board_init(void); + +/** + * \defgroup samr21_xplained_pro_features_group Features + * + * Symbols that describe features and capabilities of the board. + * + * @{ + */ + +/** Name string macro */ +#define BOARD_NAME "SAMR21_XPLAINED_PRO" + +/** \name Resonator definitions + * @{ */ +#define BOARD_FREQ_SLCK_XTAL (32768U) +#define BOARD_FREQ_SLCK_BYPASS (32768U) +#define BOARD_FREQ_MAINCK_XTAL 0 /* Not Mounted */ +#define BOARD_FREQ_MAINCK_BYPASS 0 /* Not Mounted */ +#define BOARD_MCK CHIP_FREQ_CPU_MAX +#define BOARD_OSC_STARTUP_US 15625 +/** @} */ + +/** \name LED0 definitions + * @{ */ +#define LED0_PIN PIN_PA19 +#define LED0_ACTIVE false +#define LED0_INACTIVE !LED0_ACTIVE +#define LED0 LED0_PIN +/** @} */ + +/** \name SW0 definitions + * @{ */ +#define SW0_PIN PIN_PA28 +#define SW0_ACTIVE false +#define SW0_INACTIVE !SW0_ACTIVE +#define SW0_EIC_PIN PIN_PA28A_EIC_EXTINT8 +#define SW0_EIC_MUX MUX_PA28A_EIC_EXTINT8 +#define SW0_EIC_PINMUX PINMUX_PA28A_EIC_EXTINT8 +#define SW0_EIC_LINE 8 +/** @} */ + +/** + * \name LED #0 definitions + * + * Wrapper macros for LED0, to ensure common naming across all Xplained Pro + * boards. + * + * @{ */ +#define LED_0_NAME "LED0 (yellow)" +#define LED_0_PIN LED0_PIN +#define LED_0_ACTIVE LED0_ACTIVE +#define LED_0_INACTIVE LED0_INACTIVE +#define LED0_GPIO LED0_PIN + +#define LED_0_PWM_MODULE TC3 +#define LED_0_PWM_CHANNEL 1 +#define LED_0_PWM_OUTPUT 1 +#define LED_0_PWM_PIN PIN_PA19E_TC3_WO1 +#define LED_0_PWM_MUX MUX_PA19E_TC3_WO1 +#define LED_0_PWM_PINMUX PINMUX_PA19E_TC3_WO1 + +#define LED_0_PWM4CTRL_MODULE TCC0 +#define LED_0_PWM4CTRL_CHANNEL 3 +#define LED_0_PWM4CTRL_OUTPUT 3 +#define LED_0_PWM4CTRL_PIN PIN_PA19F_TCC0_WO3 +#define LED_0_PWM4CTRL_MUX MUX_PA19F_TCC0_WO3 +#define LED_0_PWM4CTRL_PINMUX PINMUX_PA19F_TCC0_WO3 +/** @} */ + +/** Number of on-board LEDs */ +#define LED_COUNT 1 + + +/** + * \name Button #0 definitions + * + * Wrapper macros for SW0, to ensure common naming across all Xplained Pro + * boards. + * + * @{ */ +#define BUTTON_0_NAME "SW0" +#define BUTTON_0_PIN SW0_PIN +#define BUTTON_0_ACTIVE SW0_ACTIVE +#define BUTTON_0_INACTIVE SW0_INACTIVE +#define BUTTON_0_EIC_PIN SW0_EIC_PIN +#define BUTTON_0_EIC_MUX SW0_EIC_MUX +#define BUTTON_0_EIC_PINMUX SW0_EIC_PINMUX +#define BUTTON_0_EIC_LINE SW0_EIC_LINE +/** @} */ + +/** Number of on-board buttons */ +#define BUTTON_COUNT 1 + +/** \name Extension header #1 pin definitions + * @{ + */ +#define EXT1_PIN_3 PIN_PA06 +#define EXT1_PIN_4 PIN_PA07 +#define EXT1_PIN_5 PIN_PA13 +#define EXT1_PIN_6 PIN_PA28 +#define EXT1_PIN_7 PIN_PA18 +#define EXT1_PIN_8 PIN_PA19 +#define EXT1_PIN_9 PIN_PA22 +#define EXT1_PIN_10 PIN_PA23 +#define EXT1_PIN_11 PIN_PA16 +#define EXT1_PIN_12 PIN_PA17 +#define EXT1_PIN_13 PIN_PA05 +#define EXT1_PIN_14 PIN_PA04 +#define EXT1_PIN_15 PIN_PB03 +#define EXT1_PIN_16 PIN_PB22 +#define EXT1_PIN_17 PIN_PB02 +#define EXT1_PIN_18 PIN_PB23 +/** @} */ + +/** \name Extension header #1 pin definitions by function + * @{ + */ +#define EXT1_PIN_ADC_0 EXT1_PIN_3 +#define EXT1_PIN_ADC_1 EXT1_PIN_4 +#define EXT1_PIN_GPIO_0 EXT1_PIN_5 +#define EXT1_PIN_GPIO_1 EXT1_PIN_6 +#define EXT1_PIN_PWM_0 EXT1_PIN_7 +#define EXT1_PIN_PWM_1 EXT1_PIN_8 +#define EXT1_PIN_GPIO_3 EXT1_PIN_9 +#define EXT1_PIN_GPIO_4 EXT1_PIN_10 +#define EXT1_PIN_I2C_SDA EXT1_PIN_11 +#define EXT1_PIN_I2C_SCL EXT1_PIN_12 +#define EXT1_PIN_UART_RX EXT1_PIN_13 +#define EXT1_PIN_UART_TX EXT1_PIN_14 +#define EXT1_PIN_SPI_SS_0 EXT1_PIN_15 +#define EXT1_PIN_SPI_MOSI EXT1_PIN_16 +#define EXT1_PIN_SPI_MISO EXT1_PIN_17 +#define EXT1_PIN_SPI_SCK EXT1_PIN_18 +/** @} */ + +/** \name Extension header #1 ADC definitions + * @{ + */ +#define EXT1_ADC_MODULE ADC +#define EXT1_ADC_0_CHANNEL 6 +#define EXT1_ADC_0_PIN PIN_PA06B_ADC_AIN6 +#define EXT1_ADC_0_MUX MUX_PA06B_ADC_AIN6 +#define EXT1_ADC_0_PINMUX PINMUX_PA06B_ADC_AIN6 +#define EXT1_ADC_1_CHANNEL 7 +#define EXT1_ADC_1_PIN PIN_PA07B_ADC_AIN7 +#define EXT1_ADC_1_MUX MUX_PA07B_ADC_AIN7 +#define EXT1_ADC_1_PINMUX PINMUX_PA07B_ADC_AIN7 +/** @} */ + +/** \name Extension header #1 PWM definitions + * @{ + */ +#define EXT1_PWM_MODULE TC3 +#define EXT1_PWM_0_CHANNEL 0 +#define EXT1_PWM_0_PIN PIN_PA18E_TC3_WO0 +#define EXT1_PWM_0_MUX MUX_PA18E_TC3_WO0 +#define EXT1_PWM_0_PINMUX PINMUX_PA18E_TC3_WO0 +#define EXT1_PWM_1_CHANNEL 1 +#define EXT1_PWM_1_PIN PIN_PA19E_TC3_WO1 +#define EXT1_PWM_1_MUX MUX_PA19E_TC3_WO1 +#define EXT1_PWM_1_PINMUX PINMUX_PA19E_TC3_WO1 +/** @} */ + +/** \name Extension header #1 PWM for Control definitions + * @{ + */ +#define EXT1_PWM4CTRL_MODULE TCC0 +#define EXT1_PWM4CTRL_0_CHANNEL 2 +#define EXT1_PWM4CTRL_0_OUTPUT 2 +#define EXT1_PWM4CTRL_0_PIN PIN_PA18F_TCC0_WO2 +#define EXT1_PWM4CTRL_0_MUX MUX_PA18F_TCC0_WO2 +#define EXT1_PWM4CTRL_0_PINMUX PINMUX_PA18F_TCC0_WO2 +#define EXT1_PWM4CTRL_1_CHANNEL 3 +#define EXT1_PWM4CTRL_1_OUTPUT 3 +#define EXT1_PWM4CTRL_1_PIN PIN_PA19F_TCC0_WO3 +#define EXT1_PWM4CTRL_1_MUX MUX_PA19F_TCC0_WO3 +#define EXT1_PWM4CTRL_1_PINMUX PINMUX_PA19F_TCC0_WO3 +/** @} */ + +/** \name Extension header #1 IRQ/External interrupt definitions + * @{ + */ +#define EXT1_IRQ_MODULE EIC +#define EXT1_IRQ_INPUT 6 +#define EXT1_IRQ_PIN PIN_PA22A_EIC_EXTINT6 +#define EXT1_IRQ_MUX MUX_PA22A_EIC_EXTINT6 +#define EXT1_IRQ_PINMUX PINMUX_PA22A_EIC_EXTINT6 +/** @} */ + +/** \name Extension header #1 I2C definitions + * @{ + */ +#define EXT1_I2C_MODULE SERCOM1 +#define EXT1_I2C_SERCOM_PINMUX_PAD0 PINMUX_PA16C_SERCOM1_PAD0 +#define EXT1_I2C_SERCOM_PINMUX_PAD1 PINMUX_PA17C_SERCOM1_PAD1 +#define EXT1_I2C_SERCOM_DMAC_ID_TX SERCOM1_DMAC_ID_TX +#define EXT1_I2C_SERCOM_DMAC_ID_RX SERCOM1_DMAC_ID_RX +/** @} */ + +/** \name Extension header #1 UART definitions + * @{ + */ +#define EXT1_UART_MODULE SERCOM0 +#define EXT1_UART_SERCOM_MUX_SETTING USART_RX_1_TX_0_XCK_1 +#define EXT1_UART_SERCOM_PINMUX_PAD0 PINMUX_PA04D_SERCOM0_PAD0 +#define EXT1_UART_SERCOM_PINMUX_PAD1 PINMUX_PA05D_SERCOM0_PAD1 +#define EXT1_UART_SERCOM_PINMUX_PAD2 PINMUX_UNUSED +#define EXT1_UART_SERCOM_PINMUX_PAD3 PINMUX_UNUSED +#define EXT1_UART_SERCOM_DMAC_ID_TX SERCOM0_DMAC_ID_TX +#define EXT1_UART_SERCOM_DMAC_ID_RX SERCOM0_DMAC_ID_RX +/** @} */ + +/** \name Extension header #1 SPI definitions + * @{ + */ +#define EXT1_SPI_MODULE SERCOM5 +#define EXT1_SPI_SERCOM_MUX_SETTING SPI_SIGNAL_MUX_SETTING_E +#define EXT1_SPI_SERCOM_PINMUX_PAD0 PINMUX_PB02D_SERCOM5_PAD0 +#define EXT1_SPI_SERCOM_PINMUX_PAD1 PINMUX_PB03D_SERCOM5_PAD1 +#define EXT1_SPI_SERCOM_PINMUX_PAD2 PINMUX_PB22D_SERCOM5_PAD2 +#define EXT1_SPI_SERCOM_PINMUX_PAD3 PINMUX_PB23D_SERCOM5_PAD3 +#define EXT1_SPI_SERCOM_DMAC_ID_TX SERCOM5_DMAC_ID_TX +#define EXT1_SPI_SERCOM_DMAC_ID_RX SERCOM5_DMAC_ID_RX +/** @} */ + +/** \name Extension header #3 pin definitions + * @{ + */ +#define EXT3_PIN_5 PIN_PA15 +#define EXT3_PIN_10 PIN_PA08 +#define EXT3_PIN_11 PIN_PA16 +#define EXT3_PIN_12 PIN_PA17 +#define EXT3_PIN_15 PIN_PA14 +#define EXT3_PIN_16 PIN_PB22 +#define EXT3_PIN_17 PIN_PB02 +#define EXT3_PIN_18 PIN_PB23 +/** @} */ + +/** \name Extension header #3 pin definitions by function + * @{ + */ +#define EXT3_PIN_GPIO_0 EXT3_PIN_5 +#define EXT3_PIN_GPIO_1 EXT3_PIN_10 +#define EXT3_PIN_I2C_SDA EXT3_PIN_11 +#define EXT3_PIN_I2C_SCL EXT3_PIN_12 +#define EXT3_PIN_GPIO_2 EXT3_PIN_15 +#define EXT3_PIN_SPI_MOSI EXT3_PIN_16 +#define EXT3_PIN_SPI_MISO EXT3_PIN_17 +#define EXT3_PIN_SPI_SCK EXT3_PIN_18 +/** @} */ + +/** \name Extension header #3 SPI definitions + * @{ + */ +#define EXT3_SPI_SLAVE_SELECT_PIN PIN_PA14 +#define EXT3_SPI_MODULE SERCOM5 +#define EXT3_SPI_SERCOM_MUX_SETTING SPI_SIGNAL_MUX_SETTING_E +#define EXT3_SPI_SERCOM_PINMUX_PAD0 PINMUX_PB02D_SERCOM5_PAD0 +#define EXT3_SPI_SERCOM_PINMUX_PAD1 PINMUX_UNUSED +#define EXT3_SPI_SERCOM_PINMUX_PAD2 PINMUX_PB22D_SERCOM5_PAD2 +#define EXT3_SPI_SERCOM_PINMUX_PAD3 PINMUX_PB23D_SERCOM5_PAD3 +#define EXT3_SPI_SERCOM_DMAC_ID_TX SERCOM5_DMAC_ID_TX +#define EXT3_SPI_SERCOM_DMAC_ID_RX SERCOM5_DMAC_ID_RX +/** @} */ + +/** \name Extension header #3 Dataflash + * @{ + */ +#define EXT3_DATAFLASH_SPI_MODULE EXT3_SPI_MODULE +#define EXT3_DATAFLASH_SPI_MUX_SETTING EXT3_SPI_SERCOM_MUX_SETTING +#define EXT3_DATAFLASH_SPI_PINMUX_PAD0 EXT3_SPI_SERCOM_PINMUX_PAD0 +#define EXT3_DATAFLASH_SPI_PINMUX_PAD1 EXT3_SPI_SERCOM_PINMUX_PAD1 +#define EXT3_DATAFLASH_SPI_PINMUX_PAD2 EXT3_SPI_SERCOM_PINMUX_PAD2 +#define EXT3_DATAFLASH_SPI_PINMUX_PAD3 EXT3_SPI_SERCOM_PINMUX_PAD3 +/** @} */ + +/** \name USB definitions + * @{ + */ +#define USB_ID +#define USB_TARGET_DP_PIN PIN_PA25G_USB_DP +#define USB_TARGET_DP_MUX MUX_PA25G_USB_DP +#define USB_TARGET_DP_PINMUX PINMUX_PA25G_USB_DP +#define USB_TARGET_DM_PIN PIN_PA24G_USB_DM +#define USB_TARGET_DM_MUX MUX_PA24G_USB_DM +#define USB_TARGET_DM_PINMUX PINMUX_PA24G_USB_DM +#define USB_VBUS_PIN PIN_PA07 +#define USB_VBUS_EIC_LINE 7 +#define USB_VBUS_EIC_MUX MUX_PA07A_EIC_EXTINT7 +#define USB_VBUS_EIC_PINMUX PINMUX_PA07A_EIC_EXTINT7 +/* USB ID pin is not connected */ +//#define USB_ID_PIN -1 +//#define USB_ID_EIC_LINE -1 +//#define USB_ID_EIC_MUX -1 +//#define USB_ID_EIC_PINMUX -1 +/** @} */ + +/** \name Embedded debugger GPIO interface definitions + * @{ + */ +#define EDBG_GPIO0_PIN PIN_PA08 +#define EDBG_GPIO1_PIN PIN_PA09 +#define EDBG_GPIO2_PIN PIN_PA12 +#define EDBG_GPIO3_PIN PIN_PA14 +/** @} */ + +/** \name Embedded debugger USART interface definitions + * @{ + */ +#define EDBG_UART_MODULE -1 /* Not available on this board */ +#define EDBG_UART_RX_PIN -1 /* Not available on this board */ +#define EDBG_UART_RX_MUX -1 /* Not available on this board */ +#define EDBG_UART_RX_PINMUX -1 /* Not available on this board */ +#define EDBG_UART_RX_SERCOM_PAD -1 /* Not available on this board */ +#define EDBG_UART_TX_PIN -1 /* Not available on this board */ +#define EDBG_UART_TX_MUX -1 /* Not available on this board */ +#define EDBG_UART_TX_PINMUX -1 /* Not available on this board */ +#define EDBG_UART_TX_SERCOM_PAD -1 /* Not available on this board */ +/** @} */ + +/** \name Embedded debugger I2C interface definitions + * @{ + */ +#define EDBG_I2C_MODULE SERCOM1 +#define EDBG_I2C_SERCOM_PINMUX_PAD0 PINMUX_PA16C_SERCOM1_PAD0 +#define EDBG_I2C_SERCOM_PINMUX_PAD1 PINMUX_PA17C_SERCOM1_PAD1 +#define EDBG_I2C_SERCOM_DMAC_ID_TX SERCOM1_DMAC_ID_TX +#define EDBG_I2C_SERCOM_DMAC_ID_RX SERCOM1_DMAC_ID_RX +/** @} */ + +/** \name Embedded debugger SPI interface definitions + * @{ + */ +#define EDBG_SPI_SLAVE_SELECT_PIN PIN_PA27 +#define EDBG_SPI_MODULE SERCOM5 +#define EDBG_SPI_SERCOM_MUX_SETTING SPI_SIGNAL_MUX_SETTING_E +#define EDBG_SPI_SERCOM_PINMUX_PAD0 PINMUX_PB02D_SERCOM5_PAD0 +#define EDBG_SPI_SERCOM_PINMUX_PAD1 PINMUX_UNUSED +#define EDBG_SPI_SERCOM_PINMUX_PAD2 PINMUX_PB22D_SERCOM5_PAD2 +#define EDBG_SPI_SERCOM_PINMUX_PAD3 PINMUX_PB23D_SERCOM5_PAD3 +#define EDBG_SPI_SERCOM_DMAC_ID_TX SERCOM5_DMAC_ID_TX +#define EDBG_SPI_SERCOM_DMAC_ID_RX SERCOM5_DMAC_ID_RX +/** @} */ + +/** \name Embedded debugger CDC Gateway USART interface definitions + * @{ + */ +#define EDBG_CDC_MODULE SERCOM0 +#define EDBG_CDC_SERCOM_MUX_SETTING USART_RX_1_TX_0_XCK_1 +#define EDBG_CDC_SERCOM_PINMUX_PAD0 PINMUX_PA04D_SERCOM0_PAD0 +#define EDBG_CDC_SERCOM_PINMUX_PAD1 PINMUX_PA05D_SERCOM0_PAD1 +#define EDBG_CDC_SERCOM_PINMUX_PAD2 PINMUX_UNUSED +#define EDBG_CDC_SERCOM_PINMUX_PAD3 PINMUX_UNUSED +#define EDBG_CDC_SERCOM_DMAC_ID_TX SERCOM0_DMAC_ID_TX +#define EDBG_CDC_SERCOM_DMAC_ID_RX SERCOM0_DMAC_ID_RX +/** @} */ + +#define RF_SPI_MODULE SERCOM4 +#define RF_SPI_SERCOM_MUX_SETTING SPI_SIGNAL_MUX_SETTING_E +#define RF_SPI_SERCOM_PINMUX_PAD0 PINMUX_PC19F_SERCOM4_PAD0 +#define RF_SPI_SERCOM_PINMUX_PAD1 PINMUX_PB31D_SERCOM5_PAD1 +#define RF_SPI_SERCOM_PINMUX_PAD2 PINMUX_PB30F_SERCOM4_PAD2 +#define RF_SPI_SERCOM_PINMUX_PAD3 PINMUX_PC18F_SERCOM4_PAD3 + + +#define RF_IRQ_MODULE EIC +#define RF_IRQ_INPUT 0 +#define RF_IRQ_PIN PIN_PB00A_EIC_EXTINT0 +#define RF_IRQ_MUX MUX_PB00A_EIC_EXTINT0 +#define RF_IRQ_PINMUX PINMUX_PB00A_EIC_EXTINT0 + +/** \name 802.15.4 TRX Interface definitions + * @{ + */ + +#define AT86RFX_SPI SERCOM4 +#define AT86RFX_RST_PIN PIN_PB15 +#define AT86RFX_IRQ_PIN PIN_PB00 +#define AT86RFX_SLP_PIN PIN_PA20 +#define AT86RFX_SPI_CS PIN_PB31 +#define AT86RFX_SPI_MOSI PIN_PB30 +#define AT86RFX_SPI_MISO PIN_PC19 +#define AT86RFX_SPI_SCK PIN_PC18 +#define PIN_RFCTRL1 PIN_PA09 +#define PIN_RFCTRL2 PIN_PA12 +#define RFCTRL_CFG_ANT_DIV 4 + + +#define AT86RFX_SPI_SERCOM_MUX_SETTING RF_SPI_SERCOM_MUX_SETTING +#define AT86RFX_SPI_SERCOM_PINMUX_PAD0 RF_SPI_SERCOM_PINMUX_PAD0 +#define AT86RFX_SPI_SERCOM_PINMUX_PAD1 PINMUX_UNUSED +#define AT86RFX_SPI_SERCOM_PINMUX_PAD2 RF_SPI_SERCOM_PINMUX_PAD2 +#define AT86RFX_SPI_SERCOM_PINMUX_PAD3 RF_SPI_SERCOM_PINMUX_PAD3 + +#define AT86RFX_IRQ_CHAN RF_IRQ_INPUT +#define AT86RFX_IRQ_PINMUX RF_IRQ_PINMUX + + +/** Enables the transceiver main interrupt. */ +#define ENABLE_TRX_IRQ() \ + extint_chan_enable_callback(AT86RFX_IRQ_CHAN, EXTINT_CALLBACK_TYPE_DETECT) + +/** Disables the transceiver main interrupt. */ +#define DISABLE_TRX_IRQ() \ + extint_chan_disable_callback(AT86RFX_IRQ_CHAN, EXTINT_CALLBACK_TYPE_DETECT) + +/** Clears the transceiver main interrupt. */ +#define CLEAR_TRX_IRQ() \ + extint_chan_clear_detected(AT86RFX_IRQ_CHAN); + +/* + * This macro saves the trx interrupt status and disables the trx interrupt. + */ +#define ENTER_TRX_REGION() \ + { extint_chan_disable_callback(AT86RFX_IRQ_CHAN, EXTINT_CALLBACK_TYPE_DETECT) + +/* + * This macro restores the transceiver interrupt status + */ +#define LEAVE_TRX_REGION() \ + extint_chan_enable_callback(AT86RFX_IRQ_CHAN, EXTINT_CALLBACK_TYPE_DETECT); } + +/** @} */ +/** + * \brief Turns off the specified LEDs. + * + * \param led_gpio LED to turn off (LEDx_GPIO). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +#define LED_Off(led_gpio) port_pin_set_output_level(led_gpio,true) + +/** + * \brief Turns on the specified LEDs. + * + * \param led_gpio LED to turn on (LEDx_GPIO). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +#define LED_On(led_gpio) port_pin_set_output_level(led_gpio,false) + +/** + * \brief Toggles the specified LEDs. + * + * \param led_gpio LED to toggle (LEDx_GPIO). + * + * \note The pins of the specified LEDs are set to GPIO output mode. + */ +#define LED_Toggle(led_gpio) port_pin_toggle_output_level(led_gpio) + + + +#ifdef __cplusplus +} +#endif + +#endif /* SAMR21_XPLAINED_PRO_H_INCLUDED */