From c5e0c06a071e53cb4b9ffd0ae50afcb880edafb9 Mon Sep 17 00:00:00 2001 From: Rakshitavecmocon Date: Thu, 26 Sep 2024 18:52:04 +0530 Subject: [PATCH] Initial commit --- .ccsproject | 21 + .cproject | 129 + .gitattributes | 2 + .gitignore | 4 + .launches/custom.launch | 16 + .launches/db_msp3507_lcd.launch | 16 + .launches/mspm0g3507_mcal.launch | 39 + .project | 27 + .settings/org.eclipse.cdt.codan.core.prefs | 3 + .settings/org.eclipse.cdt.core.prefs | 6 + .settings/org.eclipse.cdt.debug.core.prefs | 2 + .settings/org.eclipse.core.resources.prefs | 28 + Core/Include/gpio.h | 20 + Core/Include/ivec_mcal_adc_dma.h | 35 + Core/Include/ivec_mcal_i2c.h | 27 + Core/Include/ivec_mcal_mcan.h | 16 + Core/Include/ivec_mcal_spi.h | 24 + Core/Include/ivec_mcal_timer.h | 41 + Core/Include/ivec_mcal_uart.h | 195 ++ Core/Include/uart.h | 15 + Core/Source/gpio.c | 71 + Core/Source/ivec_mcal_adc_dma.c | 232 ++ Core/Source/ivec_mcal_i2c.c | 399 +++ Core/Source/ivec_mcal_mcan.c | 529 ++++ Core/Source/ivec_mcal_spi.c | 317 ++ Core/Source/ivec_mcal_timer.c | 421 +++ Core/Source/ivec_mcal_uart.c | 1077 +++++++ Core/Source/uart.c | 10 + Documentation/html/bc_s.png | Bin 0 -> 676 bytes Documentation/html/bdwn.png | Bin 0 -> 147 bytes Documentation/html/closed.png | Bin 0 -> 132 bytes .../dir_a4cb02fe4f7b73e09a7c4d547d8e5b78.html | 92 + .../dir_c6310732a22f63c0c2fc5595561e68f1.html | 86 + Documentation/html/doc.png | Bin 0 -> 746 bytes Documentation/html/doxygen.css | 1766 +++++++++++ Documentation/html/doxygen.png | Bin 0 -> 3779 bytes Documentation/html/dynsections.js | 120 + Documentation/html/files.html | 86 + Documentation/html/folderclosed.png | Bin 0 -> 616 bytes Documentation/html/folderopen.png | Bin 0 -> 597 bytes Documentation/html/globals.html | 278 ++ Documentation/html/globals_func.html | 201 ++ Documentation/html/globals_vars.html | 143 + Documentation/html/gpio_8c.html | 294 ++ Documentation/html/index.html | 76 + .../html/ivec__mcal__adc__dma_8c.html | 604 ++++ Documentation/html/ivec__mcal__timer_8c.html | 1133 +++++++ Documentation/html/jquery.js | 35 + Documentation/html/menu.js | 50 + Documentation/html/menudata.js | 44 + Documentation/html/nav_f.png | Bin 0 -> 153 bytes Documentation/html/nav_g.png | Bin 0 -> 95 bytes Documentation/html/nav_h.png | Bin 0 -> 98 bytes Documentation/html/open.png | Bin 0 -> 123 bytes Documentation/html/search/all_0.html | 30 + Documentation/html/search/all_0.js | 6 + Documentation/html/search/all_1.html | 30 + Documentation/html/search/all_1.js | 4 + Documentation/html/search/all_2.html | 30 + Documentation/html/search/all_2.js | 4 + Documentation/html/search/all_3.html | 30 + Documentation/html/search/all_3.js | 26 + Documentation/html/search/all_4.html | 30 + Documentation/html/search/all_4.js | 5 + Documentation/html/search/all_5.html | 30 + Documentation/html/search/all_5.js | 9 + Documentation/html/search/all_6.html | 30 + Documentation/html/search/all_6.js | 5 + Documentation/html/search/all_7.html | 30 + Documentation/html/search/all_7.js | 4 + Documentation/html/search/all_8.html | 30 + Documentation/html/search/all_8.js | 4 + Documentation/html/search/all_9.html | 30 + Documentation/html/search/all_9.js | 25 + Documentation/html/search/close.png | Bin 0 -> 273 bytes Documentation/html/search/files_0.html | 30 + Documentation/html/search/files_0.js | 4 + Documentation/html/search/files_1.html | 30 + Documentation/html/search/files_1.js | 5 + Documentation/html/search/files_2.html | 30 + Documentation/html/search/files_2.js | 4 + Documentation/html/search/functions_0.html | 30 + Documentation/html/search/functions_0.js | 6 + Documentation/html/search/functions_1.html | 30 + Documentation/html/search/functions_1.js | 4 + Documentation/html/search/functions_2.html | 30 + Documentation/html/search/functions_2.js | 9 + Documentation/html/search/functions_3.html | 30 + Documentation/html/search/functions_3.js | 5 + Documentation/html/search/functions_4.html | 30 + Documentation/html/search/functions_4.js | 4 + Documentation/html/search/functions_5.html | 30 + Documentation/html/search/functions_5.js | 25 + Documentation/html/search/mag_sel.png | Bin 0 -> 465 bytes Documentation/html/search/nomatches.html | 12 + Documentation/html/search/search.css | 271 ++ Documentation/html/search/search.js | 814 +++++ Documentation/html/search/search_l.png | Bin 0 -> 567 bytes Documentation/html/search/search_m.png | Bin 0 -> 158 bytes Documentation/html/search/search_r.png | Bin 0 -> 553 bytes Documentation/html/search/searchdata.js | 24 + Documentation/html/search/variables_0.html | 30 + Documentation/html/search/variables_0.js | 4 + Documentation/html/search/variables_1.html | 30 + Documentation/html/search/variables_1.js | 25 + Documentation/html/splitbar.png | Bin 0 -> 314 bytes Documentation/html/sync_off.png | Bin 0 -> 853 bytes Documentation/html/sync_on.png | Bin 0 -> 845 bytes Documentation/html/tab_a.png | Bin 0 -> 142 bytes Documentation/html/tab_b.png | Bin 0 -> 169 bytes Documentation/html/tab_h.png | Bin 0 -> 177 bytes Documentation/html/tab_s.png | Bin 0 -> 184 bytes Documentation/html/tabs.css | 1 + Documentation/html/uart_8c.html | 80 + Documentation/latex/Makefile | 23 + .../dir_a4cb02fe4f7b73e09a7c4d547d8e5b78.tex | 13 + .../dir_c6310732a22f63c0c2fc5595561e68f1.tex | 7 + Documentation/latex/doxygen.sty | 570 ++++ Documentation/latex/files.tex | 7 + Documentation/latex/gpio_8c.tex | 72 + .../latex/ivec__mcal__adc__dma_8c.tex | 313 ++ Documentation/latex/ivec__mcal__timer_8c.tex | 594 ++++ Documentation/latex/longtable_doxygen.sty | 448 +++ Documentation/latex/make.bat | 31 + Documentation/latex/refman.tex | 187 ++ Documentation/latex/tabu_doxygen.sty | 2557 +++++++++++++++ Documentation/latex/uart_8c.tex | 2 + Documentation/mspm0g3507_mcal.doxyfile | 2567 +++++++++++++++ Generated Codes/ti_msp_config.c | 98 + Generated Codes/ti_msp_config.h | 102 + NOR_FLASH/Doxyfile | 2779 +++++++++++++++++ NOR_FLASH/SDK/inc/flash_types.h | 109 + NOR_FLASH/SDK/src/nor_flash.c | 466 +++ NOR_FLASH/nor_flash.h | 31 + NOR_FLASH/platform/flash_interface.c | 34 + NOR_FLASH/platform/flash_interface.h | 18 + README.html | 115 + README.md | 93 + ivec_ECU/ivec_ecu_can/inc/ivec_ecu_can.h | 0 ivec_ECU/ivec_ecu_can/src/ivec_ecu_can.c | 0 .../ivec_ecu_common/inc/ivec_ecu_common.h | 51 + .../ivec_ecu_common/src/ivec_ecu_common.c | 1 + ivec_ECU/ivec_ecu_uart/inc/ivec_ecu_uart.h | 44 + ivec_ECU/ivec_ecu_uart/src/ivec_ecu_uart.c | 445 +++ ivec_cmplx_queue.c | 360 +++ ivec_cmplx_queue.h | 37 + ivec_mcal_common.c | 2 + ivec_mcal_common.h | 90 + main.c | 338 ++ mspm0g3507_mcal.syscfg | 194 ++ targetConfigs/MSPM0G3507.ccxml | 23 + targetConfigs/readme.txt | 9 + utils/utils.c | 263 ++ utils/utils.h | 109 + 154 files changed, 23951 insertions(+) create mode 100644 .ccsproject create mode 100644 .cproject create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .launches/custom.launch create mode 100644 .launches/db_msp3507_lcd.launch create mode 100644 .launches/mspm0g3507_mcal.launch create mode 100644 .project create mode 100644 .settings/org.eclipse.cdt.codan.core.prefs create mode 100644 .settings/org.eclipse.cdt.core.prefs create mode 100644 .settings/org.eclipse.cdt.debug.core.prefs create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 Core/Include/gpio.h create mode 100644 Core/Include/ivec_mcal_adc_dma.h create mode 100644 Core/Include/ivec_mcal_i2c.h create mode 100644 Core/Include/ivec_mcal_mcan.h create mode 100644 Core/Include/ivec_mcal_spi.h create mode 100644 Core/Include/ivec_mcal_timer.h create mode 100644 Core/Include/ivec_mcal_uart.h create mode 100644 Core/Include/uart.h create mode 100644 Core/Source/gpio.c create mode 100644 Core/Source/ivec_mcal_adc_dma.c create mode 100644 Core/Source/ivec_mcal_i2c.c create mode 100644 Core/Source/ivec_mcal_mcan.c create mode 100644 Core/Source/ivec_mcal_spi.c create mode 100644 Core/Source/ivec_mcal_timer.c create mode 100644 Core/Source/ivec_mcal_uart.c create mode 100644 Core/Source/uart.c create mode 100644 Documentation/html/bc_s.png create mode 100644 Documentation/html/bdwn.png create mode 100644 Documentation/html/closed.png create mode 100644 Documentation/html/dir_a4cb02fe4f7b73e09a7c4d547d8e5b78.html create mode 100644 Documentation/html/dir_c6310732a22f63c0c2fc5595561e68f1.html create mode 100644 Documentation/html/doc.png create mode 100644 Documentation/html/doxygen.css create mode 100644 Documentation/html/doxygen.png create mode 100644 Documentation/html/dynsections.js create mode 100644 Documentation/html/files.html create mode 100644 Documentation/html/folderclosed.png create mode 100644 Documentation/html/folderopen.png create mode 100644 Documentation/html/globals.html create mode 100644 Documentation/html/globals_func.html create mode 100644 Documentation/html/globals_vars.html create mode 100644 Documentation/html/gpio_8c.html create mode 100644 Documentation/html/index.html create mode 100644 Documentation/html/ivec__mcal__adc__dma_8c.html create mode 100644 Documentation/html/ivec__mcal__timer_8c.html create mode 100644 Documentation/html/jquery.js create mode 100644 Documentation/html/menu.js create mode 100644 Documentation/html/menudata.js create mode 100644 Documentation/html/nav_f.png create mode 100644 Documentation/html/nav_g.png create mode 100644 Documentation/html/nav_h.png create mode 100644 Documentation/html/open.png create mode 100644 Documentation/html/search/all_0.html create mode 100644 Documentation/html/search/all_0.js create mode 100644 Documentation/html/search/all_1.html create mode 100644 Documentation/html/search/all_1.js create mode 100644 Documentation/html/search/all_2.html create mode 100644 Documentation/html/search/all_2.js create mode 100644 Documentation/html/search/all_3.html create mode 100644 Documentation/html/search/all_3.js create mode 100644 Documentation/html/search/all_4.html create mode 100644 Documentation/html/search/all_4.js create mode 100644 Documentation/html/search/all_5.html create mode 100644 Documentation/html/search/all_5.js create mode 100644 Documentation/html/search/all_6.html create mode 100644 Documentation/html/search/all_6.js create mode 100644 Documentation/html/search/all_7.html create mode 100644 Documentation/html/search/all_7.js create mode 100644 Documentation/html/search/all_8.html create mode 100644 Documentation/html/search/all_8.js create mode 100644 Documentation/html/search/all_9.html create mode 100644 Documentation/html/search/all_9.js create mode 100644 Documentation/html/search/close.png create mode 100644 Documentation/html/search/files_0.html create mode 100644 Documentation/html/search/files_0.js create mode 100644 Documentation/html/search/files_1.html create mode 100644 Documentation/html/search/files_1.js create mode 100644 Documentation/html/search/files_2.html create mode 100644 Documentation/html/search/files_2.js create mode 100644 Documentation/html/search/functions_0.html create mode 100644 Documentation/html/search/functions_0.js create mode 100644 Documentation/html/search/functions_1.html create mode 100644 Documentation/html/search/functions_1.js create mode 100644 Documentation/html/search/functions_2.html create mode 100644 Documentation/html/search/functions_2.js create mode 100644 Documentation/html/search/functions_3.html create mode 100644 Documentation/html/search/functions_3.js create mode 100644 Documentation/html/search/functions_4.html create mode 100644 Documentation/html/search/functions_4.js create mode 100644 Documentation/html/search/functions_5.html create mode 100644 Documentation/html/search/functions_5.js create mode 100644 Documentation/html/search/mag_sel.png create mode 100644 Documentation/html/search/nomatches.html create mode 100644 Documentation/html/search/search.css create mode 100644 Documentation/html/search/search.js create mode 100644 Documentation/html/search/search_l.png create mode 100644 Documentation/html/search/search_m.png create mode 100644 Documentation/html/search/search_r.png create mode 100644 Documentation/html/search/searchdata.js create mode 100644 Documentation/html/search/variables_0.html create mode 100644 Documentation/html/search/variables_0.js create mode 100644 Documentation/html/search/variables_1.html create mode 100644 Documentation/html/search/variables_1.js create mode 100644 Documentation/html/splitbar.png create mode 100644 Documentation/html/sync_off.png create mode 100644 Documentation/html/sync_on.png create mode 100644 Documentation/html/tab_a.png create mode 100644 Documentation/html/tab_b.png create mode 100644 Documentation/html/tab_h.png create mode 100644 Documentation/html/tab_s.png create mode 100644 Documentation/html/tabs.css create mode 100644 Documentation/html/uart_8c.html create mode 100644 Documentation/latex/Makefile create mode 100644 Documentation/latex/dir_a4cb02fe4f7b73e09a7c4d547d8e5b78.tex create mode 100644 Documentation/latex/dir_c6310732a22f63c0c2fc5595561e68f1.tex create mode 100644 Documentation/latex/doxygen.sty create mode 100644 Documentation/latex/files.tex create mode 100644 Documentation/latex/gpio_8c.tex create mode 100644 Documentation/latex/ivec__mcal__adc__dma_8c.tex create mode 100644 Documentation/latex/ivec__mcal__timer_8c.tex create mode 100644 Documentation/latex/longtable_doxygen.sty create mode 100644 Documentation/latex/make.bat create mode 100644 Documentation/latex/refman.tex create mode 100644 Documentation/latex/tabu_doxygen.sty create mode 100644 Documentation/latex/uart_8c.tex create mode 100644 Documentation/mspm0g3507_mcal.doxyfile create mode 100644 Generated Codes/ti_msp_config.c create mode 100644 Generated Codes/ti_msp_config.h create mode 100644 NOR_FLASH/Doxyfile create mode 100644 NOR_FLASH/SDK/inc/flash_types.h create mode 100644 NOR_FLASH/SDK/src/nor_flash.c create mode 100644 NOR_FLASH/nor_flash.h create mode 100644 NOR_FLASH/platform/flash_interface.c create mode 100644 NOR_FLASH/platform/flash_interface.h create mode 100644 README.html create mode 100644 README.md create mode 100644 ivec_ECU/ivec_ecu_can/inc/ivec_ecu_can.h create mode 100644 ivec_ECU/ivec_ecu_can/src/ivec_ecu_can.c create mode 100644 ivec_ECU/ivec_ecu_common/inc/ivec_ecu_common.h create mode 100644 ivec_ECU/ivec_ecu_common/src/ivec_ecu_common.c create mode 100644 ivec_ECU/ivec_ecu_uart/inc/ivec_ecu_uart.h create mode 100644 ivec_ECU/ivec_ecu_uart/src/ivec_ecu_uart.c create mode 100644 ivec_cmplx_queue.c create mode 100644 ivec_cmplx_queue.h create mode 100644 ivec_mcal_common.c create mode 100644 ivec_mcal_common.h create mode 100644 main.c create mode 100644 mspm0g3507_mcal.syscfg create mode 100644 targetConfigs/MSPM0G3507.ccxml create mode 100644 targetConfigs/readme.txt create mode 100644 utils/utils.c create mode 100644 utils/utils.h diff --git a/.ccsproject b/.ccsproject new file mode 100644 index 0000000..9dcb630 --- /dev/null +++ b/.ccsproject @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..39136fd --- /dev/null +++ b/.cproject @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3211d8c --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/.metadata/ +/Debug/ +/dvt/ +/.jxbrowser.userdata diff --git a/.launches/custom.launch b/.launches/custom.launch new file mode 100644 index 0000000..69c9d49 --- /dev/null +++ b/.launches/custom.launch @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/.launches/db_msp3507_lcd.launch b/.launches/db_msp3507_lcd.launch new file mode 100644 index 0000000..0f91c11 --- /dev/null +++ b/.launches/db_msp3507_lcd.launch @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/.launches/mspm0g3507_mcal.launch b/.launches/mspm0g3507_mcal.launch new file mode 100644 index 0000000..7e5a38d --- /dev/null +++ b/.launches/mspm0g3507_mcal.launch @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..36714e6 --- /dev/null +++ b/.project @@ -0,0 +1,27 @@ + + + mspm0g3507_mcal + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/.settings/org.eclipse.cdt.codan.core.prefs b/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..f653028 --- /dev/null +++ b/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +inEditor=false +onBuild=false diff --git a/.settings/org.eclipse.cdt.core.prefs b/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000..c8ec5df --- /dev/null +++ b/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,6 @@ +doxygen/doxygen_new_line_after_brief=true +doxygen/doxygen_use_brief_tag=false +doxygen/doxygen_use_javadoc_tags=true +doxygen/doxygen_use_pre_tag=false +doxygen/doxygen_use_structural_commands=false +eclipse.preferences.version=1 diff --git a/.settings/org.eclipse.cdt.debug.core.prefs b/.settings/org.eclipse.cdt.debug.core.prefs new file mode 100644 index 0000000..2adc7b1 --- /dev/null +++ b/.settings/org.eclipse.cdt.debug.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.debug.core.toggleBreakpointModel=com.ti.ccstudio.debug.CCSBreakpointMarker diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..879d2ad --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,28 @@ +eclipse.preferences.version=1 +encoding//Debug/Core/Source/subdir_rules.mk=UTF-8 +encoding//Debug/Core/Source/subdir_vars.mk=UTF-8 +encoding//Debug/Generated\ Codes/subdir_rules.mk=UTF-8 +encoding//Debug/Generated\ Codes/subdir_vars.mk=UTF-8 +encoding//Debug/LCD_1604/interface/subdir_rules.mk=UTF-8 +encoding//Debug/LCD_1604/interface/subdir_vars.mk=UTF-8 +encoding//Debug/LCD_1604/subdir_rules.mk=UTF-8 +encoding//Debug/LCD_1604/subdir_vars.mk=UTF-8 +encoding//Debug/NOR_FLASH/SDK/src/subdir_rules.mk=UTF-8 +encoding//Debug/NOR_FLASH/SDK/src/subdir_vars.mk=UTF-8 +encoding//Debug/NOR_FLASH/platform/subdir_rules.mk=UTF-8 +encoding//Debug/NOR_FLASH/platform/subdir_vars.mk=UTF-8 +encoding//Debug/SDK/drivers/Src/timers/subdir_rules.mk=UTF-8 +encoding//Debug/SDK/drivers/Src/timers/subdir_vars.mk=UTF-8 +encoding//Debug/ivec_ECU/ivec_ecu_can/src/subdir_rules.mk=UTF-8 +encoding//Debug/ivec_ECU/ivec_ecu_can/src/subdir_vars.mk=UTF-8 +encoding//Debug/ivec_ECU/ivec_ecu_common/src/subdir_rules.mk=UTF-8 +encoding//Debug/ivec_ECU/ivec_ecu_common/src/subdir_vars.mk=UTF-8 +encoding//Debug/ivec_ECU/ivec_ecu_uart/src/subdir_rules.mk=UTF-8 +encoding//Debug/ivec_ECU/ivec_ecu_uart/src/subdir_vars.mk=UTF-8 +encoding//Debug/makefile=UTF-8 +encoding//Debug/objects.mk=UTF-8 +encoding//Debug/sources.mk=UTF-8 +encoding//Debug/subdir_rules.mk=UTF-8 +encoding//Debug/subdir_vars.mk=UTF-8 +encoding//Debug/utils/subdir_rules.mk=UTF-8 +encoding//Debug/utils/subdir_vars.mk=UTF-8 diff --git a/Core/Include/gpio.h b/Core/Include/gpio.h new file mode 100644 index 0000000..7684b50 --- /dev/null +++ b/Core/Include/gpio.h @@ -0,0 +1,20 @@ +/* + * gpio.h + * + * Created on: 22-Jan-2024 + * Author: saar + */ + +#ifndef CORE_INCLUDE_GPIO_H_ +#define CORE_INCLUDE_GPIO_H_ + +#include "ti_msp_dl_config.h" + +int8_t mcu_gpioInitAllMcal(void); +int8_t mcu_gpioDeInitMcal(GPIO_Regs *GPIOx, uint32_t GPIO_Pin); +void mcu_gpioWriteMcal(void* port, uint32_t pin, uint32_t state); +uint16_t mcu_gpioReadMcal(void* port, uint32_t pin); +void mcu_gpioToggleMcal(void *port, uint32_t pin); +void mcu_set_gpioDirectionMcal(uint32_t pincmIndex, bool direction); + +#endif /* CORE_INCLUDE_GPIO_H_ */ diff --git a/Core/Include/ivec_mcal_adc_dma.h b/Core/Include/ivec_mcal_adc_dma.h new file mode 100644 index 0000000..5a7726a --- /dev/null +++ b/Core/Include/ivec_mcal_adc_dma.h @@ -0,0 +1,35 @@ +//#ifndef CORE_INCLUDE_IVEC_MCAL_ADC_DMA_H_ +//#define CORE_INCLUDE_IVEC_MCAL_ADC_DMA_H_ +// +//#include "..\mspm0g3507_mcal\utils\utils.h" +// +///** @defgroup DMA_definition +// * @{ +// */ +//#define dmaCHID_u8 ((uint8_t) 0) /*!< DMA channel ID */ +//#define dmaSAMPLETIME_u16 ((uint16_t) 320) /*!< DMA sample time */ +//#define dmaSAMPLECNT_u8 ((uint8_t) 6) /*!< DMA sample count */ +///** +// * @} +// */ +// +// +///*! +//#ifndef IVEC_MCAL_UART_H +//#define IVEC_MCAL_UART_H +#include "ivec_mcal_common.h" +//#include "ql_uart.h" + + +typedef enum +{ + mcalUART_BAUD_AUTO = 0, + mcalUART_BAUD_2400 = 2400, + mcalUART_BAUD_4800 = 4800, + mcalUART_BAUD_9600 = 9600, + mcalUART_BAUD_14400 = 14400, + mcalUART_BAUD_19200 = 19200, + mcalUART_BAUD_28800 = 28800, + mcalUART_BAUD_33600 = 33600, + mcalUART_BAUD_38400 = 38400, + mcalUART_BAUD_57600 = 57600, + mcalUART_BAUD_115200 = 115200, + mcalUART_BAUD_230400 = 230400, + mcalUART_BAUD_460800 = 460800, + mcalUART_BAUD_921600 = 921600, + mcalUART_BAUD_1000000 = 1000000, + mcalUART_BAUD_1843200 = 1843200, + mcalUART_BAUD_2000000 = 2000000, //only support uart2/3 + mcalUART_BAUD_2100000 = 2100000, + mcalUART_BAUD_3686400 = 3686400, //only support uart2/3 + mcalUART_BAUD_4000000 = 4000000, //only support uart2/3 + mcalUART_BAUD_4468750 = 4468750 //only support uart2/3 +}McalUartBaudRate_e; + +typedef enum +{ + mcalUART_DATABIT_7 = 7, + mcalUART_DATABIT_8 = 8, //8910 ARM UART hardware only support 8bit Data +}McalUartDataBit_e; + +typedef enum +{ + mcalUART_STOP_1 = 1, + mcalUART_STOP_2 = 2, +}McalUartStopBit_e; + +typedef enum +{ + mcalUART_PARITY_NONE, + mcalUART_PARITY_ODD, + mcalUART_PARITY_EVEN, +}McalUartParityBit_e; + +typedef enum +{ + mcalUART_FC_NONE = 0, + mcalUARTFC_HW, +}McalUartFlowCtrl_e; + +typedef struct +{ + McalUartBaudRate_e eUartBaudrate; + McalUartDataBit_e eUartDataBit; + McalUartStopBit_e eUartStopBit; + McalUartParityBit_e eUartParityBit; + McalUartFlowCtrl_e eUartFlowCtrl; +}McalUartConfig_s; + +typedef enum +{ + mcalUART_PORT1 = 0, + mcalUART_PORT2, + mcalUART_PORT3 +}McalUartPortNumber_e; +#define IVEC_MCAL_GNSS_UART mcalUART_PORT3 +typedef enum +{ + IVEC_MCAL_UART_EVENT_RX_ARRIVED = 1,//(1 << 0), ///< Received new data + IVEC_MCAL_UART_EVENT_RX_OVERFLOW =2 ,//(1 << 1), ///< Rx fifo overflowed + IVEC_MCAL_UART_EVENT_TX_COMPLETE = 3//(1 << 2) ///< All data had been sent +}IVEC_McalUartEvents_e; + +typedef struct +{ + McalUartPortNumber_e eUartPortNumber; + McalUartConfig_s xUartConfig; + char* buffer; + uint16_t u16len; + void (*pvUartRecvCallback)(IVEC_McalUartEvents_e , char *,uint32_t); +}McalUartHandle_s; + +#define IVEC_MCAL_UART_MAX_PORT 3 + +IVEC_McalCommonErr_e xMCAL_UartDeInit(McalUartHandle_s* pxHandleUart); +IVEC_McalCommonErr_e xMCAL_UartRead(McalUartHandle_s* pxHandleUart, unsigned char* pucData, unsigned int u32DataLength); +IVEC_McalCommonErr_e xMCAL_UartWrite(McalUartHandle_s* pxHandleUart, unsigned char* pucData, unsigned int u32DataLength); +IVEC_McalCommonErr_e __prvMCAL_UartPinInit(McalUartHandle_s* pxHandleUart); +IVEC_McalCommonErr_e xMCAL_UartInit(McalUartHandle_s* pxHandleUart); + + +#endif /* IVEC_MCAL_UART_H */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// +///** +// * @file ivec_mcal_uart.h +// * @author Akshat Dabas (akshat@vecmocon.com) +// * @brief This header file contains API for UART Functionality +// * @version 0.1.0 +// * @date 2024-Feb-17 +// * +// * @copyright Copyright (c) 2024 +// * +// */ +// +//#ifndef CORE_INCLUDE_IVEC_MCAL_UART_H_ +//#define CORE_INCLUDE_IVEC_MCAL_UART_H_ +// +//#include "ti_msp_dl_config.h" +//#include "../utils/utils.h" +//#include +// +//#define BUFFER_SIZE 100U +//#define SIZE 100U +// +//xCoreStatus_t xMCAL_uart_init(UART_Regs *uart_inst,xUart_baud_t xBaud); +//xCoreStatus_t xMCAL_uart_deinit(UART_Regs* uart_inst); +//xCoreStatus_t xMCAL_uart_getdata(UART_Regs *uart_inst, uint8_t *u8rxdata, uint32_t u32rxbuffer_size); +//xCoreStatus_t xMCAL_uart_transmit(UART_Regs *uart_inst, uint8_t *u8txdata,uint32_t u32size); +//xCoreStatus_t xMCAL_uart_bufferReset(UART_Regs * uart_inst); +// +//#endif /* CORE_INCLUDE_IVEC_MCAL_UART_H_ */ diff --git a/Core/Include/uart.h b/Core/Include/uart.h new file mode 100644 index 0000000..6bd4c23 --- /dev/null +++ b/Core/Include/uart.h @@ -0,0 +1,15 @@ +/* + * uart.h + * + * Created on: 22-Jan-2024 + * Author: saara + */ + +#ifndef CORE_INCLUDE_UART_H_ +#define CORE_INCLUDE_UART_H_ + + + + + +#endif /* CORE_INCLUDE_UART_H_ */ diff --git a/Core/Source/gpio.c b/Core/Source/gpio.c new file mode 100644 index 0000000..97ca46e --- /dev/null +++ b/Core/Source/gpio.c @@ -0,0 +1,71 @@ +/* + * gpio.c + * + * Created on: 22-Jan-2024 + * Author: saar + */ +#include +#include "../Include/gpio.h" + +static uint32_t GPIOInitCounter = 0; + +int8_t mcu_gpioInitAllMcal(void) +{ + if (GPIOInitCounter == 0) + { + GPIOInitCounter = 1; + SYSCFG_DL_GPIO_init(); + return 0; + } + else + return -1; +} + +int8_t mcu_gpioDeInitMcal(GPIO_Regs *GPIOx, uint32_t GPIO_Pin) +{ + if (GPIOInitCounter == 1) + { + GPIOInitCounter = 0; + (void) GPIO_Pin; + DL_GPIO_disablePower(GPIOx); + return 0; + } + else + return -1; +} +void mcu_gpioWriteMcal(void* port, uint32_t pin, uint32_t state) +{ +// DL_GPIO_writePinsVal(port, pin, state); + if(state) + { + DL_GPIO_setPins(port, pin); + } + else + { + DL_GPIO_clearPins(port, pin); + } +} + +uint16_t mcu_gpioReadMcal(void* port, uint32_t pin) +{ + return (DL_GPIO_readPins(port, pin)); +} + +void mcu_gpioToggleMcal(void *port, uint32_t pin) +{ + DL_GPIO_togglePins(port, pin); +} + +void mcu_set_gpioDirectionMcal(uint32_t pincmIndex, bool direction) +{ + + if(direction) + { + DL_GPIO_initDigitalOutput(pincmIndex); + } + else + { + DL_GPIO_initDigitalInput(pincmIndex); + } +} + diff --git a/Core/Source/ivec_mcal_adc_dma.c b/Core/Source/ivec_mcal_adc_dma.c new file mode 100644 index 0000000..1e22c29 --- /dev/null +++ b/Core/Source/ivec_mcal_adc_dma.c @@ -0,0 +1,232 @@ +///* USER CODE BEGIN Header */ +///** +// ****************************************************************************** +// * @file adc_dma.c +// * @brief This file provides code for the configuration +// * of the ADC instances. +// * @data 1-feb-2024 +// * @Author Vecmocon Technology +// ****************************************************************************** +// */ +///* USER CODE END Header */ +// +///* Includes ------------------------------------------------------------------*/ +//#include +// +//static volatile bool b_AdcInitFlag = 0; /*!< ADC initialization flag */ +//static volatile bool b_AdcStartFlag =0; /*!< ADC start - stop flag */ +//static volatile bool b_DmaFlag =0; /*!< DMA initialization flag */ +//static volatile bool b_DmaStart =0; /*!< DMA initialization flag */ +// +///** +// * @brief Configuration for ADC12_0 clock. +// */ +//static const DL_ADC12_ClockConfig gADC12_1ClockConfig = { +// .clockSel = DL_ADC12_CLOCK_SYSOSC, +// .divideRatio = DL_ADC12_CLOCK_DIVIDE_1, +// .freqRange = DL_ADC12_CLOCK_FREQ_RANGE_24_TO_32, +//}; +// +// +///** +// * @brief Configuration for DMA. +// */ +//static const DL_DMA_Config gDMA_CH0Config = { +// .transferMode = DL_DMA_SINGLE_TRANSFER_MODE, +// .extendedMode = DL_DMA_NORMAL_MODE, +// .destIncrement = DL_DMA_ADDR_UNCHANGED, +// .srcIncrement = DL_DMA_ADDR_UNCHANGED, +// .destWidth = DL_DMA_WIDTH_WORD, +// .srcWidth = DL_DMA_WIDTH_WORD, +// .trigger = ADC12_1_INST_DMA_TRIGGER, +// .triggerType = DL_DMA_TRIGGER_TYPE_EXTERNAL, +//}; +// +// +// +///** +// * @brief Initlization ADC with DMA +// * @note Interruptions enabled in this function +// * @param adc_inst ADC handle +// * @retval IVEC MCAL status +// */ +//IVEC_McalStatus_e xMCAL_AdcInit(ADC12_Regs* const adc_inst) +//{ +// assert(adc_inst == ADC1); +// if(b_AdcInitFlag == 0) +// { +// DL_ADC12_setClockConfig(ADC1, (DL_ADC12_ClockConfig *) &gADC12_1ClockConfig); +// DL_ADC12_initSingleSample(ADC1, DL_ADC12_REPEAT_MODE_ENABLED, DL_ADC12_SAMPLING_SOURCE_AUTO, DL_ADC12_TRIG_SRC_SOFTWARE,DL_ADC12_SAMP_CONV_RES_12_BIT, DL_ADC12_SAMP_CONV_DATA_FORMAT_UNSIGNED); +// DL_ADC12_configConversionMem(ADC1, DL_ADC12_MEM_IDX_0, +// ADC12_MEMCTL_CHANSEL_CHAN_0, ADC12_MEMCTL_VRSEL_VDDA, ADC12_MEMCTL_STIME_SEL_SCOMP0, ADC12_MEMCTL_AVGEN_DISABLE, +// ADC12_MEMCTL_BCSEN_DISABLE, ADC12_MEMCTL_TRIG_AUTO_NEXT, ADC12_MEMCTL_WINCOMP_DISABLE); +// DL_ADC12_enableFIFO(ADC1); +// DL_ADC12_setPowerDownMode(ADC1,ADC12_CTL0_PWRDN_MANUAL); +// DL_ADC12_setSampleTime0(ADC1,dmaSAMPLETIME_u16); +// DL_ADC12_enableDMA(ADC1); +// DL_ADC12_setDMASamplesCnt(ADC1,dmaSAMPLECNT_u8); +// DL_ADC12_enableDMATrigger(ADC1,(ADC12_DMA_TRIG_IMASK_MEMRESIFG7_SET)); +// DL_ADC12_clearInterruptStatus(ADC1,(ADC12_CPU_INT_IMASK_DMADONE_SET)); +// DL_ADC12_enableInterrupt(ADC1,(ADC12_CPU_INT_IMASK_DMADONE_SET)); +// DL_ADC12_enableConversions(ADC1); +// b_AdcInitFlag =1; +// return IVEC_MCAL_STATUS_SUCCESS; +// } +// else +// return IVEC_MCAL_STATUS_INIT_FAIL; +//} +// +// +///** +// * @brief De-Initialize the ADC peripheral to their default reset values +// * @param adc_inst ADC handle +// * @retval IVEC MCAL status +// */ +//IVEC_McalStatus_e xMCAL_AdcDeInit(ADC12_Regs* const adc_inst) +//{ +// assert(adc_inst == ADC1); +// if(b_AdcInitFlag == 1 ) +// { +// b_AdcInitFlag = 0; +// return IVEC_MCAL_STATUS_SUCCESS; +// } +// else +// return IVEC_MCAL_STATUS_INIT_FAIL; +//} +// +///** +// * @brief Enable ADC, start conversion of regular group. +// * @note Interruptions enabled in this function: None. +// * @param adc_inst ADC handle +// * @retval IVEC MCAL status +// */ +//IVEC_McalStatus_e xMCAL_AdcStart(ADC12_Regs* const adc_inst) +//{ +// assert(adc_inst == ADC1); +// if (b_AdcStartFlag == 0) +// { +// DL_ADC12_startConversion(adc_inst); +// b_AdcStartFlag =1; +// return IVEC_MCAL_STATUS_SUCCESS; +// } +// else +// return IVEC_MCAL_STATUS_INIT_FAIL; +//} +// +///** +// * @brief Stop ADC conversion of regular group. +// * @param adc_inst ADC handle +// * @retval IVEC MCAL status +// */ +//IVEC_McalStatus_e xMCAL_AdcStop(ADC12_Regs* const adc_inst) +//{ +// assert(adc_inst == ADC1); +// if (b_AdcStartFlag == 1) +// { +// DL_ADC12_stopConversion(adc_inst); +// b_AdcStartFlag = 0; +// return IVEC_MCAL_STATUS_SUCCESS; +// } +// else +// return IVEC_MCAL_STATUS_INIT_FAIL; +//} +// +// +///** +// * @brief Initlization of DMA for ADC +// * @note Interruptions enabled in this function +// * @param adc_inst ADC handle +// * @retval IVEC MCAL status +// */ +//IVEC_McalStatus_e xMCAL_DmaInit(void) +//{ +// if (b_DmaFlag==0) +// { +// DL_DMA_initChannel(DMA, dmaCHID_u8 , (DL_DMA_Config *) &gDMA_CH0Config); +// DL_DMA_clearInterruptStatus(DMA, DMA_CPU_INT_IMASK_DMACH0_SET); +// DL_DMA_enableInterrupt(DMA, DMA_CPU_INT_IMASK_DMACH0_SET); +// DL_DMA_clearInterruptStatus(DMA, DMA_CPU_INT_IMASK_PREIRQCH0_SET); +// DL_DMA_Full_Ch_setEarlyInterruptThreshold(DMA, dmaCHID_u8, DL_DMA_EARLY_INTERRUPT_THRESHOLD_HALF); +// DL_DMA_enableInterrupt(DMA, DMA_CPU_INT_IMASK_PREIRQCH0_SET); +// b_DmaFlag=1; +// return IVEC_MCAL_STATUS_SUCCESS; +// } +// else +// return IVEC_MCAL_STATUS_INIT_FAIL; +// +//} +// +///** +// * @brief De-Initialize the DMA to their default reset values +// * @param adc_inst ADC handle +// * @retval IVEC MCAL status +// */ +//IVEC_McalStatus_e xMCAL_DmaDeInit(void) +//{ +// if(b_DmaFlag == 1 ) +// { +// b_DmaFlag=0; +// return IVEC_MCAL_STATUS_SUCCESS; +// } +// else +// return IVEC_MCAL_STATUS_INIT_FAIL; +//} +// +///** +// * @brief Enable DMA, start transfer from ADC to DMA of regular group. +// * @note Interruptions enabled in this function: None. +// * @param u8Channel use to pass the DMA channel +// * @param p_u16adcDma use to get the ADC raw +// * @retval IVEC MCAL status +// */ +//IVEC_McalStatus_e xMCAL_DmaStart(const uint8_t u8channel ,uint16_t* p_u16adcDma) +//{ +// assert(b_DmaStart == 0); +// static uint32_t l_u32Data[2]; +// DL_DMA_setSrcAddr(DMA, dmaCHID_u8, (uint32_t)DL_ADC12_getFIFOAddress(ADC1)); +// DL_DMA_setDestAddr(DMA, dmaCHID_u8, (uint32_t)&l_u32Data[0]); +// DL_DMA_setTransferSize(DMA, dmaCHID_u8, u8channel); +// DL_DMA_enableChannel(DMA, dmaCHID_u8); +// DL_ADC12_enableDMA(ADC1); +// *p_u16adcDma = l_u32Data[0]; +// return IVEC_MCAL_STATUS_SUCCESS; +//} +// +///** +// * @brief Function use to set the DMA channel +// * @param u8Channel use to pass the DMA channel +// * @retval IVEC MCAL status +// */ +//IVEC_McalStatus_e xMCAL_DmaStop(void) +//{ +// if(b_DmaStart == 0) +// { +// b_DmaStart =1; +// return IVEC_MCAL_STATUS_SUCCESS; +// } +// else +// return IVEC_MCAL_STATUS_INIT_FAIL; +//} +// +///** +// * @brief ADC call back function +// * @note Interruptions enabled in this function +// */ +//void _prv_adccallback() +//{ +// switch (DL_ADC12_getPendingInterrupt(ADC1)) +// { +// case DL_ADC12_IIDX_DMA_DONE: +// break; +// default: +// break; +// } +//} +///** +// * @brief ADC IRQ handler +// */ +//void ADC1_IRQHandler() +//{ +// _prv_adccallback(); +//} +// diff --git a/Core/Source/ivec_mcal_i2c.c b/Core/Source/ivec_mcal_i2c.c new file mode 100644 index 0000000..72be8f3 --- /dev/null +++ b/Core/Source/ivec_mcal_i2c.c @@ -0,0 +1,399 @@ +/** + * @file ivec_mcal_i2c.c + * @author Akshat Dabas (akshat@vecmocon.com) + * @brief This source file contains API and Private members for I2C Functionality + * @version 0.1.0 + * @date 2024-Mar-27 + * + * @copyright Copyright (c) 2024 + * + */ + +#include "../Core/Include/ivec_mcal_i2c.h" + + +/*REQUIRED I2C CONFIGS*/ + +/*=======================================================================================PRIVATE_MEMBERS======================================================================================*/ + +static volatile bool b_I2C0_INIT_FLAG=0; + +static volatile bool b_I2C1_INIT_FLAG=0; + +static volatile uint8_t u8RxBuffer0[I2C_PACKETSIZE]; + +static volatile uint8_t u8RxBuffer1[I2C_PACKETSIZE]; + +static volatile int i32bufferIdx0=0; + +static volatile int i32bufferIdx1=0; + +volatile int i32TempCount=0; + +volatile int global_len; + +static const DL_I2C_ClockConfig gI2C_0ClockConfig = { + .clockSel = DL_I2C_CLOCK_BUSCLK, + .divideRatio = DL_I2C_CLOCK_DIVIDE_1, +}; + +static volatile uint8_t u8GlobalPacket[8]; + +static volatile xI2cControllerStatus_t xStatus_i2c = I2C_STATUS_IDLE; +/*____________________________________________________________________________________________________________________________________________________________________________________________*/ + + +/*============================================================================================================================================================================================= + PRIVATE_DECLARATIONS +==============================================================================================================================================================================================*/ + +void _prv_vI2C_Callback() +{ + switch (DL_I2C_getPendingInterrupt(I2C0)) + { + case DL_I2C_IIDX_CONTROLLER_RX_DONE: + xStatus_i2c = I2C_STATUS_RX_COMPLETE; + break; + case DL_I2C_IIDX_CONTROLLER_TX_DONE: + DL_I2C_disableInterrupt(I2C0, DL_I2C_INTERRUPT_CONTROLLER_TXFIFO_TRIGGER); + xStatus_i2c = I2C_STATUS_TX_COMPLETE; + break; + case DL_I2C_IIDX_CONTROLLER_RXFIFO_TRIGGER: + xStatus_i2c = I2C_STATUS_RX_INPROGRESS; + /* Receive all bytes from target */ + while (DL_I2C_isControllerRXFIFOEmpty(I2C0) != true) { + if (i32bufferIdx0 +#include "string.h" + +static volatile bool b_MCAN_InitFlag = 0; /*!< CAN initialization flag */ +static volatile bool b_ServiceInt=true; +static volatile uint32_t u32InterruptLine1Status; +static char u8ErrorInterruptStatus[50]; +static volatile DL_MCAN_RxFIFOStatus rxFS; +static DL_MCAN_RxBufElement TempRxMsg; +static uint32_t id; +extern uint16_t idx; +uint32_t IntrStatus; +static volatile uint8_t u8_MCAN_StatusFlag = IVEC_MCAL_STATUS_ERROR; + + +/*REQUIRED MCAN CONFIGS*/ + +/*=======================================================================================PRIVATE_MEMBERS======================================================================================*/ + +static const DL_MCAN_ClockConfig gMCAN0ClockConf = { + .clockSel = DL_MCAN_FCLK_SYSPLLCLK1,////DL_MCAN_FCLK_SYSPLLCLK1,DL_MCAN_FCLK_HFCLK, + .divider = DL_MCAN_FCLK_DIV_1, +}; + +static const DL_MCAN_InitParams gMCAN0InitParams= { + +/* Initialize MCAN Init parameters. */ + .fdMode = false, + .brsEnable = false, + .txpEnable = false, + .efbi = false, + .pxhddisable = false, + .darEnable = false, + .wkupReqEnable = false, + .autoWkupEnable = false, + .emulationEnable = true, + .tdcEnable = true, + .wdcPreload = 255, + +/* Transmitter Delay Compensation parameters. */ + .tdcConfig.tdcf = 10, + .tdcConfig.tdco = 6, +}; + +static const DL_MCAN_ConfigParams gMCAN0ConfigParams={ + /* Initialize MCAN Config parameters. */ + .monEnable = false, + .asmEnable = false, + .tsPrescalar = 15, + .tsSelect = 0, + .timeoutSelect = DL_MCAN_TIMEOUT_SELECT_CONT, + .timeoutPreload = 65535, + .timeoutCntEnable = false, + .filterConfig.rrfs = true, + .filterConfig.rrfe = true, + .filterConfig.anfe = 1, + .filterConfig.anfs = 1, +}; + +static const DL_MCAN_MsgRAMConfigParams gMCAN0MsgRAMConfigParams ={ + + /* Standard ID Filter List Start Address. */ + .flssa = 0 , + /* List Size: Standard ID. */ + .lss = 1 , + /* Extended ID Filter List Start Address. */ + .flesa = 48 , + /* List Size: Extended ID. */ + .lse = 1 , + /* Tx Buffers Start Address. */ + .txStartAddr = 10 , + /* Number of Dedicated Transmit Buffers. */ + .txBufNum = 10 , + .txFIFOSize = 10, + /* Tx Buffer Element Size. */ + .txBufMode = 0, + .txBufElemSize = DL_MCAN_ELEM_SIZE_8BYTES, + /* Tx Event FIFO Start Address. */ + .txEventFIFOStartAddr = 640 , + /* Event FIFO Size. */ + .txEventFIFOSize = 10 , + /* Level for Tx Event FIFO watermark interrupt. */ + .txEventFIFOWaterMark = 0, + /* Rx FIFO0 Start Address. */ + .rxFIFO0startAddr = 170 , + /* Number of Rx FIFO elements. */ + .rxFIFO0size = 10 , + /* Rx FIFO0 Watermark. */ + .rxFIFO0waterMark = 0, + .rxFIFO0OpMode = 0, + /* Rx FIFO1 Start Address. */ + .rxFIFO1startAddr = 190 , + /* Number of Rx FIFO elements. */ + .rxFIFO1size = 10 , + /* Level for Rx FIFO 1 watermark interrupt. */ + .rxFIFO1waterMark = 10, + /* FIFO blocking mode. */ + .rxFIFO1OpMode = 0, + /* Rx Buffer Start Address. */ + .rxBufStartAddr = 208 , + /* Rx Buffer Element Size. */ + .rxBufElemSize = DL_MCAN_ELEM_SIZE_8BYTES, + /* Rx FIFO0 Element Size. */ + .rxFIFO0ElemSize = DL_MCAN_ELEM_SIZE_8BYTES, + /* Rx FIFO1 Element Size. */ + .rxFIFO1ElemSize = DL_MCAN_ELEM_SIZE_8BYTES, +}; + +static const DL_MCAN_StdMsgIDFilterElement gMCAN0StdFiltelem = { + .sfec = 0x1, + .sft = 0x0, + .sfid1 = 0, + .sfid2 = 2047, +}; + + +static const DL_MCAN_BitTimingParams gMCAN0BitTimes_500 = { + /* Arbitration Baud Rate Pre-scaler. */ + .nomRatePrescalar = 0, + /* Arbitration Time segment before sample point. */ + .nomTimeSeg1 = 62, + /* Arbitration Time segment after sample point. */ + .nomTimeSeg2 = 15, + /* Arbitration (Re)Synchronization Jump Width Range. */ + .nomSynchJumpWidth = 15, + /* Data Baud Rate Pre-scaler. */ + .dataRatePrescalar = 0, + /* Data Time segment before sample point. */ + .dataTimeSeg1 = 0, + /* Data Time segment after sample point. */ + .dataTimeSeg2 = 0, + /* Data (Re)Synchronization Jump Width. */ + .dataSynchJumpWidth = 0, +}; + +static const DL_MCAN_BitTimingParams gMCAN0BitTimes_250 = { + /* Arbitration Baud Rate Pre-scaler. */ + .nomRatePrescalar = 0, + /* Arbitration Time segment before sample point. */ + .nomTimeSeg1 = 138, + /* Arbitration Time segment after sample point. */ + .nomTimeSeg2 = 19, + /* Arbitration (Re)Synchronization Jump Width Range. */ + .nomSynchJumpWidth = 19, + /* Data Baud Rate Pre-scaler. */ + .dataRatePrescalar = 0, + /* Data Time segment before sample point. */ + .dataTimeSeg1 = 0, + /* Data Time segment after sample point. */ + .dataTimeSeg2 = 0, + /* Data (Re)Synchronization Jump Width. */ + .dataSynchJumpWidth = 0, +}; + + + +/*____________________________________________________________________________________________________________________________________________________________________________________________*/ + + +/*============================================================================================================================================================================================= + PRIVATE_DECLARATIONS +==============================================================================================================================================================================================*/ + +/** + * @brief Static Function to store RX data in a static buffer + * @retval void + */ +//static void _prv_vGetRxMsg(DL_MCAN_RxBufElement *rxMsg,uint8_t *RxData,int DLC) +//{ +// for (int i =0 ; i < DLC ; i++) +// { +// RxData[i] = rxMsg->data[i]; +// } +// +//} +static void _prv_vGetRxMsg(DL_MCAN_RxBufElement *rxMsg,uint8_t *RxData,int DLC) +{ + + id = ((rxMsg->id & (uint32_t) 0x1FFC0000) >> (uint32_t) 18); + + switch (id) { + case 0x5: + + *RxData = rxMsg->data[0]; + idx = (rxMsg->data[0] + 1) % 256; + + break; + default: + /* Don't do anything */ + break; + } + +} + +/** + * @brief Private Function working as an Error Handler in IRQ + * @retval void + */ +static void ErrorHandler() +{ + switch(DL_MCAN_getIntrStatus(CANFD0)) + { + case MCAN_IR_PED_MASK: + strcpy(u8ErrorInterruptStatus, "Protocol Error in Data Phase!"); + __asm("nop"); + break; + case MCAN_IR_PEA_MASK: + strcpy(u8ErrorInterruptStatus, "Protocol Error in Arbitration Phase!"); + __asm("nop"); + break; + case MCAN_IR_BO_MASK: + strcpy(u8ErrorInterruptStatus, "CAN BUS OFF!"); + DL_MCAN_reset(CANFD0); + __asm("nop"); + break; + case MCAN_IR_EW_MASK: + strcpy(u8ErrorInterruptStatus, "Warning Status Interrupt generated!"); + __asm("nop"); + break; + case MCAN_IR_EP_MASK: + strcpy(u8ErrorInterruptStatus, "Error Passive Interrupt generated!"); + __asm("nop"); + break; + case MCAN_IR_ELO_MASK: + strcpy(u8ErrorInterruptStatus, "Error Logging Overflow!"); + __asm("nop"); + break; + case MCAN_IR_BEU_MASK: + strcpy(u8ErrorInterruptStatus, "Bit Error Uncorrected!"); + __asm("nop"); + break; + case MCAN_IR_TOO_MASK: + strcpy(u8ErrorInterruptStatus, "Timeout Occured!"); + __asm("nop"); + break; + default: + break; + + } +} + +/** + * @brief Default Interrupt Handler for MCAN + * + */ +void CANFD0_IRQHandler(void) +{ + ErrorHandler(); + + switch (DL_MCAN_getPendingInterrupt(CANFD0)) { + case DL_MCAN_IIDX_LINE1: + /* Check MCAN interrupts fired during TX/RX of CAN package */ + u32InterruptLine1Status |= DL_MCAN_getIntrStatus(CANFD0); + DL_MCAN_clearIntrStatus(CANFD0, u32InterruptLine1Status,DL_MCAN_INTR_SRC_MCAN_LINE_1); + b_ServiceInt = true; + break; + default: + break; + } +} + +//void CANFD0_IRQHandler(void) +//{ +// IntrStatus = DL_MCAN_getIntrStatus(CANFD0); +// +// if (IntrStatus & DL_MCAN_INTERRUPT_TC){ +// __asm("nop"); +// DL_MCAN_clearIntrStatus(CANFD0, IntrStatus,DL_MCAN_INTR_SRC_MCAN_LINE_1); +// +// b_ServiceInt = true; +// u8_MCAN_StatusFlag = IVEC_MCAL_STATUS_SUCCESS; +// __asm("nop"); +// } +// else if(IntrStatus & DL_MCAN_INTERRUPT_RF0N) +// { +// b_ServiceInt = false; +// rxFS.fillLvl = 0; +// rxFS.num = DL_MCAN_RX_FIFO_NUM_0; +// +// while ((rxFS.fillLvl) == 0) +// { +// DL_MCAN_getRxFIFOStatus(CANFD0, &rxFS); +// } +// +// DL_MCAN_readMsgRam(CANFD0, DL_MCAN_MEM_TYPE_FIFO, 0, rxFS.num, &TempRxMsg); +// DL_MCAN_writeRxFIFOAck(CANFD0, rxFS.num, rxFS.getIdx); +// +// xCanIdType_t idType = ERROR; +// if (TempRxMsg.id >= 0 && TempRxMsg.id <= 0x7FF) +// { +// idType = STD_ID; +// } else if (TempRxMsg.id <= 0x1FFFFFFF) +// { +// idType = EXT_ID; +// } +// +// uint32_t idx = ((TempRxMsg.id & (uint32_t) 0x1FFC0000) >> (uint32_t) 18); +// +// if(idx) +// { +// for(uint8_t inx = 0; inx <= 7; inx++) +// { +// g_CanData[inx] = TempRxMsg.data[inx]; +// } +// mcu_FDCAN_RxFifo_Callback(idx, &g_CanData[0], TempRxMsg.dlc); +// } +// +// b_ServiceInt = true; +// DL_MCAN_clearIntrStatus(CANFD0, IntrStatus,DL_MCAN_INTR_SRC_MCAN_LINE_1); +// } +// else{ +// DL_MCAN_getIntrStatus(CANFD0); +// DL_MCAN_clearIntrStatus(CANFD0, IntrStatus,DL_MCAN_INTR_SRC_MCAN_LINE_1); +// } +// ErrorHandler(); +//} + +/*============================================================================================================================================================================================= + API +==============================================================================================================================================================================================*/ + +/** + * @brief Function to initialize MCAN Peripheral + * @note Interrupts are enabled in this function itself + * @param MCAN Pointer to the register overlay for the peripheral + * @param BAUD Param to set Baud rate of MCAN + * @retval IVEC_McalStatus_e + */ +IVEC_McalStatus_e xMCAL_MCANInit(MCAN_Regs* MCAN, xCAN_baud_t BAUD) +{ + assert(MCAN == CANFD0); + assert(BAUD == BAUD_500 || BAUD == BAUD_250); + assert(b_MCAN_InitFlag == 0); + + DL_MCAN_RevisionId revid_MCAN0; + + DL_MCAN_enableModuleClock(MCAN); + + DL_MCAN_setClockConfig(MCAN, (DL_MCAN_ClockConfig *) &gMCAN0ClockConf); + + /* Get MCANSS Revision ID. */ + DL_MCAN_getRevisionId(MCAN, &revid_MCAN0); + + /* Wait for Memory initialization to be completed. */ + while(false == DL_MCAN_isMemInitDone(MCAN)); + + /* Put MCAN in SW initialization mode. */ + + DL_MCAN_setOpMode(MCAN, DL_MCAN_OPERATION_MODE_SW_INIT); + + /* Wait till MCAN is not initialized. */ + while (DL_MCAN_OPERATION_MODE_SW_INIT != DL_MCAN_getOpMode(MCAN)); + + /* Initialize MCAN module. */ + DL_MCAN_init(MCAN, (DL_MCAN_InitParams *) &gMCAN0InitParams); + + /* Configure MCAN module. */ + DL_MCAN_config(MCAN, (DL_MCAN_ConfigParams*) &gMCAN0ConfigParams); + + /* Configure Bit timings. */ + if(BAUD==BAUD_500) + { + + DL_MCAN_setBitTime(MCAN, (DL_MCAN_BitTimingParams*) &gMCAN0BitTimes_500); + } + else if(BAUD==BAUD_250) + { + DL_MCAN_setBitTime(MCAN, (DL_MCAN_BitTimingParams*) &gMCAN0BitTimes_250); + } + + /* Configure Message RAM Sections */ + DL_MCAN_msgRAMConfig(MCAN, (DL_MCAN_MsgRAMConfigParams*) &gMCAN0MsgRAMConfigParams); + + /* Configure Standard ID filter element */ + DL_MCAN_addStdMsgIDFilter(MCAN, 0U, (DL_MCAN_StdMsgIDFilterElement *) &gMCAN0StdFiltelem); + + + /* Set Extended ID Mask. */ + DL_MCAN_setExtIDAndMask(MCAN, (0x1FFFFFFFU) ); + + /* Take MCAN out of the SW initialization mode */ + DL_MCAN_setOpMode(MCAN, DL_MCAN_OPERATION_MODE_NORMAL); + + while (DL_MCAN_OPERATION_MODE_NORMAL != DL_MCAN_getOpMode(MCAN)); + + /* Enable MCAN mopdule Interrupts */ + DL_MCAN_enableIntr(MCAN, (DL_MCAN_INTERRUPT_BEU | \ + DL_MCAN_INTERRUPT_BO | \ + DL_MCAN_INTERRUPT_ELO | \ + DL_MCAN_INTERRUPT_EP | \ + DL_MCAN_INTERRUPT_EW | \ + DL_MCAN_INTERRUPT_PEA | \ + DL_MCAN_INTERRUPT_PED | \ + DL_MCAN_INTERRUPT_RF0N | \ + DL_MCAN_INTERRUPT_TC | \ + DL_MCAN_INTERRUPT_TOO), 1U); + + DL_MCAN_selectIntrLine(MCAN, DL_MCAN_INTR_MASK_ALL, DL_MCAN_INTR_LINE_NUM_1); + DL_MCAN_enableIntrLine(MCAN, DL_MCAN_INTR_LINE_NUM_1, 1U); + + /* Enable MSPM0 MCAN interrupt */ + DL_MCAN_clearInterruptStatus(MCAN,(DL_MCAN_MSP_INTERRUPT_LINE1)); + DL_MCAN_enableInterrupt(MCAN,(DL_MCAN_MSP_INTERRUPT_LINE1)); + NVIC_EnableIRQ(CANFD0_INT_IRQn); + b_MCAN_InitFlag = 1; + + return IVEC_MCAL_STATUS_SUCCESS; + +} + + +/** + * @brief Function to De-Initialize MCAN peripheral + * @param MCAN Pointer to the register overlay for the peripheral + * @retval IVEC MCAL status + */ +IVEC_McalStatus_e xMCAL_MCANDeInit(MCAN_Regs* MCAN) +{ + assert(MCAN == CANFD0); + assert(b_MCAN_InitFlag != 0); + + DL_MCAN_disablePower(MCAN); + b_MCAN_InitFlag = 0; + return IVEC_MCAL_STATUS_SUCCESS; + +} + +/** + * @brief Function to Transmit CAN message + * @param MCAN Pointer to the register overlay for the peripheral + * @param TxMsg Message Object. + * @param TxData Array of Data to be transmitted + * @param BufNum Tx Buffer Number + * @param Bytes Number of bytes to be transmitted + * @retval IVEC_McalStatus_e + */ +IVEC_McalStatus_e xMCAL_MCANTx(MCAN_Regs *MCAN, DL_MCAN_TxBufElement *TxMsg ,uint16_t *TxData, uint32_t BufNum, int Bytes) +{ + assert(MCAN == CANFD0); + assert(b_MCAN_InitFlag != 0); + + for(int i=0;idata[i] = TxData[i]; + } + + DL_MCAN_writeMsgRam(MCAN, DL_MCAN_MEM_TYPE_BUF, BufNum , TxMsg); + DL_MCAN_TXBufAddReq(MCAN, BufNum); + + return IVEC_MCAL_STATUS_SUCCESS; +} + +/** + * @brief Function to Receive CAN message + * @param MCAN Pointer to the register overlay for the peripheral + * @param RxMsg Message Object. + * @param FifoNum Fifo Number to be used + * @param RxData Array where received data is to be stored + * @param DLC length of received data + * @retval IVEC_McalStatus_e + */ +IVEC_McalStatus_e xMCAL_MCANRx(MCAN_Regs *MCAN, DL_MCAN_RxBufElement *RxMsg ,uint32_t FifoNum,uint8_t *RxData,int DLC) +{ + assert(MCAN == CANFD0); + assert(b_MCAN_InitFlag != 0); + + while (false == b_ServiceInt) + { + __WFE();//__asm("nop"); + } + + b_ServiceInt = false; + rxFS.fillLvl = 0; + + if ((u32InterruptLine1Status & MCAN_IR_RF0N_MASK) == MCAN_IR_RF0N_MASK) + { + rxFS.num = DL_MCAN_RX_FIFO_NUM_0; + while ((rxFS.fillLvl) == 0) + { + DL_MCAN_getRxFIFOStatus(MCAN, &rxFS); + } + DL_MCAN_readMsgRam(MCAN, DL_MCAN_MEM_TYPE_FIFO, FifoNum, rxFS.num, RxMsg); + DL_MCAN_writeRxFIFOAck(MCAN, rxFS.num, rxFS.getIdx); + _prv_vGetRxMsg(RxMsg,RxData,DLC); + u32InterruptLine1Status &= ~(MCAN_IR_RF0N_MASK); + } + + + return IVEC_MCAL_STATUS_SUCCESS; +} + +/** + * @brief Function to check current Error Status of MCAN peripheral + * @param ErrorStatus Pointer to array where current status will be stored + * @retval IVEC_McalStatus_e + */ +IVEC_McalStatus_e xMCAL_getMCAN_ErrorStatus(char *ErrorStatus) +{ + assert(b_MCAN_InitFlag != 0); + + strcpy(ErrorStatus,u8ErrorInterruptStatus); + + return IVEC_MCAL_STATUS_SUCCESS; +} + +/** + * @brief Function to check Interrupt Line1 Status of MCAN peripheral + * @param Interrupt_Status Pointer to variable where current status will be stored + * @retval IVEC_McalStatus_e + */ +IVEC_McalStatus_e xMCAL_getMCAN_InterruptLine1Status(uint32_t *Interrupt_Status) +{ + assert(b_MCAN_InitFlag != 0); + + *Interrupt_Status=u32InterruptLine1Status; + + return IVEC_MCAL_STATUS_SUCCESS; +} + +/*____________________________________________________________________________________________________________________________________________________________________________________________*/ diff --git a/Core/Source/ivec_mcal_spi.c b/Core/Source/ivec_mcal_spi.c new file mode 100644 index 0000000..7327204 --- /dev/null +++ b/Core/Source/ivec_mcal_spi.c @@ -0,0 +1,317 @@ +/** + * @file ivec_mcal_spi.c + * @author Akshat Dabas (akshat@vecmocon.com) + * @brief This source file contains API and Private members for SPI Functionality + * @version 0.1.0 + * @date 2024-Mar-12 + * + * @copyright Copyright (c) 2024 + * + */ + +#include "../Core/Include/ivec_mcal_spi.h" + +/*REQUIRED SPI CONFIGS*/ + +/*=======================================================================================PRIVATE_MEMBERS======================================================================================*/ + +static volatile uint8_t b_SPI0_INIT_FLAG=0; + +static volatile uint8_t b_SPI1_INIT_FLAG=0; + +static volatile int i32bufferIdx0=0; + +static volatile int i32bufferIdx1=0; + +static volatile uint8_t u8rxbuffer0[SPI_PKT_SIZE], u8rxbuffer1[SPI_PKT_SIZE]; + +static const DL_SPI_Config gSPI_0_config = { + .mode = DL_SPI_MODE_CONTROLLER, + .frameFormat = DL_SPI_FRAME_FORMAT_MOTO3_POL1_PHA1, + .parity = DL_SPI_PARITY_NONE, + .dataSize = DL_SPI_DATA_SIZE_8, + .bitOrder = DL_SPI_BIT_ORDER_MSB_FIRST, +}; + +static const DL_SPI_ClockConfig gSPI_0_clockConfig = { + .clockSel = DL_SPI_CLOCK_BUSCLK, + .divideRatio = DL_SPI_CLOCK_DIVIDE_RATIO_1 +}; + +/*____________________________________________________________________________________________________________________________________________________________________________________________*/ + + +/*============================================================================================================================================================================================= + PRIVATE_DECLARATIONS +==============================================================================================================================================================================================*/ + +/** + * @brief Receive in static buffer Function for UART + * + * @param uart_inst + * @return uint8_t + */ +uint8_t _prv_u8MCAL_spi_receive(SPI_Regs *SPI_inst) +{ + uint8_t temp; + temp=DL_SPI_receiveData8(SPI_inst); + return temp; +} + +/** + * @brief Function to read byte by byte in IRQ Handler + * + */ +void _prv_vspicallback() +{ + switch (DL_SPI_getPendingInterrupt(SPI0)) + { + case DL_SPI_IIDX_RX: + + if(i32bufferIdx0>SPI_PKT_SIZE-1) + { + i32bufferIdx0=0; + } + + u8rxbuffer0[i32bufferIdx0]=_prv_u8MCAL_spi_receive(SPI0); + i32bufferIdx0++; + + break; + case DL_SPI_IIDX_RX_TIMEOUT: + __asm("nop"); + break; + case DL_SPI_IIDX_RX_FULL: + __asm("nop"); + break; + case DL_SPI_IIDX_TX_UNDERFLOW: + __asm("nop"); + break; + case DL_SPI_IIDX_PARITY_ERROR: + __asm("nop"); + break; + case DL_SPI_IIDX_RX_OVERFLOW: + __asm("nop"); + break; + default: + break; + } + + switch (DL_SPI_getPendingInterrupt(SPI1)) + { + case DL_SPI_IIDX_RX: + + if(i32bufferIdx1>SPI_PKT_SIZE-1) + { + i32bufferIdx1=0; + } + + u8rxbuffer1[i32bufferIdx1]=_prv_u8MCAL_spi_receive(SPI1); + i32bufferIdx1++; + + break; + case DL_SPI_IIDX_RX_TIMEOUT: + __asm("nop"); + break; + case DL_SPI_IIDX_RX_FULL: + __asm("nop"); + break; + case DL_SPI_IIDX_TX_UNDERFLOW: + __asm("nop"); + break; + case DL_SPI_IIDX_PARITY_ERROR: + __asm("nop"); + break; + case DL_SPI_IIDX_RX_OVERFLOW: + __asm("nop"); + break; + default: + break; + } +} + +/** + * @brief Default Interrupt Callback for SPI_0 + * + */ + void SPI0_IRQHandler(void) + { + _prv_vspicallback(); + + } + + void SPI1_IRQHandler(void) + { + _prv_vspicallback(); + + } + + +/*============================================================================================================================================================================================= + API +==============================================================================================================================================================================================*/ + +/** + * @brief Initialize SPI in Controller/Master Mode + * + * @param SPI_inst Pointer to SPI config registers + * @param BR enum to set SPI Bit Rate + * @return xCoreStatus_t + */ +xCoreStatus_t xMCAL_SPI_init(SPI_Regs *SPI_inst, xSPI_CS_t xCS ) +{ + assert(SPI_inst == SPI0 || SPI_inst == SPI1); + + assert(!(b_SPI0_INIT_FLAG == 1 && b_SPI1_INIT_FLAG == 1)); + + if(xCS!=0) + { + return STATUS_INIT_FAIL; + } + DL_SPI_setClockConfig(SPI_inst, (DL_SPI_ClockConfig *) &gSPI_0_clockConfig); + DL_SPI_init(SPI_inst, (DL_SPI_Config *) &gSPI_0_config); + + /* Configure Controller mode */ + if(xCS==0) + { + /* + * Set the bit rate clock divider to generate the serial output clock + * outputBitRate = (spiInputClock) / ((1 + SCR) * 2) + * 1000000 = (40000000)/((1 + 19) * 2) + */ + DL_SPI_setBitRateSerialClockDivider(SPI_inst, 19); + } + //DL_SPI_enableLoopbackMode(SPI_inst); + /* Set RX and TX FIFO threshold levels */ + //DL_SPI_setFIFOThreshold(SPI_inst, DL_SPI_RX_FIFO_LEVEL_1_2_FULL, DL_SPI_TX_FIFO_LEVEL_1_2_EMPTY); + DL_SPI_setFIFOThreshold(SPI_inst, DL_SPI_RX_FIFO_LEVEL_ONE_FRAME, DL_SPI_TX_FIFO_LEVEL_EMPTY); + /*Enable Interrupt*/ + DL_SPI_enableInterrupt(SPI_inst, (DL_SPI_INTERRUPT_PARITY_ERROR | + DL_SPI_INTERRUPT_RX | + DL_SPI_INTERRUPT_RX_FULL | + DL_SPI_INTERRUPT_RX_OVERFLOW | + DL_SPI_INTERRUPT_RX_TIMEOUT | + DL_SPI_INTERRUPT_TX_UNDERFLOW)); + /* Enable module */ + DL_SPI_enable(SPI_inst); + + if(SPI_inst==SPI0) + { + NVIC_EnableIRQ(SPI0_INT_IRQn); + b_SPI0_INIT_FLAG=1; + } + else if(SPI_inst==SPI1) + { + NVIC_EnableIRQ(SPI1_INT_IRQn); + b_SPI1_INIT_FLAG=1; + } + return STATUS_SUCCESS; +} + +/** + * @brief Function to Receive SPI Message + * + * @param SPI_inst Pointer to SPI config registers + * @param u8SPI_RxData variable where received data will be stored + * @param size Number of bytes to read + * @return xCoreStatus_t + */ +xCoreStatus_t _prv_xSPI_getData(SPI_Regs *SPI_inst, uint8_t *u8SPI_RxData, uint8_t size ) +{ + assert(SPI_inst == SPI0 || SPI_inst == SPI1); + assert(b_SPI0_INIT_FLAG != 0 || b_SPI1_INIT_FLAG != 0); + + if(SPI_inst==SPI0) + { + for(uint8_t i=0;i + +static volatile bool b_TimerInitFlag = 0; /*!< Timer initialization flag */ +static volatile bool b_TimerCounterFlag = 0; /*!< Timer Counter flag */ +static volatile bool b_PwmInitflag = 0; /*!< PWM initialization flag */ +static volatile bool b_Pwmstartflag = 0; /*!< PWM Start flag */ +static volatile bool b_InputCaputerflag =0; /*!< Input Capture initialization flag */ + + +static volatile uint32_t g_u32CapturePeriod; /*! g_u32CaptureValue0) + { + g_u32CapturePeriod = g_u32CaptureValue1 - g_u32CaptureValue0; + } + else + { + g_u32CapturePeriod = g_u32LoadValue + g_u32CaptureValue1 - g_u32CaptureValue0; + } + *f_frequency = (timerCAPTURE_FREQ_i32)/(g_u32CapturePeriod + 1) *10; +} + + +/** + * @brief Timer call back function + * @note f_frequency: get the calculated frequency + */ +void _prv_timAcallback() +{ + vMCAL_Calcfrequency(&f_frequency); +} + +/** + * @brief Timer IRQ handler + */ +void TIMA0_IRQHandler() +{ + _prv_timAcallback(); +} + diff --git a/Core/Source/ivec_mcal_uart.c b/Core/Source/ivec_mcal_uart.c new file mode 100644 index 0000000..394224c --- /dev/null +++ b/Core/Source/ivec_mcal_uart.c @@ -0,0 +1,1077 @@ +#include "../Core/Include/ivec_mcal_uart.h" +#include "string.h" +//#include "ivec_mcal_uart.h" +#define LOG_STRING "ivec-mcal-uart" + + + +McalUartHandle_s* g_pxUartHandles[IVEC_MCAL_UART_MAX_PORT] = { 0 }; +static uint32_t __gprv_u32DataCount = 0; +static volatile uint8_t u8rxbuffer1=0; + + +void UART_ReadCallback(UART_Regs *uart, uint8_t *buf, bool status) +{ + if(status == true) + { + __gprv_u32DataCount += 1; + + IVEC_MCAL_LOG(LOG_STRING, "Uart Recv Callback:%d", ind_type); + for (int i = 0;i < IVEC_MCAL_UART_MAX_PORT; i++) + { + if (g_pxUartHandles[i] != NULL ) + { + if (g_pxUartHandles[i]->pvUartRecvCallback != NULL) + g_pxUartHandles[i]->pvUartRecvCallback(IVEC_MCAL_UART_EVENT_RX_ARRIVED, buf, 1); + break; + } + } + } +} + +void _prv_vrxcallback() +{ + switch (DL_UART_Main_getPendingInterrupt(UART1)) + { + case DL_UART_MAIN_IIDX_RX: + { + bool status = 0; + status = DL_UART_receiveDataCheck(UART1, &u8rxbuffer1); + if(status == true) + { + UART_ReadCallback(UART1,&u8rxbuffer1,status); + } + break; + } +// case DL_UART_MAIN_IIDX_EOT_DONE: +// { +// g_TxCplt = true; +// } + case DL_UART_MAIN_IIDX_OVERRUN_ERROR: + __asm("nop"); + break; + case DL_UART_MAIN_IIDX_BREAK_ERROR: + __asm("nop"); + break; + case DL_UART_MAIN_IIDX_PARITY_ERROR: + __asm("nop"); + break; + case DL_UART_MAIN_IIDX_FRAMING_ERROR: + __asm("nop"); + break; + case DL_UART_MAIN_IIDX_RX_TIMEOUT_ERROR: + __asm("nop"); + break; + case DL_UART_MAIN_IIDX_NOISE_ERROR: + __asm("nop"); + break; + default: + break; + } +} + +void UART1_IRQHandler() +{ + _prv_vrxcallback(); +} + + +// Get the UART instance based on the enum +static UART_Regs* GetUartInstance(McalUartPortNumber_e eUartPortNumber) +{ + switch (eUartPortNumber) + { + case mcalUART_PORT1: + return UART0; + case mcalUART_PORT2: + return UART1; + case mcalUART_PORT3: + return UART2; + default: + return NULL; // Invalid UART port + } +} +////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////DEINIT///////////////////////////////////////////////////////// +static xCoreStatus_t uart_deinit(McalUartHandle_s* pxUartHandle) +{ +// assert(b_UART1_init_flag == 1 || b_UART3_init_flag == 1); +// assert(uart_inst == UART1 || uart_inst == UART3); + + UART_Regs* uart_inst = GetUartInstance(pxUartHandle->eUartPortNumber); + + // Check if the UART instance is valid + if (uart_inst == NULL) + { + return STATUS_ERROR; + } + + if(uart_inst==UART0) + { + NVIC_DisableIRQ(UART0_INT_IRQn); + DL_UART_disablePower(uart_inst); + //b_UART1_init_flag=0; + } + else if(uart_inst==UART1) + { + NVIC_DisableIRQ(UART1_INT_IRQn); + DL_UART_disablePower(uart_inst); + //b_UART1_init_flag=0; + } + else if(uart_inst==UART2) + { + NVIC_DisableIRQ(UART2_INT_IRQn); + DL_UART_disablePower(uart_inst); + //b_UART3_init_flag=0; + } + return STATUS_SUCCESS; +} +/** + * @brief Function to De-init UART Peripheral. + * @warning Donot call if UART is not initilized earlier. + * @param pxUartHandle pointer to \link McalUartHandle_s \endlink + * @return \link IVEC_McalCommonErr_e \endlink returns a status based on the success or failure of the UART De-Init operation. + */ +IVEC_McalCommonErr_e xMCAL_UartDeInit(McalUartHandle_s* pxUartHandle) +{ + int l_i32Ret; + IVEC_MCAL_FUNC_ENTRY(LOG_STRING); + IVEC_McalCommonErr_e l_xFuncStatus = commonMCAL_SUCCESS; + if (pxUartHandle == NULL) + { + l_xFuncStatus = commonMCAL_INVALID_PARAM; + goto exit; + } + l_i32Ret = uart_deinit(pxUartHandle); + IVEC_MCAL_LOG(LOG_STRING, "DeInitilising UART status %d", l_i32Ret); + if (l_i32Ret != STATUS_SUCCESS) + { + l_xFuncStatus = commonMCAL_DEINIT_FAIL; + goto exit; + } +exit: + IVEC_MCAL_FUNC_EXIT(LOG_STRING); + return l_xFuncStatus; +} +/////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////// + + + +//static xCoreStatus_t uart_read(McalUartHandle_s* pxUartHandle, unsigned char* pucData, unsigned int len) +//{ +// uint16_t ijk = 0; +// while((!u8CMPLX_FifoQueueEmpty(&__gprv_MyEcuCANResponseQueue)) && ijk < len ) +// { +// if( u8CMPLX_FifoDequeue(&__gprv_MyEcuCANResponseQueue, &pucData[ijk], &len, 1) == 1 ) +// ijk++; +// } +// if (ijk == len) +// return STATUS_SUCCESS; +// +// return STATUS_ERROR; +// +//} +// +// +///** +// * @brief Function to Read data at from UART Port +// * @pre UART should be initilized first. +// * @param [in] pxUartHandle pointer to \link McalUartHandle_s \endlink +// * @param [in] pucData pointer to unsigned char. Used to read data from UART. +// * @param [in] u32DataLength Length of the data to read. +// * @return \link IVEC_McalCommonErr_e \endlink returns a status based on the success or failure of the UART Read operation. +// */ +//IVEC_McalCommonErr_e xMCAL_UartRead(McalUartHandle_s* pxUartHandle, unsigned char* pucData, unsigned int u32DataLength) +//{ +// int l_i32Ret; +// IVEC_MCAL_FUNC_ENTRY(LOG_STRING); +// IVEC_McalCommonErr_e l_xFuncStatus = commonMCAL_SUCCESS; +// if (pxUartHandle == NULL) +// { +// l_xFuncStatus = commonMCAL_INVALID_PARAM; +// goto exit; +// } +// l_i32Ret = uart_read(pxUartHandle, pucData, u32DataLength); +// IVEC_MCAL_LOG(LOG_STRING, "Reading UART status %d", l_i32Ret); +// if (l_i32Ret == STATUS_ERROR) +// { +// l_xFuncStatus = commonMCAL_READ_FAIL; +// goto exit; +// } +//exit: +// IVEC_MCAL_FUNC_EXIT(LOG_STRING); +// return l_xFuncStatus; +//} + +static xCoreStatus_t uart_read(McalUartHandle_s* pxUartHandle, unsigned char* pucData) +{ + // Get the UART instance based on the port number in the handle + UART_Regs* uart_inst = GetUartInstance(pxUartHandle->eUartPortNumber); + + // Check if the UART instance is valid + if (uart_inst == NULL) + { + return STATUS_ERROR; + } + + bool status = false; + while (!DL_UART_Main_isRXFIFOEmpty(uart_inst)) { + *pucData = DL_UART_Main_receiveData(uart_inst); + status = true; + } + + //*pucData = DL_UART_receiveData(uart_inst); + + if(status == false) + { + return STATUS_ERROR; + } + + return STATUS_SUCCESS; +} + +/** + * @brief Function to Read data at from UART Port + * @pre UART should be initilized first. + * @param [in] pxUartHandle pointer to \link McalUartHandle_s \endlink + * @param [in] pucData pointer to unsigned char. Used to read data from UART. + * @param [in] u32DataLength Length of the data to read. + * @return \link IVEC_McalCommonErr_e \endlink returns a status based on the success or failure of the UART Read operation. + */ +IVEC_McalCommonErr_e xMCAL_UartRead(McalUartHandle_s* pxUartHandle, unsigned char* pucData, unsigned int u32DataLength) +{ + int l_i32Ret; + IVEC_MCAL_FUNC_ENTRY(LOG_STRING); + IVEC_McalCommonErr_e l_xFuncStatus = commonMCAL_SUCCESS; + if (pxUartHandle == NULL) + { + l_xFuncStatus = commonMCAL_INVALID_PARAM; + goto exit; + } + l_i32Ret = uart_read(pxUartHandle, pucData); + IVEC_MCAL_LOG(LOG_STRING, "Reading UART status %d", l_i32Ret); + if (l_i32Ret == STATUS_ERROR) + { + l_xFuncStatus = commonMCAL_READ_FAIL; + goto exit; + } +exit: + IVEC_MCAL_FUNC_EXIT(LOG_STRING); + return l_xFuncStatus; +} +/////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////// +static xCoreStatus_t uart_transmit(McalUartHandle_s* pxUartHandle, uint8_t *u8txdata, uint32_t u32size) +{ +// assert(b_UART1_init_flag == 1 || b_UART3_init_flag == 1); +// assert(uart_inst == UART1 || uart_inst == UART3); + + + // Get the UART instance based on the port number in the handle + UART_Regs* uart_inst = GetUartInstance(pxUartHandle->eUartPortNumber); + + // Check if the UART instance is valid + if (uart_inst == NULL) + { + return STATUS_ERROR; + } + + // Check if data length is valid + if(u32size==0) + { + return STATUS_ERROR; + } + + + for(int j=0;jeUartPortNumber); + + // Check if the UART instance is valid + if (uart_inst == NULL) + { + return STATUS_ERROR; + } + + DL_UART_Config xprvUartConfig = { 0 }; + xprvUartConfig.direction = DL_UART_MAIN_DIRECTION_TX_RX; + xprvUartConfig.mode = DL_UART_MAIN_MODE_NORMAL; + + //xprvUartConfig.wordLength = pxUartHandle->xUartConfig.eUartDataBit; + uint8_t datalength = pxUartHandle->xUartConfig.eUartDataBit; + if(datalength == mcalUART_DATABIT_7) + { + xprvUartConfig.wordLength = DL_UART_WORD_LENGTH_7_BITS; + } + else if(datalength == mcalUART_DATABIT_8) + { + xprvUartConfig.wordLength = DL_UART_WORD_LENGTH_8_BITS; + } + + //xprvUartConfig.stopBits = pxUartHandle->xUartConfig.eUartStopBit; + uint8_t stopbit = pxUartHandle->xUartConfig.eUartStopBit; + if(stopbit == mcalUART_STOP_1) + { + xprvUartConfig.stopBits = DL_UART_STOP_BITS_ONE; + } + else if(stopbit == mcalUART_STOP_2) + { + xprvUartConfig.stopBits = DL_UART_STOP_BITS_TWO; + } + + //xprvUartConfig.parity = pxUartHandle->xUartConfig.eUartParityBit; + uint8_t paritybit = pxUartHandle->xUartConfig.eUartParityBit; + if(paritybit == mcalUART_PARITY_NONE) + { + xprvUartConfig.parity = DL_UART_PARITY_NONE; + } + else if(paritybit == mcalUART_PARITY_ODD) + { + xprvUartConfig.parity = DL_UART_PARITY_ODD; + } + else if(paritybit == mcalUART_PARITY_EVEN) + { + xprvUartConfig.parity = DL_UART_PARITY_EVEN; + } + + //xprvUartConfig.flowControl = pxUartHandle->xUartConfig.eUartFlowCtrl; + xprvUartConfig.flowControl = DL_UART_FLOW_CONTROL_NONE; +// uint8_t flowcontrolmode = pxUartHandle->xUartConfig.eUartFlowCtrl; +// if(flowcontrolmode == mcalUART_FC_NONE) +// { +// xprvUartConfig.flowControl = DL_UART_FLOW_CONTROL_NONE; +// } +// else if(flowcontrolmode == mcalUARTFC_HW) +// { +// xprvUartConfig.flowControl = ; +// } + + DL_UART_ClockConfig gUART_0ClockConfig ={0}; + gUART_0ClockConfig.clockSel = DL_UART_MAIN_CLOCK_BUSCLK; + gUART_0ClockConfig.divideRatio = DL_UART_MAIN_CLOCK_DIVIDE_RATIO_1; + + DL_UART_Main_setClockConfig(uart_inst, (DL_UART_Main_ClockConfig *) &gUART_0ClockConfig); + DL_UART_Main_init(uart_inst, (DL_UART_Main_Config *) &xprvUartConfig); + + /* Configure baud rate by setting oversampling and baud rate divisors.*/ + + if(xBaud==115200) + { + + /* + * Target baud rate: 115200 + * Actual baud rate: 115211.52 + */ + + DL_UART_Main_setOversampling(uart_inst, DL_UART_OVERSAMPLING_RATE_16X); + DL_UART_Main_setBaudRateDivisor(uart_inst, 17, 23); + + } + else if(xBaud==9600) + { + DL_UART_Main_setOversampling(uart_inst, DL_UART_OVERSAMPLING_RATE_16X); + DL_UART_Main_setBaudRateDivisor(uart_inst, 208, 21); + + } + + /* Configure Interrupts */ + + if(uart_inst==UART0) + { + + + DL_UART_Main_enableInterrupt(uart_inst, + DL_UART_MAIN_INTERRUPT_BREAK_ERROR | + DL_UART_MAIN_INTERRUPT_FRAMING_ERROR | + DL_UART_MAIN_INTERRUPT_NOISE_ERROR | + DL_UART_MAIN_INTERRUPT_OVERRUN_ERROR | + DL_UART_MAIN_INTERRUPT_PARITY_ERROR | + DL_UART_MAIN_INTERRUPT_RX | + DL_UART_MAIN_INTERRUPT_RX_TIMEOUT_ERROR); + + + DL_UART_Main_enable(uart_inst); + /*Clearing and Enabling Interrupt Requests*/ + + NVIC_ClearPendingIRQ(UART0_INT_IRQn); + NVIC_EnableIRQ(UART0_INT_IRQn); + //b_UART0_init_flag=1; + } + if(uart_inst==UART1) + { + DL_UART_Main_enableInterrupt(uart_inst, + DL_UART_MAIN_INTERRUPT_BREAK_ERROR | + DL_UART_MAIN_INTERRUPT_FRAMING_ERROR | + DL_UART_MAIN_INTERRUPT_NOISE_ERROR | + DL_UART_MAIN_INTERRUPT_OVERRUN_ERROR | + DL_UART_MAIN_INTERRUPT_PARITY_ERROR | + DL_UART_MAIN_INTERRUPT_RX | + DL_UART_MAIN_INTERRUPT_RX_TIMEOUT_ERROR); + + + DL_UART_Main_enable(uart_inst); + /*Clearing and Enabling Interrupt Requests*/ + + NVIC_ClearPendingIRQ(UART1_INT_IRQn); + NVIC_EnableIRQ(UART1_INT_IRQn); + //b_UART1_init_flag=1; + } + else if(uart_inst==UART2) + { + + + DL_UART_Main_enableInterrupt(uart_inst, + DL_UART_MAIN_INTERRUPT_BREAK_ERROR | + DL_UART_MAIN_INTERRUPT_FRAMING_ERROR | + DL_UART_MAIN_INTERRUPT_NOISE_ERROR | + DL_UART_MAIN_INTERRUPT_OVERRUN_ERROR | + DL_UART_MAIN_INTERRUPT_PARITY_ERROR | + DL_UART_MAIN_INTERRUPT_RX | + DL_UART_MAIN_INTERRUPT_RX_TIMEOUT_ERROR); + + + DL_UART_Main_enable(uart_inst); + /*Clearing and Enabling Interrupt Requests*/ + + NVIC_ClearPendingIRQ(UART2_INT_IRQn); + NVIC_EnableIRQ(UART2_INT_IRQn); + //b_UART2_init_flag=1; + } + + return STATUS_SUCCESS;//TODO: FIX RETURN BUG +} + + +/* +IVEC_McalCommonErr_e _prvMCAL_UartPinInit(McalUartHandle_s *pxUartHandle) +{ + int l_i32Ret; + IVEC_MCAL_FUNC_ENTRY(LOG_STRING); + McalCommonErr_e l_xFuncStatus = commonMCAL_SUCCESS; + if (pxUartHandle == NULL) + { + l_xFuncStatus = commonMCAL_INVALID_PARAM; + goto exit; + } + if(pxUartHandle->eUartPortNumber == mcalUART_PORT1) + goto exit; + else if(pxUartHandle->eUartPortNumber == mcalUART_PORT2) + { + l_i32Ret = ql_pin_set_func(pxUartHandle->u8UartTxPin, 3); + l_i32Ret = ql_pin_set_func(pxUartHandle->u8UartRxPin, 3); + if (l_i32Ret != QL_UART_SUCCESS) + { + l_xFuncStatus = commonMCAL_INIT_FAIL; + goto exit; + } + } + else if(pxUartHandle->eUartPortNumber == mcalUART_PORT3) + { + l_i32Ret = ql_pin_set_func(pxUartHandle->u8UartTxPin, 4); + l_i32Ret = ql_pin_set_func(pxUartHandle->u8UartRxPin, 4); + if (l_i32Ret != QL_UART_SUCCESS) + { + l_xFuncStatus = commonMCAL_INIT_FAIL; + goto exit; + } + } +exit: + IVEC_MCAL_FUNC_EXIT(LOG_STRING); + return l_xFuncStatus; +}*/ + +/** + * @brief Function to trigger the UART interrupt that is configured in the function pointer pvUartRecvCallback in \link McalUartHandle_s \endlink handle. + * @param [in] ind_type This is used as indication to the uart callback function. See \link IVEC_McalUartEvents_e \endlink + * @param [in] port UART Port number. + * @param [in] size Size of Data. + * @return nothing. + */ +#if 0 +static void __prvMCAL_UartNotifyRecvCb(uint32 ind_type, ql_uart_port_number_e port, uint32 size) +{ + IVEC_MCAL_LOG(LOG_STRING, "Uart Recv Callback:%d", ind_type); + for (int i = 0;i < IVEC_MCAL_UART_MAX_PORT; i++) + { + if (g_pxUartHandles[i] != NULL && port == (ql_uart_port_number_e)g_pxUartHandles[i]->eUartPortNumber) + { + if (g_pxUartHandles[i]->pvUartRecvCallback != NULL) + g_pxUartHandles[i]->pvUartRecvCallback((IVEC_McalUartEvents_e)ind_type&0xffff, NULL, size); + break; + } + } +} +#endif + +/** + * @brief Function to register UART handle used for registering UART receive callback fucntion. + * @warning This is a private function. It should not be call outside the file \link ivec_mcal_uart.c \endlink. + * @param pxUartHandle pointer to \link McalUartHandle_s \endlink + * @return Nothing + */ +static void __prvMCAL_UartRegisterHandle(McalUartHandle_s* pxUartHandle) +{ + g_pxUartHandles[pxUartHandle->eUartPortNumber] = pxUartHandle; +} +/** + * @brief Function to Init UART peripheral + * @pre Need to configure UART configuration/properties in \link McalUartHandle_s \endlink + * @param pxUartHandle pointer to \link McalUartHandle_s \endlink + * @return \link IVEC_McalCommonErr_e \endlink returns a status based on the success or failure of the UART Init operation. + */ +IVEC_McalCommonErr_e xMCAL_UartInit(McalUartHandle_s* pxUartHandle) +{ + IVEC_MCAL_FUNC_ENTRY(LOG_STRING); + IVEC_McalCommonErr_e l_xFuncStatus = commonMCAL_SUCCESS; + if (pxUartHandle == NULL) + { + l_xFuncStatus = commonMCAL_INVALID_PARAM; + goto exit; + } + __prvMCAL_UartRegisterHandle(pxUartHandle); + + + int l_i32Ret = uart_init(pxUartHandle, pxUartHandle->xUartConfig.eUartBaudrate); + if (l_i32Ret != STATUS_SUCCESS) + { + l_xFuncStatus = commonMCAL_INIT_FAIL; + goto exit; + } + +exit: + IVEC_MCAL_FUNC_EXIT(LOG_STRING); + return l_xFuncStatus; +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// +// +///** +// * @file ivec_mcal_uart.c +// * @author Akshat Dabas (akshat@vecmocon.com) +// * @brief This source file contains API and Private members for UART Functionality +// * @version 0.1.0 +// * @date 2024-Feb-17 +// * +// * @copyright Copyright (c) 2024 +// * +// */ +// +//#include "../Core/Include/ivec_mcal_uart.h" +//#include "string.h" +// +///*GENERALIZED UART PERIPHERAL CONFIG*/ +// +///*=======================================================================================PRIVATE_MEMBERS======================================================================================*/ +// +//static volatile bool b_UART1_init_flag=0; +// +//static volatile bool b_UART3_init_flag=0; +//#define BUFFER_SIZE 100U +// +//static volatile uint8_t u8rxbuffer1[BUFFER_SIZE]={0}; +// +//static volatile uint8_t u8rxbuffer3[BUFFER_SIZE]={0}; +// +//static volatile int i32bufferIdx1=0; +// +//static volatile int i32bufferIdx3=0; +// +// +//static const DL_UART_Main_ClockConfig gUART_0ClockConfig = { +// .clockSel = DL_UART_MAIN_CLOCK_BUSCLK, +// .divideRatio = DL_UART_MAIN_CLOCK_DIVIDE_RATIO_1 +//}; +// +//static const DL_UART_Main_Config gUART_0Config = { +// .mode = DL_UART_MAIN_MODE_RS485,//DL_UART_MAIN_MODE_NORMAL, +// .direction = DL_UART_MAIN_DIRECTION_TX_RX, +// .flowControl = DL_UART_MAIN_FLOW_CONTROL_NONE, +// .parity = DL_UART_MAIN_PARITY_NONE, +// .wordLength = DL_UART_MAIN_WORD_LENGTH_8_BITS, +// .stopBits = DL_UART_MAIN_STOP_BITS_ONE +//}; +// +//static void _prv_vrxcallback(); +//static uint8_t _prv_u8MCAL_uart_receive(UART_Regs *uart_inst); +// +///*____________________________________________________________________________________________________________________________________________________________________________________________*/ +// +// +///*============================================================================================================================================================================================= +// PRIVATE_DECLARATIONS +//==============================================================================================================================================================================================*/ +// +///** +// * @brief Default Interrupt Callback for UART +// * +// */ +//void UART3_IRQHandler() +//{ +// _prv_vrxcallback(); +//} +// +//void UART1_IRQHandler() +//{ +// _prv_vrxcallback(); +//} +///** +// * @brief Function to read byte by byte in IRQ Handler +// * +// */ +//void _prv_vrxcallback() +//{ +// switch (DL_UART_Main_getPendingInterrupt(UART1)) +// { +// case DL_UART_MAIN_IIDX_RX: +// +// if(i32bufferIdx1>BUFFER_SIZE-1) +// { +// i32bufferIdx1=0; +// } +// while (!DL_UART_Main_isRXFIFOEmpty(UART1)) { +// u8rxbuffer1[i32bufferIdx1++] = DL_UART_Main_receiveData(UART1); +// } +//// u8rxbuffer1[i32bufferIdx1]=_prv_u8MCAL_uart_receive(UART1); +//// i32bufferIdx1++; +// break; +// +// case DL_UART_MAIN_IIDX_OVERRUN_ERROR: +// __asm("nop"); +// break; +// case DL_UART_MAIN_IIDX_BREAK_ERROR: +// __asm("nop"); +// break; +// case DL_UART_MAIN_IIDX_PARITY_ERROR: +// __asm("nop"); +// break; +// case DL_UART_MAIN_IIDX_FRAMING_ERROR: +// __asm("nop"); +// break; +// case DL_UART_MAIN_IIDX_RX_TIMEOUT_ERROR: +// __asm("nop"); +// break; +// case DL_UART_MAIN_IIDX_NOISE_ERROR: +// __asm("nop"); +// break; +// default: +// break; +// } +// +// switch (DL_UART_Main_getPendingInterrupt(UART3)) +// { +// case DL_UART_MAIN_IIDX_RX: +// +// if(i32bufferIdx3>BUFFER_SIZE-1) +// { +// i32bufferIdx3=0; +// } +// u8rxbuffer3[i32bufferIdx3]=_prv_u8MCAL_uart_receive(UART3); +// i32bufferIdx3++; +// break; +// +// case DL_UART_MAIN_IIDX_OVERRUN_ERROR: +// __asm("nop"); +// break; +// case DL_UART_MAIN_IIDX_BREAK_ERROR: +// __asm("nop"); +// break; +// case DL_UART_MAIN_IIDX_PARITY_ERROR: +// __asm("nop"); +// break; +// case DL_UART_MAIN_IIDX_FRAMING_ERROR: +// __asm("nop"); +// break; +// case DL_UART_MAIN_IIDX_RX_TIMEOUT_ERROR: +// __asm("nop"); +// break; +// case DL_UART_MAIN_IIDX_NOISE_ERROR: +// __asm("nop"); +// break; +// default: +// break; +// } +// +//} +// +// +///** +// * @brief Receive in static buffer Function for UART +// * +// * @param uart_inst +// * @return uint8_t +// */ +//static uint8_t _prv_u8MCAL_uart_receive(UART_Regs *uart_inst) +//{ +// +// uint8_t temp; +// temp=DL_UART_receiveData(uart_inst); +// return temp; +// +//} +///*____________________________________________________________________________________________________________________________________________________________________________________________*/ +// +// +// +// +///*============================================================================================================================================================================================= +// API +//==============================================================================================================================================================================================*/ +// +// +///** +// * @brief Initialize UART Peripheral +// * +// * @param uart_inst Pointer to UART config registers +// * @param xBaud enum for desired UART baud rate +// * @return xCoreStatus_t +// */ +// +//xCoreStatus_t xMCAL_uart_init(UART_Regs *uart_inst, xUart_baud_t xBaud) +//{ +//// DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM21, IOMUX_PINCM21_PF_UART0_TX); +//// DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM22, IOMUX_PINCM22_PF_UART0_RX); +// +//// DL_GPIO_initPeripheralOutputFunction(IOMUX_PINCM20, IOMUX_PINCM20_PF_UART1_RX); +//// DL_GPIO_initPeripheralInputFunction(IOMUX_PINCM19, IOMUX_PINCM19_PF_UART1_TX); +//// assert(uart_inst == UART1 || uart_inst == UART3);IOMUX_PINCM16 +//// assert(xBaud == BAUD_115200 || xBaud == BAUD_9600); +//// assert(!(b_UART1_init_flag == 1 && b_UART3_init_flag == 1)); +// +// +// DL_UART_Main_setClockConfig(uart_inst, (DL_UART_Main_ClockConfig *) &gUART_0ClockConfig); +// DL_UART_Main_init(uart_inst, (DL_UART_Main_Config *) &gUART_0Config); +// +// /* Configure baud rate by setting oversampling and baud rate divisors.*/ +// +// if(xBaud==BAUD_115200) +// { +// +// /* +// * Target baud rate: 115200 +// * Actual baud rate: 115211.52 +// */ +// +// DL_UART_Main_setOversampling(uart_inst, DL_UART_OVERSAMPLING_RATE_16X); +// DL_UART_Main_setBaudRateDivisor(uart_inst, 17, 23); +// +// } +// else if(xBaud==BAUD_9600) +// { +// DL_UART_Main_setOversampling(uart_inst, DL_UART_OVERSAMPLING_RATE_16X); +// DL_UART_Main_setBaudRateDivisor(uart_inst, 208, 21); +// +// } +// +// /* Configure Interrupts */ +// +//// if(uart_inst==UART1) +//// { +// DL_UART_Main_enableInterrupt(uart_inst, +// DL_UART_MAIN_INTERRUPT_BREAK_ERROR | +// DL_UART_MAIN_INTERRUPT_FRAMING_ERROR | +// DL_UART_MAIN_INTERRUPT_NOISE_ERROR | +// DL_UART_MAIN_INTERRUPT_OVERRUN_ERROR | +// DL_UART_MAIN_INTERRUPT_PARITY_ERROR | +// DL_UART_MAIN_INTERRUPT_RX | +// DL_UART_MAIN_INTERRUPT_RX_TIMEOUT_ERROR); +// +// +// DL_UART_Main_enable(uart_inst); +// /*Clearing and Enabling Interrupt Requests*/ +// +// NVIC_ClearPendingIRQ(UART1_INT_IRQn); +// NVIC_EnableIRQ(UART1_INT_IRQn); +// b_UART1_init_flag=1; +// //} +//// else if(uart_inst==UART3) +//// { +//// +//// +//// DL_UART_Main_enableInterrupt(uart_inst, +//// DL_UART_MAIN_INTERRUPT_BREAK_ERROR | +//// DL_UART_MAIN_INTERRUPT_FRAMING_ERROR | +//// DL_UART_MAIN_INTERRUPT_NOISE_ERROR | +//// DL_UART_MAIN_INTERRUPT_OVERRUN_ERROR | +//// DL_UART_MAIN_INTERRUPT_PARITY_ERROR | +//// DL_UART_MAIN_INTERRUPT_RX | +//// DL_UART_MAIN_INTERRUPT_RX_TIMEOUT_ERROR); +//// +//// +//// DL_UART_Main_enable(uart_inst); +//// /*Clearing and Enabling Interrupt Requests*/ +//// +//// NVIC_ClearPendingIRQ(UART3_INT_IRQn); +//// NVIC_EnableIRQ(UART3_INT_IRQn); +//// b_UART3_init_flag=1; +//// } +// +// return STATUS_SUCCESS;//TODO: FIX RETURN BUG +//} +// +///** +// * @brief +// * +// * @param uart_inst Pointer to UART config registers +// * @return xCoreStatus_t +// */ +//xCoreStatus_t xMCAL_uart_deinit(UART_Regs* uart_inst) +//{ +//// assert(b_UART1_init_flag == 1 || b_UART3_init_flag == 1); +//// assert(uart_inst == UART1 || uart_inst == UART3); +// +//// if(uart_inst==UART1) +//// { +// NVIC_DisableIRQ(UART1_INT_IRQn); +// DL_UART_disablePower(uart_inst); +// b_UART1_init_flag=0; +// //} +//// else if(uart_inst==UART3) +//// { +//// NVIC_DisableIRQ(UART3_INT_IRQn); +//// DL_UART_disablePower(uart_inst); +//// b_UART3_init_flag=0; +//// } +// return STATUS_SUCCESS; +//} +// +///** +// * @brief Function to send received data to main +// * +// * @param uart_inst Pointer to UART config registers +// * @param u8rxdata Pointer to data buffer to receive data in +// * @return xCoreStatus_t +// */ +//xCoreStatus_t xMCAL_uart_getdata(UART_Regs *uart_inst, uint8_t *u8rxdata, uint32_t u32rxbuffer_size) +//{ +//// assert(b_UART1_init_flag == 1 || b_UART3_init_flag == 1); +//// assert(uart_inst == UART1 || uart_inst == UART3); +// +//// if((i32bufferIdx1==0)&&(i32bufferIdx3==0)) +//// { +//// return STATUS_ERROR; +//// } +// +// +// //if(uart_inst==UART1) +// //{ +// +//// for(int i=0;iy__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/Documentation/html/bdwn.png b/Documentation/html/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/Documentation/html/dir_a4cb02fe4f7b73e09a7c4d547d8e5b78.html b/Documentation/html/dir_a4cb02fe4f7b73e09a7c4d547d8e5b78.html new file mode 100644 index 0000000..5d2f314 --- /dev/null +++ b/Documentation/html/dir_a4cb02fe4f7b73e09a7c4d547d8e5b78.html @@ -0,0 +1,92 @@ + + + + + + + +MCAL_DRIVER: D:/MSPM0G3507_MCAL/mspmog3507_mcal/Core/Source Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
MCAL_DRIVER +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Source Directory Reference
+
+
+ + + + + + + + + + +

+Files

file  gpio.c
 
file  ivec_mcal_adc_dma.c
 
file  ivec_mcal_timer.c
 
file  uart.c
 
+
+ + + + diff --git a/Documentation/html/dir_c6310732a22f63c0c2fc5595561e68f1.html b/Documentation/html/dir_c6310732a22f63c0c2fc5595561e68f1.html new file mode 100644 index 0000000..7727a5b --- /dev/null +++ b/Documentation/html/dir_c6310732a22f63c0c2fc5595561e68f1.html @@ -0,0 +1,86 @@ + + + + + + + +MCAL_DRIVER: D:/MSPM0G3507_MCAL/mspmog3507_mcal/Core Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
MCAL_DRIVER +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
Core Directory Reference
+
+
+ + + + +

+Directories

directory  Source
 
+
+ + + + diff --git a/Documentation/html/doc.png b/Documentation/html/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/Documentation/html/doxygen.css b/Documentation/html/doxygen.css new file mode 100644 index 0000000..5bc13aa --- /dev/null +++ b/Documentation/html/doxygen.css @@ -0,0 +1,1766 @@ +/* The standard CSS for doxygen 1.8.16 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #FFFFFF; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +/* +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTableHead tr { +} + +table.markdownTableBodyLeft td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft { + text-align: left +} + +th.markdownTableHeadRight { + text-align: right +} + +th.markdownTableHeadCenter { + text-align: center +} +*/ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/Documentation/html/doxygen.png b/Documentation/html/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff17d807fd8aa003bed8bb2a69e8f0909592fd1 GIT binary patch literal 3779 zcmV;!4m|ORP)tMIv#Q0*~7*`IBSO7_x;@a8#Zk6_PeKR_s92J&)(m+);m9Iz3blw)z#Gi zP!9lj4$%+*>Hz@HCmM9L9|8c+0u=!H$O3?R0Kgx|#WP<6fKfC8fM-CQZT|_r@`>VO zX^Hgb|9cJqpdJA5$MCEK`F_2@2Y@s>^+;pF`~jdI0Pvr|vl4`=C)EH@1IFe7pdJ8F zH(qGi004~QnF)Ggga~8v08kGAs2hKTATxr7pwfNk|4#_AaT>w8P6TV+R2kbS$v==} zAjf`s0g#V8lB+b3)5oEI*q+{Yt$MZDruD2^;$+(_%Qn+%v0X-bJO=;@kiJ^ygLBnC z?1OVv_%aex1M@jKU|Z~$eI?PoF4Vj>fDzyo zAiLfpXY*a^Sj-S5D0S3@#V$sRW)g)_1e#$%8xdM>Jm7?!h zu0P2X=xoN>^!4DoPRgph2(2va07yfpXF+WH7EOg1GY%Zn z7~1A<(z7Q$ktEXhW_?GMpHp9l_UL18F3KOsxu81pqoBiNbFSGsof-W z6~eloMoz=4?OOnl2J268x5rOY`dCk0us(uS#Ud4yqOr@?=Q57a}tit|BhY>}~frH1sP`ScHS_d)oqH^lYy zZ%VP`#10MlE~P?cE(%(#(AUSv_T{+;t@$U}El}(1ig`vZo`Rm;+5&(AYzJ^Ae=h2X z@Re%vHwZU>|f0NI&%$*4eJweC5OROQrpPMA@*w|o z()A==l}(@bv^&>H1Ob3C=<^|hob?0+xJ?QQ3-ueQC}zy&JQNib!OqSO@-=>XzxlSF zAZ^U*1l6EEmg3r};_HY>&Jo_{dOPEFTWPmt=U&F#+0(O59^UIlHbNX+eF8UzyDR*T z(=5X$VF3!gm@RooS-&iiUYGG^`hMR(07zr_xP`d!^BH?uD>Phl8Rdifx3Af^Zr`Ku ztL+~HkVeL#bJ)7;`=>;{KNRvjmc}1}c58Sr#Treq=4{xo!ATy|c>iRSp4`dzMMVd@ zL8?uwXDY}Wqgh4mH`|$BTXpUIu6A1-cSq%hJw;@^Zr8TP=GMh*p(m(tN7@!^D~sl$ zz^tf4II4|};+irE$Fnm4NTc5%p{PRA`%}Zk`CE5?#h3|xcyQsS#iONZ z6H(@^i9td!$z~bZiJLTax$o>r(p}3o@< zyD7%(>ZYvy=6$U3e!F{Z`uSaYy`xQyl?b{}eg|G3&fz*`QH@mDUn)1%#5u`0m$%D} z?;tZ0u(mWeMV0QtzjgN!lT*pNRj;6510Wwx?Yi_=tYw|J#7@(Xe7ifDzXuK;JB;QO z#bg~K$cgm$@{QiL_3yr}y&~wuv=P=#O&Tj=Sr)aCUlYmZMcw?)T?c%0rUe1cS+o!qs_ zQ6Gp)-{)V!;=q}llyK3|^WeLKyjf%y;xHku;9(vM!j|~<7w1c*Mk-;P{T&yG) z@C-8E?QPynNQ<8f01D`2qexcVEIOU?y}MG)TAE6&VT5`rK8s(4PE;uQ92LTXUQ<>^ ztyQ@=@kRdh@ebUG^Z6NWWIL;_IGJ2ST>$t!$m$qvtj0Qmw8moN6GUV^!QKNK zHBXCtUH8)RY9++gH_TUV4^=-j$t}dD3qsN7GclJ^Zc&(j6&a_!$jCf}%c5ey`pm~1)@{yI3 zTdWyB+*X{JFw#z;PwRr5evb2!ueWF;v`B0HoUu4-(~aL=z;OXUUEtG`_$)Oxw6FKg zEzY`CyKaSBK3xt#8gA|r_|Kehn_HYVBMpEwbn9-fI*!u*eTA1ef8Mkl1=!jV4oYwWYM}i`A>_F4nhmlCIC6WLa zY%;4&@AlnaG11ejl61Jev21|r*m+?Kru3;1tFDl}#!OzUp6c>go4{C|^erwpG*&h6bspUPJag}oOkN2912Y3I?(eRc@U9>z#HPBHC?nps7H5!zP``90!Q1n80jo+B3TWXp!8Pe zwuKuLLI6l3Gv@+QH*Y}2wPLPQ1^EZhT#+Ed8q8Wo z1pTmIBxv14-{l&QVKxAyQF#8Q@NeJwWdKk>?cpiJLkJr+aZ!Me+Cfp!?FWSRf^j2k z73BRR{WSKaMkJ>1Nbx5dan5hg^_}O{Tj6u%iV%#QGz0Q@j{R^Ik)Z*+(YvY2ziBG)?AmJa|JV%4UT$k`hcOg5r9R?5>?o~JzK zJCrj&{i#hG>N7!B4kNX(%igb%kDj0fOQThC-8mtfap82PNRXr1D>lbgg)dYTQ(kbx z`Ee5kXG~Bh+BHQBf|kJEy6(ga%WfhvdQNDuOfQoe377l#ht&DrMGeIsI5C<&ai zWG$|hop2@@q5YDa)_-A?B02W;#fH!%k`daQLEItaJJ8Yf1L%8x;kg?)k)00P-lH+w z)5$QNV6r2$YtnV(4o=0^3{kmaXn*Dm0F*fU(@o)yVVjk|ln8ea6BMy%vZAhW9|wvA z8RoDkVoMEz1d>|5(k0Nw>22ZT){V<3$^C-cN+|~hKt2)){+l-?3m@-$c?-dlzQ)q- zZ)j%n^gerV{|+t}9m1_&&Ly!9$rtG4XX|WQ8`xYzGC~U@nYh~g(z9)bdAl#xH)xd5a=@|qql z|FzEil{P5(@gy!4ek05i$>`E^G~{;pnf6ftpLh$h#W?^#4UkPfa;;?bsIe&kz!+40 zI|6`F2n020)-r`pFaZ38F!S-lJM-o&inOw|66=GMeP@xQU5ghQH{~5Uh~TMTd;I9` z>YhVB`e^EVj*S7JF39ZgNf}A-0DwOcTT63ydN$I3b?yBQtUI*_fae~kPvzoD$zjX3 zoqBe#>12im4WzZ=f^4+u=!lA|#r%1`WB0-6*3BL#at`47#ebPpR|D1b)3BjT34nYY z%Ds%d?5$|{LgOIaRO{{oC&RK`O91$fqwM0(C_TALcozu*fWHb%%q&p-q{_8*2Zsi^ zh1ZCnr^UYa;4vQEtHk{~zi>wwMC5o{S=$P0X681y`SXwFH?Ewn{x-MOZynmc)JT5v zuHLwh;tLfxRrr%|k370}GofLl7thg>ACWWY&msqaVu&ry+`7+Ss>NL^%T1|z{IGMA zW-SKl=V-^{(f!Kf^#3(|T2W47d(%JVCI4JgRrT1pNz>+ietmFToNv^`gzC@&O-)+i zPQ~RwK8%C_vf%;%e>NyTp~dM5;!C|N0Q^6|CEb7Bw=Vz~$1#FA;Z*?mKSC)Hl-20s t8QyHj(g6VK0RYbl8UjE)0O0w=e*@m04r>stuEhWV002ovPDHLkV1hl;dM*F} literal 0 HcmV?d00001 diff --git a/Documentation/html/dynsections.js b/Documentation/html/dynsections.js new file mode 100644 index 0000000..ea0a7b3 --- /dev/null +++ b/Documentation/html/dynsections.js @@ -0,0 +1,120 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +MCAL_DRIVER: File List + + + + + + + + + +
+
+ + + + + + +
+
MCAL_DRIVER +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+
[detail level 123]
+ + + + + + +
  Core
  Source
 gpio.c
 ivec_mcal_adc_dma.c
 ivec_mcal_timer.c
 uart.c
+
+
+ + + + diff --git a/Documentation/html/folderclosed.png b/Documentation/html/folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/Documentation/html/globals.html b/Documentation/html/globals.html new file mode 100644 index 0000000..8c54909 --- /dev/null +++ b/Documentation/html/globals.html @@ -0,0 +1,278 @@ + + + + + + + +MCAL_DRIVER: Globals + + + + + + + + + +
+
+ + + + + + +
+
MCAL_DRIVER +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
+ +

- _ -

+ + +

- a -

+ + +

- f -

+ + +

- g -

+ + +

- m -

    +
  • mcu_gpioDeInitMcal() +: gpio.c +
  • +
  • mcu_gpioInitAllMcal() +: gpio.c +
  • +
  • mcu_gpioReadMcal() +: gpio.c +
  • +
  • mcu_gpioToggleMcal() +: gpio.c +
  • +
  • mcu_gpioWriteMcal() +: gpio.c +
  • +
  • mcu_set_gpioDirectionMcal() +: gpio.c +
  • +
+ + +

- t -

+ + +

- v -

+ + +

- x -

+
+ + + + diff --git a/Documentation/html/globals_func.html b/Documentation/html/globals_func.html new file mode 100644 index 0000000..2c8190c --- /dev/null +++ b/Documentation/html/globals_func.html @@ -0,0 +1,201 @@ + + + + + + + +MCAL_DRIVER: Globals + + + + + + + + + +
+
+ + + + + + +
+
MCAL_DRIVER +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- _ -

+ + +

- a -

+ + +

- m -

    +
  • mcu_gpioDeInitMcal() +: gpio.c +
  • +
  • mcu_gpioInitAllMcal() +: gpio.c +
  • +
  • mcu_gpioReadMcal() +: gpio.c +
  • +
  • mcu_gpioToggleMcal() +: gpio.c +
  • +
  • mcu_gpioWriteMcal() +: gpio.c +
  • +
  • mcu_set_gpioDirectionMcal() +: gpio.c +
  • +
+ + +

- t -

+ + +

- v -

+ + +

- x -

+
+ + + + diff --git a/Documentation/html/globals_vars.html b/Documentation/html/globals_vars.html new file mode 100644 index 0000000..b79a49c --- /dev/null +++ b/Documentation/html/globals_vars.html @@ -0,0 +1,143 @@ + + + + + + + +MCAL_DRIVER: Globals + + + + + + + + + +
+
+ + + + + + +
+
MCAL_DRIVER +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff --git a/Documentation/html/gpio_8c.html b/Documentation/html/gpio_8c.html new file mode 100644 index 0000000..f5eebec --- /dev/null +++ b/Documentation/html/gpio_8c.html @@ -0,0 +1,294 @@ + + + + + + + +MCAL_DRIVER: D:/MSPM0G3507_MCAL/mspmog3507_mcal/Core/Source/gpio.c File Reference + + + + + + + + + +
+
+ + + + + + +
+
MCAL_DRIVER +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
gpio.c File Reference
+
+
+
#include <stdlib.h>
+#include "../Include/gpio.h"
+
+ + + + + + + + + + + + + +

+Functions

int8_t mcu_gpioInitAllMcal (void)
 
int8_t mcu_gpioDeInitMcal (GPIO_Regs *GPIOx, uint32_t GPIO_Pin)
 
void mcu_gpioWriteMcal (void *port, uint32_t pin, uint32_t state)
 
uint16_t mcu_gpioReadMcal (void *port, uint32_t pin)
 
void mcu_gpioToggleMcal (void *port, uint32_t pin)
 
void mcu_set_gpioDirectionMcal (uint32_t pincmIndex, bool direction)
 
+ + + +

+Variables

static uint32_t GPIOInitCounter = 0
 
+

Function Documentation

+ +

◆ mcu_gpioDeInitMcal()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int8_t mcu_gpioDeInitMcal (GPIO_Regs * GPIOx,
uint32_t GPIO_Pin 
)
+
+ +
+
+ +

◆ mcu_gpioInitAllMcal()

+ +
+
+ + + + + + + + +
int8_t mcu_gpioInitAllMcal (void )
+
+ +
+
+ +

◆ mcu_gpioReadMcal()

+ +
+
+ + + + + + + + + + + + + + + + + + +
uint16_t mcu_gpioReadMcal (void * port,
uint32_t pin 
)
+
+ +
+
+ +

◆ mcu_gpioToggleMcal()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void mcu_gpioToggleMcal (void * port,
uint32_t pin 
)
+
+ +
+
+ +

◆ mcu_gpioWriteMcal()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void mcu_gpioWriteMcal (void * port,
uint32_t pin,
uint32_t state 
)
+
+ +
+
+ +

◆ mcu_set_gpioDirectionMcal()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void mcu_set_gpioDirectionMcal (uint32_t pincmIndex,
bool direction 
)
+
+ +
+
+

Variable Documentation

+ +

◆ GPIOInitCounter

+ +
+
+ + + + + +
+ + + + +
uint32_t GPIOInitCounter = 0
+
+static
+
+ +
+
+
+ + + + diff --git a/Documentation/html/index.html b/Documentation/html/index.html new file mode 100644 index 0000000..7106ef0 --- /dev/null +++ b/Documentation/html/index.html @@ -0,0 +1,76 @@ + + + + + + + +MCAL_DRIVER: Main Page + + + + + + + + + +
+
+ + + + + + +
+
MCAL_DRIVER +
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
MCAL_DRIVER Documentation
+
+
+
+ + + + diff --git a/Documentation/html/ivec__mcal__adc__dma_8c.html b/Documentation/html/ivec__mcal__adc__dma_8c.html new file mode 100644 index 0000000..b199e9b --- /dev/null +++ b/Documentation/html/ivec__mcal__adc__dma_8c.html @@ -0,0 +1,604 @@ + + + + + + + +MCAL_DRIVER: D:/MSPM0G3507_MCAL/mspmog3507_mcal/Core/Source/ivec_mcal_adc_dma.c File Reference + + + + + + + + + +
+
+ + + + + + +
+
MCAL_DRIVER +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
ivec_mcal_adc_dma.c File Reference
+
+
+
#include <Core\Include\ivec_mcal_adc_dma.h>
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

IVEC_McalStatus_e xMCAL_AdcInit (ADC12_Regs *const adc_inst)
 Initlization ADC with DMA. More...
 
IVEC_McalStatus_e xMCAL_AdcDeInit (ADC12_Regs *const adc_inst)
 De-Initialize the ADC peripheral to their default reset values. More...
 
IVEC_McalStatus_e xMCAL_AdcStart (ADC12_Regs *const adc_inst)
 Enable ADC, start conversion of regular group. More...
 
IVEC_McalStatus_e xMCAL_AdcStop (ADC12_Regs *const adc_inst)
 Stop ADC conversion of regular group. More...
 
IVEC_McalStatus_e xMCAL_DmaInit (void)
 Initlization of DMA for ADC. More...
 
IVEC_McalStatus_e xMCAL_DmaDeInit (void)
 De-Initialize the DMA to their default reset values. More...
 
IVEC_McalStatus_e xMCAL_DmaStart (const uint8_t u8channel, uint16_t *p_u16adcDma)
 Enable DMA, start transfer from ADC to DMA of regular group. More...
 
IVEC_McalStatus_e xMCAL_DmaStop (void)
 Function use to set the DMA channel. More...
 
void _prv_adccallback ()
 ADC call back function. More...
 
void ADC1_IRQHandler ()
 ADC IRQ handler. More...
 
+ + + + + + + + + + + + + + + +

+Variables

static volatile bool g_u32AdcInitFlag = 0
 
static volatile bool g_u32AdcStartFlag =0
 
static volatile bool g_u32DmaFlag =0
 
static volatile bool g_u32DmaStart =0
 
static const DL_ADC12_ClockConfig gADC12_1ClockConfig
 Configuration for ADC12_0 clock. More...
 
static const DL_DMA_Config gDMA_CH0Config
 Configuration for DMA. More...
 
+

Function Documentation

+ +

◆ _prv_adccallback()

+ +
+
+ + + + + + + +
void _prv_adccallback ()
+
+ +

ADC call back function.

+
Note
Interruptions enabled in this function
+ +
+
+ +

◆ ADC1_IRQHandler()

+ +
+
+ + + + + + + +
void ADC1_IRQHandler ()
+
+ +

ADC IRQ handler.

+ +
+
+ +

◆ xMCAL_AdcDeInit()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_AdcDeInit (ADC12_Regs *const adc_inst)
+
+ +

De-Initialize the ADC peripheral to their default reset values.

+
Parameters
+ + +
adc_instADC handle
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_AdcInit()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_AdcInit (ADC12_Regs *const adc_inst)
+
+ +

Initlization ADC with DMA.

+
Note
Interruptions enabled in this function
+
Parameters
+ + +
adc_instADC handle
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_AdcStart()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_AdcStart (ADC12_Regs *const adc_inst)
+
+ +

Enable ADC, start conversion of regular group.

+
Note
Interruptions enabled in this function: None.
+
Parameters
+ + +
adc_instADC handle
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_AdcStop()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_AdcStop (ADC12_Regs *const adc_inst)
+
+ +

Stop ADC conversion of regular group.

+
Parameters
+ + +
adc_instADC handle
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_DmaDeInit()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_DmaDeInit (void )
+
+ +

De-Initialize the DMA to their default reset values.

+
Parameters
+ + +
adc_instADC handle
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_DmaInit()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_DmaInit (void )
+
+ +

Initlization of DMA for ADC.

+
Note
Interruptions enabled in this function
+
Parameters
+ + +
adc_instADC handle
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_DmaStart()

+ +
+
+ + + + + + + + + + + + + + + + + + +
IVEC_McalStatus_e xMCAL_DmaStart (const uint8_t u8channel,
uint16_t * p_u16adcDma 
)
+
+ +

Enable DMA, start transfer from ADC to DMA of regular group.

+
Note
Interruptions enabled in this function: None.
+
Parameters
+ + + +
u8Channeluse to pass the DMA channel
p_u16adcDmause to get the ADC raw
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_DmaStop()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_DmaStop (void )
+
+ +

Function use to set the DMA channel.

+
Parameters
+ + +
u8Channeluse to pass the DMA channel
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+

Variable Documentation

+ +

◆ g_u32AdcInitFlag

+ +
+
+ + + + + +
+ + + + +
volatile bool g_u32AdcInitFlag = 0
+
+static
+
+

ADC initialization flag
+

+ +
+
+ +

◆ g_u32AdcStartFlag

+ +
+
+ + + + + +
+ + + + +
volatile bool g_u32AdcStartFlag =0
+
+static
+
+

ADC start - stop flag
+

+ +
+
+ +

◆ g_u32DmaFlag

+ +
+
+ + + + + +
+ + + + +
volatile bool g_u32DmaFlag =0
+
+static
+
+

DMA initialization flag

+ +
+
+ +

◆ g_u32DmaStart

+ +
+
+ + + + + +
+ + + + +
volatile bool g_u32DmaStart =0
+
+static
+
+

DMA initialization flag

+ +
+
+ +

◆ gADC12_1ClockConfig

+ +
+
+ + + + + +
+ + + + +
const DL_ADC12_ClockConfig gADC12_1ClockConfig
+
+static
+
+Initial value:
= {
+
.clockSel = DL_ADC12_CLOCK_SYSOSC,
+
.divideRatio = DL_ADC12_CLOCK_DIVIDE_1,
+
.freqRange = DL_ADC12_CLOCK_FREQ_RANGE_24_TO_32,
+
}
+
+

Configuration for ADC12_0 clock.

+ +
+
+ +

◆ gDMA_CH0Config

+ +
+
+ + + + + +
+ + + + +
const DL_DMA_Config gDMA_CH0Config
+
+static
+
+Initial value:
= {
+
.transferMode = DL_DMA_SINGLE_TRANSFER_MODE,
+
.extendedMode = DL_DMA_NORMAL_MODE,
+
.destIncrement = DL_DMA_ADDR_UNCHANGED,
+
.srcIncrement = DL_DMA_ADDR_UNCHANGED,
+
.destWidth = DL_DMA_WIDTH_WORD,
+
.srcWidth = DL_DMA_WIDTH_WORD,
+
.trigger = ADC12_1_INST_DMA_TRIGGER,
+
.triggerType = DL_DMA_TRIGGER_TYPE_EXTERNAL,
+
}
+
+

Configuration for DMA.

+ +
+
+
+ + + + diff --git a/Documentation/html/ivec__mcal__timer_8c.html b/Documentation/html/ivec__mcal__timer_8c.html new file mode 100644 index 0000000..3de7208 --- /dev/null +++ b/Documentation/html/ivec__mcal__timer_8c.html @@ -0,0 +1,1133 @@ + + + + + + + +MCAL_DRIVER: D:/MSPM0G3507_MCAL/mspmog3507_mcal/Core/Source/ivec_mcal_timer.c File Reference + + + + + + + + + +
+
+ + + + + + +
+
MCAL_DRIVER +
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
ivec_mcal_timer.c File Reference
+
+
+
#include <..\Core\Include\ivec_mcal_timer.h>
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

IVEC_McalStatus_e xMCAL_TimerInit (GPTIMER_Regs *const pTimer_inst)
 Initlization Periodic timer. More...
 
IVEC_McalStatus_e xMCAL_TimerDeInit (GPTIMER_Regs *const pTimer_inst)
 De-Initialize the Timer peripheral to their default reset values. More...
 
IVEC_McalStatus_e xMCAL_TimergetCount (uint32_t *p_u32temp)
 To get the timer counts. More...
 
IVEC_McalStatus_e xMCAL_TimerstartCounter (void)
 Start the Timer counter. More...
 
IVEC_McalStatus_e xMCAL_TimerstopCounter (void)
 Stop the Timer stop. More...
 
IVEC_McalStatus_e xMCAL_TimersetLoadValue (GPTIMER_Regs *const pTimer_inst, uint32_t count, uint32_t *p_u32temp)
 Function use to set load value of timer. More...
 
void _prv_timGcallback ()
 Timer call back function. More...
 
void TIMG0_IRQHandler ()
 Timer IRQ handler. More...
 
IVEC_McalStatus_e xMCAL_PwmInit (GPTIMER_Regs *const Tim_inst)
 Initlization PWM timer. More...
 
IVEC_McalStatus_e xMCAL_PwmDeInit (GPTIMER_Regs *const Tim_inst)
 De-Initlization PWM timer. More...
 
IVEC_McalStatus_e xMCAL_PwmStart (void)
 Enable PWM Timer. More...
 
IVEC_McalStatus_e xMCAL_PwmStop (void)
 Disable PWM Timer. More...
 
IVEC_McalStatus_e xMCAL_InputCaptureInit (GPTIMER_Regs *const Tim_inst)
 Initlization Input Capture timer. More...
 
IVEC_McalStatus_e xMCAL_InputCaptureDeInit (GPTIMER_Regs *const Tim_inst)
 De-Initlization Input Capture timer. More...
 
IVEC_McalStatus_e xMCAL_InputCaptureStart (void)
 Enable IC timer. More...
 
IVEC_McalStatus_e xMCAL_InputCaptureStop (void)
 Disable IC timer. More...
 
void vMCAL_Calcfrequency (float *f_frequency)
 Calculate the frequency of input PWM signal. More...
 
void _prv_timAcallback ()
 Timer call back function. More...
 
void TIMA0_IRQHandler ()
 Timer IRQ handler. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Variables

static volatile bool g_u32TimerInitFlag = 0
 
static volatile bool g_u32TimerCounterFlag = 0
 
static volatile bool g_u32PwmInitflag = 0
 
static volatile bool g_u32Pwmstartflag = 0
 
static volatile bool g_u32InputCaputerflag =0
 
static volatile uint32_t g_u32CapturePeriod
 
static volatile uint32_t g_u32CaptureValue0
 
static volatile uint32_t g_u32CaptureValue1
 
static volatile uint32_t g_u32LoadValue
 
float f_frequency =0
 
static const DL_TimerA_ClockConfig gCAPTURE_0ClockConfig
 Configuration for Input capture timer. More...
 
static const DL_TimerA_CaptureCombinedConfig gCAPTURE_0CaptureConfig
 Configuration for Input capture mode channel. More...
 
static const DL_TimerG_ClockConfig gTIMER_0ClockConfig
 Configuration for Periodic Timer. More...
 
static const DL_TimerG_TimerConfig gTIMER_0TimerConfig
 Configuration for Periodic timer Mode and Period. More...
 
static const DL_TimerG_ClockConfig gPWM_0ClockConfig
 Configuration for PWM timer. More...
 
static const DL_TimerG_PWMConfig gPWM_0Config
 Configuration for PWM time MODE and Periode. More...
 
+

Function Documentation

+ +

◆ _prv_timAcallback()

+ +
+
+ + + + + + + +
void _prv_timAcallback ()
+
+ +

Timer call back function.

+
Note
f_frequency: get the calculated frequency
+ +
+
+ +

◆ _prv_timGcallback()

+ +
+
+ + + + + + + +
void _prv_timGcallback ()
+
+ +

Timer call back function.

+
Note
Interruptions enabled in this function
+ +
+
+ +

◆ TIMA0_IRQHandler()

+ +
+
+ + + + + + + +
void TIMA0_IRQHandler ()
+
+ +

Timer IRQ handler.

+ +
+
+ +

◆ TIMG0_IRQHandler()

+ +
+
+ + + + + + + +
void TIMG0_IRQHandler ()
+
+ +

Timer IRQ handler.

+ +
+
+ +

◆ vMCAL_Calcfrequency()

+ +
+
+ + + + + + + + +
void vMCAL_Calcfrequency (float * f_frequency)
+
+ +

Calculate the frequency of input PWM signal.

+
Parameters
+ + +
f_frequencyto get Calculate frequency
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_InputCaptureDeInit()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_InputCaptureDeInit (GPTIMER_Regs *const Tim_inst)
+
+ +

De-Initlization Input Capture timer.

+
Parameters
+ + +
Tim_instTimer handle
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_InputCaptureInit()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_InputCaptureInit (GPTIMER_Regs *const Tim_inst)
+
+ +

Initlization Input Capture timer.

+
Note
Interruptions enabled in this function
+
Parameters
+ + +
Tim_instTimer handle
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_InputCaptureStart()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_InputCaptureStart (void )
+
+ +

Enable IC timer.

+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_InputCaptureStop()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_InputCaptureStop (void )
+
+ +

Disable IC timer.

+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_PwmDeInit()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_PwmDeInit (GPTIMER_Regs *const Tim_inst)
+
+ +

De-Initlization PWM timer.

+
Parameters
+ + +
Tim_instTimer handle
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_PwmInit()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_PwmInit (GPTIMER_Regs *const Tim_inst)
+
+ +

Initlization PWM timer.

+
Note
Interruptions enabled in this function
+
Parameters
+ + +
Tim_instTimer handle
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_PwmStart()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_PwmStart (void )
+
+ +

Enable PWM Timer.

+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_PwmStop()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_PwmStop (void )
+
+ +

Disable PWM Timer.

+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_TimerDeInit()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_TimerDeInit (GPTIMER_Regs *const pTimer_inst)
+
+ +

De-Initialize the Timer peripheral to their default reset values.

+
Parameters
+ + +
pTimer_instTimer handle
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_TimergetCount()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_TimergetCount (uint32_t * p_u32temp)
+
+ +

To get the timer counts.

+
Parameters
+ + +
p_u32tempto get the timer counts
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_TimerInit()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_TimerInit (GPTIMER_Regs *const pTimer_inst)
+
+ +

Initlization Periodic timer.

+
Note
Interruptions enabled in this function
+
Parameters
+ + +
pTimer_instTimer handle
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_TimersetLoadValue()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
IVEC_McalStatus_e xMCAL_TimersetLoadValue (GPTIMER_Regs *const pTimer_inst,
uint32_t count,
uint32_t * p_u32temp 
)
+
+ +

Function use to set load value of timer.

+
Parameters
+ + + + +
pTimer_instTimer handle
u8Channeluse to pass the load value
p_u32tempuse to get loaded value
+
+
+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_TimerstartCounter()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_TimerstartCounter (void )
+
+ +

Start the Timer counter.

+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+ +

◆ xMCAL_TimerstopCounter()

+ +
+
+ + + + + + + + +
IVEC_McalStatus_e xMCAL_TimerstopCounter (void )
+
+ +

Stop the Timer stop.

+
Return values
+ + +
IVECMCAL status
+
+
+ +
+
+

Variable Documentation

+ +

◆ f_frequency

+ +
+
+ + + + +
float f_frequency =0
+
+

To get calculated frequency

+ +
+
+ +

◆ g_u32CapturePeriod

+ +
+
+ + + + + +
+ + + + +
volatile uint32_t g_u32CapturePeriod
+
+static
+
+

To get the first capture period
+

+ +
+
+ +

◆ g_u32CaptureValue0

+ +
+
+ + + + + +
+ + + + +
volatile uint32_t g_u32CaptureValue0
+
+static
+
+

To get the first capture value

+ +
+
+ +

◆ g_u32CaptureValue1

+ +
+
+ + + + + +
+ + + + +
volatile uint32_t g_u32CaptureValue1
+
+static
+
+

To get the second capture value
+

+ +
+
+ +

◆ g_u32InputCaputerflag

+ +
+
+ + + + + +
+ + + + +
volatile bool g_u32InputCaputerflag =0
+
+static
+
+

Input Capture initialization flag

+ +
+
+ +

◆ g_u32LoadValue

+ +
+
+ + + + + +
+ + + + +
volatile uint32_t g_u32LoadValue
+
+static
+
+

To get timer loaded value

+ +
+
+ +

◆ g_u32PwmInitflag

+ +
+
+ + + + + +
+ + + + +
volatile bool g_u32PwmInitflag = 0
+
+static
+
+

PWM initialization flag

+ +
+
+ +

◆ g_u32Pwmstartflag

+ +
+
+ + + + + +
+ + + + +
volatile bool g_u32Pwmstartflag = 0
+
+static
+
+

PWM Start flag

+ +
+
+ +

◆ g_u32TimerCounterFlag

+ +
+
+ + + + + +
+ + + + +
volatile bool g_u32TimerCounterFlag = 0
+
+static
+
+

Timer Counter flag
+

+ +
+
+ +

◆ g_u32TimerInitFlag

+ +
+
+ + + + + +
+ + + + +
volatile bool g_u32TimerInitFlag = 0
+
+static
+
+

Timer initialization flag
+

+ +
+
+ +

◆ gCAPTURE_0CaptureConfig

+ +
+
+ + + + + +
+ + + + +
const DL_TimerA_CaptureCombinedConfig gCAPTURE_0CaptureConfig
+
+static
+
+Initial value:
= {
+
.captureMode = DL_TIMER_CAPTURE_COMBINED_MODE_PULSE_WIDTH_AND_PERIOD,
+
.period = CAPTURE_0_INST_LOAD_VALUE,
+
.startTimer = DL_TIMER_STOP,
+
.inputChan = DL_TIMER_INPUT_CHAN_0,
+
.inputInvMode = DL_TIMER_CC_INPUT_INV_NOINVERT,
+
}
+
+

Configuration for Input capture mode channel.

+ +
+
+ +

◆ gCAPTURE_0ClockConfig

+ +
+
+ + + + + +
+ + + + +
const DL_TimerA_ClockConfig gCAPTURE_0ClockConfig
+
+static
+
+Initial value:
= {
+
.clockSel = DL_TIMER_CLOCK_BUSCLK,
+
.divideRatio = DL_TIMER_CLOCK_DIVIDE_1,
+
.prescale = 32U
+
}
+
+

Configuration for Input capture timer.

+ +
+
+ +

◆ gPWM_0ClockConfig

+ +
+
+ + + + + +
+ + + + +
const DL_TimerG_ClockConfig gPWM_0ClockConfig
+
+static
+
+Initial value:
= {
+
.clockSel = DL_TIMER_CLOCK_BUSCLK,
+
.divideRatio = DL_TIMER_CLOCK_DIVIDE_1,
+
.prescale = 31U
+
}
+
+

Configuration for PWM timer.

+ +
+
+ +

◆ gPWM_0Config

+ +
+
+ + + + + +
+ + + + +
const DL_TimerG_PWMConfig gPWM_0Config
+
+static
+
+Initial value:
= {
+
.pwmMode = DL_TIMER_PWM_MODE_EDGE_ALIGN,
+
.period = 1000,
+
.startTimer = DL_TIMER_STOP,
+
}
+
+

Configuration for PWM time MODE and Periode.

+ +
+
+ +

◆ gTIMER_0ClockConfig

+ +
+
+ + + + + +
+ + + + +
const DL_TimerG_ClockConfig gTIMER_0ClockConfig
+
+static
+
+Initial value:
= {
+
.clockSel = DL_TIMER_CLOCK_LFCLK,
+
.divideRatio = DL_TIMER_CLOCK_DIVIDE_1,
+
.prescale = 32U,
+
}
+
+

Configuration for Periodic Timer.

+ +
+
+ +

◆ gTIMER_0TimerConfig

+ +
+
+ + + + + +
+ + + + +
const DL_TimerG_TimerConfig gTIMER_0TimerConfig
+
+static
+
+Initial value:
= {
+
.period = TIMER_0_INST_LOAD_VALUE,
+
.timerMode = DL_TIMER_TIMER_MODE_PERIODIC,
+
.startTimer = DL_TIMER_STOP,
+
}
+
+

Configuration for Periodic timer Mode and Period.

+ +
+
+
+ + + + diff --git a/Documentation/html/jquery.js b/Documentation/html/jquery.js new file mode 100644 index 0000000..103c32d --- /dev/null +++ b/Documentation/html/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/Documentation/html/menu.js b/Documentation/html/menu.js new file mode 100644 index 0000000..433c15b --- /dev/null +++ b/Documentation/html/menu.js @@ -0,0 +1,50 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/Documentation/html/menudata.js b/Documentation/html/menudata.js new file mode 100644 index 0000000..8138148 --- /dev/null +++ b/Documentation/html/menudata.js @@ -0,0 +1,44 @@ +/* +@licstart The following is the entire license notice for the +JavaScript code in this file. + +Copyright (C) 1997-2019 by Dimitri van Heesch + +This program is free software; you can redistribute it and/or modify +it under the terms of version 2 of the GNU General Public License as published by +the Free Software Foundation + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +@licend The above is the entire license notice +for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"Globals",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"_",url:"globals.html#index__5F"}, +{text:"a",url:"globals.html#index_a"}, +{text:"f",url:"globals.html#index_f"}, +{text:"g",url:"globals.html#index_g"}, +{text:"m",url:"globals.html#index_m"}, +{text:"t",url:"globals.html#index_t"}, +{text:"v",url:"globals.html#index_v"}, +{text:"x",url:"globals.html#index_x"}]}, +{text:"Functions",url:"globals_func.html",children:[ +{text:"_",url:"globals_func.html#index__5F"}, +{text:"a",url:"globals_func.html#index_a"}, +{text:"m",url:"globals_func.html#index_m"}, +{text:"t",url:"globals_func.html#index_t"}, +{text:"v",url:"globals_func.html#index_v"}, +{text:"x",url:"globals_func.html#index_x"}]}, +{text:"Variables",url:"globals_vars.html"}]}]}]} diff --git a/Documentation/html/nav_f.png b/Documentation/html/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/Documentation/html/nav_g.png b/Documentation/html/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/all_0.js b/Documentation/html/search/all_0.js new file mode 100644 index 0000000..fbfec5c --- /dev/null +++ b/Documentation/html/search/all_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['_5fprv_5fadccallback_0',['_prv_adccallback',['../ivec__mcal__adc__dma_8c.html#a57beca8b8e3c29381f89c77272f32b68',1,'ivec_mcal_adc_dma.c']]], + ['_5fprv_5ftimacallback_1',['_prv_timAcallback',['../ivec__mcal__timer_8c.html#a9981e88dbc39b7bb02d463a9ea4f3fa4',1,'ivec_mcal_timer.c']]], + ['_5fprv_5ftimgcallback_2',['_prv_timGcallback',['../ivec__mcal__timer_8c.html#a39ed10ab2a6d4e159f8a9a7d4190fb7c',1,'ivec_mcal_timer.c']]] +]; diff --git a/Documentation/html/search/all_1.html b/Documentation/html/search/all_1.html new file mode 100644 index 0000000..0fcb704 --- /dev/null +++ b/Documentation/html/search/all_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/all_1.js b/Documentation/html/search/all_1.js new file mode 100644 index 0000000..1d826bc --- /dev/null +++ b/Documentation/html/search/all_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['adc1_5firqhandler_3',['ADC1_IRQHandler',['../ivec__mcal__adc__dma_8c.html#a55924a8071033769a12ad0e752f67c8b',1,'ivec_mcal_adc_dma.c']]] +]; diff --git a/Documentation/html/search/all_2.html b/Documentation/html/search/all_2.html new file mode 100644 index 0000000..19c530f --- /dev/null +++ b/Documentation/html/search/all_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/all_2.js b/Documentation/html/search/all_2.js new file mode 100644 index 0000000..b91ac08 --- /dev/null +++ b/Documentation/html/search/all_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['f_5ffrequency_4',['f_frequency',['../ivec__mcal__timer_8c.html#a8f498d8164a8b5f1fe226ac7a1065223',1,'ivec_mcal_timer.c']]] +]; diff --git a/Documentation/html/search/all_3.html b/Documentation/html/search/all_3.html new file mode 100644 index 0000000..1ae887f --- /dev/null +++ b/Documentation/html/search/all_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/all_3.js b/Documentation/html/search/all_3.js new file mode 100644 index 0000000..7972a24 --- /dev/null +++ b/Documentation/html/search/all_3.js @@ -0,0 +1,26 @@ +var searchData= +[ + ['g_5fu32adcinitflag_5',['g_u32AdcInitFlag',['../ivec__mcal__adc__dma_8c.html#ae8bf595fdf07ae38cd281ee554b31e97',1,'ivec_mcal_adc_dma.c']]], + ['g_5fu32adcstartflag_6',['g_u32AdcStartFlag',['../ivec__mcal__adc__dma_8c.html#a21c312fa56d5beb1ca9fae155d0a1609',1,'ivec_mcal_adc_dma.c']]], + ['g_5fu32captureperiod_7',['g_u32CapturePeriod',['../ivec__mcal__timer_8c.html#a3364e3b26758d05e1b38b646f4054044',1,'ivec_mcal_timer.c']]], + ['g_5fu32capturevalue0_8',['g_u32CaptureValue0',['../ivec__mcal__timer_8c.html#a5085e6839b8d01a71d9a1864a6a69753',1,'ivec_mcal_timer.c']]], + ['g_5fu32capturevalue1_9',['g_u32CaptureValue1',['../ivec__mcal__timer_8c.html#a6c802071700ba3bf42eca5156386a8a9',1,'ivec_mcal_timer.c']]], + ['g_5fu32dmaflag_10',['g_u32DmaFlag',['../ivec__mcal__adc__dma_8c.html#a9eff7688a6f3ba4b0f1b28adc5c80a3c',1,'ivec_mcal_adc_dma.c']]], + ['g_5fu32dmastart_11',['g_u32DmaStart',['../ivec__mcal__adc__dma_8c.html#a1038428a9d3b822427c438df06a8ec44',1,'ivec_mcal_adc_dma.c']]], + ['g_5fu32inputcaputerflag_12',['g_u32InputCaputerflag',['../ivec__mcal__timer_8c.html#a2b584b8480730a5e8b81f41dabdc3c65',1,'ivec_mcal_timer.c']]], + ['g_5fu32loadvalue_13',['g_u32LoadValue',['../ivec__mcal__timer_8c.html#ac844ec204b29603b2535167b848a8450',1,'ivec_mcal_timer.c']]], + ['g_5fu32pwminitflag_14',['g_u32PwmInitflag',['../ivec__mcal__timer_8c.html#ae9f6b5d3e0f0c98e69d36aec59297b93',1,'ivec_mcal_timer.c']]], + ['g_5fu32pwmstartflag_15',['g_u32Pwmstartflag',['../ivec__mcal__timer_8c.html#a30c0b354b81726f2b556773926a2b8a4',1,'ivec_mcal_timer.c']]], + ['g_5fu32timercounterflag_16',['g_u32TimerCounterFlag',['../ivec__mcal__timer_8c.html#a68bd1e66940c9f90419de8112a61792b',1,'ivec_mcal_timer.c']]], + ['g_5fu32timerinitflag_17',['g_u32TimerInitFlag',['../ivec__mcal__timer_8c.html#ad293840e9710293a11e123f501d4953c',1,'ivec_mcal_timer.c']]], + ['gadc12_5f1clockconfig_18',['gADC12_1ClockConfig',['../ivec__mcal__adc__dma_8c.html#acf01d1195f672e52c0674823195322f0',1,'ivec_mcal_adc_dma.c']]], + ['gcapture_5f0captureconfig_19',['gCAPTURE_0CaptureConfig',['../ivec__mcal__timer_8c.html#af3bb7eed2ea009bbb2ef2fb6a5b2c03b',1,'ivec_mcal_timer.c']]], + ['gcapture_5f0clockconfig_20',['gCAPTURE_0ClockConfig',['../ivec__mcal__timer_8c.html#a4cb7aaac1ab4f32cf08bdad1bf1cae45',1,'ivec_mcal_timer.c']]], + ['gdma_5fch0config_21',['gDMA_CH0Config',['../ivec__mcal__adc__dma_8c.html#a55d4403e4654815d9b78943f6c1672b4',1,'ivec_mcal_adc_dma.c']]], + ['gpio_2ec_22',['gpio.c',['../gpio_8c.html',1,'']]], + ['gpioinitcounter_23',['GPIOInitCounter',['../gpio_8c.html#a9c374bc0a8da82f26002077648439d2e',1,'gpio.c']]], + ['gpwm_5f0clockconfig_24',['gPWM_0ClockConfig',['../ivec__mcal__timer_8c.html#a0ae32b282e1a0055a2bfb40dde156ee8',1,'ivec_mcal_timer.c']]], + ['gpwm_5f0config_25',['gPWM_0Config',['../ivec__mcal__timer_8c.html#a1d0ba15433c1c3eebee1f54eca6d8765',1,'ivec_mcal_timer.c']]], + ['gtimer_5f0clockconfig_26',['gTIMER_0ClockConfig',['../ivec__mcal__timer_8c.html#a315d979d68b79fc842574a8d5251f14d',1,'ivec_mcal_timer.c']]], + ['gtimer_5f0timerconfig_27',['gTIMER_0TimerConfig',['../ivec__mcal__timer_8c.html#a1f36f4fd8eca8231d01682c58870661b',1,'ivec_mcal_timer.c']]] +]; diff --git a/Documentation/html/search/all_4.html b/Documentation/html/search/all_4.html new file mode 100644 index 0000000..14c90ef --- /dev/null +++ b/Documentation/html/search/all_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/all_4.js b/Documentation/html/search/all_4.js new file mode 100644 index 0000000..d83b62c --- /dev/null +++ b/Documentation/html/search/all_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['ivec_5fmcal_5fadc_5fdma_2ec_28',['ivec_mcal_adc_dma.c',['../ivec__mcal__adc__dma_8c.html',1,'']]], + ['ivec_5fmcal_5ftimer_2ec_29',['ivec_mcal_timer.c',['../ivec__mcal__timer_8c.html',1,'']]] +]; diff --git a/Documentation/html/search/all_5.html b/Documentation/html/search/all_5.html new file mode 100644 index 0000000..60fa53e --- /dev/null +++ b/Documentation/html/search/all_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/all_5.js b/Documentation/html/search/all_5.js new file mode 100644 index 0000000..db0165d --- /dev/null +++ b/Documentation/html/search/all_5.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['mcu_5fgpiodeinitmcal_30',['mcu_gpioDeInitMcal',['../gpio_8c.html#a0a0f2ebe87263ebaf7d2a5b82b3323f3',1,'gpio.c']]], + ['mcu_5fgpioinitallmcal_31',['mcu_gpioInitAllMcal',['../gpio_8c.html#ad175e9af1360c572a452f01a6810743f',1,'gpio.c']]], + ['mcu_5fgpioreadmcal_32',['mcu_gpioReadMcal',['../gpio_8c.html#ab06af00aff6dcb76b738d675fd006945',1,'gpio.c']]], + ['mcu_5fgpiotogglemcal_33',['mcu_gpioToggleMcal',['../gpio_8c.html#a6ac893a301d3f18eff66dc7a5a20dbd2',1,'gpio.c']]], + ['mcu_5fgpiowritemcal_34',['mcu_gpioWriteMcal',['../gpio_8c.html#a617cf0cf44f313c752e64938cc69f078',1,'gpio.c']]], + ['mcu_5fset_5fgpiodirectionmcal_35',['mcu_set_gpioDirectionMcal',['../gpio_8c.html#ac43adb1d6237423192f51fad6680cb86',1,'gpio.c']]] +]; diff --git a/Documentation/html/search/all_6.html b/Documentation/html/search/all_6.html new file mode 100644 index 0000000..7180363 --- /dev/null +++ b/Documentation/html/search/all_6.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/all_6.js b/Documentation/html/search/all_6.js new file mode 100644 index 0000000..4ff4f22 --- /dev/null +++ b/Documentation/html/search/all_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['tima0_5firqhandler_36',['TIMA0_IRQHandler',['../ivec__mcal__timer_8c.html#aceda73b51d2eabfba673bc0101cfd333',1,'ivec_mcal_timer.c']]], + ['timg0_5firqhandler_37',['TIMG0_IRQHandler',['../ivec__mcal__timer_8c.html#a793ba621e13e6300361d71aa960ff509',1,'ivec_mcal_timer.c']]] +]; diff --git a/Documentation/html/search/all_7.html b/Documentation/html/search/all_7.html new file mode 100644 index 0000000..ee6d2e4 --- /dev/null +++ b/Documentation/html/search/all_7.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/all_7.js b/Documentation/html/search/all_7.js new file mode 100644 index 0000000..800b0bb --- /dev/null +++ b/Documentation/html/search/all_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['uart_2ec_38',['uart.c',['../uart_8c.html',1,'']]] +]; diff --git a/Documentation/html/search/all_8.html b/Documentation/html/search/all_8.html new file mode 100644 index 0000000..7829aa4 --- /dev/null +++ b/Documentation/html/search/all_8.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/all_8.js b/Documentation/html/search/all_8.js new file mode 100644 index 0000000..73bdcbf --- /dev/null +++ b/Documentation/html/search/all_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['vmcal_5fcalcfrequency_39',['vMCAL_Calcfrequency',['../ivec__mcal__timer_8c.html#aaaba6906df06a72eea1870b2fb93b344',1,'ivec_mcal_timer.c']]] +]; diff --git a/Documentation/html/search/all_9.html b/Documentation/html/search/all_9.html new file mode 100644 index 0000000..e4242c7 --- /dev/null +++ b/Documentation/html/search/all_9.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/all_9.js b/Documentation/html/search/all_9.js new file mode 100644 index 0000000..632949e --- /dev/null +++ b/Documentation/html/search/all_9.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['xmcal_5fadcdeinit_40',['xMCAL_AdcDeInit',['../ivec__mcal__adc__dma_8c.html#a368cb56303959284205ba88b9b01760b',1,'ivec_mcal_adc_dma.c']]], + ['xmcal_5fadcinit_41',['xMCAL_AdcInit',['../ivec__mcal__adc__dma_8c.html#ac8cb58c0739bc24340af7b896c014384',1,'ivec_mcal_adc_dma.c']]], + ['xmcal_5fadcstart_42',['xMCAL_AdcStart',['../ivec__mcal__adc__dma_8c.html#a434795b35e62fbcfb4861849a414c94c',1,'ivec_mcal_adc_dma.c']]], + ['xmcal_5fadcstop_43',['xMCAL_AdcStop',['../ivec__mcal__adc__dma_8c.html#aa04addc8765b1ad2024e57766304536a',1,'ivec_mcal_adc_dma.c']]], + ['xmcal_5fdmadeinit_44',['xMCAL_DmaDeInit',['../ivec__mcal__adc__dma_8c.html#a25ea8d77c5ec67434ece105386c7b874',1,'ivec_mcal_adc_dma.c']]], + ['xmcal_5fdmainit_45',['xMCAL_DmaInit',['../ivec__mcal__adc__dma_8c.html#a6bca37cb7ab71bb92d2ec567a7982003',1,'ivec_mcal_adc_dma.c']]], + ['xmcal_5fdmastart_46',['xMCAL_DmaStart',['../ivec__mcal__adc__dma_8c.html#af4186516cdf4ccad2e739b062d8e496e',1,'ivec_mcal_adc_dma.c']]], + ['xmcal_5fdmastop_47',['xMCAL_DmaStop',['../ivec__mcal__adc__dma_8c.html#a86d92e7db5108dc91502d5a118f49864',1,'ivec_mcal_adc_dma.c']]], + ['xmcal_5finputcapturedeinit_48',['xMCAL_InputCaptureDeInit',['../ivec__mcal__timer_8c.html#abac50c1a2c1bf54f5667e3beec45f807',1,'ivec_mcal_timer.c']]], + ['xmcal_5finputcaptureinit_49',['xMCAL_InputCaptureInit',['../ivec__mcal__timer_8c.html#a06d120975c4ecbd9172afae40c10c070',1,'ivec_mcal_timer.c']]], + ['xmcal_5finputcapturestart_50',['xMCAL_InputCaptureStart',['../ivec__mcal__timer_8c.html#afaa8036c34656643f0f3c78418045558',1,'ivec_mcal_timer.c']]], + ['xmcal_5finputcapturestop_51',['xMCAL_InputCaptureStop',['../ivec__mcal__timer_8c.html#a7880a0e54486cce5ae226497dce7f76d',1,'ivec_mcal_timer.c']]], + ['xmcal_5fpwmdeinit_52',['xMCAL_PwmDeInit',['../ivec__mcal__timer_8c.html#ad6a8ab55481dcb0bd90bbbfe2619eb6f',1,'ivec_mcal_timer.c']]], + ['xmcal_5fpwminit_53',['xMCAL_PwmInit',['../ivec__mcal__timer_8c.html#a873f0c0cb5202a2f6405e51d39351392',1,'ivec_mcal_timer.c']]], + ['xmcal_5fpwmstart_54',['xMCAL_PwmStart',['../ivec__mcal__timer_8c.html#a49967c43fb1cf87442514b93e10ab5cb',1,'ivec_mcal_timer.c']]], + ['xmcal_5fpwmstop_55',['xMCAL_PwmStop',['../ivec__mcal__timer_8c.html#a3b0ad75cdcd24c1d880a30c9beac3c9c',1,'ivec_mcal_timer.c']]], + ['xmcal_5ftimerdeinit_56',['xMCAL_TimerDeInit',['../ivec__mcal__timer_8c.html#a4bdb13bdf03682b629d3e7fc44b8dc10',1,'ivec_mcal_timer.c']]], + ['xmcal_5ftimergetcount_57',['xMCAL_TimergetCount',['../ivec__mcal__timer_8c.html#a257cd4ace5ba831d880a6e98ce9b105a',1,'ivec_mcal_timer.c']]], + ['xmcal_5ftimerinit_58',['xMCAL_TimerInit',['../ivec__mcal__timer_8c.html#ac505d1366e2daba130aa5de2d34e880b',1,'ivec_mcal_timer.c']]], + ['xmcal_5ftimersetloadvalue_59',['xMCAL_TimersetLoadValue',['../ivec__mcal__timer_8c.html#a92c540531f5d5cb9c4c1aa66dc55dd0b',1,'ivec_mcal_timer.c']]], + ['xmcal_5ftimerstartcounter_60',['xMCAL_TimerstartCounter',['../ivec__mcal__timer_8c.html#a05df50b9eac9dd77d022fc14fba6ff7b',1,'ivec_mcal_timer.c']]], + ['xmcal_5ftimerstopcounter_61',['xMCAL_TimerstopCounter',['../ivec__mcal__timer_8c.html#a14f98717c817a01bd6e5d7701ad969de',1,'ivec_mcal_timer.c']]] +]; diff --git a/Documentation/html/search/close.png b/Documentation/html/search/close.png new file mode 100644 index 0000000000000000000000000000000000000000..9342d3dfeea7b7c4ee610987e717804b5a42ceb9 GIT binary patch literal 273 zcmV+s0q*{ZP)4(RlMby96)VwnbG{ zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b) zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC X2MT$R4iQDd00000NkvXXu0mjfia~GN literal 0 HcmV?d00001 diff --git a/Documentation/html/search/files_0.html b/Documentation/html/search/files_0.html new file mode 100644 index 0000000..de151d5 --- /dev/null +++ b/Documentation/html/search/files_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/files_0.js b/Documentation/html/search/files_0.js new file mode 100644 index 0000000..6002165 --- /dev/null +++ b/Documentation/html/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['gpio_2ec_62',['gpio.c',['../gpio_8c.html',1,'']]] +]; diff --git a/Documentation/html/search/files_1.html b/Documentation/html/search/files_1.html new file mode 100644 index 0000000..73e2c8b --- /dev/null +++ b/Documentation/html/search/files_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/files_1.js b/Documentation/html/search/files_1.js new file mode 100644 index 0000000..0878156 --- /dev/null +++ b/Documentation/html/search/files_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['ivec_5fmcal_5fadc_5fdma_2ec_63',['ivec_mcal_adc_dma.c',['../ivec__mcal__adc__dma_8c.html',1,'']]], + ['ivec_5fmcal_5ftimer_2ec_64',['ivec_mcal_timer.c',['../ivec__mcal__timer_8c.html',1,'']]] +]; diff --git a/Documentation/html/search/files_2.html b/Documentation/html/search/files_2.html new file mode 100644 index 0000000..24cb541 --- /dev/null +++ b/Documentation/html/search/files_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/files_2.js b/Documentation/html/search/files_2.js new file mode 100644 index 0000000..59932fa --- /dev/null +++ b/Documentation/html/search/files_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['uart_2ec_65',['uart.c',['../uart_8c.html',1,'']]] +]; diff --git a/Documentation/html/search/functions_0.html b/Documentation/html/search/functions_0.html new file mode 100644 index 0000000..8a729f7 --- /dev/null +++ b/Documentation/html/search/functions_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/functions_0.js b/Documentation/html/search/functions_0.js new file mode 100644 index 0000000..e215c21 --- /dev/null +++ b/Documentation/html/search/functions_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['_5fprv_5fadccallback_66',['_prv_adccallback',['../ivec__mcal__adc__dma_8c.html#a57beca8b8e3c29381f89c77272f32b68',1,'ivec_mcal_adc_dma.c']]], + ['_5fprv_5ftimacallback_67',['_prv_timAcallback',['../ivec__mcal__timer_8c.html#a9981e88dbc39b7bb02d463a9ea4f3fa4',1,'ivec_mcal_timer.c']]], + ['_5fprv_5ftimgcallback_68',['_prv_timGcallback',['../ivec__mcal__timer_8c.html#a39ed10ab2a6d4e159f8a9a7d4190fb7c',1,'ivec_mcal_timer.c']]] +]; diff --git a/Documentation/html/search/functions_1.html b/Documentation/html/search/functions_1.html new file mode 100644 index 0000000..d4929aa --- /dev/null +++ b/Documentation/html/search/functions_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/functions_1.js b/Documentation/html/search/functions_1.js new file mode 100644 index 0000000..1e9924f --- /dev/null +++ b/Documentation/html/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['adc1_5firqhandler_69',['ADC1_IRQHandler',['../ivec__mcal__adc__dma_8c.html#a55924a8071033769a12ad0e752f67c8b',1,'ivec_mcal_adc_dma.c']]] +]; diff --git a/Documentation/html/search/functions_2.html b/Documentation/html/search/functions_2.html new file mode 100644 index 0000000..07e3fda --- /dev/null +++ b/Documentation/html/search/functions_2.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/functions_2.js b/Documentation/html/search/functions_2.js new file mode 100644 index 0000000..363f443 --- /dev/null +++ b/Documentation/html/search/functions_2.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['mcu_5fgpiodeinitmcal_70',['mcu_gpioDeInitMcal',['../gpio_8c.html#a0a0f2ebe87263ebaf7d2a5b82b3323f3',1,'gpio.c']]], + ['mcu_5fgpioinitallmcal_71',['mcu_gpioInitAllMcal',['../gpio_8c.html#ad175e9af1360c572a452f01a6810743f',1,'gpio.c']]], + ['mcu_5fgpioreadmcal_72',['mcu_gpioReadMcal',['../gpio_8c.html#ab06af00aff6dcb76b738d675fd006945',1,'gpio.c']]], + ['mcu_5fgpiotogglemcal_73',['mcu_gpioToggleMcal',['../gpio_8c.html#a6ac893a301d3f18eff66dc7a5a20dbd2',1,'gpio.c']]], + ['mcu_5fgpiowritemcal_74',['mcu_gpioWriteMcal',['../gpio_8c.html#a617cf0cf44f313c752e64938cc69f078',1,'gpio.c']]], + ['mcu_5fset_5fgpiodirectionmcal_75',['mcu_set_gpioDirectionMcal',['../gpio_8c.html#ac43adb1d6237423192f51fad6680cb86',1,'gpio.c']]] +]; diff --git a/Documentation/html/search/functions_3.html b/Documentation/html/search/functions_3.html new file mode 100644 index 0000000..40bd389 --- /dev/null +++ b/Documentation/html/search/functions_3.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/functions_3.js b/Documentation/html/search/functions_3.js new file mode 100644 index 0000000..d6de4e6 --- /dev/null +++ b/Documentation/html/search/functions_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['tima0_5firqhandler_76',['TIMA0_IRQHandler',['../ivec__mcal__timer_8c.html#aceda73b51d2eabfba673bc0101cfd333',1,'ivec_mcal_timer.c']]], + ['timg0_5firqhandler_77',['TIMG0_IRQHandler',['../ivec__mcal__timer_8c.html#a793ba621e13e6300361d71aa960ff509',1,'ivec_mcal_timer.c']]] +]; diff --git a/Documentation/html/search/functions_4.html b/Documentation/html/search/functions_4.html new file mode 100644 index 0000000..8a4df4c --- /dev/null +++ b/Documentation/html/search/functions_4.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/functions_4.js b/Documentation/html/search/functions_4.js new file mode 100644 index 0000000..9c89e21 --- /dev/null +++ b/Documentation/html/search/functions_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['vmcal_5fcalcfrequency_78',['vMCAL_Calcfrequency',['../ivec__mcal__timer_8c.html#aaaba6906df06a72eea1870b2fb93b344',1,'ivec_mcal_timer.c']]] +]; diff --git a/Documentation/html/search/functions_5.html b/Documentation/html/search/functions_5.html new file mode 100644 index 0000000..2b983b2 --- /dev/null +++ b/Documentation/html/search/functions_5.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/functions_5.js b/Documentation/html/search/functions_5.js new file mode 100644 index 0000000..5a6a229 --- /dev/null +++ b/Documentation/html/search/functions_5.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['xmcal_5fadcdeinit_79',['xMCAL_AdcDeInit',['../ivec__mcal__adc__dma_8c.html#a368cb56303959284205ba88b9b01760b',1,'ivec_mcal_adc_dma.c']]], + ['xmcal_5fadcinit_80',['xMCAL_AdcInit',['../ivec__mcal__adc__dma_8c.html#ac8cb58c0739bc24340af7b896c014384',1,'ivec_mcal_adc_dma.c']]], + ['xmcal_5fadcstart_81',['xMCAL_AdcStart',['../ivec__mcal__adc__dma_8c.html#a434795b35e62fbcfb4861849a414c94c',1,'ivec_mcal_adc_dma.c']]], + ['xmcal_5fadcstop_82',['xMCAL_AdcStop',['../ivec__mcal__adc__dma_8c.html#aa04addc8765b1ad2024e57766304536a',1,'ivec_mcal_adc_dma.c']]], + ['xmcal_5fdmadeinit_83',['xMCAL_DmaDeInit',['../ivec__mcal__adc__dma_8c.html#a25ea8d77c5ec67434ece105386c7b874',1,'ivec_mcal_adc_dma.c']]], + ['xmcal_5fdmainit_84',['xMCAL_DmaInit',['../ivec__mcal__adc__dma_8c.html#a6bca37cb7ab71bb92d2ec567a7982003',1,'ivec_mcal_adc_dma.c']]], + ['xmcal_5fdmastart_85',['xMCAL_DmaStart',['../ivec__mcal__adc__dma_8c.html#af4186516cdf4ccad2e739b062d8e496e',1,'ivec_mcal_adc_dma.c']]], + ['xmcal_5fdmastop_86',['xMCAL_DmaStop',['../ivec__mcal__adc__dma_8c.html#a86d92e7db5108dc91502d5a118f49864',1,'ivec_mcal_adc_dma.c']]], + ['xmcal_5finputcapturedeinit_87',['xMCAL_InputCaptureDeInit',['../ivec__mcal__timer_8c.html#abac50c1a2c1bf54f5667e3beec45f807',1,'ivec_mcal_timer.c']]], + ['xmcal_5finputcaptureinit_88',['xMCAL_InputCaptureInit',['../ivec__mcal__timer_8c.html#a06d120975c4ecbd9172afae40c10c070',1,'ivec_mcal_timer.c']]], + ['xmcal_5finputcapturestart_89',['xMCAL_InputCaptureStart',['../ivec__mcal__timer_8c.html#afaa8036c34656643f0f3c78418045558',1,'ivec_mcal_timer.c']]], + ['xmcal_5finputcapturestop_90',['xMCAL_InputCaptureStop',['../ivec__mcal__timer_8c.html#a7880a0e54486cce5ae226497dce7f76d',1,'ivec_mcal_timer.c']]], + ['xmcal_5fpwmdeinit_91',['xMCAL_PwmDeInit',['../ivec__mcal__timer_8c.html#ad6a8ab55481dcb0bd90bbbfe2619eb6f',1,'ivec_mcal_timer.c']]], + ['xmcal_5fpwminit_92',['xMCAL_PwmInit',['../ivec__mcal__timer_8c.html#a873f0c0cb5202a2f6405e51d39351392',1,'ivec_mcal_timer.c']]], + ['xmcal_5fpwmstart_93',['xMCAL_PwmStart',['../ivec__mcal__timer_8c.html#a49967c43fb1cf87442514b93e10ab5cb',1,'ivec_mcal_timer.c']]], + ['xmcal_5fpwmstop_94',['xMCAL_PwmStop',['../ivec__mcal__timer_8c.html#a3b0ad75cdcd24c1d880a30c9beac3c9c',1,'ivec_mcal_timer.c']]], + ['xmcal_5ftimerdeinit_95',['xMCAL_TimerDeInit',['../ivec__mcal__timer_8c.html#a4bdb13bdf03682b629d3e7fc44b8dc10',1,'ivec_mcal_timer.c']]], + ['xmcal_5ftimergetcount_96',['xMCAL_TimergetCount',['../ivec__mcal__timer_8c.html#a257cd4ace5ba831d880a6e98ce9b105a',1,'ivec_mcal_timer.c']]], + ['xmcal_5ftimerinit_97',['xMCAL_TimerInit',['../ivec__mcal__timer_8c.html#ac505d1366e2daba130aa5de2d34e880b',1,'ivec_mcal_timer.c']]], + ['xmcal_5ftimersetloadvalue_98',['xMCAL_TimersetLoadValue',['../ivec__mcal__timer_8c.html#a92c540531f5d5cb9c4c1aa66dc55dd0b',1,'ivec_mcal_timer.c']]], + ['xmcal_5ftimerstartcounter_99',['xMCAL_TimerstartCounter',['../ivec__mcal__timer_8c.html#a05df50b9eac9dd77d022fc14fba6ff7b',1,'ivec_mcal_timer.c']]], + ['xmcal_5ftimerstopcounter_100',['xMCAL_TimerstopCounter',['../ivec__mcal__timer_8c.html#a14f98717c817a01bd6e5d7701ad969de',1,'ivec_mcal_timer.c']]] +]; diff --git a/Documentation/html/search/mag_sel.png b/Documentation/html/search/mag_sel.png new file mode 100644 index 0000000000000000000000000000000000000000..39c0ed52a25dd9d080ee0d42ae6c6042bdfa04d7 GIT binary patch literal 465 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz6!2%?$TA$hhDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~NU84L`?eGCi_EEpJ?t}-xGu`@87+QPtK?83kxQ`TapwHK(CDaqU2h2ejD|C#+j z9%q3^WHAE+w=f7ZGR&GI0Tg5}@$_|Nf5gMiEhFgvHvB$N=!mC_V~EE2vzPXI9ZnEo zd+1zHor@dYLod2Y{ z@R$7$Z!PXTbY$|@#T!bMzm?`b<(R`cbw(gxJHzu zB$lLFB^RXvDF!10LknF)BV7aY5JN*NBMU1-b8Q0yD+2>vd*|CI8glbfGSez?Ylunu RoetE%;OXk;vd$@?2>>CYplSdB literal 0 HcmV?d00001 diff --git a/Documentation/html/search/nomatches.html b/Documentation/html/search/nomatches.html new file mode 100644 index 0000000..4377320 --- /dev/null +++ b/Documentation/html/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
    +
    No Matches
    +
    + + diff --git a/Documentation/html/search/search.css b/Documentation/html/search/search.css new file mode 100644 index 0000000..3cf9df9 --- /dev/null +++ b/Documentation/html/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + float: none; + margin-top: 8px; + right: 0px; + width: 170px; + height: 24px; + z-index: 102; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:115px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:8px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/Documentation/html/search/search.js b/Documentation/html/search/search.js new file mode 100644 index 0000000..a554ab9 --- /dev/null +++ b/Documentation/html/search/search.js @@ -0,0 +1,814 @@ +/* + @licstart The following is the entire license notice for the + JavaScript code in this file. + + Copyright (C) 1997-2017 by Dimitri van Heesch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + @licend The above is the entire license notice + for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e(R!W8j_r#qQ#gnr4kAxdU#F0+OBry$Z+ z_0PMi;P|#{d%mw(dnw=jM%@$onTJa%@6Nm3`;2S#nwtVFJI#`U@2Q@@JCCctagvF- z8H=anvo~dTmJ2YA%wA6IHRv%{vxvUm|R)kgZeo zmX%Zb;mpflGZdXCTAgit`||AFzkI#z&(3d4(htA?U2FOL4WF6wY&TB#n3n*I4+hl| z*NBpo#FA92vEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/Documentation/html/search/search_r.png b/Documentation/html/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..1af5d21ee13e070d7600f1c4657fde843b953a69 GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9c!2%@BXHTsJQY`6?zK#qG8~eHcB(ehe3dtTp zz6=bxGZ+|(`xqD=STHa&U1eaXVrO7DwS|Gf*oA>XrmV$GYcEhOQT(QLuS{~ooZ2P@v=Xc@RKW@Irliv8_;wroU0*)0O?temdsA~70jrdux+`@W7 z-N(<(C)L?hOO?KV{>8(jC{hpKsws)#Fh zvsO>IB+gb@b+rGWaO&!a9Z{!U+fV*s7TS>fdt&j$L%^U@Epd$~Nl7e8wMs5Z1yT$~ z28I^8hDN#u<{^fLRz?<9hUVG^237_Jy7tbuQ8eV{r(~v8;?@w8^gA7>fx*+&&t;uc GLK6VEQpiUD literal 0 HcmV?d00001 diff --git a/Documentation/html/search/searchdata.js b/Documentation/html/search/searchdata.js new file mode 100644 index 0000000..9733fff --- /dev/null +++ b/Documentation/html/search/searchdata.js @@ -0,0 +1,24 @@ +var indexSectionsWithContent = +{ + 0: "_afgimtuvx", + 1: "giu", + 2: "_amtvx", + 3: "fg" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "files", + 2: "functions", + 3: "variables" +}; + +var indexSectionLabels = +{ + 0: "All", + 1: "Files", + 2: "Functions", + 3: "Variables" +}; + diff --git a/Documentation/html/search/variables_0.html b/Documentation/html/search/variables_0.html new file mode 100644 index 0000000..a2a3ae6 --- /dev/null +++ b/Documentation/html/search/variables_0.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/variables_0.js b/Documentation/html/search/variables_0.js new file mode 100644 index 0000000..317b510 --- /dev/null +++ b/Documentation/html/search/variables_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['f_5ffrequency_101',['f_frequency',['../ivec__mcal__timer_8c.html#a8f498d8164a8b5f1fe226ac7a1065223',1,'ivec_mcal_timer.c']]] +]; diff --git a/Documentation/html/search/variables_1.html b/Documentation/html/search/variables_1.html new file mode 100644 index 0000000..b243c42 --- /dev/null +++ b/Documentation/html/search/variables_1.html @@ -0,0 +1,30 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff --git a/Documentation/html/search/variables_1.js b/Documentation/html/search/variables_1.js new file mode 100644 index 0000000..9d1a872 --- /dev/null +++ b/Documentation/html/search/variables_1.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['g_5fu32adcinitflag_102',['g_u32AdcInitFlag',['../ivec__mcal__adc__dma_8c.html#ae8bf595fdf07ae38cd281ee554b31e97',1,'ivec_mcal_adc_dma.c']]], + ['g_5fu32adcstartflag_103',['g_u32AdcStartFlag',['../ivec__mcal__adc__dma_8c.html#a21c312fa56d5beb1ca9fae155d0a1609',1,'ivec_mcal_adc_dma.c']]], + ['g_5fu32captureperiod_104',['g_u32CapturePeriod',['../ivec__mcal__timer_8c.html#a3364e3b26758d05e1b38b646f4054044',1,'ivec_mcal_timer.c']]], + ['g_5fu32capturevalue0_105',['g_u32CaptureValue0',['../ivec__mcal__timer_8c.html#a5085e6839b8d01a71d9a1864a6a69753',1,'ivec_mcal_timer.c']]], + ['g_5fu32capturevalue1_106',['g_u32CaptureValue1',['../ivec__mcal__timer_8c.html#a6c802071700ba3bf42eca5156386a8a9',1,'ivec_mcal_timer.c']]], + ['g_5fu32dmaflag_107',['g_u32DmaFlag',['../ivec__mcal__adc__dma_8c.html#a9eff7688a6f3ba4b0f1b28adc5c80a3c',1,'ivec_mcal_adc_dma.c']]], + ['g_5fu32dmastart_108',['g_u32DmaStart',['../ivec__mcal__adc__dma_8c.html#a1038428a9d3b822427c438df06a8ec44',1,'ivec_mcal_adc_dma.c']]], + ['g_5fu32inputcaputerflag_109',['g_u32InputCaputerflag',['../ivec__mcal__timer_8c.html#a2b584b8480730a5e8b81f41dabdc3c65',1,'ivec_mcal_timer.c']]], + ['g_5fu32loadvalue_110',['g_u32LoadValue',['../ivec__mcal__timer_8c.html#ac844ec204b29603b2535167b848a8450',1,'ivec_mcal_timer.c']]], + ['g_5fu32pwminitflag_111',['g_u32PwmInitflag',['../ivec__mcal__timer_8c.html#ae9f6b5d3e0f0c98e69d36aec59297b93',1,'ivec_mcal_timer.c']]], + ['g_5fu32pwmstartflag_112',['g_u32Pwmstartflag',['../ivec__mcal__timer_8c.html#a30c0b354b81726f2b556773926a2b8a4',1,'ivec_mcal_timer.c']]], + ['g_5fu32timercounterflag_113',['g_u32TimerCounterFlag',['../ivec__mcal__timer_8c.html#a68bd1e66940c9f90419de8112a61792b',1,'ivec_mcal_timer.c']]], + ['g_5fu32timerinitflag_114',['g_u32TimerInitFlag',['../ivec__mcal__timer_8c.html#ad293840e9710293a11e123f501d4953c',1,'ivec_mcal_timer.c']]], + ['gadc12_5f1clockconfig_115',['gADC12_1ClockConfig',['../ivec__mcal__adc__dma_8c.html#acf01d1195f672e52c0674823195322f0',1,'ivec_mcal_adc_dma.c']]], + ['gcapture_5f0captureconfig_116',['gCAPTURE_0CaptureConfig',['../ivec__mcal__timer_8c.html#af3bb7eed2ea009bbb2ef2fb6a5b2c03b',1,'ivec_mcal_timer.c']]], + ['gcapture_5f0clockconfig_117',['gCAPTURE_0ClockConfig',['../ivec__mcal__timer_8c.html#a4cb7aaac1ab4f32cf08bdad1bf1cae45',1,'ivec_mcal_timer.c']]], + ['gdma_5fch0config_118',['gDMA_CH0Config',['../ivec__mcal__adc__dma_8c.html#a55d4403e4654815d9b78943f6c1672b4',1,'ivec_mcal_adc_dma.c']]], + ['gpioinitcounter_119',['GPIOInitCounter',['../gpio_8c.html#a9c374bc0a8da82f26002077648439d2e',1,'gpio.c']]], + ['gpwm_5f0clockconfig_120',['gPWM_0ClockConfig',['../ivec__mcal__timer_8c.html#a0ae32b282e1a0055a2bfb40dde156ee8',1,'ivec_mcal_timer.c']]], + ['gpwm_5f0config_121',['gPWM_0Config',['../ivec__mcal__timer_8c.html#a1d0ba15433c1c3eebee1f54eca6d8765',1,'ivec_mcal_timer.c']]], + ['gtimer_5f0clockconfig_122',['gTIMER_0ClockConfig',['../ivec__mcal__timer_8c.html#a315d979d68b79fc842574a8d5251f14d',1,'ivec_mcal_timer.c']]], + ['gtimer_5f0timerconfig_123',['gTIMER_0TimerConfig',['../ivec__mcal__timer_8c.html#a1f36f4fd8eca8231d01682c58870661b',1,'ivec_mcal_timer.c']]] +]; diff --git a/Documentation/html/splitbar.png b/Documentation/html/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/Documentation/html/sync_off.png b/Documentation/html/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/Documentation/html/sync_on.png b/Documentation/html/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/Documentation/html/tab_a.png b/Documentation/html/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/Documentation/html/tab_b.png b/Documentation/html/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/Documentation/html/tabs.css b/Documentation/html/tabs.css new file mode 100644 index 0000000..85a0cd5 --- /dev/null +++ b/Documentation/html/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file diff --git a/Documentation/html/uart_8c.html b/Documentation/html/uart_8c.html new file mode 100644 index 0000000..17cc740 --- /dev/null +++ b/Documentation/html/uart_8c.html @@ -0,0 +1,80 @@ + + + + + + + +MCAL_DRIVER: D:/MSPM0G3507_MCAL/mspmog3507_mcal/Core/Source/uart.c File Reference + + + + + + + + + +
    +
    + + + + + + +
    +
    MCAL_DRIVER +
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    uart.c File Reference
    +
    +
    +
    + + + + diff --git a/Documentation/latex/Makefile b/Documentation/latex/Makefile new file mode 100644 index 0000000..877c9cc --- /dev/null +++ b/Documentation/latex/Makefile @@ -0,0 +1,23 @@ +LATEX_CMD=pdflatex + +all: refman.pdf + +pdf: refman.pdf + +refman.pdf: clean refman.tex + $(LATEX_CMD) refman + makeindex refman.idx + $(LATEX_CMD) refman + latex_count=8 ; \ + while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\ + do \ + echo "Rerunning latex...." ;\ + $(LATEX_CMD) refman ;\ + latex_count=`expr $$latex_count - 1` ;\ + done + makeindex refman.idx + $(LATEX_CMD) refman + + +clean: + rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf diff --git a/Documentation/latex/dir_a4cb02fe4f7b73e09a7c4d547d8e5b78.tex b/Documentation/latex/dir_a4cb02fe4f7b73e09a7c4d547d8e5b78.tex new file mode 100644 index 0000000..ba75498 --- /dev/null +++ b/Documentation/latex/dir_a4cb02fe4f7b73e09a7c4d547d8e5b78.tex @@ -0,0 +1,13 @@ +\hypertarget{dir_a4cb02fe4f7b73e09a7c4d547d8e5b78}{}\doxysection{D\+:/\+M\+S\+P\+M0\+G3507\+\_\+\+M\+C\+A\+L/mspmog3507\+\_\+mcal/\+Core/\+Source Directory Reference} +\label{dir_a4cb02fe4f7b73e09a7c4d547d8e5b78}\index{D:/MSPM0G3507\_MCAL/mspmog3507\_mcal/Core/Source Directory Reference@{D:/MSPM0G3507\_MCAL/mspmog3507\_mcal/Core/Source Directory Reference}} +\doxysubsection*{Files} +\begin{DoxyCompactItemize} +\item +file \mbox{\hyperlink{gpio_8c}{gpio.\+c}} +\item +file \mbox{\hyperlink{ivec__mcal__adc__dma_8c}{ivec\+\_\+mcal\+\_\+adc\+\_\+dma.\+c}} +\item +file \mbox{\hyperlink{ivec__mcal__timer_8c}{ivec\+\_\+mcal\+\_\+timer.\+c}} +\item +file \mbox{\hyperlink{uart_8c}{uart.\+c}} +\end{DoxyCompactItemize} diff --git a/Documentation/latex/dir_c6310732a22f63c0c2fc5595561e68f1.tex b/Documentation/latex/dir_c6310732a22f63c0c2fc5595561e68f1.tex new file mode 100644 index 0000000..cf1a2c2 --- /dev/null +++ b/Documentation/latex/dir_c6310732a22f63c0c2fc5595561e68f1.tex @@ -0,0 +1,7 @@ +\hypertarget{dir_c6310732a22f63c0c2fc5595561e68f1}{}\doxysection{D\+:/\+M\+S\+P\+M0\+G3507\+\_\+\+M\+C\+A\+L/mspmog3507\+\_\+mcal/\+Core Directory Reference} +\label{dir_c6310732a22f63c0c2fc5595561e68f1}\index{D:/MSPM0G3507\_MCAL/mspmog3507\_mcal/Core Directory Reference@{D:/MSPM0G3507\_MCAL/mspmog3507\_mcal/Core Directory Reference}} +\doxysubsection*{Directories} +\begin{DoxyCompactItemize} +\item +directory \mbox{\hyperlink{dir_a4cb02fe4f7b73e09a7c4d547d8e5b78}{Source}} +\end{DoxyCompactItemize} diff --git a/Documentation/latex/doxygen.sty b/Documentation/latex/doxygen.sty new file mode 100644 index 0000000..bf19901 --- /dev/null +++ b/Documentation/latex/doxygen.sty @@ -0,0 +1,570 @@ +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{doxygen} + +% Packages used by this style file +\RequirePackage{alltt} +%%\RequirePackage{array} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package +\RequirePackage{calc} +\RequirePackage{float} +%%\RequirePackage{ifthen} %% moved to refman.tex due to workaround for LaTex 2019 version and unmaintained tabu package +\RequirePackage{verbatim} +\RequirePackage[table]{xcolor} +\RequirePackage{longtable_doxygen} +\RequirePackage{tabu_doxygen} +\RequirePackage{fancyvrb} +\RequirePackage{tabularx} +\RequirePackage{multirow} +\RequirePackage{hanging} +\RequirePackage{ifpdf} +\RequirePackage{adjustbox} +\RequirePackage{amssymb} +\RequirePackage{stackengine} +\RequirePackage[normalem]{ulem} % for strikeout, but don't modify emphasis + +%---------- Internal commands used in this style file ---------------- + +\newcommand{\ensurespace}[1]{% + \begingroup% + \setlength{\dimen@}{#1}% + \vskip\z@\@plus\dimen@% + \penalty -100\vskip\z@\@plus -\dimen@% + \vskip\dimen@% + \penalty 9999% + \vskip -\dimen@% + \vskip\z@skip% hide the previous |\vskip| from |\addvspace| + \endgroup% +} + +\newcommand{\DoxyHorRuler}{% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \hrule% +} +\newcommand{\DoxyLabelFont}{} +\newcommand{\entrylabel}[1]{% + {% + \parbox[b]{\labelwidth-4pt}{% + \makebox[0pt][l]{\DoxyLabelFont#1}% + \vspace{1.5\baselineskip}% + }% + }% +} + +\newenvironment{DoxyDesc}[1]{% + \ensurespace{4\baselineskip}% + \begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + %\setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + }% + \item[#1]% +}{% + \end{list}% +} + +\newsavebox{\xrefbox} +\newlength{\xreflength} +\newcommand{\xreflabel}[1]{% + \sbox{\xrefbox}{#1}% + \setlength{\xreflength}{\wd\xrefbox}% + \ifthenelse{\xreflength>\labelwidth}{% + \begin{minipage}{\textwidth}% + \setlength{\parindent}{0pt}% + \hangindent=15pt\bfseries #1\vspace{1.2\itemsep}% + \end{minipage}% + }{% + \parbox[b]{\labelwidth}{\makebox[0pt][l]{\textbf{#1}}}% + }% +} + +%---------- Commands used by doxygen LaTeX output generator ---------- + +% Used by
     ... 
    +\newenvironment{DoxyPre}{% + \small% + \begin{alltt}% +}{% + \end{alltt}% + \normalsize% +} +% Necessary for redefining not defined charcaters, i.e. "Replacement Character" in tex output. +\newlength{\CodeWidthChar} +\newlength{\CodeHeightChar} +\settowidth{\CodeWidthChar}{?} +\settoheight{\CodeHeightChar}{?} +% Necessary for hanging indent +\newlength{\DoxyCodeWidth} + +\newcommand\DoxyCodeLine[1]{\hangpara{\DoxyCodeWidth}{1}{#1}\par} + +\newcommand\NiceSpace{% + \discretionary{}{\kern\fontdimen2\font}{\kern\fontdimen2\font}% +} + +% Used by @code ... @endcode +\newenvironment{DoxyCode}[1]{% + \par% + \scriptsize% + \normalfont\ttfamily% + \rightskip0pt plus 1fil% + \settowidth{\DoxyCodeWidth}{000000}% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% + \setlength{\parskip}{0ex plus 0ex minus 0ex}% + \ifthenelse{\equal{#1}{0}} + { + {\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces% + } + { + {\lccode`~32 \lowercase{\global\let~}}\obeyspaces% + } + +}{% + \normalfont% + \normalsize% + \settowidth{\CodeWidthChar}{?}% + \settoheight{\CodeHeightChar}{?}% +} + +% Redefining not defined characters, i.e. "Replacement Character" in tex output. +\def\ucr{\adjustbox{width=\CodeWidthChar,height=\CodeHeightChar}{\stackinset{c}{}{c}{-.2pt}{% + \textcolor{white}{\sffamily\bfseries\small ?}}{% + \rotatebox{45}{$\blacksquare$}}}} + +% Used by @example, @include, @includelineno and @dontinclude +\newenvironment{DoxyCodeInclude}[1]{% + \DoxyCode{#1}% +}{% + \endDoxyCode% +} + +% Used by @verbatim ... @endverbatim +\newenvironment{DoxyVerb}{% + \footnotesize% + \verbatim% +}{% + \endverbatim% + \normalsize% +} + +% Used by @verbinclude +\newenvironment{DoxyVerbInclude}{% + \DoxyVerb% +}{% + \endDoxyVerb% +} + +% Used by numbered lists (using '-#' or
      ...
    ) +\newenvironment{DoxyEnumerate}{% + \enumerate% +}{% + \endenumerate% +} + +% Used by bullet lists (using '-', @li, @arg, or
      ...
    ) +\newenvironment{DoxyItemize}{% + \itemize% +}{% + \enditemize% +} + +% Used by description lists (using
    ...
    ) +\newenvironment{DoxyDescription}{% + \description% +}{% + \enddescription% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if caption is specified) +\newenvironment{DoxyImage}{% + \begin{figure}[H]% + \begin{center}% +}{% + \end{center}% + \end{figure}% +} + +% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc +% (only if no caption is specified) +\newenvironment{DoxyImageNoCaption}{% + \begin{center}% +}{% + \end{center}% +} + +% Used by @image +% (only if inline is specified) +\newenvironment{DoxyInlineImage}{% +}{% +} + +% Used by @attention +\newenvironment{DoxyAttention}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @author and @authors +\newenvironment{DoxyAuthor}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @date +\newenvironment{DoxyDate}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @invariant +\newenvironment{DoxyInvariant}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @note +\newenvironment{DoxyNote}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @post +\newenvironment{DoxyPostcond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @pre +\newenvironment{DoxyPrecond}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @copyright +\newenvironment{DoxyCopyright}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @remark +\newenvironment{DoxyRemark}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @return and @returns +\newenvironment{DoxyReturn}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @since +\newenvironment{DoxySince}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @see +\newenvironment{DoxySeeAlso}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @version +\newenvironment{DoxyVersion}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @warning +\newenvironment{DoxyWarning}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by @internal +\newenvironment{DoxyInternal}[1]{% + \paragraph*{#1}% +}{% +} + +% Used by @par and @paragraph +\newenvironment{DoxyParagraph}[1]{% + \begin{DoxyDesc}{#1}% +}{% + \end{DoxyDesc}% +} + +% Used by parameter lists +\newenvironment{DoxyParams}[2][]{% + \tabulinesep=1mm% + \par% + \ifthenelse{\equal{#1}{}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|}}% name + description + {\ifthenelse{\equal{#1}{1}}% + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + name + desc + {\begin{longtabu*}spread 0pt [l]{|X[-1,l]|X[-1,l]|X[-1,l]|X[-1,l]|}}% in/out + type + name + desc + } + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #2}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields of simple structs +\newenvironment{DoxyFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|X[-1,l]|}% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{3}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for fields simple class style enums +\newenvironment{DoxyEnumFields}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for parameters within a detailed function description +\newenvironment{DoxyParamCaption}{% + \renewcommand{\item}[2][]{\\ \hspace*{2.0cm} ##1 {\em ##2}}% +}{% +} + +% Used by return value lists +\newenvironment{DoxyRetVals}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by exception lists +\newenvironment{DoxyExceptions}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used by template parameter lists +\newenvironment{DoxyTemplParams}[1]{% + \tabulinesep=1mm% + \par% + \begin{longtabu*}spread 0pt [l]{|X[-1,r]|X[-1,l]|}% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endfirsthead% + \multicolumn{2}{l}{\hspace{-6pt}\bfseries\fontseries{bc}\selectfont\color{darkgray} #1}\\[1ex]% + \hline% + \endhead% +}{% + \end{longtabu*}% + \vspace{6pt}% +} + +% Used for member lists +\newenvironment{DoxyCompactItemize}{% + \begin{itemize}% + \setlength{\itemsep}{-3pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \setlength{\partopsep}{0pt}% +}{% + \end{itemize}% +} + +% Used for member descriptions +\newenvironment{DoxyCompactList}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + \setlength{\itemsep}{0pt}% + \setlength{\parsep}{0pt}% + \setlength{\topsep}{0pt}% + \renewcommand{\makelabel}{\hfill}% + }% +}{% + \end{list}% +} + +% Used for reference lists (@bug, @deprecated, @todo, etc.) +\newenvironment{DoxyRefList}{% + \begin{list}{}{% + \setlength{\labelwidth}{10pt}% + \setlength{\leftmargin}{\labelwidth}% + \addtolength{\leftmargin}{\labelsep}% + \renewcommand{\makelabel}{\xreflabel}% + }% +}{% + \end{list}% +} + +% Used by @bug, @deprecated, @todo, etc. +\newenvironment{DoxyRefDesc}[1]{% + \begin{list}{}{% + \renewcommand\makelabel[1]{\textbf{##1}}% + \settowidth\labelwidth{\makelabel{#1}}% + \setlength\leftmargin{\labelwidth+\labelsep}% + }% +}{% + \end{list}% +} + +% Used by parameter lists and simple sections +\newenvironment{Desc} +{\begin{list}{}{% + \settowidth{\labelwidth}{20pt}% + \setlength{\parsep}{0pt}% + \setlength{\itemsep}{0pt}% + \setlength{\leftmargin}{\labelwidth+\labelsep}% + \renewcommand{\makelabel}{\entrylabel}% + } +}{% + \end{list}% +} + +% Used by tables +\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}% +\newenvironment{TabularC}[1]% +{\tabulinesep=1mm +\begin{longtabu*}spread 0pt [c]{*#1{|X[-1]}|}}% +{\end{longtabu*}\par}% + +\newenvironment{TabularNC}[1]% +{\begin{tabu}spread 0pt [l]{*#1{|X[-1]}|}}% +{\end{tabu}\par}% + +% Used for member group headers +\newenvironment{Indent}{% + \begin{list}{}{% + \setlength{\leftmargin}{0.5cm}% + }% + \item[]\ignorespaces% +}{% + \unskip% + \end{list}% +} + +% Used when hyperlinks are turned off +\newcommand{\doxyref}[3]{% + \textbf{#1} (\textnormal{#2}\,\pageref{#3})% +} + +% Used to link to a table when hyperlinks are turned on +\newcommand{\doxytablelink}[2]{% + \ref{#1}% +} + +% Used to link to a table when hyperlinks are turned off +\newcommand{\doxytableref}[3]{% + \ref{#3}% +} + +% Used by @addindex +\newcommand{\lcurly}{\{} +\newcommand{\rcurly}{\}} + +% Colors used for syntax highlighting +\definecolor{comment}{rgb}{0.5,0.0,0.0} +\definecolor{keyword}{rgb}{0.0,0.5,0.0} +\definecolor{keywordtype}{rgb}{0.38,0.25,0.125} +\definecolor{keywordflow}{rgb}{0.88,0.5,0.0} +\definecolor{preprocessor}{rgb}{0.5,0.38,0.125} +\definecolor{stringliteral}{rgb}{0.0,0.125,0.25} +\definecolor{charliteral}{rgb}{0.0,0.5,0.5} +\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0} +\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43} +\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0} +\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0} + +% Color used for table heading +\newcommand{\tableheadbgcolor}{lightgray}% + +% Version of hypertarget with correct landing location +\newcommand{\Hypertarget}[1]{\Hy@raisedlink{\hypertarget{#1}{}}} + +% possibility to have sections etc. be within the margins +% unfortunately had to copy part of book.cls and add \raggedright +\makeatletter +\newcommand\doxysection{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\raggedright\normalfont\Large\bfseries}} +\newcommand\doxysubsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\large\bfseries}} +\newcommand\doxysubsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxyparagraph{\@startsection{paragraph}{4}{\z@}% + {3.25ex \@plus1ex \@minus.2ex}% + {-1em}% + {\raggedright\normalfont\normalsize\bfseries}} +\newcommand\doxysubparagraph{\@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\raggedright\normalfont\normalsize\bfseries}} +\makeatother +% Define caption that is also suitable in a table +\makeatletter +\def\doxyfigcaption{% +\refstepcounter{figure}% +\@dblarg{\@caption{figure}}} +\makeatother diff --git a/Documentation/latex/files.tex b/Documentation/latex/files.tex new file mode 100644 index 0000000..147a24f --- /dev/null +++ b/Documentation/latex/files.tex @@ -0,0 +1,7 @@ +\doxysection{File List} +Here is a list of all files with brief descriptions\+:\begin{DoxyCompactList} +\item\contentsline{section}{D\+:/\+M\+S\+P\+M0\+G3507\+\_\+\+M\+C\+A\+L/mspmog3507\+\_\+mcal/\+Core/\+Source/\mbox{\hyperlink{gpio_8c}{gpio.\+c}} }{\pageref{gpio_8c}}{} +\item\contentsline{section}{D\+:/\+M\+S\+P\+M0\+G3507\+\_\+\+M\+C\+A\+L/mspmog3507\+\_\+mcal/\+Core/\+Source/\mbox{\hyperlink{ivec__mcal__adc__dma_8c}{ivec\+\_\+mcal\+\_\+adc\+\_\+dma.\+c}} }{\pageref{ivec__mcal__adc__dma_8c}}{} +\item\contentsline{section}{D\+:/\+M\+S\+P\+M0\+G3507\+\_\+\+M\+C\+A\+L/mspmog3507\+\_\+mcal/\+Core/\+Source/\mbox{\hyperlink{ivec__mcal__timer_8c}{ivec\+\_\+mcal\+\_\+timer.\+c}} }{\pageref{ivec__mcal__timer_8c}}{} +\item\contentsline{section}{D\+:/\+M\+S\+P\+M0\+G3507\+\_\+\+M\+C\+A\+L/mspmog3507\+\_\+mcal/\+Core/\+Source/\mbox{\hyperlink{uart_8c}{uart.\+c}} }{\pageref{uart_8c}}{} +\end{DoxyCompactList} diff --git a/Documentation/latex/gpio_8c.tex b/Documentation/latex/gpio_8c.tex new file mode 100644 index 0000000..07b2eec --- /dev/null +++ b/Documentation/latex/gpio_8c.tex @@ -0,0 +1,72 @@ +\hypertarget{gpio_8c}{}\doxysection{D\+:/\+M\+S\+P\+M0\+G3507\+\_\+\+M\+C\+A\+L/mspmog3507\+\_\+mcal/\+Core/\+Source/gpio.c File Reference} +\label{gpio_8c}\index{D:/MSPM0G3507\_MCAL/mspmog3507\_mcal/Core/Source/gpio.c@{D:/MSPM0G3507\_MCAL/mspmog3507\_mcal/Core/Source/gpio.c}} +{\ttfamily \#include $<$stdlib.\+h$>$}\newline +{\ttfamily \#include \char`\"{}../\+Include/gpio.\+h\char`\"{}}\newline +\doxysubsection*{Functions} +\begin{DoxyCompactItemize} +\item +int8\+\_\+t \mbox{\hyperlink{gpio_8c_ad175e9af1360c572a452f01a6810743f}{mcu\+\_\+gpio\+Init\+All\+Mcal}} (void) +\item +int8\+\_\+t \mbox{\hyperlink{gpio_8c_a0a0f2ebe87263ebaf7d2a5b82b3323f3}{mcu\+\_\+gpio\+De\+Init\+Mcal}} (G\+P\+I\+O\+\_\+\+Regs $\ast$G\+P\+I\+Ox, uint32\+\_\+t G\+P\+I\+O\+\_\+\+Pin) +\item +void \mbox{\hyperlink{gpio_8c_a617cf0cf44f313c752e64938cc69f078}{mcu\+\_\+gpio\+Write\+Mcal}} (void $\ast$port, uint32\+\_\+t pin, uint32\+\_\+t state) +\item +uint16\+\_\+t \mbox{\hyperlink{gpio_8c_ab06af00aff6dcb76b738d675fd006945}{mcu\+\_\+gpio\+Read\+Mcal}} (void $\ast$port, uint32\+\_\+t pin) +\item +void \mbox{\hyperlink{gpio_8c_a6ac893a301d3f18eff66dc7a5a20dbd2}{mcu\+\_\+gpio\+Toggle\+Mcal}} (void $\ast$port, uint32\+\_\+t pin) +\item +void \mbox{\hyperlink{gpio_8c_ac43adb1d6237423192f51fad6680cb86}{mcu\+\_\+set\+\_\+gpio\+Direction\+Mcal}} (uint32\+\_\+t pincm\+Index, bool direction) +\end{DoxyCompactItemize} +\doxysubsection*{Variables} +\begin{DoxyCompactItemize} +\item +static uint32\+\_\+t \mbox{\hyperlink{gpio_8c_a9c374bc0a8da82f26002077648439d2e}{G\+P\+I\+O\+Init\+Counter}} = 0 +\end{DoxyCompactItemize} + + +\doxysubsection{Function Documentation} +\mbox{\Hypertarget{gpio_8c_a0a0f2ebe87263ebaf7d2a5b82b3323f3}\label{gpio_8c_a0a0f2ebe87263ebaf7d2a5b82b3323f3}} +\index{gpio.c@{gpio.c}!mcu\_gpioDeInitMcal@{mcu\_gpioDeInitMcal}} +\index{mcu\_gpioDeInitMcal@{mcu\_gpioDeInitMcal}!gpio.c@{gpio.c}} +\doxysubsubsection{\texorpdfstring{mcu\_gpioDeInitMcal()}{mcu\_gpioDeInitMcal()}} +{\footnotesize\ttfamily int8\+\_\+t mcu\+\_\+gpio\+De\+Init\+Mcal (\begin{DoxyParamCaption}\item[{G\+P\+I\+O\+\_\+\+Regs $\ast$}]{G\+P\+I\+Ox, }\item[{uint32\+\_\+t}]{G\+P\+I\+O\+\_\+\+Pin }\end{DoxyParamCaption})} + +\mbox{\Hypertarget{gpio_8c_ad175e9af1360c572a452f01a6810743f}\label{gpio_8c_ad175e9af1360c572a452f01a6810743f}} +\index{gpio.c@{gpio.c}!mcu\_gpioInitAllMcal@{mcu\_gpioInitAllMcal}} +\index{mcu\_gpioInitAllMcal@{mcu\_gpioInitAllMcal}!gpio.c@{gpio.c}} +\doxysubsubsection{\texorpdfstring{mcu\_gpioInitAllMcal()}{mcu\_gpioInitAllMcal()}} +{\footnotesize\ttfamily int8\+\_\+t mcu\+\_\+gpio\+Init\+All\+Mcal (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + +\mbox{\Hypertarget{gpio_8c_ab06af00aff6dcb76b738d675fd006945}\label{gpio_8c_ab06af00aff6dcb76b738d675fd006945}} +\index{gpio.c@{gpio.c}!mcu\_gpioReadMcal@{mcu\_gpioReadMcal}} +\index{mcu\_gpioReadMcal@{mcu\_gpioReadMcal}!gpio.c@{gpio.c}} +\doxysubsubsection{\texorpdfstring{mcu\_gpioReadMcal()}{mcu\_gpioReadMcal()}} +{\footnotesize\ttfamily uint16\+\_\+t mcu\+\_\+gpio\+Read\+Mcal (\begin{DoxyParamCaption}\item[{void $\ast$}]{port, }\item[{uint32\+\_\+t}]{pin }\end{DoxyParamCaption})} + +\mbox{\Hypertarget{gpio_8c_a6ac893a301d3f18eff66dc7a5a20dbd2}\label{gpio_8c_a6ac893a301d3f18eff66dc7a5a20dbd2}} +\index{gpio.c@{gpio.c}!mcu\_gpioToggleMcal@{mcu\_gpioToggleMcal}} +\index{mcu\_gpioToggleMcal@{mcu\_gpioToggleMcal}!gpio.c@{gpio.c}} +\doxysubsubsection{\texorpdfstring{mcu\_gpioToggleMcal()}{mcu\_gpioToggleMcal()}} +{\footnotesize\ttfamily void mcu\+\_\+gpio\+Toggle\+Mcal (\begin{DoxyParamCaption}\item[{void $\ast$}]{port, }\item[{uint32\+\_\+t}]{pin }\end{DoxyParamCaption})} + +\mbox{\Hypertarget{gpio_8c_a617cf0cf44f313c752e64938cc69f078}\label{gpio_8c_a617cf0cf44f313c752e64938cc69f078}} +\index{gpio.c@{gpio.c}!mcu\_gpioWriteMcal@{mcu\_gpioWriteMcal}} +\index{mcu\_gpioWriteMcal@{mcu\_gpioWriteMcal}!gpio.c@{gpio.c}} +\doxysubsubsection{\texorpdfstring{mcu\_gpioWriteMcal()}{mcu\_gpioWriteMcal()}} +{\footnotesize\ttfamily void mcu\+\_\+gpio\+Write\+Mcal (\begin{DoxyParamCaption}\item[{void $\ast$}]{port, }\item[{uint32\+\_\+t}]{pin, }\item[{uint32\+\_\+t}]{state }\end{DoxyParamCaption})} + +\mbox{\Hypertarget{gpio_8c_ac43adb1d6237423192f51fad6680cb86}\label{gpio_8c_ac43adb1d6237423192f51fad6680cb86}} +\index{gpio.c@{gpio.c}!mcu\_set\_gpioDirectionMcal@{mcu\_set\_gpioDirectionMcal}} +\index{mcu\_set\_gpioDirectionMcal@{mcu\_set\_gpioDirectionMcal}!gpio.c@{gpio.c}} +\doxysubsubsection{\texorpdfstring{mcu\_set\_gpioDirectionMcal()}{mcu\_set\_gpioDirectionMcal()}} +{\footnotesize\ttfamily void mcu\+\_\+set\+\_\+gpio\+Direction\+Mcal (\begin{DoxyParamCaption}\item[{uint32\+\_\+t}]{pincm\+Index, }\item[{bool}]{direction }\end{DoxyParamCaption})} + + + +\doxysubsection{Variable Documentation} +\mbox{\Hypertarget{gpio_8c_a9c374bc0a8da82f26002077648439d2e}\label{gpio_8c_a9c374bc0a8da82f26002077648439d2e}} +\index{gpio.c@{gpio.c}!GPIOInitCounter@{GPIOInitCounter}} +\index{GPIOInitCounter@{GPIOInitCounter}!gpio.c@{gpio.c}} +\doxysubsubsection{\texorpdfstring{GPIOInitCounter}{GPIOInitCounter}} +{\footnotesize\ttfamily uint32\+\_\+t G\+P\+I\+O\+Init\+Counter = 0\hspace{0.3cm}{\ttfamily [static]}} + diff --git a/Documentation/latex/ivec__mcal__adc__dma_8c.tex b/Documentation/latex/ivec__mcal__adc__dma_8c.tex new file mode 100644 index 0000000..1b82735 --- /dev/null +++ b/Documentation/latex/ivec__mcal__adc__dma_8c.tex @@ -0,0 +1,313 @@ +\hypertarget{ivec__mcal__adc__dma_8c}{}\doxysection{D\+:/\+M\+S\+P\+M0\+G3507\+\_\+\+M\+C\+A\+L/mspmog3507\+\_\+mcal/\+Core/\+Source/ivec\+\_\+mcal\+\_\+adc\+\_\+dma.c File Reference} +\label{ivec__mcal__adc__dma_8c}\index{D:/MSPM0G3507\_MCAL/mspmog3507\_mcal/Core/Source/ivec\_mcal\_adc\_dma.c@{D:/MSPM0G3507\_MCAL/mspmog3507\_mcal/Core/Source/ivec\_mcal\_adc\_dma.c}} +{\ttfamily \#include $<$Core\textbackslash{}\+Include\textbackslash{}ivec\+\_\+mcal\+\_\+adc\+\_\+dma.\+h$>$}\newline +\doxysubsection*{Functions} +\begin{DoxyCompactItemize} +\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__adc__dma_8c_ac8cb58c0739bc24340af7b896c014384}{x\+M\+C\+A\+L\+\_\+\+Adc\+Init}} (A\+D\+C12\+\_\+\+Regs $\ast$const adc\+\_\+inst) +\begin{DoxyCompactList}\small\item\em Initlization A\+DC with D\+MA. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__adc__dma_8c_a368cb56303959284205ba88b9b01760b}{x\+M\+C\+A\+L\+\_\+\+Adc\+De\+Init}} (A\+D\+C12\+\_\+\+Regs $\ast$const adc\+\_\+inst) +\begin{DoxyCompactList}\small\item\em De-\/\+Initialize the A\+DC peripheral to their default reset values. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__adc__dma_8c_a434795b35e62fbcfb4861849a414c94c}{x\+M\+C\+A\+L\+\_\+\+Adc\+Start}} (A\+D\+C12\+\_\+\+Regs $\ast$const adc\+\_\+inst) +\begin{DoxyCompactList}\small\item\em Enable A\+DC, start conversion of regular group. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__adc__dma_8c_aa04addc8765b1ad2024e57766304536a}{x\+M\+C\+A\+L\+\_\+\+Adc\+Stop}} (A\+D\+C12\+\_\+\+Regs $\ast$const adc\+\_\+inst) +\begin{DoxyCompactList}\small\item\em Stop A\+DC conversion of regular group. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__adc__dma_8c_a6bca37cb7ab71bb92d2ec567a7982003}{x\+M\+C\+A\+L\+\_\+\+Dma\+Init}} (void) +\begin{DoxyCompactList}\small\item\em Initlization of D\+MA for A\+DC. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__adc__dma_8c_a25ea8d77c5ec67434ece105386c7b874}{x\+M\+C\+A\+L\+\_\+\+Dma\+De\+Init}} (void) +\begin{DoxyCompactList}\small\item\em De-\/\+Initialize the D\+MA to their default reset values. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__adc__dma_8c_af4186516cdf4ccad2e739b062d8e496e}{x\+M\+C\+A\+L\+\_\+\+Dma\+Start}} (const uint8\+\_\+t u8channel, uint16\+\_\+t $\ast$p\+\_\+u16adc\+Dma) +\begin{DoxyCompactList}\small\item\em Enable D\+MA, start transfer from A\+DC to D\+MA of regular group. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__adc__dma_8c_a86d92e7db5108dc91502d5a118f49864}{x\+M\+C\+A\+L\+\_\+\+Dma\+Stop}} (void) +\begin{DoxyCompactList}\small\item\em Function use to set the D\+MA channel. \end{DoxyCompactList}\item +void \mbox{\hyperlink{ivec__mcal__adc__dma_8c_a57beca8b8e3c29381f89c77272f32b68}{\+\_\+prv\+\_\+adccallback}} () +\begin{DoxyCompactList}\small\item\em A\+DC call back function. \end{DoxyCompactList}\item +void \mbox{\hyperlink{ivec__mcal__adc__dma_8c_a55924a8071033769a12ad0e752f67c8b}{A\+D\+C1\+\_\+\+I\+R\+Q\+Handler}} () +\begin{DoxyCompactList}\small\item\em A\+DC I\+RQ handler. \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsection*{Variables} +\begin{DoxyCompactItemize} +\item +static volatile bool \mbox{\hyperlink{ivec__mcal__adc__dma_8c_ae8bf595fdf07ae38cd281ee554b31e97}{g\+\_\+u32\+Adc\+Init\+Flag}} = 0 +\item +static volatile bool \mbox{\hyperlink{ivec__mcal__adc__dma_8c_a21c312fa56d5beb1ca9fae155d0a1609}{g\+\_\+u32\+Adc\+Start\+Flag}} =0 +\item +static volatile bool \mbox{\hyperlink{ivec__mcal__adc__dma_8c_a9eff7688a6f3ba4b0f1b28adc5c80a3c}{g\+\_\+u32\+Dma\+Flag}} =0 +\item +static volatile bool \mbox{\hyperlink{ivec__mcal__adc__dma_8c_a1038428a9d3b822427c438df06a8ec44}{g\+\_\+u32\+Dma\+Start}} =0 +\item +static const D\+L\+\_\+\+A\+D\+C12\+\_\+\+Clock\+Config \mbox{\hyperlink{ivec__mcal__adc__dma_8c_acf01d1195f672e52c0674823195322f0}{g\+A\+D\+C12\+\_\+1\+Clock\+Config}} +\begin{DoxyCompactList}\small\item\em Configuration for A\+D\+C12\+\_\+0 clock. \end{DoxyCompactList}\item +static const D\+L\+\_\+\+D\+M\+A\+\_\+\+Config \mbox{\hyperlink{ivec__mcal__adc__dma_8c_a55d4403e4654815d9b78943f6c1672b4}{g\+D\+M\+A\+\_\+\+C\+H0\+Config}} +\begin{DoxyCompactList}\small\item\em Configuration for D\+MA. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Function Documentation} +\mbox{\Hypertarget{ivec__mcal__adc__dma_8c_a57beca8b8e3c29381f89c77272f32b68}\label{ivec__mcal__adc__dma_8c_a57beca8b8e3c29381f89c77272f32b68}} +\index{ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}!\_prv\_adccallback@{\_prv\_adccallback}} +\index{\_prv\_adccallback@{\_prv\_adccallback}!ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}} +\doxysubsubsection{\texorpdfstring{\_prv\_adccallback()}{\_prv\_adccallback()}} +{\footnotesize\ttfamily void \+\_\+prv\+\_\+adccallback (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} + + + +A\+DC call back function. + +\begin{DoxyNote}{Note} +Interruptions enabled in this function +\end{DoxyNote} +\mbox{\Hypertarget{ivec__mcal__adc__dma_8c_a55924a8071033769a12ad0e752f67c8b}\label{ivec__mcal__adc__dma_8c_a55924a8071033769a12ad0e752f67c8b}} +\index{ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}!ADC1\_IRQHandler@{ADC1\_IRQHandler}} +\index{ADC1\_IRQHandler@{ADC1\_IRQHandler}!ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}} +\doxysubsubsection{\texorpdfstring{ADC1\_IRQHandler()}{ADC1\_IRQHandler()}} +{\footnotesize\ttfamily void A\+D\+C1\+\_\+\+I\+R\+Q\+Handler (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} + + + +A\+DC I\+RQ handler. + +\mbox{\Hypertarget{ivec__mcal__adc__dma_8c_a368cb56303959284205ba88b9b01760b}\label{ivec__mcal__adc__dma_8c_a368cb56303959284205ba88b9b01760b}} +\index{ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}!xMCAL\_AdcDeInit@{xMCAL\_AdcDeInit}} +\index{xMCAL\_AdcDeInit@{xMCAL\_AdcDeInit}!ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_AdcDeInit()}{xMCAL\_AdcDeInit()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Adc\+De\+Init (\begin{DoxyParamCaption}\item[{A\+D\+C12\+\_\+\+Regs $\ast$const}]{adc\+\_\+inst }\end{DoxyParamCaption})} + + + +De-\/\+Initialize the A\+DC peripheral to their default reset values. + + +\begin{DoxyParams}{Parameters} +{\em adc\+\_\+inst} & A\+DC handle \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__adc__dma_8c_ac8cb58c0739bc24340af7b896c014384}\label{ivec__mcal__adc__dma_8c_ac8cb58c0739bc24340af7b896c014384}} +\index{ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}!xMCAL\_AdcInit@{xMCAL\_AdcInit}} +\index{xMCAL\_AdcInit@{xMCAL\_AdcInit}!ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_AdcInit()}{xMCAL\_AdcInit()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Adc\+Init (\begin{DoxyParamCaption}\item[{A\+D\+C12\+\_\+\+Regs $\ast$const}]{adc\+\_\+inst }\end{DoxyParamCaption})} + + + +Initlization A\+DC with D\+MA. + +\begin{DoxyNote}{Note} +Interruptions enabled in this function +\end{DoxyNote} + +\begin{DoxyParams}{Parameters} +{\em adc\+\_\+inst} & A\+DC handle \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__adc__dma_8c_a434795b35e62fbcfb4861849a414c94c}\label{ivec__mcal__adc__dma_8c_a434795b35e62fbcfb4861849a414c94c}} +\index{ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}!xMCAL\_AdcStart@{xMCAL\_AdcStart}} +\index{xMCAL\_AdcStart@{xMCAL\_AdcStart}!ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_AdcStart()}{xMCAL\_AdcStart()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Adc\+Start (\begin{DoxyParamCaption}\item[{A\+D\+C12\+\_\+\+Regs $\ast$const}]{adc\+\_\+inst }\end{DoxyParamCaption})} + + + +Enable A\+DC, start conversion of regular group. + +\begin{DoxyNote}{Note} +Interruptions enabled in this function\+: None. +\end{DoxyNote} + +\begin{DoxyParams}{Parameters} +{\em adc\+\_\+inst} & A\+DC handle \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__adc__dma_8c_aa04addc8765b1ad2024e57766304536a}\label{ivec__mcal__adc__dma_8c_aa04addc8765b1ad2024e57766304536a}} +\index{ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}!xMCAL\_AdcStop@{xMCAL\_AdcStop}} +\index{xMCAL\_AdcStop@{xMCAL\_AdcStop}!ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_AdcStop()}{xMCAL\_AdcStop()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Adc\+Stop (\begin{DoxyParamCaption}\item[{A\+D\+C12\+\_\+\+Regs $\ast$const}]{adc\+\_\+inst }\end{DoxyParamCaption})} + + + +Stop A\+DC conversion of regular group. + + +\begin{DoxyParams}{Parameters} +{\em adc\+\_\+inst} & A\+DC handle \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__adc__dma_8c_a25ea8d77c5ec67434ece105386c7b874}\label{ivec__mcal__adc__dma_8c_a25ea8d77c5ec67434ece105386c7b874}} +\index{ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}!xMCAL\_DmaDeInit@{xMCAL\_DmaDeInit}} +\index{xMCAL\_DmaDeInit@{xMCAL\_DmaDeInit}!ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_DmaDeInit()}{xMCAL\_DmaDeInit()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Dma\+De\+Init (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + + + +De-\/\+Initialize the D\+MA to their default reset values. + + +\begin{DoxyParams}{Parameters} +{\em adc\+\_\+inst} & A\+DC handle \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__adc__dma_8c_a6bca37cb7ab71bb92d2ec567a7982003}\label{ivec__mcal__adc__dma_8c_a6bca37cb7ab71bb92d2ec567a7982003}} +\index{ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}!xMCAL\_DmaInit@{xMCAL\_DmaInit}} +\index{xMCAL\_DmaInit@{xMCAL\_DmaInit}!ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_DmaInit()}{xMCAL\_DmaInit()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Dma\+Init (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + + + +Initlization of D\+MA for A\+DC. + +\begin{DoxyNote}{Note} +Interruptions enabled in this function +\end{DoxyNote} + +\begin{DoxyParams}{Parameters} +{\em adc\+\_\+inst} & A\+DC handle \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__adc__dma_8c_af4186516cdf4ccad2e739b062d8e496e}\label{ivec__mcal__adc__dma_8c_af4186516cdf4ccad2e739b062d8e496e}} +\index{ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}!xMCAL\_DmaStart@{xMCAL\_DmaStart}} +\index{xMCAL\_DmaStart@{xMCAL\_DmaStart}!ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_DmaStart()}{xMCAL\_DmaStart()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Dma\+Start (\begin{DoxyParamCaption}\item[{const uint8\+\_\+t}]{u8channel, }\item[{uint16\+\_\+t $\ast$}]{p\+\_\+u16adc\+Dma }\end{DoxyParamCaption})} + + + +Enable D\+MA, start transfer from A\+DC to D\+MA of regular group. + +\begin{DoxyNote}{Note} +Interruptions enabled in this function\+: None. +\end{DoxyNote} + +\begin{DoxyParams}{Parameters} +{\em u8\+Channel} & use to pass the D\+MA channel \\ +\hline +{\em p\+\_\+u16adc\+Dma} & use to get the A\+DC raw \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__adc__dma_8c_a86d92e7db5108dc91502d5a118f49864}\label{ivec__mcal__adc__dma_8c_a86d92e7db5108dc91502d5a118f49864}} +\index{ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}!xMCAL\_DmaStop@{xMCAL\_DmaStop}} +\index{xMCAL\_DmaStop@{xMCAL\_DmaStop}!ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_DmaStop()}{xMCAL\_DmaStop()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Dma\+Stop (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + + + +Function use to set the D\+MA channel. + + +\begin{DoxyParams}{Parameters} +{\em u8\+Channel} & use to pass the D\+MA channel \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} + + +\doxysubsection{Variable Documentation} +\mbox{\Hypertarget{ivec__mcal__adc__dma_8c_ae8bf595fdf07ae38cd281ee554b31e97}\label{ivec__mcal__adc__dma_8c_ae8bf595fdf07ae38cd281ee554b31e97}} +\index{ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}!g\_u32AdcInitFlag@{g\_u32AdcInitFlag}} +\index{g\_u32AdcInitFlag@{g\_u32AdcInitFlag}!ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}} +\doxysubsubsection{\texorpdfstring{g\_u32AdcInitFlag}{g\_u32AdcInitFlag}} +{\footnotesize\ttfamily volatile bool g\+\_\+u32\+Adc\+Init\+Flag = 0\hspace{0.3cm}{\ttfamily [static]}} + +A\+DC initialization flag ~\newline + \mbox{\Hypertarget{ivec__mcal__adc__dma_8c_a21c312fa56d5beb1ca9fae155d0a1609}\label{ivec__mcal__adc__dma_8c_a21c312fa56d5beb1ca9fae155d0a1609}} +\index{ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}!g\_u32AdcStartFlag@{g\_u32AdcStartFlag}} +\index{g\_u32AdcStartFlag@{g\_u32AdcStartFlag}!ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}} +\doxysubsubsection{\texorpdfstring{g\_u32AdcStartFlag}{g\_u32AdcStartFlag}} +{\footnotesize\ttfamily volatile bool g\+\_\+u32\+Adc\+Start\+Flag =0\hspace{0.3cm}{\ttfamily [static]}} + +A\+DC start -\/ stop flag ~\newline + \mbox{\Hypertarget{ivec__mcal__adc__dma_8c_a9eff7688a6f3ba4b0f1b28adc5c80a3c}\label{ivec__mcal__adc__dma_8c_a9eff7688a6f3ba4b0f1b28adc5c80a3c}} +\index{ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}!g\_u32DmaFlag@{g\_u32DmaFlag}} +\index{g\_u32DmaFlag@{g\_u32DmaFlag}!ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}} +\doxysubsubsection{\texorpdfstring{g\_u32DmaFlag}{g\_u32DmaFlag}} +{\footnotesize\ttfamily volatile bool g\+\_\+u32\+Dma\+Flag =0\hspace{0.3cm}{\ttfamily [static]}} + +D\+MA initialization flag \mbox{\Hypertarget{ivec__mcal__adc__dma_8c_a1038428a9d3b822427c438df06a8ec44}\label{ivec__mcal__adc__dma_8c_a1038428a9d3b822427c438df06a8ec44}} +\index{ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}!g\_u32DmaStart@{g\_u32DmaStart}} +\index{g\_u32DmaStart@{g\_u32DmaStart}!ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}} +\doxysubsubsection{\texorpdfstring{g\_u32DmaStart}{g\_u32DmaStart}} +{\footnotesize\ttfamily volatile bool g\+\_\+u32\+Dma\+Start =0\hspace{0.3cm}{\ttfamily [static]}} + +D\+MA initialization flag \mbox{\Hypertarget{ivec__mcal__adc__dma_8c_acf01d1195f672e52c0674823195322f0}\label{ivec__mcal__adc__dma_8c_acf01d1195f672e52c0674823195322f0}} +\index{ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}!gADC12\_1ClockConfig@{gADC12\_1ClockConfig}} +\index{gADC12\_1ClockConfig@{gADC12\_1ClockConfig}!ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}} +\doxysubsubsection{\texorpdfstring{gADC12\_1ClockConfig}{gADC12\_1ClockConfig}} +{\footnotesize\ttfamily const D\+L\+\_\+\+A\+D\+C12\+\_\+\+Clock\+Config g\+A\+D\+C12\+\_\+1\+Clock\+Config\hspace{0.3cm}{\ttfamily [static]}} + +{\bfseries Initial value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{= \{} +\DoxyCodeLine{ .clockSel = DL\_ADC12\_CLOCK\_SYSOSC,} +\DoxyCodeLine{ .divideRatio = DL\_ADC12\_CLOCK\_DIVIDE\_1,} +\DoxyCodeLine{ .freqRange = DL\_ADC12\_CLOCK\_FREQ\_RANGE\_24\_TO\_32,} +\DoxyCodeLine{\}} + +\end{DoxyCode} + + +Configuration for A\+D\+C12\+\_\+0 clock. + +\mbox{\Hypertarget{ivec__mcal__adc__dma_8c_a55d4403e4654815d9b78943f6c1672b4}\label{ivec__mcal__adc__dma_8c_a55d4403e4654815d9b78943f6c1672b4}} +\index{ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}!gDMA\_CH0Config@{gDMA\_CH0Config}} +\index{gDMA\_CH0Config@{gDMA\_CH0Config}!ivec\_mcal\_adc\_dma.c@{ivec\_mcal\_adc\_dma.c}} +\doxysubsubsection{\texorpdfstring{gDMA\_CH0Config}{gDMA\_CH0Config}} +{\footnotesize\ttfamily const D\+L\+\_\+\+D\+M\+A\+\_\+\+Config g\+D\+M\+A\+\_\+\+C\+H0\+Config\hspace{0.3cm}{\ttfamily [static]}} + +{\bfseries Initial value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{= \{} +\DoxyCodeLine{ .transferMode = DL\_DMA\_SINGLE\_TRANSFER\_MODE,} +\DoxyCodeLine{ .extendedMode = DL\_DMA\_NORMAL\_MODE,} +\DoxyCodeLine{ .destIncrement = DL\_DMA\_ADDR\_UNCHANGED,} +\DoxyCodeLine{ .srcIncrement = DL\_DMA\_ADDR\_UNCHANGED,} +\DoxyCodeLine{ .destWidth = DL\_DMA\_WIDTH\_WORD,} +\DoxyCodeLine{ .srcWidth = DL\_DMA\_WIDTH\_WORD,} +\DoxyCodeLine{ .trigger = ADC12\_1\_INST\_DMA\_TRIGGER,} +\DoxyCodeLine{ .triggerType = DL\_DMA\_TRIGGER\_TYPE\_EXTERNAL,} +\DoxyCodeLine{\}} + +\end{DoxyCode} + + +Configuration for D\+MA. + diff --git a/Documentation/latex/ivec__mcal__timer_8c.tex b/Documentation/latex/ivec__mcal__timer_8c.tex new file mode 100644 index 0000000..7a52167 --- /dev/null +++ b/Documentation/latex/ivec__mcal__timer_8c.tex @@ -0,0 +1,594 @@ +\hypertarget{ivec__mcal__timer_8c}{}\doxysection{D\+:/\+M\+S\+P\+M0\+G3507\+\_\+\+M\+C\+A\+L/mspmog3507\+\_\+mcal/\+Core/\+Source/ivec\+\_\+mcal\+\_\+timer.c File Reference} +\label{ivec__mcal__timer_8c}\index{D:/MSPM0G3507\_MCAL/mspmog3507\_mcal/Core/Source/ivec\_mcal\_timer.c@{D:/MSPM0G3507\_MCAL/mspmog3507\_mcal/Core/Source/ivec\_mcal\_timer.c}} +{\ttfamily \#include $<$..\textbackslash{}\+Core\textbackslash{}\+Include\textbackslash{}ivec\+\_\+mcal\+\_\+timer.\+h$>$}\newline +\doxysubsection*{Functions} +\begin{DoxyCompactItemize} +\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__timer_8c_ac505d1366e2daba130aa5de2d34e880b}{x\+M\+C\+A\+L\+\_\+\+Timer\+Init}} (G\+P\+T\+I\+M\+E\+R\+\_\+\+Regs $\ast$const p\+Timer\+\_\+inst) +\begin{DoxyCompactList}\small\item\em Initlization Periodic timer. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__timer_8c_a4bdb13bdf03682b629d3e7fc44b8dc10}{x\+M\+C\+A\+L\+\_\+\+Timer\+De\+Init}} (G\+P\+T\+I\+M\+E\+R\+\_\+\+Regs $\ast$const p\+Timer\+\_\+inst) +\begin{DoxyCompactList}\small\item\em De-\/\+Initialize the Timer peripheral to their default reset values. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__timer_8c_a257cd4ace5ba831d880a6e98ce9b105a}{x\+M\+C\+A\+L\+\_\+\+Timerget\+Count}} (uint32\+\_\+t $\ast$p\+\_\+u32temp) +\begin{DoxyCompactList}\small\item\em To get the timer counts. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__timer_8c_a05df50b9eac9dd77d022fc14fba6ff7b}{x\+M\+C\+A\+L\+\_\+\+Timerstart\+Counter}} (void) +\begin{DoxyCompactList}\small\item\em Start the Timer counter. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__timer_8c_a14f98717c817a01bd6e5d7701ad969de}{x\+M\+C\+A\+L\+\_\+\+Timerstop\+Counter}} (void) +\begin{DoxyCompactList}\small\item\em Stop the Timer stop. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__timer_8c_a92c540531f5d5cb9c4c1aa66dc55dd0b}{x\+M\+C\+A\+L\+\_\+\+Timerset\+Load\+Value}} (G\+P\+T\+I\+M\+E\+R\+\_\+\+Regs $\ast$const p\+Timer\+\_\+inst, uint32\+\_\+t count, uint32\+\_\+t $\ast$p\+\_\+u32temp) +\begin{DoxyCompactList}\small\item\em Function use to set load value of timer. \end{DoxyCompactList}\item +void \mbox{\hyperlink{ivec__mcal__timer_8c_a39ed10ab2a6d4e159f8a9a7d4190fb7c}{\+\_\+prv\+\_\+tim\+Gcallback}} () +\begin{DoxyCompactList}\small\item\em Timer call back function. \end{DoxyCompactList}\item +void \mbox{\hyperlink{ivec__mcal__timer_8c_a793ba621e13e6300361d71aa960ff509}{T\+I\+M\+G0\+\_\+\+I\+R\+Q\+Handler}} () +\begin{DoxyCompactList}\small\item\em Timer I\+RQ handler. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__timer_8c_a873f0c0cb5202a2f6405e51d39351392}{x\+M\+C\+A\+L\+\_\+\+Pwm\+Init}} (G\+P\+T\+I\+M\+E\+R\+\_\+\+Regs $\ast$const Tim\+\_\+inst) +\begin{DoxyCompactList}\small\item\em Initlization P\+WM timer. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__timer_8c_ad6a8ab55481dcb0bd90bbbfe2619eb6f}{x\+M\+C\+A\+L\+\_\+\+Pwm\+De\+Init}} (G\+P\+T\+I\+M\+E\+R\+\_\+\+Regs $\ast$const Tim\+\_\+inst) +\begin{DoxyCompactList}\small\item\em De-\/\+Initlization P\+WM timer. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__timer_8c_a49967c43fb1cf87442514b93e10ab5cb}{x\+M\+C\+A\+L\+\_\+\+Pwm\+Start}} (void) +\begin{DoxyCompactList}\small\item\em Enable P\+WM Timer. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__timer_8c_a3b0ad75cdcd24c1d880a30c9beac3c9c}{x\+M\+C\+A\+L\+\_\+\+Pwm\+Stop}} (void) +\begin{DoxyCompactList}\small\item\em Disable P\+WM Timer. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__timer_8c_a06d120975c4ecbd9172afae40c10c070}{x\+M\+C\+A\+L\+\_\+\+Input\+Capture\+Init}} (G\+P\+T\+I\+M\+E\+R\+\_\+\+Regs $\ast$const Tim\+\_\+inst) +\begin{DoxyCompactList}\small\item\em Initlization Input Capture timer. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__timer_8c_abac50c1a2c1bf54f5667e3beec45f807}{x\+M\+C\+A\+L\+\_\+\+Input\+Capture\+De\+Init}} (G\+P\+T\+I\+M\+E\+R\+\_\+\+Regs $\ast$const Tim\+\_\+inst) +\begin{DoxyCompactList}\small\item\em De-\/\+Initlization Input Capture timer. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__timer_8c_afaa8036c34656643f0f3c78418045558}{x\+M\+C\+A\+L\+\_\+\+Input\+Capture\+Start}} (void) +\begin{DoxyCompactList}\small\item\em Enable IC timer. \end{DoxyCompactList}\item +I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e \mbox{\hyperlink{ivec__mcal__timer_8c_a7880a0e54486cce5ae226497dce7f76d}{x\+M\+C\+A\+L\+\_\+\+Input\+Capture\+Stop}} (void) +\begin{DoxyCompactList}\small\item\em Disable IC timer. \end{DoxyCompactList}\item +void \mbox{\hyperlink{ivec__mcal__timer_8c_aaaba6906df06a72eea1870b2fb93b344}{v\+M\+C\+A\+L\+\_\+\+Calcfrequency}} (float $\ast$\mbox{\hyperlink{ivec__mcal__timer_8c_a8f498d8164a8b5f1fe226ac7a1065223}{f\+\_\+frequency}}) +\begin{DoxyCompactList}\small\item\em Calculate the frequency of input P\+WM signal. \end{DoxyCompactList}\item +void \mbox{\hyperlink{ivec__mcal__timer_8c_a9981e88dbc39b7bb02d463a9ea4f3fa4}{\+\_\+prv\+\_\+tim\+Acallback}} () +\begin{DoxyCompactList}\small\item\em Timer call back function. \end{DoxyCompactList}\item +void \mbox{\hyperlink{ivec__mcal__timer_8c_aceda73b51d2eabfba673bc0101cfd333}{T\+I\+M\+A0\+\_\+\+I\+R\+Q\+Handler}} () +\begin{DoxyCompactList}\small\item\em Timer I\+RQ handler. \end{DoxyCompactList}\end{DoxyCompactItemize} +\doxysubsection*{Variables} +\begin{DoxyCompactItemize} +\item +static volatile bool \mbox{\hyperlink{ivec__mcal__timer_8c_ad293840e9710293a11e123f501d4953c}{g\+\_\+u32\+Timer\+Init\+Flag}} = 0 +\item +static volatile bool \mbox{\hyperlink{ivec__mcal__timer_8c_a68bd1e66940c9f90419de8112a61792b}{g\+\_\+u32\+Timer\+Counter\+Flag}} = 0 +\item +static volatile bool \mbox{\hyperlink{ivec__mcal__timer_8c_ae9f6b5d3e0f0c98e69d36aec59297b93}{g\+\_\+u32\+Pwm\+Initflag}} = 0 +\item +static volatile bool \mbox{\hyperlink{ivec__mcal__timer_8c_a30c0b354b81726f2b556773926a2b8a4}{g\+\_\+u32\+Pwmstartflag}} = 0 +\item +static volatile bool \mbox{\hyperlink{ivec__mcal__timer_8c_a2b584b8480730a5e8b81f41dabdc3c65}{g\+\_\+u32\+Input\+Caputerflag}} =0 +\item +static volatile uint32\+\_\+t \mbox{\hyperlink{ivec__mcal__timer_8c_a3364e3b26758d05e1b38b646f4054044}{g\+\_\+u32\+Capture\+Period}} +\item +static volatile uint32\+\_\+t \mbox{\hyperlink{ivec__mcal__timer_8c_a5085e6839b8d01a71d9a1864a6a69753}{g\+\_\+u32\+Capture\+Value0}} +\item +static volatile uint32\+\_\+t \mbox{\hyperlink{ivec__mcal__timer_8c_a6c802071700ba3bf42eca5156386a8a9}{g\+\_\+u32\+Capture\+Value1}} +\item +static volatile uint32\+\_\+t \mbox{\hyperlink{ivec__mcal__timer_8c_ac844ec204b29603b2535167b848a8450}{g\+\_\+u32\+Load\+Value}} +\item +float \mbox{\hyperlink{ivec__mcal__timer_8c_a8f498d8164a8b5f1fe226ac7a1065223}{f\+\_\+frequency}} =0 +\item +static const D\+L\+\_\+\+Timer\+A\+\_\+\+Clock\+Config \mbox{\hyperlink{ivec__mcal__timer_8c_a4cb7aaac1ab4f32cf08bdad1bf1cae45}{g\+C\+A\+P\+T\+U\+R\+E\+\_\+0\+Clock\+Config}} +\begin{DoxyCompactList}\small\item\em Configuration for Input capture timer. \end{DoxyCompactList}\item +static const D\+L\+\_\+\+Timer\+A\+\_\+\+Capture\+Combined\+Config \mbox{\hyperlink{ivec__mcal__timer_8c_af3bb7eed2ea009bbb2ef2fb6a5b2c03b}{g\+C\+A\+P\+T\+U\+R\+E\+\_\+0\+Capture\+Config}} +\begin{DoxyCompactList}\small\item\em Configuration for Input capture mode channel. \end{DoxyCompactList}\item +static const D\+L\+\_\+\+Timer\+G\+\_\+\+Clock\+Config \mbox{\hyperlink{ivec__mcal__timer_8c_a315d979d68b79fc842574a8d5251f14d}{g\+T\+I\+M\+E\+R\+\_\+0\+Clock\+Config}} +\begin{DoxyCompactList}\small\item\em Configuration for Periodic Timer. \end{DoxyCompactList}\item +static const D\+L\+\_\+\+Timer\+G\+\_\+\+Timer\+Config \mbox{\hyperlink{ivec__mcal__timer_8c_a1f36f4fd8eca8231d01682c58870661b}{g\+T\+I\+M\+E\+R\+\_\+0\+Timer\+Config}} +\begin{DoxyCompactList}\small\item\em Configuration for Periodic timer Mode and Period. \end{DoxyCompactList}\item +static const D\+L\+\_\+\+Timer\+G\+\_\+\+Clock\+Config \mbox{\hyperlink{ivec__mcal__timer_8c_a0ae32b282e1a0055a2bfb40dde156ee8}{g\+P\+W\+M\+\_\+0\+Clock\+Config}} +\begin{DoxyCompactList}\small\item\em Configuration for P\+WM timer. \end{DoxyCompactList}\item +static const D\+L\+\_\+\+Timer\+G\+\_\+\+P\+W\+M\+Config \mbox{\hyperlink{ivec__mcal__timer_8c_a1d0ba15433c1c3eebee1f54eca6d8765}{g\+P\+W\+M\+\_\+0\+Config}} +\begin{DoxyCompactList}\small\item\em Configuration for P\+WM time M\+O\+DE and Periode. \end{DoxyCompactList}\end{DoxyCompactItemize} + + +\doxysubsection{Function Documentation} +\mbox{\Hypertarget{ivec__mcal__timer_8c_a9981e88dbc39b7bb02d463a9ea4f3fa4}\label{ivec__mcal__timer_8c_a9981e88dbc39b7bb02d463a9ea4f3fa4}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!\_prv\_timAcallback@{\_prv\_timAcallback}} +\index{\_prv\_timAcallback@{\_prv\_timAcallback}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{\_prv\_timAcallback()}{\_prv\_timAcallback()}} +{\footnotesize\ttfamily void \+\_\+prv\+\_\+tim\+Acallback (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} + + + +Timer call back function. + +\begin{DoxyNote}{Note} +f\+\_\+frequency\+: get the calculated frequency +\end{DoxyNote} +\mbox{\Hypertarget{ivec__mcal__timer_8c_a39ed10ab2a6d4e159f8a9a7d4190fb7c}\label{ivec__mcal__timer_8c_a39ed10ab2a6d4e159f8a9a7d4190fb7c}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!\_prv\_timGcallback@{\_prv\_timGcallback}} +\index{\_prv\_timGcallback@{\_prv\_timGcallback}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{\_prv\_timGcallback()}{\_prv\_timGcallback()}} +{\footnotesize\ttfamily void \+\_\+prv\+\_\+tim\+Gcallback (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} + + + +Timer call back function. + +\begin{DoxyNote}{Note} +Interruptions enabled in this function +\end{DoxyNote} +\mbox{\Hypertarget{ivec__mcal__timer_8c_aceda73b51d2eabfba673bc0101cfd333}\label{ivec__mcal__timer_8c_aceda73b51d2eabfba673bc0101cfd333}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!TIMA0\_IRQHandler@{TIMA0\_IRQHandler}} +\index{TIMA0\_IRQHandler@{TIMA0\_IRQHandler}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{TIMA0\_IRQHandler()}{TIMA0\_IRQHandler()}} +{\footnotesize\ttfamily void T\+I\+M\+A0\+\_\+\+I\+R\+Q\+Handler (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} + + + +Timer I\+RQ handler. + +\mbox{\Hypertarget{ivec__mcal__timer_8c_a793ba621e13e6300361d71aa960ff509}\label{ivec__mcal__timer_8c_a793ba621e13e6300361d71aa960ff509}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!TIMG0\_IRQHandler@{TIMG0\_IRQHandler}} +\index{TIMG0\_IRQHandler@{TIMG0\_IRQHandler}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{TIMG0\_IRQHandler()}{TIMG0\_IRQHandler()}} +{\footnotesize\ttfamily void T\+I\+M\+G0\+\_\+\+I\+R\+Q\+Handler (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})} + + + +Timer I\+RQ handler. + +\mbox{\Hypertarget{ivec__mcal__timer_8c_aaaba6906df06a72eea1870b2fb93b344}\label{ivec__mcal__timer_8c_aaaba6906df06a72eea1870b2fb93b344}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!vMCAL\_Calcfrequency@{vMCAL\_Calcfrequency}} +\index{vMCAL\_Calcfrequency@{vMCAL\_Calcfrequency}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{vMCAL\_Calcfrequency()}{vMCAL\_Calcfrequency()}} +{\footnotesize\ttfamily void v\+M\+C\+A\+L\+\_\+\+Calcfrequency (\begin{DoxyParamCaption}\item[{float $\ast$}]{f\+\_\+frequency }\end{DoxyParamCaption})} + + + +Calculate the frequency of input P\+WM signal. + + +\begin{DoxyParams}{Parameters} +{\em f\+\_\+frequency} & to get Calculate frequency \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__timer_8c_abac50c1a2c1bf54f5667e3beec45f807}\label{ivec__mcal__timer_8c_abac50c1a2c1bf54f5667e3beec45f807}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!xMCAL\_InputCaptureDeInit@{xMCAL\_InputCaptureDeInit}} +\index{xMCAL\_InputCaptureDeInit@{xMCAL\_InputCaptureDeInit}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_InputCaptureDeInit()}{xMCAL\_InputCaptureDeInit()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Input\+Capture\+De\+Init (\begin{DoxyParamCaption}\item[{G\+P\+T\+I\+M\+E\+R\+\_\+\+Regs $\ast$const}]{Tim\+\_\+inst }\end{DoxyParamCaption})} + + + +De-\/\+Initlization Input Capture timer. + + +\begin{DoxyParams}{Parameters} +{\em Tim\+\_\+inst} & Timer handle \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__timer_8c_a06d120975c4ecbd9172afae40c10c070}\label{ivec__mcal__timer_8c_a06d120975c4ecbd9172afae40c10c070}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!xMCAL\_InputCaptureInit@{xMCAL\_InputCaptureInit}} +\index{xMCAL\_InputCaptureInit@{xMCAL\_InputCaptureInit}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_InputCaptureInit()}{xMCAL\_InputCaptureInit()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Input\+Capture\+Init (\begin{DoxyParamCaption}\item[{G\+P\+T\+I\+M\+E\+R\+\_\+\+Regs $\ast$const}]{Tim\+\_\+inst }\end{DoxyParamCaption})} + + + +Initlization Input Capture timer. + +\begin{DoxyNote}{Note} +Interruptions enabled in this function +\end{DoxyNote} + +\begin{DoxyParams}{Parameters} +{\em Tim\+\_\+inst} & Timer handle \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__timer_8c_afaa8036c34656643f0f3c78418045558}\label{ivec__mcal__timer_8c_afaa8036c34656643f0f3c78418045558}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!xMCAL\_InputCaptureStart@{xMCAL\_InputCaptureStart}} +\index{xMCAL\_InputCaptureStart@{xMCAL\_InputCaptureStart}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_InputCaptureStart()}{xMCAL\_InputCaptureStart()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Input\+Capture\+Start (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + + + +Enable IC timer. + + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__timer_8c_a7880a0e54486cce5ae226497dce7f76d}\label{ivec__mcal__timer_8c_a7880a0e54486cce5ae226497dce7f76d}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!xMCAL\_InputCaptureStop@{xMCAL\_InputCaptureStop}} +\index{xMCAL\_InputCaptureStop@{xMCAL\_InputCaptureStop}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_InputCaptureStop()}{xMCAL\_InputCaptureStop()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Input\+Capture\+Stop (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + + + +Disable IC timer. + + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__timer_8c_ad6a8ab55481dcb0bd90bbbfe2619eb6f}\label{ivec__mcal__timer_8c_ad6a8ab55481dcb0bd90bbbfe2619eb6f}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!xMCAL\_PwmDeInit@{xMCAL\_PwmDeInit}} +\index{xMCAL\_PwmDeInit@{xMCAL\_PwmDeInit}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_PwmDeInit()}{xMCAL\_PwmDeInit()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Pwm\+De\+Init (\begin{DoxyParamCaption}\item[{G\+P\+T\+I\+M\+E\+R\+\_\+\+Regs $\ast$const}]{Tim\+\_\+inst }\end{DoxyParamCaption})} + + + +De-\/\+Initlization P\+WM timer. + + +\begin{DoxyParams}{Parameters} +{\em Tim\+\_\+inst} & Timer handle \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__timer_8c_a873f0c0cb5202a2f6405e51d39351392}\label{ivec__mcal__timer_8c_a873f0c0cb5202a2f6405e51d39351392}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!xMCAL\_PwmInit@{xMCAL\_PwmInit}} +\index{xMCAL\_PwmInit@{xMCAL\_PwmInit}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_PwmInit()}{xMCAL\_PwmInit()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Pwm\+Init (\begin{DoxyParamCaption}\item[{G\+P\+T\+I\+M\+E\+R\+\_\+\+Regs $\ast$const}]{Tim\+\_\+inst }\end{DoxyParamCaption})} + + + +Initlization P\+WM timer. + +\begin{DoxyNote}{Note} +Interruptions enabled in this function +\end{DoxyNote} + +\begin{DoxyParams}{Parameters} +{\em Tim\+\_\+inst} & Timer handle \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__timer_8c_a49967c43fb1cf87442514b93e10ab5cb}\label{ivec__mcal__timer_8c_a49967c43fb1cf87442514b93e10ab5cb}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!xMCAL\_PwmStart@{xMCAL\_PwmStart}} +\index{xMCAL\_PwmStart@{xMCAL\_PwmStart}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_PwmStart()}{xMCAL\_PwmStart()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Pwm\+Start (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + + + +Enable P\+WM Timer. + + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__timer_8c_a3b0ad75cdcd24c1d880a30c9beac3c9c}\label{ivec__mcal__timer_8c_a3b0ad75cdcd24c1d880a30c9beac3c9c}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!xMCAL\_PwmStop@{xMCAL\_PwmStop}} +\index{xMCAL\_PwmStop@{xMCAL\_PwmStop}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_PwmStop()}{xMCAL\_PwmStop()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Pwm\+Stop (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + + + +Disable P\+WM Timer. + + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__timer_8c_a4bdb13bdf03682b629d3e7fc44b8dc10}\label{ivec__mcal__timer_8c_a4bdb13bdf03682b629d3e7fc44b8dc10}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!xMCAL\_TimerDeInit@{xMCAL\_TimerDeInit}} +\index{xMCAL\_TimerDeInit@{xMCAL\_TimerDeInit}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_TimerDeInit()}{xMCAL\_TimerDeInit()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Timer\+De\+Init (\begin{DoxyParamCaption}\item[{G\+P\+T\+I\+M\+E\+R\+\_\+\+Regs $\ast$const}]{p\+Timer\+\_\+inst }\end{DoxyParamCaption})} + + + +De-\/\+Initialize the Timer peripheral to their default reset values. + + +\begin{DoxyParams}{Parameters} +{\em p\+Timer\+\_\+inst} & Timer handle \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__timer_8c_a257cd4ace5ba831d880a6e98ce9b105a}\label{ivec__mcal__timer_8c_a257cd4ace5ba831d880a6e98ce9b105a}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!xMCAL\_TimergetCount@{xMCAL\_TimergetCount}} +\index{xMCAL\_TimergetCount@{xMCAL\_TimergetCount}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_TimergetCount()}{xMCAL\_TimergetCount()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Timerget\+Count (\begin{DoxyParamCaption}\item[{uint32\+\_\+t $\ast$}]{p\+\_\+u32temp }\end{DoxyParamCaption})} + + + +To get the timer counts. + + +\begin{DoxyParams}{Parameters} +{\em p\+\_\+u32temp} & to get the timer counts \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__timer_8c_ac505d1366e2daba130aa5de2d34e880b}\label{ivec__mcal__timer_8c_ac505d1366e2daba130aa5de2d34e880b}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!xMCAL\_TimerInit@{xMCAL\_TimerInit}} +\index{xMCAL\_TimerInit@{xMCAL\_TimerInit}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_TimerInit()}{xMCAL\_TimerInit()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Timer\+Init (\begin{DoxyParamCaption}\item[{G\+P\+T\+I\+M\+E\+R\+\_\+\+Regs $\ast$const}]{p\+Timer\+\_\+inst }\end{DoxyParamCaption})} + + + +Initlization Periodic timer. + +\begin{DoxyNote}{Note} +Interruptions enabled in this function +\end{DoxyNote} + +\begin{DoxyParams}{Parameters} +{\em p\+Timer\+\_\+inst} & Timer handle \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__timer_8c_a92c540531f5d5cb9c4c1aa66dc55dd0b}\label{ivec__mcal__timer_8c_a92c540531f5d5cb9c4c1aa66dc55dd0b}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!xMCAL\_TimersetLoadValue@{xMCAL\_TimersetLoadValue}} +\index{xMCAL\_TimersetLoadValue@{xMCAL\_TimersetLoadValue}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_TimersetLoadValue()}{xMCAL\_TimersetLoadValue()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Timerset\+Load\+Value (\begin{DoxyParamCaption}\item[{G\+P\+T\+I\+M\+E\+R\+\_\+\+Regs $\ast$const}]{p\+Timer\+\_\+inst, }\item[{uint32\+\_\+t}]{count, }\item[{uint32\+\_\+t $\ast$}]{p\+\_\+u32temp }\end{DoxyParamCaption})} + + + +Function use to set load value of timer. + + +\begin{DoxyParams}{Parameters} +{\em p\+Timer\+\_\+inst} & Timer handle \\ +\hline +{\em u8\+Channel} & use to pass the load value \\ +\hline +{\em p\+\_\+u32temp} & use to get loaded value \\ +\hline +\end{DoxyParams} + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__timer_8c_a05df50b9eac9dd77d022fc14fba6ff7b}\label{ivec__mcal__timer_8c_a05df50b9eac9dd77d022fc14fba6ff7b}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!xMCAL\_TimerstartCounter@{xMCAL\_TimerstartCounter}} +\index{xMCAL\_TimerstartCounter@{xMCAL\_TimerstartCounter}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_TimerstartCounter()}{xMCAL\_TimerstartCounter()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Timerstart\+Counter (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + + + +Start the Timer counter. + + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} +\mbox{\Hypertarget{ivec__mcal__timer_8c_a14f98717c817a01bd6e5d7701ad969de}\label{ivec__mcal__timer_8c_a14f98717c817a01bd6e5d7701ad969de}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!xMCAL\_TimerstopCounter@{xMCAL\_TimerstopCounter}} +\index{xMCAL\_TimerstopCounter@{xMCAL\_TimerstopCounter}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{xMCAL\_TimerstopCounter()}{xMCAL\_TimerstopCounter()}} +{\footnotesize\ttfamily I\+V\+E\+C\+\_\+\+Mcal\+Status\+\_\+e x\+M\+C\+A\+L\+\_\+\+Timerstop\+Counter (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})} + + + +Stop the Timer stop. + + +\begin{DoxyRetVals}{Return values} +{\em I\+V\+EC} & M\+C\+AL status \\ +\hline +\end{DoxyRetVals} + + +\doxysubsection{Variable Documentation} +\mbox{\Hypertarget{ivec__mcal__timer_8c_a8f498d8164a8b5f1fe226ac7a1065223}\label{ivec__mcal__timer_8c_a8f498d8164a8b5f1fe226ac7a1065223}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!f\_frequency@{f\_frequency}} +\index{f\_frequency@{f\_frequency}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{f\_frequency}{f\_frequency}} +{\footnotesize\ttfamily float f\+\_\+frequency =0} + +To get calculated frequency \mbox{\Hypertarget{ivec__mcal__timer_8c_a3364e3b26758d05e1b38b646f4054044}\label{ivec__mcal__timer_8c_a3364e3b26758d05e1b38b646f4054044}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!g\_u32CapturePeriod@{g\_u32CapturePeriod}} +\index{g\_u32CapturePeriod@{g\_u32CapturePeriod}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{g\_u32CapturePeriod}{g\_u32CapturePeriod}} +{\footnotesize\ttfamily volatile uint32\+\_\+t g\+\_\+u32\+Capture\+Period\hspace{0.3cm}{\ttfamily [static]}} + +To get the first capture period ~\newline + \mbox{\Hypertarget{ivec__mcal__timer_8c_a5085e6839b8d01a71d9a1864a6a69753}\label{ivec__mcal__timer_8c_a5085e6839b8d01a71d9a1864a6a69753}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!g\_u32CaptureValue0@{g\_u32CaptureValue0}} +\index{g\_u32CaptureValue0@{g\_u32CaptureValue0}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{g\_u32CaptureValue0}{g\_u32CaptureValue0}} +{\footnotesize\ttfamily volatile uint32\+\_\+t g\+\_\+u32\+Capture\+Value0\hspace{0.3cm}{\ttfamily [static]}} + +To get the first capture value \mbox{\Hypertarget{ivec__mcal__timer_8c_a6c802071700ba3bf42eca5156386a8a9}\label{ivec__mcal__timer_8c_a6c802071700ba3bf42eca5156386a8a9}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!g\_u32CaptureValue1@{g\_u32CaptureValue1}} +\index{g\_u32CaptureValue1@{g\_u32CaptureValue1}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{g\_u32CaptureValue1}{g\_u32CaptureValue1}} +{\footnotesize\ttfamily volatile uint32\+\_\+t g\+\_\+u32\+Capture\+Value1\hspace{0.3cm}{\ttfamily [static]}} + +To get the second capture value ~\newline + \mbox{\Hypertarget{ivec__mcal__timer_8c_a2b584b8480730a5e8b81f41dabdc3c65}\label{ivec__mcal__timer_8c_a2b584b8480730a5e8b81f41dabdc3c65}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!g\_u32InputCaputerflag@{g\_u32InputCaputerflag}} +\index{g\_u32InputCaputerflag@{g\_u32InputCaputerflag}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{g\_u32InputCaputerflag}{g\_u32InputCaputerflag}} +{\footnotesize\ttfamily volatile bool g\+\_\+u32\+Input\+Caputerflag =0\hspace{0.3cm}{\ttfamily [static]}} + +Input Capture initialization flag \mbox{\Hypertarget{ivec__mcal__timer_8c_ac844ec204b29603b2535167b848a8450}\label{ivec__mcal__timer_8c_ac844ec204b29603b2535167b848a8450}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!g\_u32LoadValue@{g\_u32LoadValue}} +\index{g\_u32LoadValue@{g\_u32LoadValue}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{g\_u32LoadValue}{g\_u32LoadValue}} +{\footnotesize\ttfamily volatile uint32\+\_\+t g\+\_\+u32\+Load\+Value\hspace{0.3cm}{\ttfamily [static]}} + +To get timer loaded value \mbox{\Hypertarget{ivec__mcal__timer_8c_ae9f6b5d3e0f0c98e69d36aec59297b93}\label{ivec__mcal__timer_8c_ae9f6b5d3e0f0c98e69d36aec59297b93}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!g\_u32PwmInitflag@{g\_u32PwmInitflag}} +\index{g\_u32PwmInitflag@{g\_u32PwmInitflag}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{g\_u32PwmInitflag}{g\_u32PwmInitflag}} +{\footnotesize\ttfamily volatile bool g\+\_\+u32\+Pwm\+Initflag = 0\hspace{0.3cm}{\ttfamily [static]}} + +P\+WM initialization flag \mbox{\Hypertarget{ivec__mcal__timer_8c_a30c0b354b81726f2b556773926a2b8a4}\label{ivec__mcal__timer_8c_a30c0b354b81726f2b556773926a2b8a4}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!g\_u32Pwmstartflag@{g\_u32Pwmstartflag}} +\index{g\_u32Pwmstartflag@{g\_u32Pwmstartflag}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{g\_u32Pwmstartflag}{g\_u32Pwmstartflag}} +{\footnotesize\ttfamily volatile bool g\+\_\+u32\+Pwmstartflag = 0\hspace{0.3cm}{\ttfamily [static]}} + +P\+WM Start flag \mbox{\Hypertarget{ivec__mcal__timer_8c_a68bd1e66940c9f90419de8112a61792b}\label{ivec__mcal__timer_8c_a68bd1e66940c9f90419de8112a61792b}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!g\_u32TimerCounterFlag@{g\_u32TimerCounterFlag}} +\index{g\_u32TimerCounterFlag@{g\_u32TimerCounterFlag}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{g\_u32TimerCounterFlag}{g\_u32TimerCounterFlag}} +{\footnotesize\ttfamily volatile bool g\+\_\+u32\+Timer\+Counter\+Flag = 0\hspace{0.3cm}{\ttfamily [static]}} + +Timer Counter flag ~\newline + \mbox{\Hypertarget{ivec__mcal__timer_8c_ad293840e9710293a11e123f501d4953c}\label{ivec__mcal__timer_8c_ad293840e9710293a11e123f501d4953c}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!g\_u32TimerInitFlag@{g\_u32TimerInitFlag}} +\index{g\_u32TimerInitFlag@{g\_u32TimerInitFlag}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{g\_u32TimerInitFlag}{g\_u32TimerInitFlag}} +{\footnotesize\ttfamily volatile bool g\+\_\+u32\+Timer\+Init\+Flag = 0\hspace{0.3cm}{\ttfamily [static]}} + +Timer initialization flag ~\newline + \mbox{\Hypertarget{ivec__mcal__timer_8c_af3bb7eed2ea009bbb2ef2fb6a5b2c03b}\label{ivec__mcal__timer_8c_af3bb7eed2ea009bbb2ef2fb6a5b2c03b}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!gCAPTURE\_0CaptureConfig@{gCAPTURE\_0CaptureConfig}} +\index{gCAPTURE\_0CaptureConfig@{gCAPTURE\_0CaptureConfig}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{gCAPTURE\_0CaptureConfig}{gCAPTURE\_0CaptureConfig}} +{\footnotesize\ttfamily const D\+L\+\_\+\+Timer\+A\+\_\+\+Capture\+Combined\+Config g\+C\+A\+P\+T\+U\+R\+E\+\_\+0\+Capture\+Config\hspace{0.3cm}{\ttfamily [static]}} + +{\bfseries Initial value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{= \{} +\DoxyCodeLine{ .captureMode = DL\_TIMER\_CAPTURE\_COMBINED\_MODE\_PULSE\_WIDTH\_AND\_PERIOD,} +\DoxyCodeLine{ .period = CAPTURE\_0\_INST\_LOAD\_VALUE,} +\DoxyCodeLine{ .startTimer = DL\_TIMER\_STOP,} +\DoxyCodeLine{ .inputChan = DL\_TIMER\_INPUT\_CHAN\_0,} +\DoxyCodeLine{ .inputInvMode = DL\_TIMER\_CC\_INPUT\_INV\_NOINVERT,} +\DoxyCodeLine{\}} + +\end{DoxyCode} + + +Configuration for Input capture mode channel. + +\mbox{\Hypertarget{ivec__mcal__timer_8c_a4cb7aaac1ab4f32cf08bdad1bf1cae45}\label{ivec__mcal__timer_8c_a4cb7aaac1ab4f32cf08bdad1bf1cae45}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!gCAPTURE\_0ClockConfig@{gCAPTURE\_0ClockConfig}} +\index{gCAPTURE\_0ClockConfig@{gCAPTURE\_0ClockConfig}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{gCAPTURE\_0ClockConfig}{gCAPTURE\_0ClockConfig}} +{\footnotesize\ttfamily const D\+L\+\_\+\+Timer\+A\+\_\+\+Clock\+Config g\+C\+A\+P\+T\+U\+R\+E\+\_\+0\+Clock\+Config\hspace{0.3cm}{\ttfamily [static]}} + +{\bfseries Initial value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{= \{} +\DoxyCodeLine{ .clockSel = DL\_TIMER\_CLOCK\_BUSCLK,} +\DoxyCodeLine{ .divideRatio = DL\_TIMER\_CLOCK\_DIVIDE\_1,} +\DoxyCodeLine{ .prescale = 32U} +\DoxyCodeLine{\}} + +\end{DoxyCode} + + +Configuration for Input capture timer. + +\mbox{\Hypertarget{ivec__mcal__timer_8c_a0ae32b282e1a0055a2bfb40dde156ee8}\label{ivec__mcal__timer_8c_a0ae32b282e1a0055a2bfb40dde156ee8}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!gPWM\_0ClockConfig@{gPWM\_0ClockConfig}} +\index{gPWM\_0ClockConfig@{gPWM\_0ClockConfig}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{gPWM\_0ClockConfig}{gPWM\_0ClockConfig}} +{\footnotesize\ttfamily const D\+L\+\_\+\+Timer\+G\+\_\+\+Clock\+Config g\+P\+W\+M\+\_\+0\+Clock\+Config\hspace{0.3cm}{\ttfamily [static]}} + +{\bfseries Initial value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{= \{} +\DoxyCodeLine{ .clockSel = DL\_TIMER\_CLOCK\_BUSCLK,} +\DoxyCodeLine{ .divideRatio = DL\_TIMER\_CLOCK\_DIVIDE\_1,} +\DoxyCodeLine{ .prescale = 31U} +\DoxyCodeLine{\}} + +\end{DoxyCode} + + +Configuration for P\+WM timer. + +\mbox{\Hypertarget{ivec__mcal__timer_8c_a1d0ba15433c1c3eebee1f54eca6d8765}\label{ivec__mcal__timer_8c_a1d0ba15433c1c3eebee1f54eca6d8765}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!gPWM\_0Config@{gPWM\_0Config}} +\index{gPWM\_0Config@{gPWM\_0Config}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{gPWM\_0Config}{gPWM\_0Config}} +{\footnotesize\ttfamily const D\+L\+\_\+\+Timer\+G\+\_\+\+P\+W\+M\+Config g\+P\+W\+M\+\_\+0\+Config\hspace{0.3cm}{\ttfamily [static]}} + +{\bfseries Initial value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{= \{} +\DoxyCodeLine{ .pwmMode = DL\_TIMER\_PWM\_MODE\_EDGE\_ALIGN,} +\DoxyCodeLine{ .period = 1000,} +\DoxyCodeLine{ .startTimer = DL\_TIMER\_STOP,} +\DoxyCodeLine{\}} + +\end{DoxyCode} + + +Configuration for P\+WM time M\+O\+DE and Periode. + +\mbox{\Hypertarget{ivec__mcal__timer_8c_a315d979d68b79fc842574a8d5251f14d}\label{ivec__mcal__timer_8c_a315d979d68b79fc842574a8d5251f14d}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!gTIMER\_0ClockConfig@{gTIMER\_0ClockConfig}} +\index{gTIMER\_0ClockConfig@{gTIMER\_0ClockConfig}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{gTIMER\_0ClockConfig}{gTIMER\_0ClockConfig}} +{\footnotesize\ttfamily const D\+L\+\_\+\+Timer\+G\+\_\+\+Clock\+Config g\+T\+I\+M\+E\+R\+\_\+0\+Clock\+Config\hspace{0.3cm}{\ttfamily [static]}} + +{\bfseries Initial value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{= \{} +\DoxyCodeLine{ .clockSel = DL\_TIMER\_CLOCK\_LFCLK,} +\DoxyCodeLine{ .divideRatio = DL\_TIMER\_CLOCK\_DIVIDE\_1,} +\DoxyCodeLine{ .prescale = 32U,} +\DoxyCodeLine{\}} + +\end{DoxyCode} + + +Configuration for Periodic Timer. + +\mbox{\Hypertarget{ivec__mcal__timer_8c_a1f36f4fd8eca8231d01682c58870661b}\label{ivec__mcal__timer_8c_a1f36f4fd8eca8231d01682c58870661b}} +\index{ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}!gTIMER\_0TimerConfig@{gTIMER\_0TimerConfig}} +\index{gTIMER\_0TimerConfig@{gTIMER\_0TimerConfig}!ivec\_mcal\_timer.c@{ivec\_mcal\_timer.c}} +\doxysubsubsection{\texorpdfstring{gTIMER\_0TimerConfig}{gTIMER\_0TimerConfig}} +{\footnotesize\ttfamily const D\+L\+\_\+\+Timer\+G\+\_\+\+Timer\+Config g\+T\+I\+M\+E\+R\+\_\+0\+Timer\+Config\hspace{0.3cm}{\ttfamily [static]}} + +{\bfseries Initial value\+:} +\begin{DoxyCode}{0} +\DoxyCodeLine{= \{} +\DoxyCodeLine{ .period = TIMER\_0\_INST\_LOAD\_VALUE,} +\DoxyCodeLine{ .timerMode = DL\_TIMER\_TIMER\_MODE\_PERIODIC,} +\DoxyCodeLine{ .startTimer = DL\_TIMER\_STOP,} +\DoxyCodeLine{\}} + +\end{DoxyCode} + + +Configuration for Periodic timer Mode and Period. + diff --git a/Documentation/latex/longtable_doxygen.sty b/Documentation/latex/longtable_doxygen.sty new file mode 100644 index 0000000..a0eb314 --- /dev/null +++ b/Documentation/latex/longtable_doxygen.sty @@ -0,0 +1,448 @@ +%% +%% This is file `longtable.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% longtable.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% The source is maintained by the LaTeX Project team and bug +%% reports for it can be opened at http://latex-project.org/bugs.html +%% (but please observe conditions on bug reports sent to that address!) +%% +%% Copyright 1993-2016 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'. +%% -------------------------------------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This file may only be distributed together with a copy of the LaTeX +%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle' +%% without such generated files. +%% +%% The list of all files belonging to the LaTeX `Tools Bundle' is +%% given in the file `manifest.txt'. +%% +%% File: longtable.dtx Copyright (C) 1990-2001 David Carlisle +\NeedsTeXFormat{LaTeX2e}[1995/06/01] +\ProvidesPackage{longtable_doxygen} + [2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen] +\def\LT@err{\PackageError{longtable}} +\def\LT@warn{\PackageWarning{longtable}} +\def\LT@final@warn{% + \AtEndDocument{% + \LT@warn{Table \@width s have changed. Rerun LaTeX.\@gobbletwo}}% + \global\let\LT@final@warn\relax} +\DeclareOption{errorshow}{% + \def\LT@warn{\PackageInfo{longtable}}} +\DeclareOption{pausing}{% + \def\LT@warn#1{% + \LT@err{#1}{This is not really an error}}} +\DeclareOption{set}{} +\DeclareOption{final}{} +\ProcessOptions +\newskip\LTleft \LTleft=\fill +\newskip\LTright \LTright=\fill +\newskip\LTpre \LTpre=\bigskipamount +\newskip\LTpost \LTpost=\bigskipamount +\newcount\LTchunksize \LTchunksize=20 +\let\c@LTchunksize\LTchunksize +\newdimen\LTcapwidth \LTcapwidth=4in +\newbox\LT@head +\newbox\LT@firsthead +\newbox\LT@foot +\newbox\LT@lastfoot +\newcount\LT@cols +\newcount\LT@rows +\newcounter{LT@tables} +\newcounter{LT@chunks}[LT@tables] +\ifx\c@table\undefined + \newcounter{table} + \def\fnum@table{\tablename~\thetable} +\fi +\ifx\tablename\undefined + \def\tablename{Table} +\fi +\newtoks\LT@p@ftn +\mathchardef\LT@end@pen=30000 +\def\longtable{% + \par + \ifx\multicols\@undefined + \else + \ifnum\col@number>\@ne + \@twocolumntrue + \fi + \fi + \if@twocolumn + \LT@err{longtable not in 1-column mode}\@ehc + \fi + \begingroup + \@ifnextchar[\LT@array{\LT@array[x]}} +\def\LT@array[#1]#2{% + \refstepcounter{table}\stepcounter{LT@tables}% + \if l#1% + \LTleft\z@ \LTright\fill + \else\if r#1% + \LTleft\fill \LTright\z@ + \else\if c#1% + \LTleft\fill \LTright\fill + \fi\fi\fi + \let\LT@mcol\multicolumn + \let\LT@@tabarray\@tabarray + \let\LT@@hl\hline + \def\@tabarray{% + \let\hline\LT@@hl + \LT@@tabarray}% + \let\\\LT@tabularcr\let\tabularnewline\\% + \def\newpage{\noalign{\break}}% + \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}% + \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}% + \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption + \@tempdima\ht\strutbox + \let\@endpbox\LT@endpbox + \ifx\extrarowheight\@undefined + \let\@acol\@tabacol + \let\@classz\@tabclassz \let\@classiv\@tabclassiv + \def\@startpbox{\vtop\LT@startpbox}% + \let\@@startpbox\@startpbox + \let\@@endpbox\@endpbox + \let\LT@LL@FM@cr\@tabularcr + \else + \advance\@tempdima\extrarowheight + \col@sep\tabcolsep + \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr + \fi + \setbox\@arstrutbox\hbox{\vrule + \@height \arraystretch \@tempdima + \@depth \arraystretch \dp \strutbox + \@width \z@}% + \let\@sharp##\let\protect\relax + \begingroup + \@mkpream{#2}% + \xdef\LT@bchunk{% + \global\advance\c@LT@chunks\@ne + \global\LT@rows\z@\setbox\z@\vbox\bgroup + \LT@setprevdepth + \tabskip\LTleft \noexpand\halign to\hsize\bgroup + \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}% + \endgroup + \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols + \LT@make@row + \m@th\let\par\@empty + \everycr{}\lineskip\z@\baselineskip\z@ + \LT@bchunk} +\def\LT@no@pgbk#1[#2]{\penalty #1\@getpen{#2}\ifnum`{=0\fi}} +\def\LT@start{% + \let\LT@start\endgraf + \endgraf\penalty\z@\vskip\LTpre + \dimen@\pagetotal + \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi + \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi + \advance\dimen@ \ht\LT@foot + \dimen@ii\vfuzz + \vfuzz\maxdimen + \setbox\tw@\copy\z@ + \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox + \setbox\tw@\vbox{\unvbox\tw@}% + \vfuzz\dimen@ii + \advance\dimen@ \ht + \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi + \advance\dimen@\dp + \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi + \advance\dimen@ -\pagegoal + \ifdim \dimen@>\z@\vfil\break\fi + \global\@colroom\@colht + \ifvoid\LT@foot\else + \advance\vsize-\ht\LT@foot + \global\advance\@colroom-\ht\LT@foot + \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@ + \maxdepth\z@ + \fi + \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak + \output{\LT@output}} +\def\endlongtable{% + \crcr + \noalign{% + \let\LT@entry\LT@entry@chop + \xdef\LT@save@row{\LT@save@row}}% + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \if@filesw + {\let\LT@entry\LT@entry@write\immediate\write\@auxout{% + \gdef\expandafter\noexpand + \csname LT@\romannumeral\c@LT@tables\endcsname + {\LT@save@row}}}% + \fi + \ifx\LT@save@row\LT@@save@row + \else + \LT@warn{Column \@width s have changed\MessageBreak + in table \thetable}% + \LT@final@warn + \fi + \endgraf\penalty -\LT@end@pen + \endgroup + \global\@mparbottom\z@ + \pagegoal\vsize + \endgraf\penalty\z@\addvspace\LTpost + \ifvoid\footins\else\insert\footins{}\fi} +\def\LT@nofcols#1&{% + \futurelet\@let@token\LT@n@fcols} +\def\LT@n@fcols{% + \advance\LT@cols\@ne + \ifx\@let@token\LT@nofcols + \expandafter\@gobble + \else + \expandafter\LT@nofcols + \fi} +\def\LT@tabularcr{% + \relax\iffalse{\fi\ifnum0=`}\fi + \@ifstar + {\def\crcr{\LT@crcr\noalign{\nobreak}}\let\cr\crcr + \LT@t@bularcr}% + {\LT@t@bularcr}} +\let\LT@crcr\crcr +\let\LT@setprevdepth\relax +\def\LT@t@bularcr{% + \global\advance\LT@rows\@ne + \ifnum\LT@rows=\LTchunksize + \gdef\LT@setprevdepth{% + \prevdepth\z@\global + \global\let\LT@setprevdepth\relax}% + \expandafter\LT@xtabularcr + \else + \ifnum0=`{}\fi + \expandafter\LT@LL@FM@cr + \fi} +\def\LT@xtabularcr{% + \@ifnextchar[\LT@argtabularcr\LT@ntabularcr} +\def\LT@ntabularcr{% + \ifnum0=`{}\fi + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \LT@bchunk} +\def\LT@argtabularcr[#1]{% + \ifnum0=`{}\fi + \ifdim #1>\z@ + \unskip\@xargarraycr{#1}% + \else + \@yargarraycr{#1}% + \fi + \LT@echunk + \LT@start + \unvbox\z@ + \LT@get@widths + \LT@bchunk} +\def\LT@echunk{% + \crcr\LT@save@row\cr\egroup + \global\setbox\@ne\lastbox + \unskip + \egroup} +\def\LT@entry#1#2{% + \ifhmode\@firstofone{&}\fi\omit + \ifnum#1=\c@LT@chunks + \else + \kern#2\relax + \fi} +\def\LT@entry@chop#1#2{% + \noexpand\LT@entry + {\ifnum#1>\c@LT@chunks + 1}{0pt% + \else + #1}{#2% + \fi}} +\def\LT@entry@write{% + \noexpand\LT@entry^^J% + \@spaces} +\def\LT@kill{% + \LT@echunk + \LT@get@widths + \expandafter\LT@rebox\LT@bchunk} +\def\LT@rebox#1\bgroup{% + #1\bgroup + \unvbox\z@ + \unskip + \setbox\z@\lastbox} +\def\LT@blank@row{% + \xdef\LT@save@row{\expandafter\LT@build@blank + \romannumeral\number\LT@cols 001 }} +\def\LT@build@blank#1{% + \if#1m% + \noexpand\LT@entry{1}{0pt}% + \expandafter\LT@build@blank + \fi} +\def\LT@make@row{% + \global\expandafter\let\expandafter\LT@save@row + \csname LT@\romannumeral\c@LT@tables\endcsname + \ifx\LT@save@row\relax + \LT@blank@row + \else + {\let\LT@entry\or + \if!% + \ifcase\expandafter\expandafter\expandafter\LT@cols + \expandafter\@gobble\LT@save@row + \or + \else + \relax + \fi + !% + \else + \aftergroup\LT@blank@row + \fi}% + \fi} +\let\setlongtables\relax +\def\LT@get@widths{% + \setbox\tw@\hbox{% + \unhbox\@ne + \let\LT@old@row\LT@save@row + \global\let\LT@save@row\@empty + \count@\LT@cols + \loop + \unskip + \setbox\tw@\lastbox + \ifhbox\tw@ + \LT@def@row + \advance\count@\m@ne + \repeat}% + \ifx\LT@@save@row\@undefined + \let\LT@@save@row\LT@save@row + \fi} +\def\LT@def@row{% + \let\LT@entry\or + \edef\@tempa{% + \ifcase\expandafter\count@\LT@old@row + \else + {1}{0pt}% + \fi}% + \let\LT@entry\relax + \xdef\LT@save@row{% + \LT@entry + \expandafter\LT@max@sel\@tempa + \LT@save@row}} +\def\LT@max@sel#1#2{% + {\ifdim#2=\wd\tw@ + #1% + \else + \number\c@LT@chunks + \fi}% + {\the\wd\tw@}} +\def\LT@hline{% + \noalign{\ifnum0=`}\fi + \penalty\@M + \futurelet\@let@token\LT@@hline} +\def\LT@@hline{% + \ifx\@let@token\hline + \global\let\@gtempa\@gobble + \gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}% + \else + \global\let\@gtempa\@empty + \gdef\LT@sep{\penalty-\@lowpenalty\vskip-\arrayrulewidth}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\LT@sep}% + \multispan\LT@cols + \unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr + \noalign{\penalty\@M}% + \@gtempa} +\def\LT@caption{% + \noalign\bgroup + \@ifnextchar[{\egroup\LT@c@ption\@firstofone}\LT@capti@n} +\def\LT@c@ption#1[#2]#3{% + \LT@makecaption#1\fnum@table{#3}% + \def\@tempa{#2}% + \ifx\@tempa\@empty\else + {\let\\\space + \addcontentsline{lot}{table}{\protect\numberline{\thetable}{#2}}}% + \fi} +\def\LT@capti@n{% + \@ifstar + {\egroup\LT@c@ption\@gobble[]}% + {\egroup\@xdblarg{\LT@c@ption\@firstofone}}} +\def\LT@makecaption#1#2#3{% + \LT@mcol\LT@cols c{\hbox to\z@{\hss\parbox[t]\LTcapwidth{% + \sbox\@tempboxa{#1{#2: }#3}% + \ifdim\wd\@tempboxa>\hsize + #1{#2: }#3% + \else + \hbox to\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \endgraf\vskip\baselineskip}% + \hss}}} +\def\LT@output{% + \ifnum\outputpenalty <-\@Mi + \ifnum\outputpenalty > -\LT@end@pen + \LT@err{floats and marginpars not allowed in a longtable}\@ehc + \else + \setbox\z@\vbox{\unvbox\@cclv}% + \ifdim \ht\LT@lastfoot>\ht\LT@foot + \dimen@\pagegoal + \advance\dimen@-\ht\LT@lastfoot + \ifdim\dimen@<\ht\z@ + \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}% + \@makecol + \@outputpage + \setbox\z@\vbox{\box\LT@head}% + \fi + \fi + \global\@colroom\@colht + \global\vsize\@colht + \vbox + {\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}% + \fi + \else + \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}% + \@makecol + \@outputpage + \global\vsize\@colroom + \copy\LT@head\nobreak + \fi} +\def\LT@end@hd@ft#1{% + \LT@echunk + \ifx\LT@start\endgraf + \LT@err + {Longtable head or foot not at start of table}% + {Increase LTchunksize}% + \fi + \setbox#1\box\z@ + \LT@get@widths + \LT@bchunk} +\def\endfirsthead{\LT@end@hd@ft\LT@firsthead} +\def\endhead{\LT@end@hd@ft\LT@head} +\def\endfoot{\LT@end@hd@ft\LT@foot} +\def\endlastfoot{\LT@end@hd@ft\LT@lastfoot} +\def\LT@startpbox#1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \vrule \@height \ht\@arstrutbox \@width \z@} +\def\LT@endpbox{% + \@finalstrut\@arstrutbox + \egroup + \the\LT@p@ftn + \global\LT@p@ftn{}% + \hfil} +\def\LT@p@ftntext#1{% + \edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}% + \global\LT@p@ftn\expandafter{\@tempa{#1}}}% + +\@namedef{ver@longtable.sty}{2014/10/28 v4.11 Multi-page Table package (DPC) - frozen version for doxygen} +\endinput +%% +%% End of file `longtable.sty'. diff --git a/Documentation/latex/make.bat b/Documentation/latex/make.bat new file mode 100644 index 0000000..55e79ba --- /dev/null +++ b/Documentation/latex/make.bat @@ -0,0 +1,31 @@ +set Dir_Old=%cd% +cd /D %~dp0 + +del /s /f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf + +set LATEX_CMD=pdflatex +%LATEX_CMD% refman +echo ---- +makeindex refman.idx +echo ---- +%LATEX_CMD% refman + +setlocal enabledelayedexpansion +set count=8 +:repeat +set content=X +for /F "tokens=*" %%T in ( 'findstr /C:"Rerun LaTeX" refman.log' ) do set content="%%~T" +if !content! == X for /F "tokens=*" %%T in ( 'findstr /C:"Rerun to get cross-references right" refman.log' ) do set content="%%~T" +if !content! == X goto :skip +set /a count-=1 +if !count! EQU 0 goto :skip + +echo ---- +%LATEX_CMD% refman +goto :repeat +:skip +endlocal +makeindex refman.idx +%LATEX_CMD% refman +cd /D %Dir_Old% +set Dir_Old= diff --git a/Documentation/latex/refman.tex b/Documentation/latex/refman.tex new file mode 100644 index 0000000..0c5157c --- /dev/null +++ b/Documentation/latex/refman.tex @@ -0,0 +1,187 @@ +\let\mypdfximage\pdfximage\def\pdfximage{\immediate\mypdfximage}\documentclass[twoside]{book} + +%% moved from doxygen.sty due to workaround for LaTex 2019 version and unmaintained tabu package +\usepackage{ifthen} +\ifx\requestedLaTeXdate\undefined +\usepackage{array} +\else +\usepackage{array}[=2016-10-06] +\fi +%% +% Packages required by doxygen +\usepackage{fixltx2e} +\usepackage{calc} +\usepackage{doxygen} +\usepackage{graphicx} +\usepackage[utf8]{inputenc} +\usepackage{makeidx} +\usepackage{multicol} +\usepackage{multirow} +\PassOptionsToPackage{warn}{textcomp} +\usepackage{textcomp} +\usepackage[nointegrals]{wasysym} +\usepackage[table]{xcolor} +\usepackage{ifpdf,ifxetex} + +% Font selection +\usepackage[T1]{fontenc} +\usepackage[scaled=.90]{helvet} +\usepackage{courier} +\usepackage{amssymb} +\usepackage{sectsty} +\renewcommand{\familydefault}{\sfdefault} +\allsectionsfont{% + \fontseries{bc}\selectfont% + \color{darkgray}% +} +\renewcommand{\DoxyLabelFont}{% + \fontseries{bc}\selectfont% + \color{darkgray}% +} +\newcommand{\+}{\discretionary{\mbox{\scriptsize$\hookleftarrow$}}{}{}} + +% Arguments of doxygenemoji: +% 1) '::' form of the emoji, already "LaTeX"-escaped +% 2) file with the name of the emoji without the .png extension +% in case image exist use this otherwise use the '::' form +\newcommand{\doxygenemoji}[2]{% + \IfFileExists{./#2.png}{\raisebox{-0.1em}{\includegraphics[height=0.9em]{./#2.png}}}{#1}% +} +% Page & text layout +\usepackage{geometry} +\geometry{% + a4paper,% + top=2.5cm,% + bottom=2.5cm,% + left=2.5cm,% + right=2.5cm% +} +\tolerance=750 +\hfuzz=15pt +\hbadness=750 +\setlength{\emergencystretch}{15pt} +\setlength{\parindent}{0cm} +\newcommand{\doxynormalparskip}{\setlength{\parskip}{3ex plus 2ex minus 2ex}} +\newcommand{\doxytocparskip}{\setlength{\parskip}{1ex plus 0ex minus 0ex}} +\doxynormalparskip +\makeatletter +\renewcommand{\paragraph}{% + \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@parafont% + }% +} +\renewcommand{\subparagraph}{% + \@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{% + \normalfont\normalsize\bfseries\SS@subparafont% + }% +} +\makeatother + +% Headers & footers +\usepackage{fancyhdr} +\pagestyle{fancyplain} +\fancyhead[LE]{\fancyplain{}{\bfseries\thepage}} +\fancyhead[CE]{\fancyplain{}{}} +\fancyhead[RE]{\fancyplain{}{\bfseries\leftmark}} +\fancyhead[LO]{\fancyplain{}{\bfseries\rightmark}} +\fancyhead[CO]{\fancyplain{}{}} +\fancyhead[RO]{\fancyplain{}{\bfseries\thepage}} +\fancyfoot[LE]{\fancyplain{}{}} +\fancyfoot[CE]{\fancyplain{}{}} +\fancyfoot[RE]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }} +\fancyfoot[LO]{\fancyplain{}{\bfseries\scriptsize Generated by Doxygen }} +\fancyfoot[CO]{\fancyplain{}{}} +\fancyfoot[RO]{\fancyplain{}{}} +\renewcommand{\footrulewidth}{0.4pt} +\renewcommand{\chaptermark}[1]{% + \markboth{#1}{}% +} +\renewcommand{\sectionmark}[1]{% + \markright{\thesection\ #1}% +} + +% Indices & bibliography +\usepackage{natbib} +\usepackage[titles]{tocloft} +\setcounter{tocdepth}{3} +\setcounter{secnumdepth}{5} +\makeindex + +\usepackage{newunicodechar} + \newunicodechar{⁻}{${}^{-}$}% Superscript minus + \newunicodechar{²}{${}^{2}$}% Superscript two + \newunicodechar{³}{${}^{3}$}% Superscript three + +% Hyperlinks (required, but should be loaded last) +\ifpdf + \usepackage[pdftex,pagebackref=true]{hyperref} +\else + \ifxetex + \usepackage[pagebackref=true]{hyperref} + \else + \usepackage[ps2pdf,pagebackref=true]{hyperref} + \fi +\fi + +\hypersetup{% + colorlinks=true,% + linkcolor=blue,% + citecolor=blue,% + unicode% +} + +% Custom commands +\newcommand{\clearemptydoublepage}{% + \newpage{\pagestyle{empty}\cleardoublepage}% +} + +\usepackage{caption} +\captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top} + +\usepackage{etoc} +\etocsettocstyle{\doxytocparskip}{\doxynormalparskip} +\renewcommand{\numberline}[1]{#1~} +%===== C O N T E N T S ===== + +\begin{document} + +% Titlepage & ToC +\hypersetup{pageanchor=false, + bookmarksnumbered=true, + pdfencoding=unicode + } +\pagenumbering{alph} +\begin{titlepage} +\vspace*{7cm} +\begin{center}% +{\Large M\+C\+A\+L\+\_\+\+D\+R\+I\+V\+ER }\\ +\vspace*{1cm} +{\large Generated by Doxygen 1.8.16}\\ +\end{center} +\end{titlepage} +\clearemptydoublepage +\pagenumbering{roman} +\tableofcontents +\clearemptydoublepage +\pagenumbering{arabic} +\hypersetup{pageanchor=true} + +%--- Begin generated contents --- +\chapter{File Index} +\input{files} +\chapter{File Documentation} +\input{gpio_8c} +\input{ivec__mcal__adc__dma_8c} +\input{ivec__mcal__timer_8c} +\input{uart_8c} +%--- End generated contents --- + +% Index +\backmatter +\newpage +\phantomsection +\clearemptydoublepage +\addcontentsline{toc}{chapter}{\indexname} +\printindex + +\end{document} diff --git a/Documentation/latex/tabu_doxygen.sty b/Documentation/latex/tabu_doxygen.sty new file mode 100644 index 0000000..e1d3f16 --- /dev/null +++ b/Documentation/latex/tabu_doxygen.sty @@ -0,0 +1,2557 @@ +%% +%% This is file `tabu.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tabu.dtx (with options: `package') +%% +%% This is a generated file. +%% Copyright (FC) 2010-2011 - lppl +%% +%% tabu : 2011/02/26 v2.8 - tabu : Flexible LaTeX tabulars +%% +%% ********************************************************************************************** +%% \begin{tabu} { preamble } => default target: \linewidth or \linegoal +%% \begin{tabu} to { preamble } => target specified +%% \begin{tabu} spread { preamble } => target relative to the ``natural width'' +%% +%% tabu works in text and in math modes. +%% +%% X columns: automatic width ajustment + horizontal and vertical alignment +%% \begin{tabu} { X[4c] X[1c] X[-2ml] } +%% +%% Horizontal lines and / or leaders: +%% \hline\hline => double horizontal line +%% \firsthline\hline => for nested tabulars +%% \lasthline\hline => for nested tabulars +%% \tabucline[line spec]{column-column} => ``funny'' lines (dash/leader) +%% Automatic lines / leaders : +%% \everyrow{\hline\hline} +%% +%% Vertical lines and / or leaders: +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt blue] } +%% \begin{tabu} { |[3pt red] X[4c] X[1c] X[-2ml] |[3pt on 2pt off 4pt blue] } +%% +%% Fixed vertical spacing adjustment: +%% \extrarowheight= \extrarowdepth= +%% or: \extrarowsep= => may be prefixed by \global +%% +%% Dynamic vertical spacing adjustment: +%% \abovetabulinesep= \belowtabulinesep= +%% or: \tabulinesep= => may be prefixed by \global +%% +%% delarray.sty shortcuts: in math and text modes +%% \begin{tabu} .... \({ preamble }\) +%% +%% Algorithms reports: +%% \tracingtabu=1 \tracingtabu=2 +%% +%% ********************************************************************************************** +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3 of this license or (at your option) any later +%% version. The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% +%% This work consists of the main source file tabu.dtx +%% and the derived files +%% tabu.sty, tabu.pdf, tabu.ins +%% +%% tabu : Flexible LaTeX tabulars +%% lppl copyright 2010-2011 by FC +%% + +\NeedsTeXFormat{LaTeX2e}[2005/12/01] +\ProvidesPackage{tabu_doxygen}[2011/02/26 v2.8 - flexible LaTeX tabulars (FC), frozen version for doxygen] +\RequirePackage{array}[2008/09/09] +\RequirePackage{varwidth}[2009/03/30] +\AtEndOfPackage{\tabu@AtEnd \let\tabu@AtEnd \@undefined} +\let\tabu@AtEnd\@empty +\def\TMP@EnsureCode#1={% + \edef\tabu@AtEnd{\tabu@AtEnd + \catcode#1 \the\catcode#1}% + \catcode#1=% +}% \TMP@EnsureCode +\TMP@EnsureCode 33 = 12 % ! +\TMP@EnsureCode 58 = 12 % : (for siunitx) +\TMP@EnsureCode124 = 12 % | +\TMP@EnsureCode 36 = 3 % $ = math shift +\TMP@EnsureCode 38 = 4 % & = tab alignmment character +\TMP@EnsureCode 32 = 10 % space +\TMP@EnsureCode 94 = 7 % ^ +\TMP@EnsureCode 95 = 8 % _ +%% Constants -------------------------------------------------------- +\newcount \c@taburow \def\thetaburow {\number\c@taburow} +\newcount \tabu@nbcols +\newcount \tabu@cnt +\newcount \tabu@Xcol +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcount \tabu@alloc \tabu@alloc=\m@ne +\newcount \tabu@nested +\def\tabu@alloc@{\global\advance\tabu@alloc \@ne \tabu@nested\tabu@alloc} +\newdimen \tabu@target +\newdimen \tabu@spreadtarget +\newdimen \tabu@naturalX +\newdimen \tabucolX +\let\tabu@DELTA \@tempdimc +\let\tabu@thick \@tempdima +\let\tabu@on \@tempdimb +\let\tabu@off \@tempdimc +\newdimen \tabu@Xsum +\newdimen \extrarowdepth +\newdimen \abovetabulinesep +\newdimen \belowtabulinesep +\newdimen \tabustrutrule \tabustrutrule \z@ +\newtoks \tabu@thebody +\newtoks \tabu@footnotes +\newsavebox \tabu@box +\newsavebox \tabu@arstrutbox +\newsavebox \tabu@hleads +\newsavebox \tabu@vleads +\newif \iftabu@colortbl +\newif \iftabu@siunitx +\newif \iftabu@measuring +\newif \iftabu@spread +\newif \iftabu@negcoef +\newif \iftabu@everyrow +\def\tabu@everyrowtrue {\global\let\iftabu@everyrow \iftrue} +\def\tabu@everyrowfalse{\global\let\iftabu@everyrow \iffalse} +\newif \iftabu@long +\newif \iftabuscantokens +\def\tabu@rescan {\tabu@verbatim \scantokens } +%% Utilities (for internal usage) ----------------------------------- +\def\tabu@gobblespace #1 {#1} +\def\tabu@gobbletoken #1#2{#1} +\def\tabu@gobbleX{\futurelet\@let@token \tabu@gobblex} +\def\tabu@gobblex{\if ^^J\noexpand\@let@token \expandafter\@gobble + \else\ifx \@sptoken\@let@token + \expandafter\tabu@gobblespace\expandafter\tabu@gobbleX + \fi\fi +}% \tabu@gobblex +\def\tabu@X{^^J} +{\obeyspaces +\global\let\tabu@spxiii= % saves an active space (for \ifx) +\gdef\tabu@@spxiii{ }} +\def\tabu@ifenvir {% only for \multicolumn + \expandafter\tabu@if@nvir\csname\@currenvir\endcsname +}% \tabu@ifenvir +\def\tabu@if@nvir #1{\csname @\ifx\tabu#1first\else + \ifx\longtabu#1first\else + second\fi\fi oftwo\endcsname +}% \tabu@ifenvir +\def\tabu@modulo #1#2{\numexpr\ifnum\numexpr#1=\z@ 0\else #1-(#1-(#2-1)/2)/(#2)*(#2)\fi} +{\catcode`\&=3 +\gdef\tabu@strtrim #1{% #1 = control sequence to trim + \ifodd 1\ifx #1\@empty \else \ifx #1\space \else 0\fi \fi + \let\tabu@c@l@r \@empty \let#1\@empty + \else \expandafter \tabu@trimspaces #1\@nnil + \fi +}% \tabu@strtrim +\gdef\tabu@trimspaces #1\@nnil{\let\tabu@c@l@r=#2\tabu@firstspace .#1& }% +\gdef\tabu@firstspace #1#2#3 &{\tabu@lastspace #2#3&} +\gdef\tabu@lastspace #1{\def #3{#1}% + \ifx #3\tabu@c@l@r \def\tabu@c@l@r{\protect\color{#1}}\expandafter\remove@to@nnil \fi + \tabu@trimspaces #1\@nnil} +}% \catcode +\def\tabu@sanitizearg #1#2{{% + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef#2{#1}\tabu@strtrim#2\@onelevel@sanitize#2% + \expandafter}\expandafter\def\expandafter#2\expandafter{#2}% +}% \tabu@sanitizearg +\def\tabu@textbar #1{\begingroup \endlinechar\m@ne \scantokens{\def\:{|}}% + \expandafter\endgroup \expandafter#1\:% !!! semi simple group !!! +}% \tabu@textbar +\def\tabu@everyrow@bgroup{\iftabu@everyrow \begingroup \else \noalign{\ifnum0=`}\fi \fi} +\def\tabu@everyrow@egroup{% + \iftabu@everyrow \expandafter \endgroup \the\toks@ + \else \ifnum0=`{\fi}% + \fi +}% \tabu@everyrow@egroup +\def\tabu@arstrut {\global\setbox\@arstrutbox \hbox{\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \z@}% +}% \tabu@arstrut +\def\tabu@rearstrut {% + \@tempdima \arraystretch\dimexpr\ht\strutbox+\extrarowheight \relax + \@tempdimb \arraystretch\dimexpr\dp\strutbox+\extrarowdepth \relax + \ifodd 1\ifdim \ht\@arstrutbox=\@tempdima + \ifdim \dp\@arstrutbox=\@tempdimb 0 \fi\fi + \tabu@mkarstrut + \fi +}% \tabu@rearstrut +\def\tabu@@DBG #1{\ifdim\tabustrutrule>\z@ \color{#1}\fi} +\def\tabu@DBG@arstrut {\global\setbox\@arstrutbox + \hbox to\z@{\hbox to\z@{\hss + {\tabu@DBG{cyan}\vrule + height \arraystretch \dimexpr\ht\strutbox+\extrarowheight + depth \z@ + width \tabustrutrule}\kern-\tabustrutrule + {\tabu@DBG{pink}\vrule + height \z@ + depth \arraystretch \dimexpr\dp\strutbox+\extrarowdepth + width \tabustrutrule}}}% +}% \tabu@DBG@arstrut +\def\tabu@save@decl{\toks\count@ \expandafter{\the\toks\expandafter\count@ + \@nextchar}}% +\def\tabu@savedecl{\ifcat$\d@llarend\else + \let\save@decl \tabu@save@decl \fi % no inversion of tokens in text mode +}% \tabu@savedecl +\def\tabu@finalstrut #1{\unskip\ifhmode\nobreak\fi\vrule height\z@ depth\z@ width\z@} +\newcommand*\tabuDisableCommands {\g@addto@macro\tabu@trialh@@k } +\let\tabu@trialh@@k \@empty +\def\tabu@nowrite #1#{{\afterassignment}\toks@} +\let\tabu@write\write +\let\tabu@immediate\immediate +\def\tabu@WRITE{\begingroup + \def\immediate\write{\aftergroup\endgroup + \tabu@immediate\tabu@write}% +}% \tabu@WRITE +\expandafter\def\expandafter\tabu@GenericError\expandafter{% + \expandafter\tabu@WRITE\GenericError} +\def\tabu@warn{\tabu@WRITE\PackageWarning{tabu}} +\def\tabu@noxfootnote [#1]{\@gobble} +\def\tabu@nocolor #1#{\@gobble} +\newcommand*\tabu@norowcolor[2][]{} +\def\tabu@maybesiunitx #1{\def\tabu@temp{#1}% + \futurelet\@let@token \tabu@m@ybesiunitx} +\def\tabu@m@ybesiunitx #1{\def\tabu@m@ybesiunitx {% + \ifx #1\@let@token \let\tabu@cellleft \@empty \let\tabu@cellright \@empty \fi + \tabu@temp}% \tabu@m@ybesiunitx +}\expandafter\tabu@m@ybesiunitx \csname siunitx_table_collect_begin:Nn\endcsname +\def\tabu@celllalign@def #1{\def\tabu@celllalign{\tabu@maybesiunitx{#1}}}% +%% Fixed vertical spacing adjustment: \extrarowsep ------------------ +\newcommand*\extrarowsep{\edef\tabu@C@extra{\the\numexpr\tabu@C@extra+1}% + \iftabu@everyrow \aftergroup\tabu@Gextra + \else \aftergroup\tabu@n@Gextra + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@extra} \tabu@extra +}% \extrarowsep +\def\tabu@extra {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setextrasep \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extra +\def\tabu@setextra #1#2{\def\tabu@temp{\tabu@extr@#1#2}\afterassignment\tabu@temp#2} +\def\tabu@extr@ #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setextra\extrarowdepth \extrarowheight}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setextra\extrarowheight \extrarowdepth}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth + \fi \tabu@temp}% +}% \tabu@extr@ +\def\tabu@setextrasep {\extrarowheight=\extrarowdepth + \tabu@Gsave \tabu@G@extra \tabu@C@extra \extrarowheight \extrarowdepth +}% \tabu@setextrasep +\def\tabu@Gextra{\ifx \tabu@G@extra\@empty \else {\tabu@Rextra}\fi} +\def\tabu@n@Gextra{\ifx \tabu@G@extra\@empty \else \noalign{\tabu@Rextra}\fi} +\def\tabu@Rextra{\tabu@Grestore \tabu@G@extra \tabu@C@extra} +\let\tabu@C@extra \z@ +\let\tabu@G@extra \@empty +%% Dynamic vertical spacing adjustment: \tabulinesep ---------------- +\newcommand*\tabulinesep{\edef\tabu@C@linesep{\the\numexpr\tabu@C@linesep+1}% + \iftabu@everyrow \aftergroup\tabu@Glinesep + \else \aftergroup\tabu@n@Glinesep + \fi + \@ifnextchar={\tabu@gobbletoken\tabu@linesep} \tabu@linesep +}% \tabulinesep +\def\tabu@linesep {\@ifnextchar_% + {\tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}} + {\ifx ^\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}}% + \else \let\tabu@temp \@empty + \afterassignment \tabu@setlinesep \abovetabulinesep + \fi \tabu@temp}% +}% \tabu@linesep +\def\tabu@setsep #1#2{\def\tabu@temp{\tabu@sets@p#1#2}\afterassignment\tabu@temp#2} +\def\tabu@sets@p #1#2{\@ifnextchar^% + {\tabu@gobbletoken{\tabu@setsep\belowtabulinesep \abovetabulinesep}} + {\ifx _\@let@token \def\tabu@temp{% + \tabu@gobbletoken{\tabu@setsep\abovetabulinesep \belowtabulinesep}}% + \else \let\tabu@temp \@empty + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep + \fi \tabu@temp}% +}% \tabu@sets@p +\def\tabu@setlinesep {\belowtabulinesep=\abovetabulinesep + \tabu@Gsave \tabu@G@linesep \tabu@C@linesep \abovetabulinesep \belowtabulinesep +}% \tabu@setlinesep +\def\tabu@Glinesep{\ifx \tabu@G@linesep\@empty \else {\tabu@Rlinesep}\fi} +\def\tabu@n@Glinesep{\ifx \tabu@G@linesep\@empty \else \noalign{\tabu@Rlinesep}\fi} +\def\tabu@Rlinesep{\tabu@Grestore \tabu@G@linesep \tabu@C@linesep} +\let\tabu@C@linesep \z@ +\let\tabu@G@linesep \@empty +%% \global\extrarowsep and \global\tabulinesep ------------------- +\def\tabu@Gsave #1#2#3#4{\xdef#1{#1% + \toks#2{\toks\the\currentgrouplevel{\global#3\the#3\global#4\the#4}}}% +}% \tabu@Gsave +\def\tabu@Grestore#1#2{% + \toks#2{}#1\toks\currentgrouplevel\expandafter{\expandafter}\the\toks#2\relax + \ifcat$\the\toks\currentgrouplevel$\else + \global\let#1\@empty \global\let#2\z@ + \the\toks\currentgrouplevel + \fi +}% \tabu@Grestore +%% Setting code for every row --------------------------------------- +\newcommand*\everyrow{\tabu@everyrow@bgroup + \tabu@start \z@ \tabu@stop \z@ \tabu@evrstartstop +}% \everyrow +\def\tabu@evrstartstop {\@ifnextchar^% + {\afterassignment \tabu@evrstartstop \tabu@stop=}% + {\ifx ^\@let@token + \afterassignment\tabu@evrstartstop \tabu@start=% + \else \afterassignment\tabu@everyr@w \toks@ + \fi}% +}% \tabu@evrstartstop +\def\tabu@everyr@w {% + \xdef\tabu@everyrow{% + \noexpand\tabu@everyrowfalse + \let\noalign \relax + \noexpand\tabu@rowfontreset + \iftabu@colortbl \noexpand\tabu@rc@ \fi % \taburowcolors + \let\noexpand\tabu@docline \noexpand\tabu@docline@evr + \the\toks@ + \noexpand\tabu@evrh@@k + \noexpand\tabu@rearstrut + \global\advance\c@taburow \@ne}% + \iftabu@everyrow \toks@\expandafter + {\expandafter\def\expandafter\tabu@evr@L\expandafter{\the\toks@}\ignorespaces}% + \else \xdef\tabu@evr@G{\the\toks@}% + \fi + \tabu@everyrow@egroup +}% \tabu@everyr@w +\def\tabu@evr {\def\tabu@evrh@@k} % for internal use only +\tabu@evr{} +%% line style and leaders ------------------------------------------- +\newcommand*\newtabulinestyle [1]{% + {\@for \@tempa :=#1\do{\expandafter\tabu@newlinestyle \@tempa==\@nil}}% +}% \newtabulinestyle +\def\tabu@newlinestyle #1=#2=#3\@nil{\tabu@getline {#2}% + \tabu@sanitizearg {#1}\@tempa + \ifodd 1\ifx \@tempa\@empty \ifdefined\tabu@linestyle@ 0 \fi\fi + \global\expandafter\let + \csname tabu@linestyle@\@tempa \endcsname =\tabu@thestyle \fi +}% \tabu@newlinestyle +\newcommand*\tabulinestyle [1]{\tabu@everyrow@bgroup \tabu@getline{#1}% + \iftabu@everyrow + \toks@\expandafter{\expandafter \def \expandafter + \tabu@ls@L\expandafter{\tabu@thestyle}\ignorespaces}% + \gdef\tabu@ls@{\tabu@ls@L}% + \else + \global\let\tabu@ls@G \tabu@thestyle + \gdef\tabu@ls@{\tabu@ls@G}% + \fi + \tabu@everyrow@egroup +}% \tabulinestyle +\newcommand*\taburulecolor{\tabu@everyrow@bgroup \tabu@textbar \tabu@rulecolor} +\def\tabu@rulecolor #1{\toks@{}% + \def\tabu@temp #1##1#1{\tabu@ruledrsc{##1}}\@ifnextchar #1% + \tabu@temp + \tabu@rulearc +}% \tabu@rulecolor +\def\tabu@ruledrsc #1{\edef\tabu@temp{#1}\tabu@strtrim\tabu@temp + \ifx \tabu@temp\@empty \def\tabu@temp{\tabu@rule@drsc@ {}{}}% + \else \edef\tabu@temp{\noexpand\tabu@rule@drsc@ {}{\tabu@temp}}% + \fi + \tabu@temp +}% \tabu@ruledrsc@ +\def\tabu@ruledrsc@ #1#{\tabu@rule@drsc@ {#1}} +\def\tabu@rule@drsc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@{\let\CT@drsc@ \relax}% + \else \toks@{\def\CT@drsc@{\color #1{#2}}}% + \fi + \else + \ifx \\#1#2\\\global\let\CT@drsc@ \relax + \else \gdef\CT@drsc@{\color #1{#2}}% + \fi + \fi + \tabu@rulearc +}% \tabu@rule@drsc@ +\def\tabu@rulearc #1#{\tabu@rule@arc@ {#1}} +\def\tabu@rule@arc@ #1#2{% + \iftabu@everyrow + \ifx \\#1#2\\\toks@\expandafter{\the\toks@ \def\CT@arc@{}}% + \else \toks@\expandafter{\the\toks@ \def\CT@arc@{\color #1{#2}}}% + \fi + \toks@\expandafter{\the\toks@ + \let\tabu@arc@L \CT@arc@ + \let\tabu@drsc@L \CT@drsc@ + \ignorespaces}% + \else + \ifx \\#1#2\\\gdef\CT@arc@{}% + \else \gdef\CT@arc@{\color #1{#2}}% + \fi + \global\let\tabu@arc@G \CT@arc@ + \global\let\tabu@drsc@G \CT@drsc@ + \fi + \tabu@everyrow@egroup +}% \tabu@rule@arc@ +\def\taburowcolors {\tabu@everyrow@bgroup \@testopt \tabu@rowcolors 1} +\def\tabu@rowcolors [#1]#2#{\tabu@rowc@lors{#1}{#2}} +\def\tabu@rowc@lors #1#2#3{% + \toks@{}\@defaultunits \count@ =\number0#2\relax \@nnil + \@defaultunits \tabu@start =\number0#1\relax \@nnil + \ifnum \count@<\tw@ \count@=\tw@ \fi + \advance\tabu@start \m@ne + \ifnum \tabu@start<\z@ \tabu@start \z@ \fi + \tabu@rowcolorseries #3\in@..\in@ \@nnil +}% \tabu@rowcolors +\def\tabu@rowcolorseries #1..#2\in@ #3\@nnil {% + \ifx \in@#1\relax + \iftabu@everyrow \toks@{\def\tabu@rc@{}\let\tabu@rc@L \tabu@rc@}% + \else \gdef\tabu@rc@{}\global\let\tabu@rc@G \tabu@rc@ + \fi + \else + \ifx \\#2\\\tabu@rowcolorserieserror \fi + \tabu@sanitizearg{#1}\tabu@temp + \tabu@sanitizearg{#2}\@tempa + \advance\count@ \m@ne + \iftabu@everyrow + \def\tabu@rc@ ##1##2##3##4{\def\tabu@rc@{% + \ifnum ##2=\c@taburow + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{##3}{##4}\fi + \ifnum \c@taburow<##2 \else + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\z@ + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}\fi}% + }\edef\x{\noexpand\tabu@rc@ {\the\count@} + {\the\tabu@start} + {\tabu@temp} + {\@tempa}% + }\x + \toks@\expandafter{\expandafter\def\expandafter\tabu@rc@\expandafter{\tabu@rc@}}% + \toks@\expandafter{\the\toks@ \let\tabu@rc@L \tabu@rc@ \ignorespaces}% + \else % inside \noalign + \definecolorseries{tabu@rcseries@\the\tabu@nested}{rgb}{last}{\tabu@temp}{\@tempa}% + \expandafter\resetcolorseries\expandafter[\the\count@]{tabu@rcseries@\the\tabu@nested}% + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \let\noalign \relax \rowcolor{tabu@rc@\the\tabu@nested}% + \def\tabu@rc@ ##1##2{\gdef\tabu@rc@{% + \ifnum \tabu@modulo {\c@taburow-##2}{##1+1}=\@ne + \resetcolorseries[{##1}]{tabu@rcseries@\the\tabu@nested}\fi + \xglobal\colorlet{tabu@rc@\the\tabu@nested}{tabu@rcseries@\the\tabu@nested!!+}% + \rowcolor{tabu@rc@\the\tabu@nested}}% + }\edef\x{\noexpand\tabu@rc@{\the\count@}{\the\c@taburow}}\x + \global\let\tabu@rc@G \tabu@rc@ + \fi + \fi + \tabu@everyrow@egroup +}% \tabu@rowcolorseries +\tabuDisableCommands {\let\tabu@rc@ \@empty } +\def\tabu@rowcolorserieserror {\PackageError{tabu} + {Invalid syntax for \string\taburowcolors + \MessageBreak Please look at the documentation!}\@ehd +}% \tabu@rowcolorserieserror +\newcommand*\tabureset {% + \tabulinesep=\z@ \extrarowsep=\z@ \extratabsurround=\z@ + \tabulinestyle{}\everyrow{}\taburulecolor||{}\taburowcolors{}% +}% \tabureset +%% Parsing the line styles ------------------------------------------ +\def\tabu@getline #1{\begingroup + \csname \ifcsname if@safe@actives\endcsname % + @safe@activestrue\else + relax\fi \endcsname + \edef\tabu@temp{#1}\tabu@sanitizearg{#1}\@tempa + \let\tabu@thestyle \relax + \ifcsname tabu@linestyle@\@tempa \endcsname + \edef\tabu@thestyle{\endgroup + \def\tabu@thestyle{\expandafter\noexpand + \csname tabu@linestyle@\@tempa\endcsname}% + }\tabu@thestyle + \else \expandafter\tabu@definestyle \tabu@temp \@nil + \fi +}% \tabu@getline +\def\tabu@definestyle #1#2\@nil {\endlinechar \m@ne \makeatletter + \tabu@thick \maxdimen \tabu@on \maxdimen \tabu@off \maxdimen + \let\tabu@c@lon \@undefined \let\tabu@c@loff \@undefined + \ifodd 1\ifcat .#1\else\ifcat\relax #1\else 0\fi\fi % catcode 12 or non expandable cs + \def\tabu@temp{\tabu@getparam{thick}}% + \else \def\tabu@temp{\tabu@getparam{thick}\maxdimen}% + \fi + {% + \let\tabu@ \relax + \def\:{\obeyspaces \tabu@oXIII \tabu@commaXIII \edef\:}% (space active \: happy ;-)) + \scantokens{\:{\tabu@temp #1#2 \tabu@\tabu@}}% + \expandafter}\expandafter + \def\expandafter\:\expandafter{\:}% line spec rewritten now ;-) + \def\;{\def\:}% + \scantokens\expandafter{\expandafter\;\expandafter{\:}}% space is now inactive (catcode 10) + \let\tabu@ \tabu@getcolor \:% all arguments are ready now ;-) + \ifdefined\tabu@c@lon \else \let\tabu@c@lon\@empty \fi + \ifx \tabu@c@lon\@empty \def\tabu@c@lon{\CT@arc@}\fi + \ifdefined\tabu@c@loff \else \let\tabu@c@loff \@empty \fi + \ifdim \tabu@on=\maxdimen \ifdim \tabu@off<\maxdimen + \tabu@on \tabulineon \fi\fi + \ifdim \tabu@off=\maxdimen \ifdim \tabu@on<\maxdimen + \tabu@off \tabulineoff \fi\fi + \ifodd 1\ifdim \tabu@off=\maxdimen \ifdim \tabu@on=\maxdimen 0 \fi\fi + \in@true % + \else \in@false % + \fi + \ifdim\tabu@thick=\maxdimen \def\tabu@thick{\arrayrulewidth}% + \else \edef\tabu@thick{\the\tabu@thick}% + \fi + \edef \tabu@thestyle ##1##2{\endgroup + \def\tabu@thestyle{% + \ifin@ \noexpand\tabu@leadersstyle {\tabu@thick} + {\the\tabu@on}{##1} + {\the\tabu@off}{##2}% + \else \noexpand\tabu@rulesstyle + {##1\vrule width \tabu@thick}% + {##1\leaders \hrule height \tabu@thick \hfil}% + \fi}% + }\expandafter \expandafter + \expandafter \tabu@thestyle \expandafter + \expandafter \expandafter + {\expandafter\tabu@c@lon\expandafter}\expandafter{\tabu@c@loff}% +}% \tabu@definestyle +{\catcode`\O=\active \lccode`\O=`\o \catcode`\,=\active + \lowercase{\gdef\tabu@oXIII {\catcode`\o=\active \let O=\tabu@oxiii}} + \gdef\tabu@commaXIII {\catcode`\,=\active \let ,=\space} +}% \catcode +\def\tabu@oxiii #1{% + \ifcase \ifx n#1\z@ \else + \ifx f#1\@ne\else + \tw@ \fi\fi + \expandafter\tabu@onxiii + \or \expandafter\tabu@ofxiii + \else o% + \fi#1}% +\def\tabu@onxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx \tabu@spxiii#2\@ne\else + \tw@ \fi\fi\fi + \tabu@getparam{on}#2\expandafter\@gobble + \or \expandafter\tabu@onxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}}% +\def\tabu@ofxiii #1#2{% + \ifx #2f\expandafter\tabu@offxiii + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@offxiii #1#2{% + \ifcase \ifx !#2\tw@ \else + \ifcat.\noexpand#2\z@ \else + \ifx\tabu@spxiii#2\@ne \else + \tw@ \fi\fi\fi + \tabu@getparam{off}#2\expandafter\@gobble + \or \expandafter\tabu@offxiii % (space is active) + \else o\expandafter\@firstofone + \fi{#1#2}} +\def\tabu@getparam #1{\tabu@ \csname tabu@#1\endcsname=} +\def\tabu@getcolor #1{% \tabu@ <- \tabu@getcolor after \edef + \ifx \tabu@#1\else % no more spec + \let\tabu@theparam=#1\afterassignment \tabu@getc@l@r #1\fi +}% \tabu@getcolor +\def\tabu@getc@l@r #1\tabu@ {% + \def\tabu@temp{#1}\tabu@strtrim \tabu@temp + \ifx \tabu@temp\@empty + \else%\ifcsname \string\color@\tabu@temp \endcsname % if the color exists + \ifx \tabu@theparam \tabu@off \let\tabu@c@loff \tabu@c@l@r + \else \let\tabu@c@lon \tabu@c@l@r + \fi + %\else \tabu@warncolour{\tabu@temp}% + \fi%\fi + \tabu@ % next spec +}% \tabu@getc@l@r +\def\tabu@warncolour #1{\PackageWarning{tabu} + {Color #1 is not defined. Default color used}% +}% \tabu@warncolour +\def\tabu@leadersstyle #1#2#3#4#5{\def\tabu@leaders{{#1}{#2}{#3}{#4}{#5}}% + \ifx \tabu@leaders\tabu@leaders@G \else + \tabu@LEADERS{#1}{#2}{#3}{#4}{#5}\fi +}% \tabu@leadersstyle +\def\tabu@rulesstyle #1#2{\let\tabu@leaders \@undefined + \gdef\tabu@thevrule{#1}\gdef\tabu@thehrule{#2}% +}% \tabu@rulesstyle +%% The leaders boxes ------------------------------------------------ +\def\tabu@LEADERS #1#2#3#4#5{%% width, dash, dash color, gap, gap color + {\let\color \tabu@color % => during trials -> \color = \tabu@nocolor + {% % but the leaders boxes should have colors ! + \def\@therule{\vrule}\def\@thick{height}\def\@length{width}% + \def\@box{\hbox}\def\@unbox{\unhbox}\def\@elt{\wd}% + \def\@skip{\hskip}\def\@ss{\hss}\def\tabu@leads{\tabu@hleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thehleaders \tabu@theleaders + }% + {% + \def\@therule{\hrule}\def\@thick{width}\def\@length{height}% + \def\@box{\vbox}\def\@unbox{\unvbox}\def\@elt{\ht}% + \def\@skip{\vskip}\def\@ss{\vss}\def\tabu@leads{\tabu@vleads}% + \tabu@l@@d@rs {#1}{#2}{#3}{#4}{#5}% + \global\let\tabu@thevleaders \tabu@theleaders + }% + \gdef\tabu@leaders@G{{#1}{#2}{#3}{#4}{#5}}% + }% +}% \tabu@LEADERS +\def\tabu@therule #1#2{\@therule \@thick#1\@length\dimexpr#2/2 \@depth\z@} +\def\tabu@l@@d@rs #1#2#3#4#5{%% width, dash, dash color, gap, gap color + \global\setbox \tabu@leads=\@box{% + {#3\tabu@therule{#1}{#2}}% + \ifx\\#5\\\@skip#4\else{#5\tabu@therule{#1}{#4*2}}\fi + {#3\tabu@therule{#1}{#2}}}% + \global\setbox\tabu@leads=\@box to\@elt\tabu@leads{\@ss + {#3\tabu@therule{#1}{#2}}\@unbox\tabu@leads}% + \edef\tabu@theleaders ##1{\def\noexpand\tabu@theleaders {% + {##1\tabu@therule{#1}{#2}}% + \xleaders \copy\tabu@leads \@ss + \tabu@therule{0pt}{-#2}{##1\tabu@therule{#1}{#2}}}% + }\tabu@theleaders{#3}% +}% \tabu@l@@d@rs +%% \tabu \endtabu \tabu* \longtabu \endlongtabu \longtabu* ---------- +\newcommand*\tabu {\tabu@longfalse + \ifmmode \def\tabu@ {\array}\def\endtabu {\endarray}% + \else \def\tabu@ {\tabu@tabular}\def\endtabu {\endtabular}\fi + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endtabu*\endcsname{\endtabu}% + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {tabu} +\let\tabu@tabular \tabular % +\expandafter\def\csname tabu*\endcsname{\tabuscantokenstrue \tabu} +\newcommand*\longtabu {\tabu@longtrue + \ifmmode\PackageError{tabu}{longtabu not allowed in math mode}\fi + \def\tabu@{\longtable}\def\endlongtabu{\endlongtable}% + \LTchunksize=\@M + \expandafter\let\csname tabu*\endcsname \tabu + \expandafter\def\csname endlongtabu*\endcsname{\endlongtabu}% + \let\LT@startpbox \tabu@LT@startpbox % \everypar{ array struts } + \tabu@spreadfalse \tabu@negcoeffalse \tabu@settarget +}% {longtabu} +\expandafter\def\csname longtabu*\endcsname{\tabuscantokenstrue \longtabu} +\def\tabu@nolongtabu{\PackageError{tabu} + {longtabu requires the longtable package}\@ehd} +%% Read the target and then : \tabular or \@array ------------------ +\def\tabu@settarget {\futurelet\@let@token \tabu@sett@rget } +\def\tabu@sett@rget {\tabu@target \z@ + \ifcase \ifx \bgroup\@let@token \z@ \else + \ifx \@sptoken\@let@token \@ne \else + \if t\@let@token \tw@ \else + \if s\@let@token \thr@@\else + \z@\fi\fi\fi\fi + \expandafter\tabu@begin + \or \expandafter\tabu@gobblespace\expandafter\tabu@settarget + \or \expandafter\tabu@to + \or \expandafter\tabu@spread + \fi +}% \tabu@sett@rget +\def\tabu@to to{\def\tabu@halignto{to}\tabu@gettarget} +\def\tabu@spread spread{\tabu@spreadtrue\def\tabu@halignto{spread}\tabu@gettarget} +\def\tabu@gettarget {\afterassignment\tabu@linegoaltarget \tabu@target } +\def\tabu@linegoaltarget {\futurelet\tabu@temp \tabu@linegoalt@rget } +\def\tabu@linegoalt@rget {% + \ifx \tabu@temp\LNGL@setlinegoal + \LNGL@setlinegoal \expandafter \@firstoftwo \fi % @gobbles \LNGL@setlinegoal + \tabu@begin +}% \tabu@linegoalt@rget +\def\tabu@begin #1#{% + \iftabu@measuring \expandafter\tabu@nestedmeasure \fi + \ifdim \tabu@target=\z@ \let\tabu@halignto \@empty + \else \edef\tabu@halignto{\tabu@halignto\the\tabu@target}% + \fi + \@testopt \tabu@tabu@ \tabu@aligndefault #1\@nil +}% \tabu@begin +\long\def\tabu@tabu@ [#1]#2\@nil #3{\tabu@setup + \def\tabu@align {#1}\def\tabu@savedpream{\NC@find #3}% + \tabu@ [\tabu@align ]#2{#3\tabu@rewritefirst }% +}% \tabu@tabu@ +\def\tabu@nestedmeasure {% + \ifodd 1\iftabu@spread \else \ifdim\tabu@target=\z@ \else 0 \fi\fi\relax + \tabu@spreadtrue + \else \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}% + \expandafter\tabu@collectbody\expandafter\tabu@quickrule + \expandafter\endgroup + \fi +}% \tabu@nestedmeasure +\def\tabu@quickrule {\indent\vrule height\z@ depth\z@ width\tabu@target} +%% \tabu@setup \tabu@init \tabu@indent +\def\tabu@setup{\tabu@alloc@ + \ifcase \tabu@nested + \ifmmode \else \iftabu@spread\else \ifdim\tabu@target=\z@ + \let\tabu@afterendpar \par + \fi\fi\fi + \def\tabu@aligndefault{c}\tabu@init \tabu@indent + \else % + \def\tabu@aligndefault{t}\let\tabudefaulttarget \linewidth + \fi + \let\tabu@thetarget \tabudefaulttarget \let\tabu@restored \@undefined + \edef\tabu@NC@list{\the\NC@list}\NC@list{\NC@do \tabu@rewritefirst}% + \everycr{}\let\@startpbox \tabu@startpbox % for nested tabu inside longtabu... + \let\@endpbox \tabu@endpbox % idem " " " " " " + \let\@tabarray \tabu@tabarray % idem " " " " " " + \tabu@setcleanup \tabu@setreset +}% \tabu@setup +\def\tabu@init{\tabu@starttimer \tabu@measuringfalse + \edef\tabu@hfuzz {\the\dimexpr\hfuzz+1sp}\global\tabu@footnotes{}% + \let\firsthline \tabu@firsthline \let\lasthline \tabu@lasthline + \let\firstline \tabu@firstline \let\lastline \tabu@lastline + \let\hline \tabu@hline \let\@xhline \tabu@xhline + \let\color \tabu@color \let\@arstrutbox \tabu@arstrutbox + \iftabu@colortbl\else\let\LT@@hline \tabu@LT@@hline \fi + \tabu@trivlist % + \let\@footnotetext \tabu@footnotetext \let\@xfootnotetext \tabu@xfootnotetext + \let\@xfootnote \tabu@xfootnote \let\centering \tabu@centering + \let\raggedright \tabu@raggedright \let\raggedleft \tabu@raggedleft + \let\tabudecimal \tabu@tabudecimal \let\Centering \tabu@Centering + \let\RaggedRight \tabu@RaggedRight \let\RaggedLeft \tabu@RaggedLeft + \let\justifying \tabu@justifying \let\rowfont \tabu@rowfont + \let\fbox \tabu@fbox \let\color@b@x \tabu@color@b@x + \let\tabu@@everycr \everycr \let\tabu@@everypar \everypar + \let\tabu@prepnext@tokORI \prepnext@tok\let\prepnext@tok \tabu@prepnext@tok + \let\tabu@multicolumnORI\multicolumn \let\multicolumn \tabu@multicolumn + \let\tabu@startpbox \@startpbox % for nested tabu inside longtabu pfff !!! + \let\tabu@endpbox \@endpbox % idem " " " " " " " + \let\tabu@tabarray \@tabarray % idem " " " " " " " + \tabu@adl@fix \let\endarray \tabu@endarray % colortbl & arydshln (delarray) + \iftabu@colortbl\CT@everycr\expandafter{\expandafter\iftabu@everyrow \the\CT@everycr \fi}\fi +}% \tabu@init +\def\tabu@indent{% correction for indentation + \ifdim \parindent>\z@\ifx \linewidth\tabudefaulttarget + \everypar\expandafter{% + \the\everypar\everypar\expandafter{\the\everypar}% + \setbox\z@=\lastbox + \ifdim\wd\z@>\z@ \edef\tabu@thetarget + {\the\dimexpr -\wd\z@+\tabudefaulttarget}\fi + \box\z@}% + \fi\fi +}% \tabu@indent +\def\tabu@setcleanup {% saves last global assignments + \ifodd 1\ifmmode \else \iftabu@long \else 0\fi\fi\relax + \def\tabu@aftergroupcleanup{% + \def\tabu@aftergroupcleanup{\aftergroup\tabu@cleanup}}% + \else + \def\tabu@aftergroupcleanup{% + \aftergroup\aftergroup\aftergroup\tabu@cleanup + \let\tabu@aftergroupcleanup \relax}% + \fi + \let\tabu@arc@Gsave \tabu@arc@G + \let\tabu@arc@G \tabu@arc@L % + \let\tabu@drsc@Gsave \tabu@drsc@G + \let\tabu@drsc@G \tabu@drsc@L % + \let\tabu@ls@Gsave \tabu@ls@G + \let\tabu@ls@G \tabu@ls@L % + \let\tabu@rc@Gsave \tabu@rc@G + \let\tabu@rc@G \tabu@rc@L % + \let\tabu@evr@Gsave \tabu@evr@G + \let\tabu@evr@G \tabu@evr@L % + \let\tabu@celllalign@save \tabu@celllalign + \let\tabu@cellralign@save \tabu@cellralign + \let\tabu@cellleft@save \tabu@cellleft + \let\tabu@cellright@save \tabu@cellright + \let\tabu@@celllalign@save \tabu@@celllalign + \let\tabu@@cellralign@save \tabu@@cellralign + \let\tabu@@cellleft@save \tabu@@cellleft + \let\tabu@@cellright@save \tabu@@cellright + \let\tabu@rowfontreset@save \tabu@rowfontreset + \let\tabu@@rowfontreset@save\tabu@@rowfontreset + \let\tabu@rowfontreset \@empty + \edef\tabu@alloc@save {\the\tabu@alloc}% restore at \tabu@reset + \edef\c@taburow@save {\the\c@taburow}% + \edef\tabu@naturalX@save {\the\tabu@naturalX}% + \let\tabu@naturalXmin@save \tabu@naturalXmin + \let\tabu@naturalXmax@save \tabu@naturalXmax + \let\tabu@mkarstrut@save \tabu@mkarstrut + \edef\tabu@clarstrut{% + \extrarowheight \the\dimexpr \ht\@arstrutbox-\ht\strutbox \relax + \extrarowdepth \the\dimexpr \dp\@arstrutbox-\dp\strutbox \relax + \let\noexpand\@arraystretch \@ne \noexpand\tabu@rearstrut}% +}% \tabu@setcleanup +\def\tabu@cleanup {\begingroup + \globaldefs\@ne \tabu@everyrowtrue + \let\tabu@arc@G \tabu@arc@Gsave + \let\CT@arc@ \tabu@arc@G + \let\tabu@drsc@G \tabu@drsc@Gsave + \let\CT@drsc@ \tabu@drsc@G + \let\tabu@ls@G \tabu@ls@Gsave + \let\tabu@ls@ \tabu@ls@G + \let\tabu@rc@G \tabu@rc@Gsave + \let\tabu@rc@ \tabu@rc@G + \let\CT@do@color \relax + \let\tabu@evr@G \tabu@evr@Gsave + \let\tabu@celllalign \tabu@celllalign@save + \let\tabu@cellralign \tabu@cellralign@save + \let\tabu@cellleft \tabu@cellleft@save + \let\tabu@cellright \tabu@cellright@save + \let\tabu@@celllalign \tabu@@celllalign@save + \let\tabu@@cellralign \tabu@@cellralign@save + \let\tabu@@cellleft \tabu@@cellleft@save + \let\tabu@@cellright \tabu@@cellright@save + \let\tabu@rowfontreset \tabu@rowfontreset@save + \let\tabu@@rowfontreset \tabu@@rowfontreset@save + \tabu@naturalX =\tabu@naturalX@save + \let\tabu@naturalXmax \tabu@naturalXmax@save + \let\tabu@naturalXmin \tabu@naturalXmin@save + \let\tabu@mkarstrut \tabu@mkarstrut@save + \c@taburow =\c@taburow@save + \ifcase \tabu@nested \tabu@alloc \m@ne\fi + \endgroup % + \ifcase \tabu@nested + \the\tabu@footnotes \global\tabu@footnotes{}% + \tabu@afterendpar \tabu@elapsedtime + \fi + \tabu@clarstrut + \everyrow\expandafter {\tabu@evr@G}% +}% \tabu@cleanup +\let\tabu@afterendpar \relax +\def\tabu@setreset {% + \edef\tabu@savedparams {% \relax for \tabu@message@save + \ifmmode \col@sep \the\arraycolsep + \else \col@sep \the\tabcolsep \fi \relax + \arrayrulewidth \the\arrayrulewidth \relax + \doublerulesep \the\doublerulesep \relax + \extratabsurround \the\extratabsurround \relax + \extrarowheight \the\extrarowheight \relax + \extrarowdepth \the\extrarowdepth \relax + \abovetabulinesep \the\abovetabulinesep \relax + \belowtabulinesep \the\belowtabulinesep \relax + \def\noexpand\arraystretch{\arraystretch}% + \ifdefined\minrowclearance \minrowclearance\the\minrowclearance\relax\fi}% + \begingroup + \@temptokena\expandafter{\tabu@savedparams}% => only for \savetabu / \usetabu + \ifx \tabu@arc@L\relax \else \tabu@setsave \tabu@arc@L \fi + \ifx \tabu@drsc@L\relax \else \tabu@setsave \tabu@drsc@L \fi + \tabu@setsave \tabu@ls@L \tabu@setsave \tabu@evr@L + \expandafter \endgroup \expandafter + \def\expandafter\tabu@saved@ \expandafter{\the\@temptokena + \let\tabu@arc@G \tabu@arc@L + \let\tabu@drsc@G \tabu@drsc@L + \let\tabu@ls@G \tabu@ls@L + \let\tabu@rc@G \tabu@rc@L + \let\tabu@evr@G \tabu@evr@L}% + \def\tabu@reset{\tabu@savedparams + \tabu@everyrowtrue \c@taburow \z@ + \let\CT@arc@ \tabu@arc@L + \let\CT@drsc@ \tabu@drsc@L + \let\tabu@ls@ \tabu@ls@L + \let\tabu@rc@ \tabu@rc@L + \global\tabu@alloc \tabu@alloc@save + \everyrow\expandafter{\tabu@evr@L}}% +}% \tabu@reset +\def\tabu@setsave #1{\expandafter\tabu@sets@ve #1\@nil{#1}} +\long\def\tabu@sets@ve #1\@nil #2{\@temptokena\expandafter{\the\@temptokena \def#2{#1}}} +%% The Rewritting Process ------------------------------------------- +\def\tabu@newcolumntype #1{% + \expandafter\tabu@new@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@newcolumntype +\def\tabu@new@columntype #1#2#3{% + \def#1##1#3{\NC@{##1}}% + \let#2\relax \newcommand*#2% +}% \tabu@new@columntype +\def\tabu@privatecolumntype #1{% + \expandafter\tabu@private@columntype + \csname NC@find@\string#1\expandafter\endcsname + \csname NC@rewrite@\string#1\expandafter\endcsname + \csname tabu@NC@find@\string#1\expandafter\endcsname + \csname tabu@NC@rewrite@\string#1\endcsname + {#1}% +}% \tabu@privatecolumntype +\def\tabu@private@columntype#1#2#3#4{% + \g@addto@macro\tabu@privatecolumns{\let#1#3\let#2#4}% + \tabu@new@columntype#3#4% +}% \tabu@private@columntype +\let\tabu@privatecolumns \@empty +\newcommand*\tabucolumn [1]{\expandafter \def \expandafter + \tabu@highprioritycolumns\expandafter{\tabu@highprioritycolumns + \NC@do #1}}% +\let\tabu@highprioritycolumns \@empty +%% The | ``column'' : rewriting process -------------------------- +\tabu@privatecolumntype |{\tabu@rewritevline} +\newcommand*\tabu@rewritevline[1][]{\tabu@vlinearg{#1}% + \expandafter \NC@find \tabu@rewritten} +\def\tabu@lines #1{% + \ifx|#1\else \tabu@privatecolumntype #1{\tabu@rewritevline}\fi + \NC@list\expandafter{\the\NC@list \NC@do #1}% +}% \tabu@lines@ +\def\tabu@vlinearg #1{% + \ifx\\#1\\\def\tabu@thestyle {\tabu@ls@}% + \else\tabu@getline {#1}% + \fi + \def\tabu@rewritten ##1{\def\tabu@rewritten{!{##1\tabu@thevline}}% + }\expandafter\tabu@rewritten\expandafter{\tabu@thestyle}% + \expandafter \tabu@keepls \tabu@thestyle \@nil +}% \tabu@vlinearg +\def\tabu@keepls #1\@nil{% + \ifcat $\@cdr #1\@nil $% + \ifx \relax#1\else + \ifx \tabu@ls@#1\else + \let#1\relax + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@savels\noexpand#1}\fi\fi\fi +}% \tabu@keepls +\def\tabu@thevline {\begingroup + \ifdefined\tabu@leaders + \setbox\@tempboxa=\vtop to\dimexpr + \ht\@arstrutbox+\dp\@arstrutbox{{\tabu@thevleaders}}% + \ht\@tempboxa=\ht\@arstrutbox \dp\@tempboxa=\dp\@arstrutbox + \box\@tempboxa + \else + \tabu@thevrule + \fi \endgroup +}% \tabu@thevline +\def\tabu@savels #1{% + \expandafter\let\csname\string#1\endcsname #1% + \expandafter\def\expandafter\tabu@reset\expandafter{\tabu@reset + \tabu@resetls#1}}% +\def\tabu@resetls #1{\expandafter\let\expandafter#1\csname\string#1\endcsname}% +%% \multicolumn inside tabu environment ----------------------------- +\tabu@newcolumntype \tabu@rewritemulticolumn{% + \aftergroup \tabu@endrewritemulticolumn % after \@mkpream group + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \tabu@savedecl + \tabu@privatecolumns + \NC@list\expandafter{\the\expandafter\NC@list \tabu@NC@list}% + \let\tabu@savels \relax + \NC@find +}% \tabu@rewritemulticolumn +\def\tabu@endrewritemulticolumn{\gdef\tabu@mkpreambuffer{}\endgroup} +\def\tabu@multicolumn{\tabu@ifenvir \tabu@multic@lumn \tabu@multicolumnORI} +\long\def\tabu@multic@lumn #1#2#3{\multispan{#1}\begingroup + \tabu@everyrowtrue + \NC@list{\NC@do \tabu@rewritemulticolumn}% + \expandafter\@gobbletwo % gobbles \multispan{#1} + \tabu@multicolumnORI{#1}{\tabu@rewritemulticolumn #2}% + {\iftabuscantokens \tabu@rescan \else \expandafter\@firstofone \fi + {#3}}% +}% \tabu@multic@lumn +%% The X column(s): rewriting process ----------------------------- +\tabu@privatecolumntype X[1][]{\begingroup \tabu@siunitx{\endgroup \tabu@rewriteX {#1}}} +\def\tabu@nosiunitx #1{#1{}{}\expandafter \NC@find \tabu@rewritten } +\def\tabu@siunitx #1{\@ifnextchar \bgroup + {\tabu@rewriteX@Ss{#1}} + {\tabu@nosiunitx{#1}}} +\def\tabu@rewriteX@Ss #1#2{\@temptokena{}% + \@defaultunits \let\tabu@temp =#2\relax\@nnil + \ifodd 1\ifx S\tabu@temp \else \ifx s\tabu@temp \else 0 \fi\fi + \def\NC@find{\def\NC@find >####1####2<####3\relax{#1 {####1}{####3}% + }\expandafter\NC@find \the\@temptokena \relax + }\expandafter\NC@rewrite@S \@gobble #2\relax + \else \tabu@siunitxerror + \fi + \expandafter \NC@find \tabu@rewritten +}% \tabu@rewriteX@Ss +\def\tabu@siunitxerror {\PackageError{tabu}{Not a S nor s column ! + \MessageBreak X column can only embed siunitx S or s columns}\@ehd +}% \tabu@siunitxerror +\def\tabu@rewriteX #1#2#3{\tabu@Xarg {#1}{#2}{#3}% + \iftabu@measuring + \else \tabu@measuringtrue % first X column found in the preamble + \let\@halignto \relax \let\tabu@halignto \relax + \iftabu@spread \tabu@spreadtarget \tabu@target \tabu@target \z@ + \else \tabu@spreadtarget \z@ \fi + \ifdim \tabu@target=\z@ + \setlength\tabu@target \tabu@thetarget + \tabu@message{\tabu@message@defaulttarget}% + \else \tabu@message{\tabu@message@target}\fi + \fi +}% \tabu@rewriteX +\def\tabu@rewriteXrestore #1#2#3{\let\@halignto \relax + \def\tabu@rewritten{l}} +\def\tabu@Xarg #1#2#3{% + \advance\tabu@Xcol \@ne \let\tabu@Xlcr \@empty + \let\tabu@Xdisp \@empty \let\tabu@Xmath \@empty + \ifx\\#1\\% + \def\tabu@rewritten{p}\tabucolX \p@ % + \else + \let\tabu@rewritten \@empty \let\tabu@temp \@empty \tabucolX \z@ + \tabu@Xparse {}#1\relax + \fi + \tabu@Xrewritten{#2}{#3}% +}% \tabu@Xarg +\def\tabu@Xparse #1{\futurelet\@let@token \tabu@Xtest} +\expandafter\def\expandafter\tabu@Xparsespace\space{\tabu@Xparse{}} +\def\tabu@Xtest{% + \ifcase \ifx \relax\@let@token \z@ \else + \if ,\@let@token \m@ne\else + \if p\@let@token 1\else + \if m\@let@token 2\else + \if b\@let@token 3\else + \if l\@let@token 4\else + \if c\@let@token 5\else + \if r\@let@token 6\else + \if j\@let@token 7\else + \if L\@let@token 8\else + \if C\@let@token 9\else + \if R\@let@token 10\else + \if J\@let@token 11\else + \ifx \@sptoken\@let@token 12\else + \if .\@let@token 13\else + \if -\@let@token 13\else + \ifcat $\@let@token 14\else + 15\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \or \tabu@Xtype {p}% + \or \tabu@Xtype {m}% + \or \tabu@Xtype {b}% + \or \tabu@Xalign \raggedright\relax + \or \tabu@Xalign \centering\relax + \or \tabu@Xalign \raggedleft\relax + \or \tabu@Xalign \tabu@justify\relax + \or \tabu@Xalign \RaggedRight\raggedright + \or \tabu@Xalign \Centering\centering + \or \tabu@Xalign \RaggedLeft\raggedleft + \or \tabu@Xalign \justifying\tabu@justify + \or \expandafter \tabu@Xparsespace + \or \expandafter \tabu@Xcoef + \or \expandafter \tabu@Xm@th + \or \tabu@Xcoef{}% + \else\expandafter \tabu@Xparse + \fi +}% \tabu@Xtest +\def\tabu@Xalign #1#2{% + \ifx \tabu@Xlcr\@empty \else \PackageWarning{tabu} + {Duplicate horizontal alignment specification}\fi + \ifdefined#1\def\tabu@Xlcr{#1}\let#1\relax + \else \def\tabu@Xlcr{#2}\let#2\relax\fi + \expandafter\tabu@Xparse +}% \tabu@Xalign +\def\tabu@Xtype #1{% + \ifx \tabu@rewritten\@empty \else \PackageWarning{tabu} + {Duplicate vertical alignment specification}\fi + \def\tabu@rewritten{#1}\expandafter\tabu@Xparse +}% \tabu@Xtype +\def\tabu@Xcoef#1{\edef\tabu@temp{\tabu@temp#1}% + \afterassignment\tabu@Xc@ef \tabu@cnt\number\if-#10\fi +}% \tabu@Xcoef +\def\tabu@Xc@ef{\advance\tabucolX \tabu@temp\the\tabu@cnt\p@ + \tabu@Xparse{}% +}% \tabu@Xc@ef +\def\tabu@Xm@th #1{\futurelet \@let@token \tabu@Xd@sp} +\def\tabu@Xd@sp{\let\tabu@Xmath=$% + \ifx $\@let@token \def\tabu@Xdisp{\displaystyle}% + \expandafter\tabu@Xparse + \else \expandafter\tabu@Xparse\expandafter{\expandafter}% + \fi +}% \tabu@Xd@sp +\def\tabu@Xrewritten {% + \ifx \tabu@rewritten\@empty \def\tabu@rewritten{p}\fi + \ifdim \tabucolX<\z@ \tabu@negcoeftrue + \else\ifdim \tabucolX=\z@ \tabucolX \p@ + \fi\fi + \edef\tabu@temp{{\the\tabu@Xcol}{\tabu@strippt\tabucolX}}% + \edef\tabu@Xcoefs{\tabu@Xcoefs \tabu@ \tabu@temp}% + \edef\tabu@rewritten ##1##2{\def\noexpand\tabu@rewritten{% + >{\tabu@Xlcr \ifx$\tabu@Xmath$\tabu@Xdisp\fi ##1}% + \tabu@rewritten {\tabu@hsize \tabu@temp}% + <{##2\ifx$\tabu@Xmath$\fi}}% + }\tabu@rewritten +}% \tabu@Xrewritten +\def\tabu@hsize #1#2{% + \ifdim #2\p@<\z@ + \ifdim \tabucolX=\maxdimen \tabu@wd{#1}\else + \ifdim \tabu@wd{#1}<-#2\tabucolX \tabu@wd{#1}\else -#2\tabucolX\fi + \fi + \else #2\tabucolX + \fi +}% \tabu@hsize +%% \usetabu and \preamble: rewritting process --------------------- +\tabu@privatecolumntype \usetabu [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\let\tabu@rewriteX \tabu@rewriteXrestore + \csname tabu@saved@\string#1\expandafter\endcsname\expandafter\@ne}% + \fi +}% \NC@rewrite@\usetabu +\tabu@privatecolumntype \preamble [1]{% + \ifx\\#1\\\tabu@saveerr{}\else + \@ifundefined{tabu@saved@\string#1} + {\tabu@saveerr{#1}} + {\csname tabu@saved@\string#1\expandafter\endcsname\expandafter\z@}% + \fi +}% \NC@rewrite@\preamble +%% Controlling the rewritting process ------------------------------- +\tabu@newcolumntype \tabu@rewritefirst{% + \iftabu@long \aftergroup \tabu@longpream % + \else \aftergroup \tabu@pream + \fi + \let\tabu@ \relax \let\tabu@hsize \relax + \let\tabu@Xcoefs \@empty \let\tabu@savels \relax + \tabu@Xcol \z@ \tabu@cnt \tw@ + \gdef\tabu@mkpreambuffer{\tabu@{}}\tabu@measuringfalse + \global\setbox\@arstrutbox \box\@arstrutbox + \NC@list{\NC@do *}\tabu@textbar \tabu@lines + \NC@list\expandafter{\the\NC@list \NC@do X}% + \iftabu@siunitx % + \NC@list\expandafter{\the\NC@list \NC@do S\NC@do s}\fi + \NC@list\expandafter{\the\expandafter\NC@list \tabu@highprioritycolumns}% + \expandafter\def\expandafter\tabu@NC@list\expandafter{% + \the\expandafter\NC@list \tabu@NC@list}% % * | X S + \NC@list\expandafter{\expandafter \NC@do \expandafter\usetabu + \expandafter \NC@do \expandafter\preamble + \the\NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \tabu@savedecl + \tabu@privatecolumns + \edef\tabu@prev{\the\@temptokena}\NC@find \tabu@rewritemiddle +}% NC@rewrite@\tabu@rewritefirst +\tabu@newcolumntype \tabu@rewritemiddle{% + \edef\tabu@temp{\the\@temptokena}\NC@find \tabu@rewritelast +}% \NC@rewrite@\tabu@rewritemiddle +\tabu@newcolumntype \tabu@rewritelast{% + \ifx \tabu@temp\tabu@prev \advance\tabu@cnt \m@ne + \NC@list\expandafter{\tabu@NC@list \NC@do \tabu@rewritemiddle + \NC@do \tabu@rewritelast}% + \else \let\tabu@prev\tabu@temp + \fi + \ifcase \tabu@cnt \expandafter\tabu@endrewrite + \else \expandafter\NC@find \expandafter\tabu@rewritemiddle + \fi +}% \NC@rewrite@\tabu@rewritelast +%% Choosing the strategy -------------------------------------------- +\def\tabu@endrewrite {% + \let\tabu@temp \NC@find + \ifx \@arrayright\relax \let\@arrayright \@empty \fi + \count@=% + \ifx \@finalstrut\tabu@finalstrut \z@ % outer in mode 0 print + \iftabu@measuring + \xdef\tabu@mkpreambuffer{\tabu@mkpreambuffer + \tabu@target \csname tabu@\the\tabu@nested.T\endcsname + \tabucolX \csname tabu@\the\tabu@nested.X\endcsname + \edef\@halignto {\ifx\@arrayright\@empty to\tabu@target\fi}}% + \fi + \else\iftabu@measuring 4 % X columns + \xdef\tabu@mkpreambuffer{\tabu@{\tabu@mkpreambuffer + \tabu@target \the\tabu@target + \tabu@spreadtarget \the\tabu@spreadtarget}% + \def\noexpand\tabu@Xcoefs{\tabu@Xcoefs}% + \edef\tabu@halignto{\ifx \@arrayright\@empty to\tabu@target\fi}}% + \let\tabu@Xcoefs \relax + \else\ifcase\tabu@nested \thr@@ % outer, no X + \global\let\tabu@afterendpar \relax + \else \@ne % inner, no X, outer in mode 1 or 2 + \fi + \ifdefined\tabu@usetabu + \else \ifdim\tabu@target=\z@ + \else \let\tabu@temp \tabu@extracolsep + \fi\fi + \fi + \fi + \xdef\tabu@mkpreambuffer{\count@ \the\count@ \tabu@mkpreambuffer}% + \tabu@temp +}% \tabu@endrewrite +\def\tabu@extracolsep{\@defaultunits \expandafter\let + \expandafter\tabu@temp \expandafter=\the\@temptokena \relax\@nnil + \ifx \tabu@temp\@sptoken + \expandafter\tabu@gobblespace \expandafter\tabu@extracolsep + \else + \edef\tabu@temp{\noexpand\NC@find + \if |\noexpand\tabu@temp @% + \else\if !\noexpand\tabu@temp @% + \else !% + \fi\fi + {\noexpand\extracolsep\noexpand\@flushglue}}% + \fi + \tabu@temp +}% \tabu@extrac@lsep +%% Implementing the strategy ---------------------------------------- +\long\def\tabu@pream #1\@preamble {% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \ifdefined\tabu@usetabu \tabu@usetabu \tabu@target \z@ \fi + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\tabu@aftergroupcleanup}% + \tabu@thebody =\expandafter{\the\expandafter\tabu@thebody + \@preamble}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@pream +\long\def\tabu@longpream #1\LT@bchunk #2\LT@bchunk{% + \let\tabu@ \tabu@@ \tabu@mkpreambuffer \tabu@aftergroupcleanup + \NC@list\expandafter {\tabu@NC@list}% in case of nesting... + \let\tabu@savedpreamble \@preamble + \global\let\tabu@elapsedtime \relax + \tabu@thebody ={#1\LT@bchunk #2\tabu@aftergroupcleanup \LT@bchunk}% + \edef\tabuthepreamble {\the\tabu@thebody}% ( no @ allowed for \scantokens ) + \tabu@select +}% \tabu@longpream +\def\tabu@select {% + \ifnum\tabu@nested>\z@ \tabuscantokensfalse \fi + \ifnum \count@=\@ne \iftabu@measuring \count@=\tw@ \fi\fi + \ifcase \count@ + \global\let\tabu@elapsedtime \relax + \tabu@seteverycr + \expandafter \tabuthepreamble % vertical adjustment (inheritated from outer) + \or % exit in vertical measure + struts per cell because no X and outer in mode 3 + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \tabu@seteverycr + \expandafter \tabuthepreamble + \or % exit without measure because no X and outer in mode 4 + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@seteverycr + \expandafter \tabuthepreamble + \else % needs trials + \tabu@evr{}\tabu@celllalign@def{}\let\tabu@cellralign \@empty + \tabu@savecounters + \expandafter \tabu@setstrategy + \fi +}% \tabu@select +\def\tabu@@ {\gdef\tabu@mkpreambuffer} +%% Protections to set up before trials ------------------------------ +\def\tabu@setstrategy {\begingroup % + \tabu@trialh@@k \tabu@cnt \z@ % number of trials + \hbadness \@M \let\hbadness \@tempcnta + \hfuzz \maxdimen \let\hfuzz \@tempdima + \let\write \tabu@nowrite\let\GenericError \tabu@GenericError + \let\savetabu \@gobble \let\tabudefaulttarget \linewidth + \let\@footnotetext \@gobble \let\@xfootnote \tabu@xfootnote + \let\color \tabu@nocolor\let\rowcolor \tabu@norowcolor + \let\tabu@aftergroupcleanup \relax % only after the last trial + \tabu@mkpreambuffer + \ifnum \count@>\thr@@ \let\@halignto \@empty \tabucolX@init + \def\tabu@lasttry{\m@ne\p@}\fi + \begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\iftabuscantokens \endlinechar=10 \obeyspaces \fi % + \tabu@collectbody \tabu@strategy % +}% \tabu@setstrategy +\def\tabu@savecounters{% + \def\@elt ##1{\csname c@##1\endcsname\the\csname c@##1\endcsname}% + \edef\tabu@clckpt {\begingroup \globaldefs=\@ne \cl@@ckpt \endgroup}\let\@elt \relax +}% \tabu@savecounters +\def\tabucolX@init {% \tabucolX <= \tabu@target / (sum coefs > 0) + \dimen@ \z@ \tabu@Xsum \z@ \tabucolX \z@ \let\tabu@ \tabu@Xinit \tabu@Xcoefs + \ifdim \dimen@>\z@ + \@tempdima \dimexpr \tabu@target *\p@/\dimen@ + \tabu@hfuzz\relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \fi +}% \tabucolX@init +\def\tabu@Xinit #1#2{\tabu@Xcol #1 \advance \tabu@Xsum + \ifdim #2\p@>\z@ #2\p@ \advance\dimen@ #2\p@ + \else -#2\p@ \tabu@negcoeftrue + \@tempdima \dimexpr \tabu@target*\p@/\dimexpr-#2\p@\relax \relax + \ifdim \tabucolX<\@tempdima \tabucolX \@tempdima \fi + \tabu@wddef{#1}{0pt}% + \fi +}% \tabu@Xinit +%% Collecting the environment body ---------------------------------- +\long\def\tabu@collectbody #1#2\end #3{% + \edef\tabu@stack{\tabu@pushbegins #2\begin\end\expandafter\@gobble\tabu@stack}% + \ifx \tabu@stack\@empty + \toks@\expandafter{\expandafter\tabu@thebody\expandafter{\the\toks@ #2}% + \def\tabu@end@envir{\end{#3}}% + \iftabuscantokens + \iftabu@long \def\tabu@endenvir {\end{#3}\tabu@gobbleX}% + \else \def\tabu@endenvir {\let\endarray \@empty + \end{#3}\tabu@gobbleX}% + \fi + \else \def\tabu@endenvir {\end{#3}}\fi}% + \let\tabu@collectbody \tabu@endofcollect + \else\def\tabu@temp{#3}% + \ifx \tabu@temp\@empty \toks@\expandafter{\the\toks@ #2\end }% + \else \ifx\tabu@temp\tabu@@spxiii \toks@\expandafter{\the\toks@ #2\end #3}% + \else \ifx\tabu@temp\tabu@X \toks@\expandafter{\the\toks@ #2\end #3}% + \else \toks@\expandafter{\the\toks@ #2\end{#3}}% + \fi\fi\fi + \fi + \tabu@collectbody{#1}% +}% \tabu@collectbody +\long\def\tabu@pushbegins#1\begin#2{\ifx\end#2\else b\expandafter\tabu@pushbegins\fi}% +\def\tabu@endofcollect #1{\ifnum0=`{}\fi + \expandafter\endgroup \the\toks@ #1% +}% \tabu@endofcollect +%% The trials: switching between strategies ------------------------- +\def\tabu@strategy {\relax % stops \count@ assignment ! + \ifcase\count@ % case 0 = print with vertical adjustment (outer is finished) + \expandafter \tabu@endoftrials + \or % case 1 = exit in vertical measure (outer in mode 3) + \expandafter\xdef\csname tabu@\the\tabu@nested.T\endcsname{\the\tabu@target}% + \expandafter\xdef\csname tabu@\the\tabu@nested.X\endcsname{\the\tabucolX}% + \expandafter \tabu@endoftrials + \or % case 2 = exit with a rule replacing the table (outer in mode 4) + \expandafter \tabu@quickend + \or % case 3 = outer is in mode 3 because of no X + \begingroup + \tabu@evr{\tabu@verticalinit}\tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \expandafter \tabu@measuring + \else % case 4 = horizontal measure + \begingroup + \global\let\tabu@elapsedtime \tabu@message@etime + \long\def\multicolumn##1##2##3{\multispan{##1}}% + \let\tabu@startpboxORI \@startpbox + \iftabu@spread + \def\tabu@naturalXmax {\z@}% + \let\tabu@naturalXmin \tabu@naturalXmax + \tabu@evr{\global\tabu@naturalX \z@}% + \let\@startpbox \tabu@startpboxmeasure + \else\iftabu@negcoef + \let\@startpbox \tabu@startpboxmeasure + \else \let\@startpbox \tabu@startpboxquick + \fi\fi + \expandafter \tabu@measuring + \fi +}% \tabu@strategy +\def\tabu@measuring{\expandafter \tabu@trial \expandafter + \count@ \the\count@ \tabu@endtrial +}% \tabu@measuring +\def\tabu@trial{\iftabu@long \tabu@longtrial \else \tabu@shorttrial \fi} +\def\tabu@shorttrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + $\iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \csname tabu@adl@endtrial\endcsname + \endarray}$\egroup % got \tabu@box +}% \tabu@shorttrial +\def\tabu@longtrial {\setbox\tabu@box \hbox\bgroup \tabu@seteverycr + \ifx \tabu@savecounters\relax \else + \let\tabu@savecounters \relax \tabu@clckpt \fi + \iftabuscantokens \tabu@rescan \else \expandafter\@secondoftwo \fi + \expandafter{\expandafter \tabuthepreamble + \the\tabu@thebody + \tabuendlongtrial}\egroup % got \tabu@box +}% \tabu@longtrial +\def\tabuendlongtrial{% no @ allowed for \scantokens + \LT@echunk \global\setbox\@ne \hbox{\unhbox\@ne}\kern\wd\@ne + \LT@get@widths +}% \tabuendlongtrial +\def\tabu@adl@endtrial{% + \crcr \noalign{\global\adl@ncol \tabu@nbcols}}% anything global is crap, junky and fails ! +\def\tabu@seteverycr {\tabu@reset + \everycr \expandafter{\the\everycr \tabu@everycr}% + \let\everycr \tabu@noeverycr % +}% \tabu@seteverycr +\def\tabu@noeverycr{{\aftergroup\tabu@restoreeverycr \afterassignment}\toks@} +\def\tabu@restoreeverycr {\let\everycr \tabu@@everycr} +\def\tabu@everycr {\iftabu@everyrow \noalign{\tabu@everyrow}\fi} +\def\tabu@endoftrials {% + \iftabuscantokens \expandafter\@firstoftwo + \else \expandafter\@secondoftwo + \fi + {\expandafter \tabu@closetrialsgroup \expandafter + \tabu@rescan \expandafter{% + \expandafter\tabuthepreamble + \the\expandafter\tabu@thebody + \iftabu@long \else \endarray \fi}} + {\expandafter\tabu@closetrialsgroup \expandafter + \tabuthepreamble + \the\tabu@thebody}% + \tabu@endenvir % Finish ! +}% \tabu@endoftrials +\def\tabu@closetrialsgroup {% + \toks@\expandafter{\tabu@endenvir}% + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target + \tabu@cnt \the\tabu@cnt + \def\noexpand\tabu@endenvir{\the\toks@}% + %Quid de \@halignto = \tabu@halignto ?? + }% \tabu@bufferX + \tabu@bufferX + \ifcase\tabu@nested % print out (outer in mode 0) + \global\tabu@cnt \tabu@cnt + \tabu@evr{\tabu@verticaldynamicadjustment}% + \tabu@celllalign@def{\everypar{}}\let\tabu@cellralign \@empty + \let\@finalstrut \tabu@finalstrut + \else % vertical measure of nested tabu + \tabu@evr{\tabu@verticalinit}% + \tabu@celllalign@def{\tabu@verticalmeasure}% + \def\tabu@cellralign{\tabu@verticalspacing}% + \fi + \tabu@clckpt \let\@halignto \tabu@halignto + \let\@halignto \@empty + \tabu@seteverycr + \ifdim \tabustrutrule>\z@ \ifnum\tabu@nested=\z@ + \setbox\@arstrutbox \box\voidb@x % force \@arstrutbox to be rebuilt (visible struts) + \fi\fi +}% \tabu@closetrialsgroup +\def\tabu@quickend {\expandafter \endgroup \expandafter + \tabu@target \the\tabu@target \tabu@quickrule + \let\endarray \relax \tabu@endenvir +}% \tabu@quickend +\def\tabu@endtrial {\relax % stops \count@ assignment ! + \ifcase \count@ \tabu@err % case 0 = impossible here + \or \tabu@err % case 1 = impossible here + \or \tabu@err % case 2 = impossible here + \or % case 3 = outer goes into mode 0 + \def\tabu@bufferX{\endgroup}\count@ \z@ + \else % case 4 = outer goes into mode 3 + \iftabu@spread \tabu@spreadarith % inner into mode 1 (outer in mode 3) + \else \tabu@arith % or 2 (outer in mode 4) + \fi + \count@=% + \ifcase\tabu@nested \thr@@ % outer goes into mode 3 + \else\iftabu@measuring \tw@ % outer is in mode 4 + \else \@ne % outer is in mode 3 + \fi\fi + \edef\tabu@bufferX{\endgroup + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% + \fi + \expandafter \tabu@bufferX \expandafter + \count@ \the\count@ \tabu@strategy +}% \tabu@endtrial +\def\tabu@err{\errmessage{(tabu) Internal impossible error! (\count@=\the\count@)}} +%% The algorithms: compute the widths / stop or go on --------------- +\def\tabu@arithnegcoef {% + \@tempdima \z@ \dimen@ \z@ \let\tabu@ \tabu@arith@negcoef \tabu@Xcoefs +}% \tabu@arithnegcoef +\def\tabu@arith@negcoef #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ % saturated by definition + \advance\@tempdima #2\tabucolX + \else + \ifdim -#2\tabucolX <\tabu@wd{#1}% c_i X < natural width <= \tabu@target-> saturated + \advance\dimen@ -#2\p@ + \advance\@tempdima -#2\tabucolX + \else + \advance\@tempdima \tabu@wd{#1}% natural width <= c_i X => neutralised + \ifdim \tabu@wd{#1}<\tabu@target \else % neutralised + \advance\dimen@ -#2\p@ % saturated (natural width = tabu@target) + \fi + \fi + \fi +}% \tabu@arith@negcoef +\def\tabu@givespace #1#2{% here \tabu@DELTA < \z@ + \ifdim \@tempdima=\z@ + \tabu@wddef{#1}{\the\dimexpr -\tabu@DELTA*\p@/\tabu@Xsum}% + \else + \tabu@wddef{#1}{\the\dimexpr \tabu@hsize{#1}{#2} + *(\p@ -\tabu@DELTA*\p@/\@tempdima)/\p@\relax}% + \fi +}% \tabu@givespace +\def\tabu@arith {\advance\tabu@cnt \@ne + \ifnum \tabu@cnt=\@ne \tabu@message{\tabu@titles}\fi + \tabu@arithnegcoef + \@tempdimb \dimexpr \wd\tabu@box -\@tempdima \relax % + \tabu@DELTA = \dimexpr \wd\tabu@box - \tabu@target \relax + \tabu@message{\tabu@message@arith}% + \ifdim \tabu@DELTA <\tabu@hfuzz + \ifdim \tabu@DELTA<\z@ % wd (tabu)<\tabu@target ? + \let\tabu@ \tabu@givespace \tabu@Xcoefs + \advance\@tempdima \@tempdimb \advance\@tempdima -\tabu@DELTA % for message + \else % already converged: nothing to do but nearly impossible... + \fi + \tabucolX \maxdimen + \tabu@measuringfalse + \else % need for narrower X columns + \tabucolX =\dimexpr (\@tempdima -\tabu@DELTA) *\p@/\tabu@Xsum \relax + \tabu@measuringtrue + \@whilesw \iftabu@measuring\fi {% + \advance\tabu@cnt \@ne + \tabu@arithnegcoef + \tabu@DELTA =\dimexpr \@tempdima+\@tempdimb -\tabu@target \relax % always < 0 here + \tabu@message{\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \@tempdima+\@tempdimb { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim -\tabu@DELTA<\tabu@hfuzz \tabu@spaces target ok\else + \tabu@msgalign \dimexpr -\tabu@DELTA *\p@/\dimen@ {}{}{}{}{}\@@ + \fi}% + \ifdim -\tabu@DELTA<\tabu@hfuzz + \advance\@tempdima \@tempdimb % for message + \tabu@measuringfalse + \else + \advance\tabucolX \dimexpr -\tabu@DELTA *\p@/\dimen@ \relax + \fi + }% + \fi + \tabu@message{\tabu@message@reached}% + \edef\tabu@bufferX{\endgroup \tabu@cnt \the\tabu@cnt + \tabucolX \the\tabucolX + \tabu@target \the\tabu@target}% +}% \tabu@arith +\def\tabu@spreadarith {% + \dimen@ \z@ \@tempdima \tabu@naturalXmax \let\tabu@ \tabu@spread@arith \tabu@Xcoefs + \edef\tabu@naturalXmin {\the\dimexpr\tabu@naturalXmin*\dimen@/\p@}% + \@tempdimc =\dimexpr \wd\tabu@box -\tabu@naturalXmax+\tabu@naturalXmin \relax + \iftabu@measuring + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \edef\tabu@bufferX{\endgroup \tabucolX \the\tabucolX \tabu@target\the\tabu@target}% + \else + \tabu@message{\tabu@message@spreadarith}% + \ifdim \dimexpr \@tempdimc+\tabu@spreadtarget >\tabu@target + \tabu@message{(tabu) spread + \ifdim \@tempdimc>\tabu@target useless here: default target used% + \else too large: reduced to fit default target\fi.}% + \else + \tabu@target =\dimexpr \@tempdimc+\tabu@spreadtarget \relax + \tabu@message{(tabu) spread: New target set to \the\tabu@target^^J}% + \fi + \begingroup \let\tabu@wddef \@gobbletwo + \@tempdimb \@tempdima + \tabucolX@init + \tabu@arithnegcoef + \wd\tabu@box =\dimexpr \wd\tabu@box +\@tempdima-\@tempdimb \relax + \expandafter\endgroup \expandafter\tabucolX \the\tabucolX + \tabu@arith + \fi +}% \tabu@spreadarith +\def\tabu@spread@arith #1#2{% + \ifdim #2\p@>\z@ \advance\dimen@ #2\p@ + \else \advance\@tempdima \tabu@wd{#1}\relax + \fi +}% \tabu@spread@arith +%% Reporting in the .log file --------------------------------------- +\def\tabu@message@defaulttarget{% + \ifnum\tabu@nested=\z@^^J(tabu) Default target: + \ifx\tabudefaulttarget\linewidth \string\linewidth + \ifdim \tabu@thetarget=\linewidth \else + -\the\dimexpr\linewidth-\tabu@thetarget\fi = + \else\ifx\tabudefaulttarget\linegoal\string\linegoal= + \fi\fi + \else (tabu) Default target (nested): \fi + \the\tabu@target \on@line + \ifnum\tabu@nested=\z@ , page \the\c@page\fi} +\def\tabu@message@target {^^J(tabu) Target specified: + \the\tabu@target \on@line, page \the\c@page} +\def\tabu@message@arith {\tabu@header + \tabu@msgalign \tabucolX { }{ }{ }{ }{ }\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{ }\@@ + \tabu@msgalign \tabu@target { }{ }{ }{ }{ }\@@ + \tabu@msgalign@PT \dimen@ { }{}{}{}{}{}{}\@@ + \ifdim \tabu@DELTA<\tabu@hfuzz giving space\else + \tabu@msgalign \dimexpr (\@tempdima-\tabu@DELTA) *\p@/\tabu@Xsum -\tabucolX {}{}{}{}{}\@@ + \fi +}% \tabu@message@arith +\def\tabu@message@spreadarith {\tabu@spreadheader + \tabu@msgalign \tabu@spreadtarget { }{ }{ }{ }{}\@@ + \tabu@msgalign \wd\tabu@box { }{ }{ }{ }{}\@@ + \tabu@msgalign -\tabu@naturalXmax { }{}{}{}{}\@@ + \tabu@msgalign \tabu@naturalXmin { }{ }{ }{ }{}\@@ + \tabu@msgalign \ifdim \dimexpr\@tempdimc>\tabu@target \tabu@target + \else \@tempdimc+\tabu@spreadtarget \fi + {}{}{}{}{}\@@} +\def\tabu@message@negcoef #1#2{ + \tabu@spaces\tabu@spaces\space * #1. X[\rem@pt#2]: + \space width = \tabu@wd {#1} + \expandafter\string\csname tabu@\the\tabu@nested.W\number#1\endcsname + \ifdim -\tabu@pt#2\tabucolX<\tabu@target + < \number-\rem@pt#2 X + = \the\dimexpr -\tabu@pt#2\tabucolX \relax + \else + <= \the\tabu@target\space < \number-\rem@pt#2 X\fi} +\def\tabu@message@reached{\tabu@header + ******* Reached Target: + hfuzz = \tabu@hfuzz\on@line\space *******} +\def\tabu@message@etime{\edef\tabu@stoptime{\the\pdfelapsedtime}% + \tabu@message{(tabu)\tabu@spaces Time elapsed during measure: + \the\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax sec + \the\numexpr\numexpr(\tabu@stoptime-\tabu@starttime) + -\numexpr(\tabu@stoptime-\tabu@starttime-32767)/65536\relax*65536\relax + *1000/65536\relax ms \tabu@spaces(\the\tabu@cnt\space + cycle\ifnum\tabu@cnt>\@ne s\fi)^^J^^J}} +\def\tabu@message@verticalsp {% + \ifdim \@tempdima>\tabu@ht + \ifdim \@tempdimb>\tabu@dp + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@ + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J% + \else + \expandafter\expandafter\expandafter\string\tabu@ht = + \tabu@msgalign \@tempdima { }{ }{ }{ }{ }\@@^^J% + \fi + \else\ifdim \@tempdimb>\tabu@dp + \tabu@spaces\tabu@spaces\tabu@spaces + \expandafter\expandafter\expandafter\string\tabu@dp = + \tabu@msgalign \@tempdimb { }{ }{ }{ }{ }\@@^^J\fi + \fi +}% \tabu@message@verticalsp +\edef\tabu@spaces{\@spaces} +\def\tabu@strippt{\expandafter\tabu@pt\the} +{\@makeother\P \@makeother\T\lowercase{\gdef\tabu@pt #1PT{#1}}} +\def\tabu@msgalign{\expandafter\tabu@msg@align\the\dimexpr} +\def\tabu@msgalign@PT{\expandafter\tabu@msg@align\romannumeral-`\0\tabu@strippt} +\def\do #1{% + \def\tabu@msg@align##1.##2##3##4##5##6##7##8##9\@@{% + \ifnum##1<10 #1 #1\else + \ifnum##1<100 #1 \else + \ifnum##1<\@m #1\fi\fi\fi + ##1.##2##3##4##5##6##7##8#1}% + \def\tabu@header{(tabu) \ifnum\tabu@cnt<10 #1\fi\the\tabu@cnt) }% + \def\tabu@titles{\ifnum \tabu@nested=\z@ + (tabu) Try#1 #1 tabu X #1 #1 #1tabu Width #1 #1 Target + #1 #1 #1 Coefs #1 #1 #1 Update^^J\fi}% + \def\tabu@spreadheader{% + (tabu) Try#1 #1 Spread #1 #1 tabu Width #1 #1 #1 Nat. X #1 #1 #1 #1Nat. Min. + #1 New Target^^J% + (tabu) sprd} + \def\tabu@message@save {\begingroup + \def\x ####1{\tabu@msg@align ####1{ }{ }{ }{ }{}\@@} + \def\z ####1{\expandafter\x\expandafter{\romannumeral-`\0\tabu@strippt + \dimexpr####1\p@{ }{ }}}% + \let\color \relax \def\tabu@rulesstyle ####1####2{\detokenize{####1}}% + \let\CT@arc@ \relax \let\@preamble \@gobble + \let\tabu@savedpream \@firstofone + \let\tabu@savedparams \@firstofone + \def\tabu@target ####1\relax {(tabu) target #1 #1 #1 #1 #1 = \x{####1}^^J}% + \def\tabucolX ####1\relax {(tabu) X columns width#1 = \x{####1}^^J}% + \def\tabu@nbcols ####1\relax {(tabu) Number of columns: \z{####1}^^J}% + \def\tabu@aligndefault ####1{(tabu) Default alignment: #1 #1 ####1^^J}% + \def\col@sep ####1\relax {(tabu) column sep #1 #1 #1 = \x{####1}^^J}% + \def\arrayrulewidth ####1\relax{(tabu) arrayrulewidth #1 = \x{####1}}% + \def\doublerulesep ####1\relax { doublerulesep = \x{####1}^^J}% + \def\extratabsurround####1\relax{(tabu) extratabsurround = \x{####1}^^J}% + \def\extrarowheight ####1\relax{(tabu) extrarowheight #1 = \x{####1}}% + \def\extrarowdepth ####1\relax {extrarowdepth = \x{####1}^^J}% + \def\abovetabulinesep####1\relax{(tabu) abovetabulinesep=\x{####1} }% + \def\belowtabulinesep####1\relax{ belowtabulinesep=\x{####1}^^J}% + \def\arraystretch ####1{(tabu) arraystretch #1 #1 = \z{####1}^^J}% + \def\minrowclearance####1\relax{(tabu) minrowclearance #1 = \x{####1}^^J}% + \def\tabu@arc@L ####1{(tabu) taburulecolor #1 #1 = ####1^^J}% + \def\tabu@drsc@L ####1{(tabu) tabudoublerulecolor= ####1^^J}% + \def\tabu@evr@L ####1{(tabu) everyrow #1 #1 #1 #1 = \detokenize{####1}^^J}% + \def\tabu@ls@L ####1{(tabu) line style = \detokenize{####1}^^J}% + \def\NC@find ####1\@nil{(tabu) tabu preamble#1 #1 = \detokenize{####1}^^J}% + \def\tabu@wddef####1####2{(tabu) Natural width ####1 = \x{####2}^^J}% + \let\edef \@gobbletwo \let\def \@empty \let\let \@gobbletwo + \tabu@message{% + (tabu) \string\savetabu{\tabu@temp}: \on@line^^J% + \tabu@usetabu \@nil^^J}% + \endgroup} +}\do{ } +%% Measuring the natural width (varwidth) - store the results ------- +\def\tabu@startpboxmeasure #1{\bgroup % entering \vtop + \edef\tabu@temp{\expandafter\@secondoftwo \ifx\tabu@hsize #1\else\relax\fi}% + \ifodd 1\ifx \tabu@temp\@empty 0 \else % starts with \tabu@hsize ? + \iftabu@spread \else % if spread -> measure + \ifdim \tabu@temp\p@>\z@ 0 \fi\fi\fi% if coef>0 -> do not measure + \let\@startpbox \tabu@startpboxORI % restore immediately (nesting) + \tabu@measuringtrue % for the quick option... + \tabu@Xcol =\expandafter\@firstoftwo\ifx\tabu@hsize #1\fi + \ifdim \tabu@temp\p@>\z@ \ifdim \tabu@temp\tabucolX<\tabu@target + \tabu@target=\tabu@temp\tabucolX \fi\fi + \setbox\tabu@box \hbox \bgroup + \begin{varwidth}\tabu@target + \let\FV@ListProcessLine \tabu@FV@ListProcessLine % \hbox to natural width... + \narrowragged \arraybackslash \parfillskip \@flushglue + \ifdefined\pdfadjustspacing \pdfadjustspacing\z@ \fi + \bgroup \aftergroup\tabu@endpboxmeasure + \ifdefined \cellspacetoplimit \tabu@cellspacepatch \fi + \else \expandafter\@gobble + \tabu@startpboxquick{#1}% \@gobble \bgroup + \fi +}% \tabu@startpboxmeasure +\def\tabu@cellspacepatch{\def\bcolumn##1\@nil{}\let\ecolumn\@empty + \bgroup\color@begingroup} +\def\tabu@endpboxmeasure {% + \@finalstrut \@arstrutbox + \end{varwidth}\egroup % + \ifdim \tabu@temp\p@ <\z@ % neg coef + \ifdim \tabu@wd\tabu@Xcol <\wd\tabu@box + \tabu@wddef\tabu@Xcol {\the\wd\tabu@box}% + \tabu@debug{\tabu@message@endpboxmeasure}% + \fi + \else % spread coef>0 + \global\advance \tabu@naturalX \wd\tabu@box + \@tempdima =\dimexpr \wd\tabu@box *\p@/\dimexpr \tabu@temp\p@\relax \relax + \ifdim \tabu@naturalXmax <\tabu@naturalX + \xdef\tabu@naturalXmax {\the\tabu@naturalX}\fi + \ifdim \tabu@naturalXmin <\@tempdima + \xdef\tabu@naturalXmin {\the\@tempdima}\fi + \fi + \box\tabu@box \egroup % end of \vtop (measure) restore \tabu@target +}% \tabu@endpboxmeasure +\def\tabu@wddef #1{\expandafter\xdef + \csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@wd #1{\csname tabu@\the\tabu@nested.W\number#1\endcsname} +\def\tabu@message@endpboxmeasure{\tabu@spaces\tabu@spaces<-> % <-> save natural wd + \the\tabu@Xcol. X[\tabu@temp]: + target = \the\tabucolX \space + \expandafter\expandafter\expandafter\string\tabu@wd\tabu@Xcol + =\tabu@wd\tabu@Xcol +}% \tabu@message@endpboxmeasure +\def\tabu@startpboxquick {\bgroup + \let\@startpbox \tabu@startpboxORI % restore immediately + \let\tabu \tabu@quick % \begin is expanded before... + \expandafter\@gobble \@startpbox % gobbles \bgroup +}% \tabu@startpboxquick +\def\tabu@quick {\begingroup \iffalse{\fi \ifnum0=`}\fi + \toks@{}\def\tabu@stack{b}\tabu@collectbody \tabu@endquick +}% \tabu@quick +\def\tabu@endquick {% + \ifodd 1\ifx\tabu@end@envir\tabu@endtabu \else + \ifx\tabu@end@envir\tabu@endtabus \else 0\fi\fi\relax + \endgroup + \else \let\endtabu \relax + \tabu@end@envir + \fi +}% \tabu@quick +\def\tabu@endtabu {\end{tabu}} +\def\tabu@endtabus {\end{tabu*}} +%% Measuring the heights and depths - store the results ------------- +\def\tabu@verticalmeasure{\everypar{}% + \ifnum \currentgrouptype>12 % 14=semi-simple, 15=math shift group + \setbox\tabu@box =\hbox\bgroup + \let\tabu@verticalspacing \tabu@verticalsp@lcr + \d@llarbegin % after \hbox ... + \else + \edef\tabu@temp{\ifnum\currentgrouptype=5\vtop + \else\ifnum\currentgrouptype=12\vcenter + \else\vbox\fi\fi}% + \setbox\tabu@box \hbox\bgroup$\tabu@temp \bgroup + \let\tabu@verticalspacing \tabu@verticalsp@pmb + \fi +}% \tabu@verticalmeasure +\def\tabu@verticalsp@lcr{% + \d@llarend \egroup % + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \noindent\vrule height\@tempdima depth\@tempdimb +}% \tabu@verticalsp@lcr +\def\tabu@verticalsp@pmb{% inserts struts as needed + \par \expandafter\egroup + \expandafter$\expandafter + \egroup \expandafter + \@tempdimc \the\prevdepth + \@tempdima \dimexpr \ht\tabu@box+\abovetabulinesep + \@tempdimb \dimexpr \dp\tabu@box+\belowtabulinesep \relax + \ifdim\tabustrutrule>\z@ \tabu@debug{\tabu@message@verticalsp}\fi + \ifdim \tabu@ht<\@tempdima \tabu@htdef{\the\@tempdima}\fi + \ifdim \tabu@dp<\@tempdimb \tabu@dpdef{\the\@tempdimb}\fi + \let\@finalstrut \@gobble + \hrule height\@tempdima depth\@tempdimb width\hsize +%% \box\tabu@box +}% \tabu@verticalsp@pmb + +\def\tabu@verticalinit{% + \ifnum \c@taburow=\z@ \tabu@rearstrut \fi % after \tabu@reset ! + \advance\c@taburow \@ne + \tabu@htdef{\the\ht\@arstrutbox}\tabu@dpdef{\the\dp\@arstrutbox}% + \advance\c@taburow \m@ne +}% \tabu@verticalinit +\def\tabu@htdef {\expandafter\xdef \csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@ht {\csname tabu@\the\tabu@nested.H\the\c@taburow\endcsname} +\def\tabu@dpdef {\expandafter\xdef \csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@dp {\csname tabu@\the\tabu@nested.D\the\c@taburow\endcsname} +\def\tabu@verticaldynamicadjustment {% + \advance\c@taburow \@ne + \extrarowheight \dimexpr\tabu@ht - \ht\strutbox + \extrarowdepth \dimexpr\tabu@dp - \dp\strutbox + \let\arraystretch \@empty + \advance\c@taburow \m@ne +}% \tabu@verticaldynamicadjustment +\def\tabuphantomline{\crcr \noalign{% + {\globaldefs \@ne + \setbox\@arstrutbox \box\voidb@x + \let\tabu@@celllalign \tabu@celllalign + \let\tabu@@cellralign \tabu@cellralign + \let\tabu@@cellleft \tabu@cellleft + \let\tabu@@cellright \tabu@cellright + \let\tabu@@thevline \tabu@thevline + \let\tabu@celllalign \@empty + \let\tabu@cellralign \@empty + \let\tabu@cellright \@empty + \let\tabu@cellleft \@empty + \let\tabu@thevline \relax}% + \edef\tabu@temp{\tabu@multispan \tabu@nbcols{\noindent &}}% + \toks@\expandafter{\tabu@temp \noindent\tabu@everyrowfalse \cr + \noalign{\tabu@rearstrut + {\globaldefs\@ne + \let\tabu@celllalign \tabu@@celllalign + \let\tabu@cellralign \tabu@@cellralign + \let\tabu@cellleft \tabu@@cellleft + \let\tabu@cellright \tabu@@cellright + \let\tabu@thevline \tabu@@thevline}}}% + \expandafter}\the\toks@ +}% \tabuphantomline +%% \firsthline and \lasthline corrections --------------------------- +\def\tabu@firstline {\tabu@hlineAZ \tabu@firsthlinecorrection {}} +\def\tabu@firsthline{\tabu@hlineAZ \tabu@firsthlinecorrection \hline} +\def\tabu@lastline {\tabu@hlineAZ \tabu@lasthlinecorrection {}} +\def\tabu@lasthline {\tabu@hlineAZ \tabu@lasthlinecorrection \hline} +\def\tabu@hline {% replaces \hline if no colortbl (see \AtBeginDocument) + \noalign{\ifnum0=`}\fi + {\CT@arc@\hrule height\arrayrulewidth}% + \futurelet \tabu@temp \tabu@xhline +}% \tabu@hline +\def\tabu@xhline{% + \ifx \tabu@temp \hline + {\ifx \CT@drsc@\relax \vskip + \else\ifx \CT@drsc@\@empty \vskip + \else \CT@drsc@\hrule height + \fi\fi + \doublerulesep}% + \fi + \ifnum0=`{\fi}% +}% \tabu@xhline +\def\tabu@hlineAZ #1#2{\noalign{\ifnum0=`}\fi \dimen@ \z@ \count@ \z@ + \toks@{}\def\tabu@hlinecorrection{#1}\def\tabu@temp{#2}% + \tabu@hlineAZsurround +}% \tabu@hlineAZ +\newcommand*\tabu@hlineAZsurround[1][\extratabsurround]{% + \extratabsurround #1\let\tabucline \tabucline@scan + \let\hline \tabu@hlinescan \let\firsthline \hline + \let\cline \tabu@clinescan \let\lasthline \hline + \expandafter \futurelet \expandafter \tabu@temp + \expandafter \tabu@nexthlineAZ \tabu@temp +}% \tabu@hlineAZsurround +\def\tabu@hlinescan {\tabu@thick \arrayrulewidth \tabu@xhlineAZ \hline} +\def\tabu@clinescan #1{\tabu@thick \arrayrulewidth \tabu@xhlineAZ {\cline{#1}}} +\def\tabucline@scan{\@testopt \tabucline@sc@n {}} +\def\tabucline@sc@n #1[#2]{\tabu@xhlineAZ {\tabucline[{#1}]{#2}}} +\def\tabu@nexthlineAZ{% + \ifx \tabu@temp\hline \else + \ifx \tabu@temp\cline \else + \ifx \tabu@temp\tabucline \else + \tabu@hlinecorrection + \fi\fi\fi +}% \tabu@nexthlineAZ +\def\tabu@xhlineAZ #1{% + \toks@\expandafter{\the\toks@ #1}% + \@tempdimc \tabu@thick % The last line width + \ifcase\count@ \@tempdimb \tabu@thick % The first line width + \else \advance\dimen@ \dimexpr \tabu@thick+\doublerulesep \relax + \fi + \advance\count@ \@ne \futurelet \tabu@temp \tabu@nexthlineAZ +}% \tabu@xhlineAZ +\def\tabu@firsthlinecorrection{% \count@ = number of \hline -1 + \@tempdima \dimexpr \ht\@arstrutbox+\dimen@ + \edef\firsthline{% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + height \the\dimexpr\@tempdima+\extratabsurround + depth \dp\@arstrutbox + width \tabustrutrule}\hss}\cr + \noalign{\vskip -\the\dimexpr \@tempdima+\@tempdimb + +\dp\@arstrutbox \relax}% + \the\toks@ + }\ifnum0=`{\fi + \expandafter}\firsthline % we are then ! +}% \tabu@firsthlinecorrection +\def\tabu@lasthlinecorrection{% + \@tempdima \dimexpr \dp\@arstrutbox+\dimen@+\@tempdimb+\@tempdimc + \edef\lasthline{% + \the\toks@ + \noalign{\vskip -\the\dimexpr\dimen@+\@tempdimb+\dp\@arstrutbox}% + \omit \hbox to\z@{\hss{\noexpand\tabu@DBG{yellow}\vrule + depth \the\dimexpr \dp\@arstrutbox+\@tempdimb+\dimen@ + +\extratabsurround-\@tempdimc + height \z@ + width \tabustrutrule}\hss}\cr + }\ifnum0=`{\fi + \expandafter}\lasthline % we are then ! +}% \tabu@lasthlinecorrection +\def\tabu@LT@@hline{% + \ifx\LT@next\hline + \global\let\LT@next \@gobble + \ifx \CT@drsc@\relax + \gdef\CT@LT@sep{% + \noalign{\penalty-\@medpenalty\vskip\doublerulesep}}% + \else + \gdef\CT@LT@sep{% + \multispan\LT@cols{% + \CT@drsc@\leaders\hrule\@height\doublerulesep\hfill}\cr}% + \fi + \else + \global\let\LT@next\empty + \gdef\CT@LT@sep{% + \noalign{\penalty-\@lowpenalty\vskip-\arrayrulewidth}}% + \fi + \ifnum0=`{\fi}% + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \CT@LT@sep + \multispan\LT@cols + {\CT@arc@\leaders\hrule\@height\arrayrulewidth\hfill}\cr + \noalign{\penalty\@M}% + \LT@next +}% \tabu@LT@@hline +%% Horizontal lines : \tabucline ------------------------------------ +\let\tabu@start \@tempcnta +\let\tabu@stop \@tempcntb +\newcommand*\tabucline{\noalign{\ifnum0=`}\fi \tabu@cline} +\newcommand*\tabu@cline[2][]{\tabu@startstop{#2}% + \ifnum \tabu@stop<\z@ \toks@{}% + \else \tabu@clinearg{#1}\tabu@thestyle + \edef\tabucline{\toks@{% + \ifnum \tabu@start>\z@ \omit + \tabu@multispan\tabu@start {\span\omit}&\fi + \omit \tabu@multispan\tabu@stop {\span\omit}% + \tabu@thehline\cr + }}\tabucline + \tabu@tracinglines{(tabu:tabucline) Style: #1^^J\the\toks@^^J^^J}% + \fi + \futurelet \tabu@temp \tabu@xcline +}% \tabu@cline +\def\tabu@clinearg #1{% + \ifx\\#1\\\let\tabu@thestyle \tabu@ls@ + \else \@defaultunits \expandafter\let\expandafter\@tempa + \romannumeral-`\0#1\relax \@nnil + \ifx \hbox\@tempa \tabu@clinebox{#1}% + \else\ifx \box\@tempa \tabu@clinebox{#1}% + \else\ifx \vbox\@tempa \tabu@clinebox{#1}% + \else\ifx \vtop\@tempa \tabu@clinebox{#1}% + \else\ifx \copy\@tempa \tabu@clinebox{#1}% + \else\ifx \leaders\@tempa \tabu@clineleads{#1}% + \else\ifx \cleaders\@tempa \tabu@clineleads{#1}% + \else\ifx \xleaders\@tempa \tabu@clineleads{#1}% + \else\tabu@getline {#1}% + \fi\fi\fi\fi\fi\fi\fi\fi + \fi +}% \tabu@clinearg +\def\tabu@clinebox #1{\tabu@clineleads{\xleaders#1\hss}} +\def\tabu@clineleads #1{% + \let\tabu@thestyle \relax \let\tabu@leaders \@undefined + \gdef\tabu@thehrule{#1}} +\def\tabu@thehline{\begingroup + \ifdefined\tabu@leaders + \noexpand\tabu@thehleaders + \else \noexpand\tabu@thehrule + \fi \endgroup +}% \tabu@thehline +\def\tabu@xcline{% + \ifx \tabu@temp\tabucline + \toks@\expandafter{\the\toks@ \noalign + {\ifx\CT@drsc@\relax \vskip + \else \CT@drsc@\hrule height + \fi + \doublerulesep}}% + \fi + \tabu@docline +}% \tabu@xcline +\def\tabu@docline {\ifnum0=`{\fi \expandafter}\the\toks@} +\def\tabu@docline@evr {\xdef\tabu@doclineafter{\the\toks@}% + \ifnum0=`{\fi}\aftergroup\tabu@doclineafter} +\def\tabu@multispan #1#2{% + \ifnum\numexpr#1>\@ne #2\expandafter\tabu@multispan + \else \expandafter\@gobbletwo + \fi {#1-1}{#2}% +}% \tabu@multispan +\def\tabu@startstop #1{\tabu@start@stop #1\relax 1-\tabu@nbcols \@nnil} +\def\tabu@start@stop #1-#2\@nnil{% + \@defaultunits \tabu@start\number 0#1\relax \@nnil + \@defaultunits \tabu@stop \number 0#2\relax \@nnil + \tabu@stop \ifnum \tabu@start>\tabu@nbcols \m@ne + \else\ifnum \tabu@stop=\z@ \tabu@nbcols + \else\ifnum \tabu@stop>\tabu@nbcols \tabu@nbcols + \else \tabu@stop + \fi\fi\fi + \advance\tabu@start \m@ne + \ifnum \tabu@start>\z@ \advance\tabu@stop -\tabu@start \fi +}% \tabu@start@stop +%% Numbers: siunitx S columns (and \tabudecimal) ------------------- +\def\tabu@tabudecimal #1{% + \def\tabu@decimal{#1}\@temptokena{}% + \let\tabu@getdecimal@ \tabu@getdecimal@ignorespaces + \tabu@scandecimal +}% \tabu@tabudecimal +\def\tabu@scandecimal{\futurelet \tabu@temp \tabu@getdecimal@} +\def\tabu@skipdecimal#1{#1\tabu@scandecimal} +\def\tabu@getdecimal@ignorespaces{% + \ifcase 0\ifx\tabu@temp\ignorespaces\else + \ifx\tabu@temp\@sptoken1\else + 2\fi\fi\relax + \let\tabu@getdecimal@ \tabu@getdecimal + \expandafter\tabu@skipdecimal + \or \expandafter\tabu@gobblespace\expandafter\tabu@scandecimal + \else \expandafter\tabu@skipdecimal + \fi +}% \tabu@getdecimal@ignorespaces +\def\tabu@get@decimal#1{\@temptokena\expandafter{\the\@temptokena #1}% + \tabu@scandecimal} +\def\do#1{% + \def\tabu@get@decimalspace#1{% + \@temptokena\expandafter{\the\@temptokena #1}\tabu@scandecimal}% +}\do{ } +\let\tabu@@tabudecimal \tabu@tabudecimal +\def\tabu@getdecimal{% + \ifcase 0\ifx 0\tabu@temp\else + \ifx 1\tabu@temp\else + \ifx 2\tabu@temp\else + \ifx 3\tabu@temp\else + \ifx 4\tabu@temp\else + \ifx 5\tabu@temp\else + \ifx 6\tabu@temp\else + \ifx 7\tabu@temp\else + \ifx 8\tabu@temp\else + \ifx 9\tabu@temp\else + \ifx .\tabu@temp\else + \ifx ,\tabu@temp\else + \ifx -\tabu@temp\else + \ifx +\tabu@temp\else + \ifx e\tabu@temp\else + \ifx E\tabu@temp\else + \ifx\tabu@cellleft\tabu@temp1\else + \ifx\ignorespaces\tabu@temp1\else + \ifx\@sptoken\tabu@temp2\else + 3\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\relax + \expandafter\tabu@get@decimal + \or \expandafter\tabu@skipdecimal + \or \expandafter\tabu@get@decimalspace + \else\expandafter\tabu@printdecimal + \fi +}% \tabu@getdecimal +\def\tabu@printdecimal{% + \edef\tabu@temp{\the\@temptokena}% + \ifx\tabu@temp\@empty\else + \ifx\tabu@temp\space\else + \expandafter\tabu@decimal\expandafter{\the\@temptokena}% + \fi\fi +}% \tabu@printdecimal +%% Verbatim inside X columns ---------------------------------------- +\def\tabu@verbatim{% + \let\verb \tabu@verb + \let\FV@DefineCheckEnd \tabu@FV@DefineCheckEnd +}% \tabu@verbatim +\let\tabu@ltx@verb \verb +\def\tabu@verb{\@ifstar {\tabu@ltx@verb*} \tabu@ltx@verb} +\def\tabu@fancyvrb {% + \def\tabu@FV@DefineCheckEnd ##1{% + \def\tabu@FV@DefineCheckEnd{% + ##1% + \let\FV@CheckEnd \tabu@FV@CheckEnd + \let\FV@@CheckEnd \tabu@FV@@CheckEnd + \let\FV@@@CheckEnd \tabu@FV@@@CheckEnd + \edef\FV@EndScanning{% + \def\noexpand\next{\noexpand\end{\FV@EnvironName}}% + \global\let\noexpand\FV@EnvironName\relax + \noexpand\next}% + \xdef\FV@EnvironName{\detokenize\expandafter{\FV@EnvironName}}}% + }\expandafter\tabu@FV@DefineCheckEnd\expandafter{\FV@DefineCheckEnd} +}% \tabu@fancyvrb +\def\tabu@FV@CheckEnd #1{\expandafter\FV@@CheckEnd \detokenize{#1\end{}}\@nil} +\edef\tabu@FV@@@CheckEnd {\detokenize{\end{}}} +\begingroup +\catcode`\[1 \catcode`\]2 +\@makeother\{ \@makeother\} + \edef\x[\endgroup + \def\noexpand\tabu@FV@@CheckEnd ##1\detokenize[\end{]##2\detokenize[}]##3% + ]\x \@nil{\def\@tempa{#2}\def\@tempb{#3}} +\def\tabu@FV@ListProcessLine #1{% + \hbox {%to \hsize{% + \kern\leftmargin + \hbox {%to \linewidth{% + \FV@LeftListNumber + \FV@LeftListFrame + \FancyVerbFormatLine{#1}\hss +%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on) +%% \FV@RightListFrame}% + \FV@RightListFrame + \FV@RightListNumber}% +%% DG/SR modification end + \hss}} +%% \savetabu -------------------------------------------------------- +\newcommand*\savetabu[1]{\noalign{% + \tabu@sanitizearg{#1}\tabu@temp + \ifx \tabu@temp\@empty \tabu@savewarn{}{The tabu will not be saved}\else + \@ifundefined{tabu@saved@\tabu@temp}{}{\tabu@savewarn{#1}{Overwritting}}% + \ifdefined\tabu@restored \expandafter\let + \csname tabu@saved@\tabu@temp \endcsname \tabu@restored + \else {\tabu@save}% + \fi + \fi}% +}% \savetabu +\def\tabu@save {% + \toks0\expandafter{\tabu@saved@}% + \iftabu@negcoef + \let\tabu@wddef \relax \let\tabu@ \tabu@savewd \edef\tabu@savewd{\tabu@Xcoefs}% + \toks0\expandafter{\the\toks\expandafter0\tabu@savewd}\fi + \toks1\expandafter{\tabu@savedpream}% + \toks2\expandafter{\tabu@savedpreamble}% + \let\@preamble \relax + \let\tabu@savedpream \relax \let\tabu@savedparams \relax + \edef\tabu@preamble{% + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \edef\tabu@usetabu{% + \def\@preamble {\noexpand\the\toks2}% + \tabu@target \the\tabu@target \relax + \tabucolX \the\tabucolX \relax + \tabu@nbcols \the\tabu@nbcols \relax + \def\noexpand\tabu@aligndefault{\tabu@align}% + \def\tabu@savedparams {\noexpand\the\toks0}% + \def\tabu@savedpream {\noexpand\the\toks1}}% + \let\tabu@aligndefault \relax \let\@sharp \relax + \edef\@tempa{\noexpand\tabu@s@ved + {\tabu@usetabu} + {\tabu@preamble} + {\the\toks1}}\@tempa + \tabu@message@save +}% \tabu@save +\long\def\tabu@s@ved #1#2#3{% + \def\tabu@usetabu{#1}% + \expandafter\gdef\csname tabu@saved@\tabu@temp\endcsname ##1{% + \ifodd ##1% \usetabu + \tabu@measuringfalse \tabu@spreadfalse % Just in case... + \gdef\tabu@usetabu {% + \ifdim \tabu@target>\z@ \tabu@warn@usetabu \fi + \global\let\tabu@usetabu \@undefined + \def\@halignto {to\tabu@target}% + #1% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \else % \preamble + \gdef\tabu@preamble {% + \global\let\tabu@preamble \@undefined + #2% + \ifx \tabu@align\tabu@aligndefault@text + \ifnum \tabu@nested=\z@ + \let\tabu@align \tabu@aligndefault \fi\fi}% + \fi + #3}% +}% \tabu@s@ved +\def\tabu@aligndefault@text {\tabu@aligndefault}% +\def\tabu@warn@usetabu {\PackageWarning{tabu} + {Specifying a target with \string\usetabu\space is useless + \MessageBreak The target cannot be changed!}} +\def\tabu@savewd #1#2{\ifdim #2\p@<\z@ \tabu@wddef{#1}{\tabu@wd{#1}}\fi} +\def\tabu@savewarn#1#2{\PackageInfo{tabu} + {User-name `#1' already used for \string\savetabu + \MessageBreak #2}}% +\def\tabu@saveerr#1{\PackageError{tabu} + {User-name `#1' is unknown for \string\usetabu + \MessageBreak I cannot restore an unknown preamble!}\@ehd} +%% \rowfont --------------------------------------------------------- +\newskip \tabu@cellskip +\def\tabu@rowfont{\ifdim \baselineskip=\z@\noalign\fi + {\ifnum0=`}\fi \tabu@row@font} +\newcommand*\tabu@row@font[2][]{% + \ifnum7=\currentgrouptype + \global\let\tabu@@cellleft \tabu@cellleft + \global\let\tabu@@cellright \tabu@cellright + \global\let\tabu@@celllalign \tabu@celllalign + \global\let\tabu@@cellralign \tabu@cellralign + \global\let\tabu@@rowfontreset\tabu@rowfontreset + \fi + \global\let\tabu@rowfontreset \tabu@rowfont@reset + \expandafter\gdef\expandafter\tabu@cellleft\expandafter{\tabu@cellleft #2}% + \ifcsname tabu@cell@#1\endcsname % row alignment + \csname tabu@cell@#1\endcsname \fi + \ifnum0=`{\fi}% end of group / noalign group +}% \rowfont +\def\tabu@ifcolorleavevmode #1{\let\color \tabu@leavevmodecolor #1\let\color\tabu@color}% +\def\tabu@rowfont@reset{% + \global\let\tabu@rowfontreset \tabu@@rowfontreset + \global\let\tabu@cellleft \tabu@@cellleft + \global\let\tabu@cellright \tabu@@cellright + \global\let\tabu@cellfont \@empty + \global\let\tabu@celllalign \tabu@@celllalign + \global\let\tabu@cellralign \tabu@@cellralign +}% \tabu@@rowfontreset +\let\tabu@rowfontreset \@empty % overwritten \AtBeginDocument if colortbl +%% \tabu@prepnext@tok ----------------------------------------------- +\newif \iftabu@cellright +\def\tabu@prepnext@tok{% + \ifnum \count@<\z@ % + \@tempcnta \@M % + \tabu@nbcols\z@ + \let\tabu@fornoopORI \@fornoop + \tabu@cellrightfalse + \else + \ifcase \numexpr \count@-\@tempcnta \relax % (case 0): prev. token is left + \advance \tabu@nbcols \@ne + \iftabu@cellright % before-previous token is right and is finished + \tabu@cellrightfalse % + \tabu@righttok + \fi + \tabu@lefttok + \or % (case 1) previous token is right + \tabu@cellrighttrue \let\@fornoop \tabu@lastnoop + \else % special column: do not change the token + \iftabu@cellright % before-previous token is right + \tabu@cellrightfalse + \tabu@righttok + \fi + \fi % \ifcase + \fi + \tabu@prepnext@tokORI +}% \tabu@prepnext@tok +\long\def\tabu@lastnoop#1\@@#2#3{\tabu@lastn@@p #2\@nextchar \in@\in@@} +\def\tabu@lastn@@p #1\@nextchar #2#3\in@@{% + \ifx \in@#2\else + \let\@fornoop \tabu@fornoopORI + \xdef\tabu@mkpreambuffer{\tabu@nbcols\the\tabu@nbcols \tabu@mkpreambuffer}% + \toks0\expandafter{\expandafter\tabu@everyrowtrue \the\toks0}% + \expandafter\prepnext@tok + \fi +}% \tabu@lastnoop +\def\tabu@righttok{% + \advance \count@ \m@ne + \toks\count@\expandafter {\the\toks\count@ \tabu@cellright \tabu@cellralign}% + \advance \count@ \@ne +}% \tabu@righttok +\def\tabu@lefttok{\toks\count@\expandafter{\expandafter\tabu@celllalign + \the\toks\count@ \tabu@cellleft}% after because of $ +}% \tabu@lefttok +%% Neutralisation of glues ------------------------------------------ +\let\tabu@cellleft \@empty +\let\tabu@cellright \@empty +\tabu@celllalign@def{\tabu@cellleft}% +\let\tabu@cellralign \@empty +\def\tabu@cell@align #1#2#3{% + \let\tabu@maybesiunitx \toks@ \tabu@celllalign + \global \expandafter \tabu@celllalign@def \expandafter {\the\toks@ #1}% + \toks@\expandafter{\tabu@cellralign #2}% + \xdef\tabu@cellralign{\the\toks@}% + \toks@\expandafter{\tabu@cellleft #3}% + \xdef\tabu@cellleft{\the\toks@}% +}% \tabu@cell@align +\def\tabu@cell@l{% force alignment to left + \tabu@cell@align + {\tabu@removehfil \raggedright \tabu@cellleft}% left + {\tabu@flush1\tabu@ignorehfil}% right + \raggedright +}% \tabu@cell@l +\def\tabu@cell@c{% force alignment to center + \tabu@cell@align + {\tabu@removehfil \centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \centering +}% \tabu@cell@c +\def\tabu@cell@r{% force alignment to right + \tabu@cell@align + {\tabu@removehfil \raggedleft \tabu@flush1\tabu@cellleft} + \tabu@ignorehfil + \raggedleft +}% \tabu@cell@r +\def\tabu@cell@j{% force justification (for p, m, b columns) + \tabu@cell@align + {\tabu@justify\tabu@cellleft} + {} + \tabu@justify +}% \tabu@cell@j +\def\tabu@justify{% + \leftskip\z@skip \@rightskip\leftskip \rightskip\@rightskip + \parfillskip\@flushglue +}% \tabu@justify +%% ragged2e settings +\def\tabu@cell@L{% force alignment to left (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedRight \tabu@cellleft} + {\tabu@flush 1\tabu@ignorehfil} + \RaggedRight +}% \tabu@cell@L +\def\tabu@cell@C{% force alignment to center (ragged2e) + \tabu@cell@align + {\tabu@removehfil \Centering \tabu@flush{.5}\tabu@cellleft} + {\tabu@flush{.5}\tabu@ignorehfil} + \Centering +}% \tabu@cell@C +\def\tabu@cell@R{% force alignment to right (ragged2e) + \tabu@cell@align + {\tabu@removehfil \RaggedLeft \tabu@flush 1\tabu@cellleft} + \tabu@ignorehfil + \RaggedLeft +}% \tabu@cell@R +\def\tabu@cell@J{% force justification (ragged2e) + \tabu@cell@align + {\justifying \tabu@cellleft} + {} + \justifying +}% \tabu@cell@J +\def\tabu@flush#1{% + \iftabu@colortbl % colortbl uses \hfill rather than \hfil + \hskip \ifnum13<\currentgrouptype \stretch{#1}% + \else \ifdim#1pt<\p@ \tabu@cellskip + \else \stretch{#1} + \fi\fi \relax + \else % array.sty + \ifnum 13<\currentgrouptype + \hfil \hskip1sp \relax \fi + \fi +}% \tabu@flush +\let\tabu@hfil \hfil +\let\tabu@hfill \hfill +\let\tabu@hskip \hskip +\def\tabu@removehfil{% + \iftabu@colortbl + \unkern \tabu@cellskip =\lastskip + \ifnum\gluestretchorder\tabu@cellskip =\tw@ \hskip-\tabu@cellskip + \else \tabu@cellskip \z@skip + \fi + \else + \ifdim\lastskip=1sp\unskip\fi + \ifnum\gluestretchorder\lastskip =\@ne + \hfilneg % \hfilneg for array.sty but not for colortbl... + \fi + \fi +}% \tabu@removehfil +\def\tabu@ignorehfil{\aftergroup \tabu@nohfil} +\def\tabu@nohfil{% \hfil -> do nothing + restore original \hfil + \def\hfil{\let\hfil \tabu@hfil}% local to (alignment template) group +}% \tabu@nohfil +\def\tabu@colortblalignments {% if colortbl + \def\tabu@nohfil{% + \def\hfil {\let\hfil \tabu@hfil}% local to (alignment template) group + \def\hfill {\let\hfill \tabu@hfill}% (colortbl uses \hfill) pfff... + \def\hskip ####1\relax{\let\hskip \tabu@hskip}}% local +}% \tabu@colortblalignments +%% Taking care of footnotes and hyperfootnotes ---------------------- +\long\def\tabu@footnotetext #1{% + \edef\@tempa{\the\tabu@footnotes + \noexpand\footnotetext [\the\csname c@\@mpfn\endcsname]}% + \global\tabu@footnotes\expandafter{\@tempa {#1}}}% +\long\def\tabu@xfootnotetext [#1]#2{% + \global\tabu@footnotes\expandafter{\the\tabu@footnotes + \footnotetext [{#1}]{#2}}} +\let\tabu@xfootnote \@xfootnote +\long\def\tabu@Hy@ftntext{\tabu@Hy@ftntxt {\the \c@footnote }} +\long\def\tabu@Hy@xfootnote [#1]{% + \begingroup + \value\@mpfn #1\relax + \protected@xdef \@thefnmark {\thempfn}% + \endgroup + \@footnotemark \tabu@Hy@ftntxt {#1}% +}% \tabu@Hy@xfootnote +\long\def\tabu@Hy@ftntxt #1#2{% + \edef\@tempa{% + \the\tabu@footnotes + \begingroup + \value\@mpfn #1\relax + \noexpand\protected@xdef\noexpand\@thefnmark {\noexpand\thempfn}% + \expandafter \noexpand \expandafter + \tabu@Hy@footnotetext \expandafter{\Hy@footnote@currentHref}% + }% + \global\tabu@footnotes\expandafter{\@tempa {#2}% + \endgroup}% +}% \tabu@Hy@ftntxt +\long\def\tabu@Hy@footnotetext #1#2{% + \H@@footnotetext{% + \ifHy@nesting + \hyper@@anchor {#1}{#2}% + \else + \Hy@raisedlink{% + \hyper@@anchor {#1}{\relax}% + }% + \def\@currentHref {#1}% + \let\@currentlabelname \@empty + #2% + \fi + }% +}% \tabu@Hy@footnotetext +%% No need for \arraybackslash ! ------------------------------------ +\def\tabu@latextwoe {% +\def\tabu@temp##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@centering \centering \arraybackslash +\tabu@temp \tabu@raggedleft \raggedleft \arraybackslash +\tabu@temp \tabu@raggedright \raggedright \arraybackslash +}% \tabu@latextwoe +\def\tabu@raggedtwoe {% +\def\tabu@temp ##1##2##3{{\toks@\expandafter{##2##3}\xdef##1{\the\toks@}}} +\tabu@temp \tabu@Centering \Centering \arraybackslash +\tabu@temp \tabu@RaggedLeft \RaggedLeft \arraybackslash +\tabu@temp \tabu@RaggedRight \RaggedRight \arraybackslash +\tabu@temp \tabu@justifying \justifying \arraybackslash +}% \tabu@raggedtwoe +\def\tabu@normalcrbackslash{\let\\\@normalcr} +\def\tabu@trivlist{\expandafter\def\expandafter\@trivlist\expandafter{% + \expandafter\tabu@normalcrbackslash \@trivlist}} +%% Utilities: \fbox \fcolorbox and \tabudecimal ------------------- +\def\tabu@fbox {\leavevmode\afterassignment\tabu@beginfbox \setbox\@tempboxa\hbox} +\def\tabu@beginfbox {\bgroup \kern\fboxsep + \bgroup\aftergroup\tabu@endfbox} +\def\tabu@endfbox {\kern\fboxsep\egroup\egroup + \@frameb@x\relax} +\def\tabu@color@b@x #1#2{\leavevmode \bgroup + \def\tabu@docolor@b@x{#1{#2\color@block{\wd\z@}{\ht\z@}{\dp\z@}\box\z@}}% + \afterassignment\tabu@begincolor@b@x \setbox\z@ \hbox +}% \tabu@color@b@x +\def\tabu@begincolor@b@x {\kern\fboxsep \bgroup + \aftergroup\tabu@endcolor@b@x \set@color} +\def\tabu@endcolor@b@x {\kern\fboxsep \egroup + \dimen@\ht\z@ \advance\dimen@ \fboxsep \ht\z@ \dimen@ + \dimen@\dp\z@ \advance\dimen@ \fboxsep \dp\z@ \dimen@ + \tabu@docolor@b@x \egroup +}% \tabu@endcolor@b@x +%% Corrections (arydshln, delarray, colortbl) ----------------------- +\def\tabu@fix@arrayright {%% \@arrayright is missing from \endarray + \iftabu@colortbl + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \CT@end \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \def\tabu@endarray{% + \crcr \egroup \egroup % + \@arrayright % + \gdef\@preamble{}\CT@end}% + \fi + \else + \ifdefined\adl@array % + \def\tabu@endarray{% + \adl@endarray \egroup \adl@arrayrestore \egroup % + \@arrayright % + \gdef\@preamble{}}% + \else % + \PackageWarning{tabu} + {\string\@arrayright\space is missing from the + \MessageBreak definition of \string\endarray. + \MessageBreak Comptability with delarray.sty is broken.}% + \fi\fi +}% \tabu@fix@arrayright +\def\tabu@adl@xarraydashrule #1#2#3{% + \ifnum\@lastchclass=\adl@class@start\else + \ifnum\@lastchclass=\@ne\else + \ifnum\@lastchclass=5 \else % @-arg (class 5) and !-arg (class 1) + \adl@leftrulefalse \fi\fi % must be treated the same + \fi + \ifadl@zwvrule\else \ifadl@inactive\else + \@addtopreamble{\vrule\@width\arrayrulewidth + \@height\z@ \@depth\z@}\fi \fi + \ifadl@leftrule + \@addtopreamble{\adl@vlineL{\CT@arc@}{\adl@dashgapcolor}% + {\number#1}#3}% + \else \@addtopreamble{\adl@vlineR{\CT@arc@}{\adl@dashgapcolor}% + {\number#2}#3} + \fi +}% \tabu@adl@xarraydashrule +\def\tabu@adl@act@endpbox {% + \unskip \ifhmode \nobreak \fi \@finalstrut \@arstrutbox + \egroup \egroup + \adl@colhtdp \box\adl@box \hfil +}% \tabu@adl@act@endpbox +\def\tabu@adl@fix {% + \let\adl@xarraydashrule \tabu@adl@xarraydashrule % arydshln + \let\adl@act@endpbox \tabu@adl@act@endpbox % arydshln + \let\adl@act@@endpbox \tabu@adl@act@endpbox % arydshln + \let\@preamerror \@preamerr % arydshln +}% \tabu@adl@fix +%% Correction for longtable' \@startbox definition ------------------ +%% => \everypar is ``missing'' : TeX should be in vertical mode +\def\tabu@LT@startpbox #1{% + \bgroup + \let\@footnotetext\LT@p@ftntext + \setlength\hsize{#1}% + \@arrayparboxrestore + \everypar{% + \vrule \@height \ht\@arstrutbox \@width \z@ + \everypar{}}% +}% \tabu@LT@startpbox +%% \tracingtabu and the package options ------------------ +\DeclareOption{delarray}{\AtEndOfPackage{\RequirePackage{delarray}}} +\DeclareOption{linegoal}{% + \AtEndOfPackage{% + \RequirePackage{linegoal}[2010/12/07]% + \let\tabudefaulttarget \linegoal% \linegoal is \linewidth if not pdfTeX +}} +\DeclareOption{scantokens}{\tabuscantokenstrue} +\DeclareOption{debugshow}{\AtEndOfPackage{\tracingtabu=\tw@}} +\def\tracingtabu {\begingroup\@ifnextchar=% + {\afterassignment\tabu@tracing\count@} + {\afterassignment\tabu@tracing\count@1\relax}} +\def\tabu@tracing{\expandafter\endgroup + \expandafter\tabu@tr@cing \the\count@ \relax +}% \tabu@tracing +\def\tabu@tr@cing #1\relax {% + \ifnum#1>\thr@@ \let\tabu@tracinglines\message + \else \let\tabu@tracinglines\@gobble + \fi + \ifnum#1>\tw@ \let\tabu@DBG \tabu@@DBG + \def\tabu@mkarstrut {\tabu@DBG@arstrut}% + \tabustrutrule 1.5\p@ + \else \let\tabu@DBG \@gobble + \def\tabu@mkarstrut {\tabu@arstrut}% + \tabustrutrule \z@ + \fi + \ifnum#1>\@ne \let\tabu@debug \message + \else \let\tabu@debug \@gobble + \fi + \ifnum#1>\z@ + \let\tabu@message \message + \let\tabu@tracing@save \tabu@message@save + \let\tabu@starttimer \tabu@pdftimer + \else + \let\tabu@message \@gobble + \let\tabu@tracing@save \@gobble + \let\tabu@starttimer \relax + \fi +}% \tabu@tr@cing +%% Setup \AtBeginDocument +\AtBeginDocument{\tabu@AtBeginDocument} +\def\tabu@AtBeginDocument{\let\tabu@AtBeginDocument \@undefined + \ifdefined\arrayrulecolor \tabu@colortbltrue % + \tabu@colortblalignments % different glues are used + \else \tabu@colortblfalse \fi + \ifdefined\CT@arc@ \else \let\CT@arc@ \relax \fi + \ifdefined\CT@drsc@\else \let\CT@drsc@ \relax \fi + \let\tabu@arc@L \CT@arc@ \let\tabu@drsc@L \CT@drsc@ + \ifodd 1\ifcsname siunitx_table_collect_begin:Nn\endcsname % + \expandafter\ifx + \csname siunitx_table_collect_begin:Nn\endcsname\relax 0\fi\fi\relax + \tabu@siunitxtrue + \else \let\tabu@maybesiunitx \@firstofone % + \let\tabu@siunitx \tabu@nosiunitx + \tabu@siunitxfalse + \fi + \ifdefined\adl@array % + \else \let\tabu@adl@fix \relax + \let\tabu@adl@endtrial \@empty \fi + \ifdefined\longtable % + \else \let\longtabu \tabu@nolongtabu \fi + \ifdefined\cellspacetoplimit \tabu@warn@cellspace\fi + \csname\ifcsname ifHy@hyperfootnotes\endcsname % + ifHy@hyperfootnotes\else iffalse\fi\endcsname + \let\tabu@footnotetext \tabu@Hy@ftntext + \let\tabu@xfootnote \tabu@Hy@xfootnote \fi + \ifdefined\FV@DefineCheckEnd% + \tabu@fancyvrb \fi + \ifdefined\color % + \let\tabu@color \color + \def\tabu@leavevmodecolor ##1{% + \def\tabu@leavevmodecolor {\leavevmode ##1}% + }\expandafter\tabu@leavevmodecolor\expandafter{\color}% + \else + \let\tabu@color \tabu@nocolor + \let\tabu@leavevmodecolor \@firstofone \fi + \tabu@latextwoe + \ifdefined\@raggedtwoe@everyselectfont % + \tabu@raggedtwoe + \else + \let\tabu@cell@L \tabu@cell@l + \let\tabu@cell@R \tabu@cell@r + \let\tabu@cell@C \tabu@cell@c + \let\tabu@cell@J \tabu@cell@j \fi + \expandafter\in@ \expandafter\@arrayright \expandafter{\endarray}% + \ifin@ \let\tabu@endarray \endarray + \else \tabu@fix@arrayright \fi% + \everyrow{}% +}% \tabu@AtBeginDocument +\def\tabu@warn@cellspace{% + \PackageWarning{tabu}{% + Package cellspace has some limitations + \MessageBreak And redefines some macros of array.sty. + \MessageBreak Please use \string\tabulinesep\space to control + \MessageBreak vertical spacing of lines inside tabu environnement}% +}% \tabu@warn@cellspace +%% tabu Package initialisation +\tabuscantokensfalse +\let\tabu@arc@G \relax +\let\tabu@drsc@G \relax +\let\tabu@evr@G \@empty +\let\tabu@rc@G \@empty +\def\tabu@ls@G {\tabu@linestyle@}% +\let\tabu@@rowfontreset \@empty % +\let\tabu@@celllalign \@empty +\let\tabu@@cellralign \@empty +\let\tabu@@cellleft \@empty +\let\tabu@@cellright \@empty +\def\tabu@naturalXmin {\z@} +\def\tabu@naturalXmax {\z@} +\let\tabu@rowfontreset \@empty +\def\tabulineon {4pt}\let\tabulineoff \tabulineon +\tabu@everyrowtrue +\ifdefined\pdfelapsedtime % + \def\tabu@pdftimer {\xdef\tabu@starttime{\the\pdfelapsedtime}}% +\else \let\tabu@pdftimer \relax \let\tabu@message@etime \relax +\fi +\tracingtabu=\z@ +\newtabulinestyle {=\maxdimen}% creates the 'factory' settings \tabu@linestyle@ +\tabulinestyle{} +\taburowcolors{} +\let\tabudefaulttarget \linewidth +\ProcessOptions* % \ProcessOptions* is quicker ! +\endinput +%% +%% End of file `tabu.sty'. diff --git a/Documentation/latex/uart_8c.tex b/Documentation/latex/uart_8c.tex new file mode 100644 index 0000000..5ad5be4 --- /dev/null +++ b/Documentation/latex/uart_8c.tex @@ -0,0 +1,2 @@ +\hypertarget{uart_8c}{}\doxysection{D\+:/\+M\+S\+P\+M0\+G3507\+\_\+\+M\+C\+A\+L/mspmog3507\+\_\+mcal/\+Core/\+Source/uart.c File Reference} +\label{uart_8c}\index{D:/MSPM0G3507\_MCAL/mspmog3507\_mcal/Core/Source/uart.c@{D:/MSPM0G3507\_MCAL/mspmog3507\_mcal/Core/Source/uart.c}} diff --git a/Documentation/mspm0g3507_mcal.doxyfile b/Documentation/mspm0g3507_mcal.doxyfile new file mode 100644 index 0000000..6f536ee --- /dev/null +++ b/Documentation/mspm0g3507_mcal.doxyfile @@ -0,0 +1,2567 @@ +# Doxyfile 1.8.16 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# https://www.gnu.org/software/libiconv/ for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "MCAL_DRIVER" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = . + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all generated output in the proper direction. +# Possible values are: None, LTR, RTL and Context. +# The default value is: None. + +OUTPUT_TEXT_DIRECTION = None + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines (in the resulting output). You can put ^^ in the value part of an +# alias to insert a newline as if a physical newline was in the original file. +# When you need a literal { or } or , in the value part of an alias you have to +# escape them by means of a backslash (\), this can lead to conflicts with the +# commands \{ and \} for these it is advised to use the version @{ and @} or use +# a double escape (\\{ and \\}) + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, +# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is +# Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See https://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 5. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 5 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# (including Cygwin) ands Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. If +# EXTRACT_ALL is set to YES then this flag will automatically be disabled. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = D:\MSPM0G3507_MCAL\mspmog3507_mcal\Core\Source + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: https://www.gnu.org/software/libiconv/) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.pyw \ + *.f90 \ + *.f95 \ + *.f03 \ + *.f08 \ + *.f \ + *.for \ + *.tcl \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf \ + *.ice + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# entity all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see https://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse_libclang=ON option for CMake. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +# If clang assisted parsing is enabled you can provide the clang parser with the +# path to the compilation database (see: +# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) used when the files +# were built. This is equivalent to specifying the "-p" option to a clang tool, +# such as clang-check. These options will then be passed to the parser. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse_libclang=ON option for CMake. + +CLANG_DATABASE_PATH = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# https://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML +# documentation will contain a main index with vertical navigation menus that +# are dynamically created via Javascript. If disabled, the navigation index will +# consists of multiple levels of tabs that are statically embedded in every HTML +# page. Disable this option to support browsers that do not have Javascript, +# like the Qt help browser. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_MENUS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: https://developer.apple.com/xcode/), introduced with OSX +# 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANSPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# https://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from https://www.mathjax.org before deployment. +# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/ + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /