diff --git a/Logiciel/Firmware_testeur/.cproject b/Logiciel/Firmware_testeur/.cproject index a16d0cf69c0aaf46480a884b9757fc9af3b93dda..838b3f6bf211f052cb41f2975711f56978d80d1e 100644 --- a/Logiciel/Firmware_testeur/.cproject +++ b/Logiciel/Firmware_testeur/.cproject @@ -38,16 +38,12 @@ <listOptionValue builtIn="false" value="DEBUG"/> </option> <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.170695699" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths" useByScannerDiscovery="false" valueType="includePath"> - <listOptionValue builtIn="false" value="Drivers/STM32F0xx_HAL_Driver/Inc"/> - <listOptionValue builtIn="false" value="Drivers/CMSIS/Include"/> - <listOptionValue builtIn="false" value="Drivers/CMSIS/Device/ST/STM32F0xx/Include"/> - <listOptionValue builtIn="false" value="Drivers/STM32F0xx_HAL_Driver/Inc/Legacy"/> - <listOptionValue builtIn="false" value="Inc"/> <listOptionValue builtIn="false" value="../Inc"/> <listOptionValue builtIn="false" value="../Drivers/STM32F0xx_HAL_Driver/Inc"/> <listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/> <listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F0xx/Include"/> <listOptionValue builtIn="false" value="../Drivers/STM32F0xx_HAL_Driver/Inc/Legacy"/> + <listOptionValue builtIn="false" value="../Drivers"/> </option> <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.2008519693" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/> </tool> @@ -176,5 +172,13 @@ </scannerConfigBuildInfo> </storageModule> <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/> - <storageModule moduleId="refreshScope"/> + <storageModule moduleId="refreshScope" versionNumber="2"> + <configuration configurationName="Debug"> + <resource resourceType="PROJECT" workspacePath="/Firmware_testeur"/> + </configuration> + <configuration configurationName="Release"> + <resource resourceType="PROJECT" workspacePath="/Firmware_testeur"/> + </configuration> + </storageModule> + <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/> </cproject> diff --git a/Logiciel/Firmware_testeur/Drivers/alim2v.c b/Logiciel/Firmware_testeur/Drivers/alim2v.c index c2c0c6ecd83a3323be30d40fc53236505da6db7f..b041b1a89df5dbd5c0d73a52ab5f00bee2db24e8 100644 --- a/Logiciel/Firmware_testeur/Drivers/alim2v.c +++ b/Logiciel/Firmware_testeur/Drivers/alim2v.c @@ -5,4 +5,4 @@ * Author: Yann Roberge (Lenclume) */ - +#include "alim2v.h" diff --git a/Logiciel/Firmware_testeur/Drivers/alim2v_port_stm32f071v8.c b/Logiciel/Firmware_testeur/Drivers/alim2v_port_stm32f071v8.c index d01e250745a94d7c6dec2bc1ff96b1b7d687cd14..9325b2e3b8606adaff6fea4412fcaa912e3e421c 100644 --- a/Logiciel/Firmware_testeur/Drivers/alim2v_port_stm32f071v8.c +++ b/Logiciel/Firmware_testeur/Drivers/alim2v_port_stm32f071v8.c @@ -5,4 +5,4 @@ * Author: Yann Roberge (Lenclume) */ - +#include "alim2v_port_stm32f071v8.h" diff --git a/Logiciel/Firmware_testeur/Drivers/rj45.c b/Logiciel/Firmware_testeur/Drivers/rj45.c index 30097b4f19e103908a9ad1c47e899f12c3a6bf1e..58160f7aa004e0e0ed0a115b7836440480cc346d 100644 --- a/Logiciel/Firmware_testeur/Drivers/rj45.c +++ b/Logiciel/Firmware_testeur/Drivers/rj45.c @@ -5,4 +5,101 @@ * Author: Yann Roberge (Lenclume) */ +#include "rj45.h" + +// Fonctions publiques +void RJ45_Entree_init (RJ45_Entree* connecteur, +RJ45_Entree_lireBroche_ptr lireBroche1, RJ45_Entree_lireBroche_ptr lireBroche2, +RJ45_Entree_lireBroche_ptr lireBroche3, RJ45_Entree_lireBroche_ptr lireBroche4, +RJ45_Entree_lireBroche_ptr lireBroche5, RJ45_Entree_lireBroche_ptr lireBroche6, +RJ45_Entree_lireBroche_ptr lireBroche7, RJ45_Entree_lireBroche_ptr lireBroche8) { + connecteur->base_ = connecteur; + connecteur->lireBroche1_ = lireBroche1; + connecteur->lireBroche2_ = lireBroche2; + connecteur->lireBroche3_ = lireBroche3; + connecteur->lireBroche4_ = lireBroche4; + connecteur->lireBroche5_ = lireBroche5; + connecteur->lireBroche6_ = lireBroche6; + connecteur->lireBroche7_ = lireBroche7; + connecteur->lireBroche8_ = lireBroche8; +} + +RJ45_Etat RJ45_Entree_lireBroche1 (RJ45_Entree* connecteur) { + return connecteur->lireBroche1_(connecteur); +} +RJ45_Etat RJ45_Entree_lireBroche2 (RJ45_Entree* connecteur) { + return connecteur->lireBroche2_(connecteur); +} +RJ45_Etat RJ45_Entree_lireBroche3 (RJ45_Entree* connecteur) { + return connecteur->lireBroche3_(connecteur); +} + +RJ45_Etat RJ45_Entree_lireBroche4 (RJ45_Entree* connecteur) { + return connecteur->lireBroche4_(connecteur); +} + +RJ45_Etat RJ45_Entree_lireBroche5 (RJ45_Entree* connecteur) { + return connecteur->lireBroche5_(connecteur); +} + +RJ45_Etat RJ45_Entree_lireBroche6 (RJ45_Entree* connecteur) { + return connecteur->lireBroche6_(connecteur); +} + +RJ45_Etat RJ45_Entree_lireBroche7 (RJ45_Entree* connecteur) { + return connecteur->lireBroche7_(connecteur); +} + +RJ45_Etat RJ45_Entree_lireBroche8 (RJ45_Entree* connecteur) { + return connecteur->lireBroche8_(connecteur); +} + + +void RJ45_Sortie_init (RJ45_Sortie* connecteur, +RJ45_Sortie_ecrireBroche_ptr ecrireBroche1, RJ45_Sortie_ecrireBroche_ptr ecrireBroche2, +RJ45_Sortie_ecrireBroche_ptr ecrireBroche3, RJ45_Sortie_ecrireBroche_ptr ecrireBroche4, +RJ45_Sortie_ecrireBroche_ptr ecrireBroche5, RJ45_Sortie_ecrireBroche_ptr ecrireBroche6, +RJ45_Sortie_ecrireBroche_ptr ecrireBroche7, RJ45_Sortie_ecrireBroche_ptr ecrireBroche8) { + connecteur->base_ = connecteur; + connecteur->ecrireBroche1_ = ecrireBroche1; + connecteur->ecrireBroche2_ = ecrireBroche2; + connecteur->ecrireBroche3_ = ecrireBroche3; + connecteur->ecrireBroche4_ = ecrireBroche4; + connecteur->ecrireBroche5_ = ecrireBroche5; + connecteur->ecrireBroche6_ = ecrireBroche6; + connecteur->ecrireBroche7_ = ecrireBroche7; + connecteur->ecrireBroche8_ = ecrireBroche8; +} + +void RJ45_Sortie_ecrireBroche1 (RJ45_Sortie* connecteur) { + connecteur->ecrireBroche1_(connecteur); +} + +void RJ45_Sortie_ecrireBroche2 (RJ45_Sortie* connecteur) { + connecteur->ecrireBroche2_(connecteur); +} + +void RJ45_Sortie_ecrireBroche3 (RJ45_Sortie* connecteur) { + connecteur->ecrireBroche3_(connecteur); +} + +void RJ45_Sortie_ecrireBroche4 (RJ45_Sortie* connecteur) { + connecteur->ecrireBroche4_(connecteur); +} + +void RJ45_Sortie_ecrireBroche5 (RJ45_Sortie* connecteur) { + connecteur->ecrireBroche5_(connecteur); +} + +void RJ45_Sortie_ecrireBroche6 (RJ45_Sortie* connecteur) { + connecteur->ecrireBroche6_(connecteur); +} + +void RJ45_Sortie_ecrireBroche7 (RJ45_Sortie* connecteur) { + connecteur->ecrireBroche7_(connecteur); +} + +void RJ45_Sortie_ecrireBroche8 (RJ45_Sortie* connecteur) { + connecteur->ecrireBroche8_(connecteur); +} diff --git a/Logiciel/Firmware_testeur/Drivers/rj45.h b/Logiciel/Firmware_testeur/Drivers/rj45.h index 190da0f013820049e84cf8721e2a39ee5e19696d..7d87a8e8f14bcb1393825f886787070013555fec 100644 --- a/Logiciel/Firmware_testeur/Drivers/rj45.h +++ b/Logiciel/Firmware_testeur/Drivers/rj45.h @@ -8,6 +8,71 @@ #ifndef RJ45_H_ #define RJ45_H_ +// États logiques +typedef enum { + RJ45_BAS = 0, + RJ45_HAUT = 1, + RJ45_ERREUR +} RJ45_Etat; +// Pointeurs de fonctions abstraites +typedef RJ45_Etat (*RJ45_Entree_lireBroche_ptr) (void*); +typedef void (*RJ45_Sortie_ecrireBroche_ptr) (void*); + +// Structures +typedef struct { + void* base_; + RJ45_Entree_lireBroche_ptr lireBroche1_; + RJ45_Entree_lireBroche_ptr lireBroche2_; + RJ45_Entree_lireBroche_ptr lireBroche3_; + RJ45_Entree_lireBroche_ptr lireBroche4_; + RJ45_Entree_lireBroche_ptr lireBroche5_; + RJ45_Entree_lireBroche_ptr lireBroche6_; + RJ45_Entree_lireBroche_ptr lireBroche7_; + RJ45_Entree_lireBroche_ptr lireBroche8_; +} RJ45_Entree; + +typedef struct { + void* base_; + RJ45_Sortie_ecrireBroche_ptr ecrireBroche1_; + RJ45_Sortie_ecrireBroche_ptr ecrireBroche2_; + RJ45_Sortie_ecrireBroche_ptr ecrireBroche3_; + RJ45_Sortie_ecrireBroche_ptr ecrireBroche4_; + RJ45_Sortie_ecrireBroche_ptr ecrireBroche5_; + RJ45_Sortie_ecrireBroche_ptr ecrireBroche6_; + RJ45_Sortie_ecrireBroche_ptr ecrireBroche7_; + RJ45_Sortie_ecrireBroche_ptr ecrireBroche8_; +} RJ45_Sortie; + +// Fonctions publiques +void RJ45_Entree_init (RJ45_Entree* connecteur, + RJ45_Entree_lireBroche_ptr lireBroche1, RJ45_Entree_lireBroche_ptr lireBroche2, + RJ45_Entree_lireBroche_ptr lireBroche3, RJ45_Entree_lireBroche_ptr lireBroche4, + RJ45_Entree_lireBroche_ptr lireBroche5, RJ45_Entree_lireBroche_ptr lireBroche6, + RJ45_Entree_lireBroche_ptr lireBroche7, RJ45_Entree_lireBroche_ptr lireBroche8); + +RJ45_Etat RJ45_Entree_lireBroche1 (RJ45_Entree* connecteur); +RJ45_Etat RJ45_Entree_lireBroche2 (RJ45_Entree* connecteur); +RJ45_Etat RJ45_Entree_lireBroche3 (RJ45_Entree* connecteur); +RJ45_Etat RJ45_Entree_lireBroche4 (RJ45_Entree* connecteur); +RJ45_Etat RJ45_Entree_lireBroche5 (RJ45_Entree* connecteur); +RJ45_Etat RJ45_Entree_lireBroche6 (RJ45_Entree* connecteur); +RJ45_Etat RJ45_Entree_lireBroche7 (RJ45_Entree* connecteur); +RJ45_Etat RJ45_Entree_lireBroche8 (RJ45_Entree* connecteur); + +void RJ45_Sortie_init (RJ45_Sortie* connecteur, + RJ45_Sortie_ecrireBroche_ptr ecrireBroche1, RJ45_Sortie_ecrireBroche_ptr ecrireBroche2, + RJ45_Sortie_ecrireBroche_ptr ecrireBroche3, RJ45_Sortie_ecrireBroche_ptr ecrireBroche4, + RJ45_Sortie_ecrireBroche_ptr ecrireBroche5, RJ45_Sortie_ecrireBroche_ptr ecrireBroche6, + RJ45_Sortie_ecrireBroche_ptr ecrireBroche7, RJ45_Sortie_ecrireBroche_ptr ecrireBroche8); + +void RJ45_Sortie_ecrireBroche1 (RJ45_Sortie* connecteur); +void RJ45_Sortie_ecrireBroche2 (RJ45_Sortie* connecteur); +void RJ45_Sortie_ecrireBroche3 (RJ45_Sortie* connecteur); +void RJ45_Sortie_ecrireBroche4 (RJ45_Sortie* connecteur); +void RJ45_Sortie_ecrireBroche5 (RJ45_Sortie* connecteur); +void RJ45_Sortie_ecrireBroche6 (RJ45_Sortie* connecteur); +void RJ45_Sortie_ecrireBroche7 (RJ45_Sortie* connecteur); +void RJ45_Sortie_ecrireBroche8 (RJ45_Sortie* connecteur); #endif /* RJ45_H_ */ diff --git a/Logiciel/Firmware_testeur/Drivers/rj45_port_stm32f071v8.c b/Logiciel/Firmware_testeur/Drivers/rj45_port_stm32f071v8.c index 58dd8a961c6a3e69aeaf8d3f60186465fc823242..950931b37df7fca84bbf63178d9ca8a373a3c132 100644 --- a/Logiciel/Firmware_testeur/Drivers/rj45_port_stm32f071v8.c +++ b/Logiciel/Firmware_testeur/Drivers/rj45_port_stm32f071v8.c @@ -5,4 +5,59 @@ * Author: Yann Roberge (Lenclume) */ +#include "rj45_port_stm32f071v8.h" +// Fonctions publiques +void RJ45_Entree_Port_init (RJ45_Entree_Port* connecteur) { + RJ45_Entree base[1]; + RJ45_Entree_init(base, (void*) RJ45_Entree_Port_lireBroche1, + (void*) RJ45_Entree_Port_lireBroche2, + (void*) RJ45_Entree_Port_lireBroche3, + (void*) RJ45_Entree_Port_lireBroche4, + (void*) RJ45_Entree_Port_lireBroche5, + (void*) RJ45_Entree_Port_lireBroche6, + (void*) RJ45_Entree_Port_lireBroche7, + (void*) RJ45_Entree_Port_lireBroche8); + connecteur->base_ = base; +} + +RJ45_Etat RJ45_Entree_Port_lireBroche1 (RJ45_Entree_Port* connecteur) { + switch ( HAL_GPIO_ReadPin(ETHA_1_GPIO_Port, ETHA_1_Pin) ) { + case GPIO_PIN_SET: + return RJ45_HAUT; + case GPIO_PIN_RESET: + return RJ45_BAS; + default: + return RJ45_ERREUR; + } +} + +RJ45_Etat RJ45_Entree_Port_lireBroche2 (RJ45_Entree_Port* connecteur); +RJ45_Etat RJ45_Entree_Port_lireBroche3 (RJ45_Entree_Port* connecteur); +RJ45_Etat RJ45_Entree_Port_lireBroche4 (RJ45_Entree_Port* connecteur); +RJ45_Etat RJ45_Entree_Port_lireBroche5 (RJ45_Entree_Port* connecteur); +RJ45_Etat RJ45_Entree_Port_lireBroche6 (RJ45_Entree_Port* connecteur); +RJ45_Etat RJ45_Entree_Port_lireBroche7 (RJ45_Entree_Port* connecteur); +RJ45_Etat RJ45_Entree_Port_lireBroche8 (RJ45_Entree_Port* connecteur); + +void RJ45_Sortie_Port_init (RJ45_Sortie_Port* connecteur) { + RJ45_Sortie base[1]; + RJ45_Sortie_init(base, (void*) RJ45_Sortie_Port_ecrireBroche1, + (void*) RJ45_Sortie_Port_ecrireBroche2, + (void*) RJ45_Sortie_Port_ecrireBroche3, + (void*) RJ45_Sortie_Port_ecrireBroche4, + (void*) RJ45_Sortie_Port_ecrireBroche5, + (void*) RJ45_Sortie_Port_ecrireBroche6, + (void*) RJ45_Sortie_Port_ecrireBroche7, + (void*) RJ45_Sortie_Port_ecrireBroche8); + connecteur->base_ = base; +} + +void RJ45_Sortie_Port_ecrireBroche1 (RJ45_Sortie_Port* connecteur); +void RJ45_Sortie_Port_ecrireBroche2 (RJ45_Sortie_Port* connecteur); +void RJ45_Sortie_Port_ecrireBroche3 (RJ45_Sortie_Port* connecteur); +void RJ45_Sortie_Port_ecrireBroche4 (RJ45_Sortie_Port* connecteur); +void RJ45_Sortie_Port_ecrireBroche5 (RJ45_Sortie_Port* connecteur); +void RJ45_Sortie_Port_ecrireBroche6 (RJ45_Sortie_Port* connecteur); +void RJ45_Sortie_Port_ecrireBroche7 (RJ45_Sortie_Port* connecteur); +void RJ45_Sortie_Port_ecrireBroche8 (RJ45_Sortie_Port* connecteur); diff --git a/Logiciel/Firmware_testeur/Drivers/rj45_port_stm32f071v8.h b/Logiciel/Firmware_testeur/Drivers/rj45_port_stm32f071v8.h index 2455a9c9b6a1cbe868ef72f613202ec45142d453..78436d37554f8f55463c99ad481841e922bf5496 100644 --- a/Logiciel/Firmware_testeur/Drivers/rj45_port_stm32f071v8.h +++ b/Logiciel/Firmware_testeur/Drivers/rj45_port_stm32f071v8.h @@ -8,6 +8,39 @@ #ifndef RJ45_PORT_STM32F071V8_H_ #define RJ45_PORT_STM32F071V8_H_ +#include "rj45.h" +#include "main.h" +// Structures +typedef struct { + RJ45_Entree* base_; +} RJ45_Entree_Port; + +typedef struct { + RJ45_Sortie* base_; +} RJ45_Sortie_Port; + +// Fonctions publiques +void RJ45_Entree_Port_init (RJ45_Entree_Port* connecteur); + +RJ45_Etat RJ45_Entree_Port_lireBroche1 (RJ45_Entree_Port* connecteur); +RJ45_Etat RJ45_Entree_Port_lireBroche2 (RJ45_Entree_Port* connecteur); +RJ45_Etat RJ45_Entree_Port_lireBroche3 (RJ45_Entree_Port* connecteur); +RJ45_Etat RJ45_Entree_Port_lireBroche4 (RJ45_Entree_Port* connecteur); +RJ45_Etat RJ45_Entree_Port_lireBroche5 (RJ45_Entree_Port* connecteur); +RJ45_Etat RJ45_Entree_Port_lireBroche6 (RJ45_Entree_Port* connecteur); +RJ45_Etat RJ45_Entree_Port_lireBroche7 (RJ45_Entree_Port* connecteur); +RJ45_Etat RJ45_Entree_Port_lireBroche8 (RJ45_Entree_Port* connecteur); + +void RJ45_Sortie_Port_init (RJ45_Sortie_Port* connecteur); + +void RJ45_Sortie_Port_ecrireBroche1 (RJ45_Sortie_Port* connecteur); +void RJ45_Sortie_Port_ecrireBroche2 (RJ45_Sortie_Port* connecteur); +void RJ45_Sortie_Port_ecrireBroche3 (RJ45_Sortie_Port* connecteur); +void RJ45_Sortie_Port_ecrireBroche4 (RJ45_Sortie_Port* connecteur); +void RJ45_Sortie_Port_ecrireBroche5 (RJ45_Sortie_Port* connecteur); +void RJ45_Sortie_Port_ecrireBroche6 (RJ45_Sortie_Port* connecteur); +void RJ45_Sortie_Port_ecrireBroche7 (RJ45_Sortie_Port* connecteur); +void RJ45_Sortie_Port_ecrireBroche8 (RJ45_Sortie_Port* connecteur); #endif /* RJ45_PORT_STM32F071V8_H_ */ diff --git a/Logiciel/Firmware_testeur/Drivers/sept_segments.c b/Logiciel/Firmware_testeur/Drivers/sept_segments.c index c5119db962bc34ad86c446028c44b008effc9266..bb30b2ed7a0ab048c12784eb23a2f59678ce55b1 100644 --- a/Logiciel/Firmware_testeur/Drivers/sept_segments.c +++ b/Logiciel/Firmware_testeur/Drivers/sept_segments.c @@ -5,4 +5,4 @@ * Author: Yann Roberge (Lenclume) */ - +#include "sept_segments.h" diff --git a/Logiciel/Firmware_testeur/Drivers/sept_segments_port_stm32f071v8.c b/Logiciel/Firmware_testeur/Drivers/sept_segments_port_stm32f071v8.c index 574df7df69ae051a72079ddb6da8d5004bf1aad3..be84f7a0d6da12046b8eb57bee9e3e40f24bb10a 100644 --- a/Logiciel/Firmware_testeur/Drivers/sept_segments_port_stm32f071v8.c +++ b/Logiciel/Firmware_testeur/Drivers/sept_segments_port_stm32f071v8.c @@ -5,4 +5,4 @@ * Author: Yann Roberge (Lenclume) */ - +#include "sept_segments_port_stm32f071v8.h" diff --git a/Logiciel/Firmware_testeur/Drivers/testeur.c b/Logiciel/Firmware_testeur/Drivers/testeur.c index 6a967c43a9ea6efed6ad0f3627dcda732f84d00b..de0995d87c836c56a98396e414e46ec456d84370 100644 --- a/Logiciel/Firmware_testeur/Drivers/testeur.c +++ b/Logiciel/Firmware_testeur/Drivers/testeur.c @@ -5,4 +5,4 @@ * Author: Yann Roberge (Lenclume) */ - +#include "testeur.h" diff --git a/Logiciel/Firmware_testeur/Drivers/testeur.h b/Logiciel/Firmware_testeur/Drivers/testeur.h index fce4d0422b6cf777aafffc22a0dab84b394e2099..38f0799a415bb7765bea40a582da80903d42262f 100644 --- a/Logiciel/Firmware_testeur/Drivers/testeur.h +++ b/Logiciel/Firmware_testeur/Drivers/testeur.h @@ -8,6 +8,24 @@ #ifndef TESTEUR_H_ #define TESTEUR_H_ +#include "rj45_port_stm32f071v8.h" +#include "sept_segments_port_stm32f071v8.h" +#include "alim2v_port_stm32f071v8.h" +// Structure +typedef struct { + RJ45_Sortie ethernetA_; + RJ45_Entree ethernetB_; + +// TODO: Implémenter les classes SeptSegments et Alim2V +// SeptSegments ecrans_[8]; +// Alim2V alimentation2V_; +} Testeur; + +// Fonctions publiques +void Testeur_init (Testeur* testeur, RJ45_Sortie* ethernetA, + RJ45_Entree* ethernetB/*, SeptSegments ecrans_, + Alim2V alimentation2V*/); +void Testeur_testerCable (Testeur* testeur); #endif /* TESTEUR_H_ */ diff --git a/Logiciel/Firmware_testeur/Inc/main.h b/Logiciel/Firmware_testeur/Inc/main.h index c3536664da3b96f8ad41e72719a1123c3a53d74c..69a457c8f6bb3e69dc9626806e957b1351a3135b 100644 --- a/Logiciel/Firmware_testeur/Inc/main.h +++ b/Logiciel/Firmware_testeur/Inc/main.h @@ -32,7 +32,7 @@ extern "C" { /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ - +#include "testeur.h" /* USER CODE END Includes */ /* Exported types ------------------------------------------------------------*/