# XFT eXecutive Framework Template (XFT) is a template for project with femto XF. Femto XF is an eXecutive Framework for embedded systems developed in the University of Applied Sciences Western Switzerland (HES-SO Valais/Wallis) by Pierre-André Mudry, Pascal Sartoretti and Medar Rieder. This template is specifically designed for a PIC8 board. It's template for work with state machines. It used the model of the 5 layers for the packaging and double switch for the state machine. ## Layers ### App Here is the place for the application code. The application code is the code that is specific to the application and that is not reusable on another application. Here you can find the factory and obviously the main. ### Board Here is the place for the board specific code. The board specific code is the code that is specific to the board and that is not reusable on another board. Here you can find in bonus a class for the LED and a class for the button for a PIC8 board. ### MCC Generated Files Here is the files generated by the MPLAB Code Configurator (MCC). You maybe have to regenerate them if you change the configuration of the board. ### Middleware Here is the place for the middleware code. The middleware code is the code that is not specific to the board and that is reusable on another board. Here you can find in bonus a class for a blinker and a class for a click handler. ### XF Here is the femto XF framework. No modification is needed. ## State machines ### Generator You can generate a class for state machine with the following command: ```bash python3 ./generator/XFTGenerator.py ``` You can find the generated class in the folder `generator/out/`. For more details about generator, see the README.md in the folder `generator/`. ### How it works The architecture is based around the method `processEvent()`. This method is called by the XF when an event is received. The method `processEvent()` is a switch on the current state. The first switch is switched on the actual state. The second switch is switched on event on exit and a third switch is switched on event on entry. For each entry on an event you have a callback method than you can define in the class with the FILENAME_onState() method. For each variables you have a setter. For each event you have an emitter method that you can call in the class with the FILENAME_emitEvent() method. Look the comments of .h file for more details.