Archived
Template
1
0

convert to model

This commit is contained in:
Rémi Heredero 2023-07-13 22:04:30 +02:00
parent 2281778915
commit 017fd46ca5
10 changed files with 5 additions and 703 deletions

113
Makefile
View File

@ -1,113 +0,0 @@
#
# There exist several targets which are by default empty and which can be
# used for execution of your targets. These targets are usually executed
# before and after some main targets. They are:
#
# .build-pre: called before 'build' target
# .build-post: called after 'build' target
# .clean-pre: called before 'clean' target
# .clean-post: called after 'clean' target
# .clobber-pre: called before 'clobber' target
# .clobber-post: called after 'clobber' target
# .all-pre: called before 'all' target
# .all-post: called after 'all' target
# .help-pre: called before 'help' target
# .help-post: called after 'help' target
#
# Targets beginning with '.' are not intended to be called on their own.
#
# Main targets can be executed directly, and they are:
#
# build build a specific configuration
# clean remove built files from a configuration
# clobber remove all built files
# all build all configurations
# help print help mesage
#
# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and
# .help-impl are implemented in nbproject/makefile-impl.mk.
#
# Available make variables:
#
# CND_BASEDIR base directory for relative paths
# CND_DISTDIR default top distribution directory (build artifacts)
# CND_BUILDDIR default top build directory (object files, ...)
# CONF name of current configuration
# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration)
# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration)
# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration)
# CND_PACKAGE_DIR_${CONF} directory of package (current configuration)
# CND_PACKAGE_NAME_${CONF} name of package (current configuration)
# CND_PACKAGE_PATH_${CONF} path to package (current configuration)
#
# NOCDDL
# Environment
MKDIR=mkdir
CP=cp
CCADMIN=CCadmin
RANLIB=ranlib
# build
build: .build-post
.build-pre:
# Add your pre 'build' code here...
.build-post: .build-impl
# Add your post 'build' code here...
# clean
clean: .clean-post
.clean-pre:
# Add your pre 'clean' code here...
# WARNING: the IDE does not call this target since it takes a long time to
# simply run make. Instead, the IDE removes the configuration directories
# under build and dist directly without calling make.
# This target is left here so people can do a clean when running a clean
# outside the IDE.
.clean-post: .clean-impl
# Add your post 'clean' code here...
# clobber
clobber: .clobber-post
.clobber-pre:
# Add your pre 'clobber' code here...
.clobber-post: .clobber-impl
# Add your post 'clobber' code here...
# all
all: .all-post
.all-pre:
# Add your pre 'all' code here...
.all-post: .all-impl
# Add your post 'all' code here...
# help
help: .help-post
.help-pre:
# Add your pre 'help' code here...
.help-post: .help-impl
# Add your post 'help' code here...
# include project implementation makefile
include nbproject/Makefile-impl.mk
# include project make variables
include nbproject/Makefile-variables.mk

@ -1 +1 @@
Subproject commit a808b1a1fb577636ebeebcd07374754688d37e71 Subproject commit 6ddda2930030db6bd45a81e1547a4ac9a88d90af

View File

@ -1,230 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<configurationDescriptor version="65">
<logicalFolder name="root" displayName="root" projectFiles="true">
<logicalFolder name="HeaderFiles"
displayName="Header Files"
projectFiles="true">
<logicalFolder name="app" displayName="app" projectFiles="true">
<itemPath>src/app/factory.h</itemPath>
<itemPath>src/app/app.h</itemPath>
</logicalFolder>
<logicalFolder name="board" displayName="board" projectFiles="true">
<itemPath>src/board/led.h</itemPath>
<itemPath>src/board/button.h</itemPath>
</logicalFolder>
<logicalFolder name="mcc_generated_files"
displayName="mcc_generated_files"
projectFiles="true">
<itemPath>src/mcc_generated_files/tmr0.h</itemPath>
<itemPath>src/mcc_generated_files/pin_manager.h</itemPath>
<itemPath>src/mcc_generated_files/mcc.h</itemPath>
<itemPath>src/mcc_generated_files/interrupt_manager.h</itemPath>
<itemPath>src/mcc_generated_files/device_config.h</itemPath>
</logicalFolder>
<logicalFolder name="middleware" displayName="middleware" projectFiles="true">
<itemPath>src/middleware/blinker.h</itemPath>
<itemPath>src/middleware/click_handler.h</itemPath>
</logicalFolder>
<logicalFolder name="xf" displayName="xf" projectFiles="true">
<itemPath>src/xf/ireactive.h</itemPath>
<itemPath>src/xf/event.h</itemPath>
<itemPath>src/xf/xf.h</itemPath>
</logicalFolder>
</logicalFolder>
<logicalFolder name="LinkerScript"
displayName="Linker Files"
projectFiles="true">
</logicalFolder>
<logicalFolder name="SourceFiles"
displayName="Source Files"
projectFiles="true">
<logicalFolder name="app" displayName="app" projectFiles="true">
<itemPath>src/app/factory.c</itemPath>
<itemPath>src/app/main.c</itemPath>
<itemPath>src/app/app.c</itemPath>
</logicalFolder>
<logicalFolder name="board" displayName="board" projectFiles="true">
<itemPath>src/board/led.c</itemPath>
<itemPath>src/board/button.c</itemPath>
</logicalFolder>
<logicalFolder name="mcc_generated_files"
displayName="mcc_generated_files"
projectFiles="true">
<itemPath>src/mcc_generated_files/mcc.c</itemPath>
<itemPath>src/mcc_generated_files/interrupt_manager.c</itemPath>
<itemPath>src/mcc_generated_files/device_config.c</itemPath>
<itemPath>src/mcc_generated_files/pin_manager.c</itemPath>
<itemPath>src/mcc_generated_files/tmr0.c</itemPath>
</logicalFolder>
<logicalFolder name="middleware" displayName="middleware" projectFiles="true">
<itemPath>src/middleware/blinker.c</itemPath>
<itemPath>src/middleware/click_handler.c</itemPath>
</logicalFolder>
<logicalFolder name="xf" displayName="xf" projectFiles="true">
<itemPath>src/xf/xf.c</itemPath>
<itemPath>src/xf/event.c</itemPath>
</logicalFolder>
</logicalFolder>
<logicalFolder name="ExternalFiles"
displayName="Important Files"
projectFiles="false">
<itemPath>Makefile</itemPath>
</logicalFolder>
</logicalFolder>
<sourceRootList>
<Elem>src</Elem>
</sourceRootList>
<projectmakefile>Makefile</projectmakefile>
<confs>
<conf name="default" type="2">
<toolsSet>
<developmentServer>localhost</developmentServer>
<targetDevice>PIC18F87K22</targetDevice>
<targetHeader></targetHeader>
<targetPluginBoard></targetPluginBoard>
<platformTool>PICkit3PlatformTool</platformTool>
<languageToolchain>XC8</languageToolchain>
<languageToolchainVersion>2.41</languageToolchainVersion>
<platform>2</platform>
</toolsSet>
<packs>
<pack name="PIC18F-K_DFP" vendor="Microchip" version="1.7.134"/>
</packs>
<ScriptingSettings>
</ScriptingSettings>
<compileType>
<linkerTool>
<linkerLibItems>
</linkerLibItems>
</linkerTool>
<archiverTool>
</archiverTool>
<loading>
<useAlternateLoadableFile>false</useAlternateLoadableFile>
<parseOnProdLoad>false</parseOnProdLoad>
<alternateLoadableFile></alternateLoadableFile>
</loading>
<subordinates>
</subordinates>
</compileType>
<makeCustomizationType>
<makeCustomizationPreStepEnabled>false</makeCustomizationPreStepEnabled>
<makeUseCleanTarget>false</makeUseCleanTarget>
<makeCustomizationPreStep></makeCustomizationPreStep>
<makeCustomizationPostStepEnabled>false</makeCustomizationPostStepEnabled>
<makeCustomizationPostStep></makeCustomizationPostStep>
<makeCustomizationPutChecksumInUserID>false</makeCustomizationPutChecksumInUserID>
<makeCustomizationEnableLongLines>false</makeCustomizationEnableLongLines>
<makeCustomizationNormalizeHexFile>false</makeCustomizationNormalizeHexFile>
</makeCustomizationType>
<HI-TECH-COMP>
<property key="additional-warnings" value="true"/>
<property key="asmlist" value="true"/>
<property key="call-prologues" value="false"/>
<property key="default-bitfield-type" value="true"/>
<property key="default-char-type" value="true"/>
<property key="define-macros" value=""/>
<property key="disable-optimizations" value="true"/>
<property key="extra-include-directories" value=""/>
<property key="favor-optimization-for" value="-speed,+space"/>
<property key="garbage-collect-data" value="true"/>
<property key="garbage-collect-functions" value="true"/>
<property key="identifier-length" value="255"/>
<property key="local-generation" value="false"/>
<property key="operation-mode" value="free"/>
<property key="opt-xc8-compiler-strict_ansi" value="false"/>
<property key="optimization-assembler" value="true"/>
<property key="optimization-assembler-files" value="true"/>
<property key="optimization-debug" value="false"/>
<property key="optimization-invariant-enable" value="false"/>
<property key="optimization-invariant-value" value="16"/>
<property key="optimization-level" value="-O0"/>
<property key="optimization-speed" value="false"/>
<property key="optimization-stable-enable" value="false"/>
<property key="preprocess-assembler" value="true"/>
<property key="short-enums" value="true"/>
<property key="tentative-definitions" value="-fno-common"/>
<property key="undefine-macros" value=""/>
<property key="use-cci" value="false"/>
<property key="use-iar" value="false"/>
<property key="verbose" value="false"/>
<property key="warning-level" value="-3"/>
<property key="what-to-do" value="ignore"/>
</HI-TECH-COMP>
<HI-TECH-LINK>
<property key="additional-options-checksum" value=""/>
<property key="additional-options-code-offset" value=""/>
<property key="additional-options-command-line" value=""/>
<property key="additional-options-errata" value=""/>
<property key="additional-options-extend-address" value="false"/>
<property key="additional-options-trace-type" value=""/>
<property key="additional-options-use-response-files" value="false"/>
<property key="backup-reset-condition-flags" value="false"/>
<property key="calibrate-oscillator" value="false"/>
<property key="calibrate-oscillator-value" value="0x3400"/>
<property key="clear-bss" value="true"/>
<property key="code-model-external" value="wordwrite"/>
<property key="code-model-rom" value=""/>
<property key="create-html-files" value="false"/>
<property key="data-model-ram" value=""/>
<property key="data-model-size-of-double" value="32"/>
<property key="data-model-size-of-double-gcc" value="no-short-double"/>
<property key="data-model-size-of-float" value="32"/>
<property key="data-model-size-of-float-gcc" value="no-short-float"/>
<property key="display-class-usage" value="false"/>
<property key="display-hex-usage" value="false"/>
<property key="display-overall-usage" value="true"/>
<property key="display-psect-usage" value="false"/>
<property key="extra-lib-directories" value=""/>
<property key="fill-flash-options-addr" value=""/>
<property key="fill-flash-options-const" value=""/>
<property key="fill-flash-options-how" value="0"/>
<property key="fill-flash-options-inc-const" value="1"/>
<property key="fill-flash-options-increment" value=""/>
<property key="fill-flash-options-seq" value=""/>
<property key="fill-flash-options-what" value="0"/>
<property key="format-hex-file-for-download" value="false"/>
<property key="initialize-data" value="true"/>
<property key="input-libraries" value="libm"/>
<property key="keep-generated-startup.as" value="false"/>
<property key="link-in-c-library" value="true"/>
<property key="link-in-c-library-gcc" value=""/>
<property key="link-in-peripheral-library" value="false"/>
<property key="managed-stack" value="false"/>
<property key="opt-xc8-linker-file" value="false"/>
<property key="opt-xc8-linker-link_startup" value="false"/>
<property key="opt-xc8-linker-serial" value=""/>
<property key="program-the-device-with-default-config-words" value="true"/>
<property key="remove-unused-sections" value="true"/>
</HI-TECH-LINK>
<PICkit3PlatformTool>
<property key="firmware.download.all" value="false"/>
</PICkit3PlatformTool>
<Tool>
<property key="firmware.download.all" value="false"/>
</Tool>
<XC8-CO>
<property key="coverage-enable" value=""/>
<property key="stack-guidance" value="false"/>
</XC8-CO>
<XC8-config-global>
<property key="advanced-elf" value="true"/>
<property key="constdata-progmem" value="true"/>
<property key="gcc-opt-driver-new" value="true"/>
<property key="gcc-opt-std" value="-std=c99"/>
<property key="gcc-output-file-format" value="dwarf-3"/>
<property key="mapped-progmem" value="false"/>
<property key="omit-pack-options" value="false"/>
<property key="omit-pack-options-new" value="1"/>
<property key="output-file-format" value="-mcof,+elf"/>
<property key="smart-io-format" value=""/>
<property key="stack-size-high" value="auto"/>
<property key="stack-size-low" value="auto"/>
<property key="stack-size-main" value="auto"/>
<property key="stack-type" value="compiled"/>
<property key="user-pack-device-support" value=""/>
<property key="wpo-lto" value="false"/>
</XC8-config-global>
</conf>
</confs>
</configurationDescriptor>

View File

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>com.microchip.mplab.nbide.embedded.makeproject</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/make-project/1">
<name>XFT</name>
<creation-uuid>9d10e4b8-91cc-4d86-8f12-a6fd880b26ed</creation-uuid>
<make-project-type>0</make-project-type>
<sourceEncoding>UTF-8</sourceEncoding>
<make-dep-projects/>
<sourceRootList>
<sourceRootElem>src</sourceRootElem>
</sourceRootList>
<confList>
<confElem>
<name>default</name>
<type>2</type>
</confElem>
</confList>
<formatting>
<project-formatting-style>false</project-formatting-style>
</formatting>
</data>
</configuration>
</project>

View File

@ -1,217 +0,0 @@
/**
* @author R<EFBFBD>mi Heredero (remi@heredero.ch)
* @version 1.0.0
* @date 2023-06-15
*/
#include "app.h"
#include "factory.h"
#include "../middleware/blinker.h"
#include "../middleware/click_handler.h"
void clickL(APP* me){
POST(me, &APP_processEvent, evAPclickL, 0, 0);
}
void clickLn(APP* me){
POST(me, &APP_processEvent, evAPclickLn, 0, 0);
}
void clickR(APP* me){
POST(me, &APP_processEvent, evAPclickR, 0, 0);
}
void clickRn(APP* me){
POST(me, &APP_processEvent, evAPclickRn, 0, 0);
}
void endL(APP* me){
POST(me, &APP_processEvent, evAPendL, 0, 0);
}
void endR(APP* me){
POST(me, &APP_processEvent, evAPendR, 0, 0);
}
void longClick(APP* me){
POST(me, &APP_processEvent, evAPlongClick, 0, 0);
}
void APP_init(APP* me){
me->state = STAP_INIT;
CLICK_HANDLER_onSingle_click(ch1(), &clickL, me);
CLICK_HANDLER_onSingle_click(ch3(), &clickR, me);
CLICK_HANDLER_onDouble_click(ch1(), &clickLn, me);
CLICK_HANDLER_onDouble_click(ch3(), &clickRn, me);
CLICK_HANDLER_onLong_click(ch1(), &longClick, me);
CLICK_HANDLER_onLong_click(ch3(), &longClick, me);
BLINKER_onFinished(blL(), &endL, me);
BLINKER_onFinished(blR(), &endR, me);
}
void APP_startBehaviour(APP* me){
POST(me, &APP_processEvent, evAPinit, 0, 0);
}
bool APP_processEvent(Event* ev){
bool processed = false;
APP* me = (APP*) Event_getTarget(ev);
APP_STATES oldState = me->state;
evIDT evid = Event_getId(ev);
switch(me->state) { // In state
case STAP_INIT:
if(evid == evAPinit) {
me->state = STAP_WAIT;
}
break;
case STAP_WAIT:
if(evid == evAPclickL) {
me->state = STAP_BLINKER_L;
BLINKER_emitBlink(blL(), 0);
}
if(evid == evAPclickLn) {
me->state = STAP_BLINKER_L;
BLINKER_emitBlinkN(blL(), 0);
}
if(evid == evAPclickR) {
me->state = STAP_BLINKER_R;
BLINKER_emitBlink(blR(), 0);
}
if(evid == evAPclickRn) {
me->state = STAP_BLINKER_R;
BLINKER_emitBlinkN(blR(), 0);
}
if(evid == evAPlongClick) {
me->state = STAP_BLINKER_W;
BLINKER_emitBlink(blB(), 0);
}
break;
case STAP_BLINKER_L:
if(evid == evAPclickR){
me->state = STAP_BLINKER_LR;
BLINKER_emitBlink(blR(), 0);
}
if(evid == evAPclickRn){
me->state = STAP_BLINKER_LR;
BLINKER_emitBlinkN(blR(), 0);
}
if(evid == evAPclickL) {
me->state = STAP_WAIT;
BLINKER_endBlink(blL());
}
if(evid == evAPendL) {
me->state = STAP_WAIT;
}
if(evid == evAPlongClick) {
me->state = STAP_BLINKER_W;
BLINKER_endBlink(blL());
BLINKER_emitBlink(blB(), 0);
}
break;
case STAP_BLINKER_R:
if(evid == evAPclickL){
me->state = STAP_BLINKER_LR;
BLINKER_emitBlink(blL(), 0);
}
if(evid == evAPclickLn){
me->state = STAP_BLINKER_LR;
BLINKER_emitBlinkN(blL(), 0);
}
if(evid == evAPclickR) {
me->state = STAP_WAIT;
BLINKER_endBlink(blR());
}
if(evid == evAPendR) {
me->state = STAP_WAIT;
}
if(evid == evAPlongClick) {
me->state = STAP_BLINKER_W;
BLINKER_endBlink(blR());
BLINKER_emitBlink(blB(), 0);
}
break;
case STAP_BLINKER_LR:
if(evid == evAPclickR) {
me->state = STAP_BLINKER_L;
BLINKER_endBlink(blR());
}
if(evid == evAPendR) {
me->state = STAP_BLINKER_L;
}
if(evid == evAPclickL) {
me->state = STAP_BLINKER_R;
BLINKER_endBlink(blL());
}
if(evid == evAPendL) {
me->state = STAP_BLINKER_R;
}
if(evid == evAPlongClick) {
me->state = STAP_BLINKER_W;
BLINKER_endBlink(blL());
BLINKER_endBlink(blR());
BLINKER_emitBlink(blB(), 0);
}
break;
case STAP_BLINKER_W:
if(evid == evAPlongClick){
me->state = STAP_WAIT;
BLINKER_endBlink(blB());
}
break;
}
if(oldState != me->state) {
switch(oldState) { // on exit
case STAP_INIT:
break;
case STAP_WAIT:
break;
case STAP_BLINKER_L:
break;
case STAP_BLINKER_R:
break;
case STAP_BLINKER_LR:
break;
case STAP_BLINKER_W:
break;
}
switch(me->state) { // on entry
case STAP_INIT:
break;
case STAP_WAIT:
break;
case STAP_BLINKER_L:
break;
case STAP_BLINKER_R:
break;
case STAP_BLINKER_LR:
break;
case STAP_BLINKER_W:
break;
}
processed = true;
}
return processed;
}

View File

@ -1,40 +0,0 @@
/**
* @author Rémi Heredero (remi@heredero.ch)
* @version 1.0.0
* @date 2023-06-17
*/
#ifndef APP_H
#define APP_H
#include "../xf/xf.h"
typedef enum {
STAP_INIT,
STAP_WAIT,
STAP_BLINKER_L,
STAP_BLINKER_R,
STAP_BLINKER_LR,
STAP_BLINKER_W
} APP_STATES;
typedef enum {
evAPinit = 150,
evAPclickL,
evAPclickLn,
evAPclickR,
evAPclickRn,
evAPendL,
evAPendR,
evAPlongClick
} APP_EVENTS;
typedef struct {
APP_STATES state; // Actual state
} APP;
void APP_init(APP* me);
void APP_startBehaviour(APP* me);
bool APP_processEvent(Event* ev);
#endif /* APP_H */

View File

@ -103,7 +103,6 @@ void Factory_init() {
LED_initHW(l9()); LED_initHW(l9());
LED_initHW(l10()); LED_initHW(l10());
BUTTON_init(b1(), 1); BUTTON_init(b1(), 1);
BUTTON_init(b2(), 2); BUTTON_init(b2(), 2);
BUTTON_init(b3(), 3); BUTTON_init(b3(), 3);
@ -116,41 +115,6 @@ void Factory_init() {
CLICK_HANDLER_init(ch2()); CLICK_HANDLER_init(ch2());
CLICK_HANDLER_init(ch3()); CLICK_HANDLER_init(ch3());
BLINKER_init(blL());
BLINKER_init(blR());
BLINKER_init(blB());
BLINKER_init(blT());
APP_init(app());
theFactory.bar.timeOn = 1000;
theFactory.bar.timeOff = 500;
theFactory.bar.n = 5;
}
void warningBlink(void* on_){
bool on = (bool)on_;
BLINKER_endBlink(blL());
BLINKER_endBlink(blR());
if(on) {
LED_on(l1());
LED_on(l10());
} else {
LED_off(l1());
LED_off(l10());
}
}
void toggleBlink(void* st_){
foo* st = (foo*)st_;
uint16_t timeOn= st->timeOn;
uint16_t timeOff = st->timeOff;
uint8_t n = st->n;
BLINKER_setTimeOn(blT(), timeOn);
BLINKER_setTimeOff(blT(), timeOff);
BLINKER_setNumberOfBlink(blT(), n);
} }
//connect objects if required //connect objects if required
@ -164,18 +128,6 @@ void Factory_build() {
BUTTON_onReleased(b2(), &CLICK_HANDLER_emitPbrelease, ch2()); BUTTON_onReleased(b2(), &CLICK_HANDLER_emitPbrelease, ch2());
BUTTON_onReleased(b3(), &CLICK_HANDLER_emitPbrelease, ch3()); BUTTON_onReleased(b3(), &CLICK_HANDLER_emitPbrelease, ch3());
CLICK_HANDLER_onSingle_click(ch2(), &BLINKER_emitBlinkN, blT());
CLICK_HANDLER_onLong_click(ch2(), &toggleBlink, &theFactory.bar);
BLINKER_onOn(blL(), &LED_on, l1());
BLINKER_onOff(blL(), &LED_off, l1());
BLINKER_onOn(blR(), &LED_on, l10());
BLINKER_onOff(blR(), &LED_off, l10());
BLINKER_onOn(blB(), &warningBlink, true);
BLINKER_onOff(blB(), &warningBlink, false);
BLINKER_onOn(blT(), &LED_on, l5());
BLINKER_onOff(blT(), &LED_off, l5());
} }
//start all state machines //start all state machines
@ -186,9 +138,4 @@ void Factory_start() {
CLICK_HANDLER_startBehaviour(ch1()); CLICK_HANDLER_startBehaviour(ch1());
CLICK_HANDLER_startBehaviour(ch2()); CLICK_HANDLER_startBehaviour(ch2());
CLICK_HANDLER_startBehaviour(ch3()); CLICK_HANDLER_startBehaviour(ch3());
BLINKER_startBehaviour(blL());
BLINKER_startBehaviour(blR());
BLINKER_startBehaviour(blB());
BLINKER_startBehaviour(blT());
APP_startBehaviour(app());
} }

View File

@ -14,13 +14,6 @@
#include "../board/button.h" #include "../board/button.h"
#include "../middleware/click_handler.h" #include "../middleware/click_handler.h"
#include "../middleware/blinker.h" #include "../middleware/blinker.h"
#include "app.h"
typedef struct {
uint16_t timeOn;
uint16_t timeOff;
uint8_t n;
} foo;
typedef struct { typedef struct {
LED l1_; LED l1_;
@ -39,12 +32,6 @@ typedef struct {
CLICK_HANDLER ch1_; CLICK_HANDLER ch1_;
CLICK_HANDLER ch2_; CLICK_HANDLER ch2_;
CLICK_HANDLER ch3_; CLICK_HANDLER ch3_;
BLINKER blL_;
BLINKER blR_;
BLINKER blB_;
BLINKER blT_;
APP app_;
foo bar;
} Factory; } Factory;
@ -72,11 +59,4 @@ CLICK_HANDLER* ch1();
CLICK_HANDLER* ch2(); CLICK_HANDLER* ch2();
CLICK_HANDLER* ch3(); CLICK_HANDLER* ch3();
BLINKER* blL();
BLINKER* blR();
BLINKER* blB();
BLINKER* blT();
APP* app();
#endif #endif

View File

@ -1,5 +1,5 @@
/** /**
* @author R<EFBFBD>mi Heredero (remi@heredero.ch) * @author Rémi Heredero
* @version. 1.0.0 * @version. 1.0.0
* @date 2023-06-15 * @date 2023-06-15
*/ */

View File

@ -1,5 +1,5 @@
/** /**
* @author Rémi Heredero (remi@heredero.ch) * @author Rémi Heredero
* @version. 1.0.0 * @version. 1.0.0
* @date 2023-06-15 * @date 2023-06-15
*/ */