Compare commits
10 Commits
a5e9193217
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 67443c53bf | |||
| 003c5c901e | |||
| 1b95094b86 | |||
| 6ddda29300 | |||
| 9262aaf955 | |||
| a808b1a1fb | |||
| fad793a262 | |||
| 0914985025 | |||
| 33906b4184 | |||
| 3678c0043f |
@@ -2,7 +2,7 @@
|
|||||||
__author__ = "Louis Heredero"
|
__author__ = "Louis Heredero"
|
||||||
__copyright__ = "Copyright 2023, Louis Heredero"
|
__copyright__ = "Copyright 2023, Louis Heredero"
|
||||||
__license__ = "GPL3.0"
|
__license__ = "GPL3.0"
|
||||||
__version__ = "1.1.0"
|
__version__ = "1.2.0"
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import locale
|
import locale
|
||||||
@@ -111,6 +111,8 @@ def main():
|
|||||||
variables["filename_lc"] = variables["filename"].lower()
|
variables["filename_lc"] = variables["filename"].lower()
|
||||||
variables["fn"] = get_input("Filename (short)", None, True).upper()
|
variables["fn"] = get_input("Filename (short)", None, True).upper()
|
||||||
|
|
||||||
|
fn_uc = variables["filename"]
|
||||||
|
|
||||||
##########
|
##########
|
||||||
# States #
|
# States #
|
||||||
##########
|
##########
|
||||||
@@ -126,17 +128,76 @@ def main():
|
|||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
states = ["ST"+variables["fn"]+"_"+s for s in states]
|
prefix = "ST"+variables["fn"]+"_"
|
||||||
variables["STATES_ENUM"] = ",\n".join(states)
|
variables["STATES_ENUM"] = ",\n".join([prefix+s for s in states])
|
||||||
|
|
||||||
states_cases = []
|
states_cases = []
|
||||||
|
states_cases_entry = []
|
||||||
|
states_cbs_struct = []
|
||||||
|
states_cbs_init = []
|
||||||
|
|
||||||
for state in states:
|
for state in states:
|
||||||
case_ = f"case {state}:\n"
|
case_ = "case {STATE}:\n"
|
||||||
case_ += " break;"
|
case_ += " break;"
|
||||||
|
case_ = case_.replace("{STATE}", prefix+state)
|
||||||
states_cases.append(case_)
|
states_cases.append(case_)
|
||||||
|
|
||||||
|
case_ = "case {STATE}:\n"
|
||||||
|
case_ += " if (me->{state}.f != NULL) {\n"
|
||||||
|
case_ += " me->{state}.f(me->{state}.p);\n"
|
||||||
|
case_ += " }\n"
|
||||||
|
case_ += " break;"
|
||||||
|
case_ = case_.replace("{state}", state.lower()).replace("{STATE}", prefix+state)
|
||||||
|
states_cases_entry.append(case_)
|
||||||
|
|
||||||
|
states_cbs_struct.append(f"{fn_uc}_CALLBACK {state.lower()};")
|
||||||
|
states_cbs_init.append(f"me->{state.lower()}.f = NULL;")
|
||||||
|
|
||||||
variables["STATES_CASES"] = "\n\n".join(states_cases)
|
variables["STATES_CASES"] = "\n\n".join(states_cases)
|
||||||
|
variables["STATES_CASES_ENTRY"] = "\n\n".join(states_cases_entry)
|
||||||
|
variables["STATES_CBS_STRUCT"] = "\n".join(states_cbs_struct)
|
||||||
|
variables["STATES_CBS_INIT"] = "\n".join(states_cbs_init)
|
||||||
|
|
||||||
|
#############
|
||||||
|
# Callbacks #
|
||||||
|
#############
|
||||||
|
|
||||||
|
callbacks_dec = []
|
||||||
|
|
||||||
|
callback_dec = ""
|
||||||
|
callback_dec += "/**\n"
|
||||||
|
callback_dec += " * Set the callback function to call when the {filename} is entering state {state}\n"
|
||||||
|
callback_dec += " * @param me the {filename} itself\n"
|
||||||
|
callback_dec += " * @param f the function to call\n"
|
||||||
|
callback_dec += " * @param p the param(s) to pass to the function\n"
|
||||||
|
callback_dec += " */\n"
|
||||||
|
callback_dec += "void {filename}_on{State}({filename}* me, {filename}_CALLBACK_FUNCTION f, void* p);"
|
||||||
|
callback_dec = callback_dec.replace("{filename}", fn_uc)
|
||||||
|
|
||||||
|
for state in states:
|
||||||
|
callbacks_dec.append(
|
||||||
|
callback_dec.replace("{state}", state.lower())
|
||||||
|
.replace("{State}", state.capitalize())
|
||||||
|
)
|
||||||
|
|
||||||
|
variables["CALLBACKS_DEC"] = "\n\n".join(callbacks_dec)
|
||||||
|
|
||||||
|
callbacks_def = []
|
||||||
|
|
||||||
|
callback_def = ""
|
||||||
|
callback_def += "void {filename}_on{State}({filename}* me, {filename}_CALLBACK_FUNCTION f, void* p) {\n"
|
||||||
|
callback_def += " me->{state}.f = f;\n"
|
||||||
|
callback_def += " me->{state}.p = p;\n"
|
||||||
|
callback_def += "}"
|
||||||
|
callback_def = callback_def.replace("{filename}", fn_uc)
|
||||||
|
|
||||||
|
for state in states:
|
||||||
|
callbacks_def.append(
|
||||||
|
callback_def.replace("{state}", state.lower())
|
||||||
|
.replace("{State}", state.capitalize())
|
||||||
|
)
|
||||||
|
|
||||||
|
variables["CALLBACKS_DEF"] = "\n\n".join(callbacks_def)
|
||||||
|
|
||||||
##########
|
##########
|
||||||
# Events #
|
# Events #
|
||||||
@@ -147,7 +208,7 @@ def main():
|
|||||||
print("Events (leave empty to end):")
|
print("Events (leave empty to end):")
|
||||||
print("> init")
|
print("> init")
|
||||||
while True:
|
while True:
|
||||||
event = input("> ").lower()
|
event = input("> ")
|
||||||
if event:
|
if event:
|
||||||
events.append(event)
|
events.append(event)
|
||||||
|
|
||||||
@@ -162,14 +223,14 @@ def main():
|
|||||||
events_emits_def = []
|
events_emits_def = []
|
||||||
|
|
||||||
emit_def = ""
|
emit_def = ""
|
||||||
emit_def += "void {filename}_emit{Event}({filename}* me, uint16_t t) {\n"
|
emit_def += "void {filename}_emit{Event}({filename}* me, uint16_t t, int64_t data) {\n"
|
||||||
emit_def += " POST(me, &{filename}_processEvent, ev{fn}{event}, t, 0);\n"
|
emit_def += " POST(me, &{filename}_processEvent, ev{fn}{event}, t, data);\n"
|
||||||
emit_def += "}"
|
emit_def += "}"
|
||||||
emit_def = emit_def.replace("{filename}", variables["filename"]).replace("{fn}", variables["fn"])
|
emit_def = emit_def.replace("{filename}", fn_uc).replace("{fn}", variables["fn"])
|
||||||
|
|
||||||
for event in events[1:]:
|
for event in events[1:]:
|
||||||
events_emits_def.append(
|
events_emits_def.append(
|
||||||
emit_def.replace("{event}", event).replace("{Event}", event.capitalize())
|
emit_def.replace("{event}", event).replace("{Event}", ucfirst(event))
|
||||||
)
|
)
|
||||||
|
|
||||||
variables["EVENTS_EMITS_DEF"] = "\n\n".join(events_emits_def)
|
variables["EVENTS_EMITS_DEF"] = "\n\n".join(events_emits_def)
|
||||||
@@ -180,13 +241,14 @@ def main():
|
|||||||
emit_dec += " * Emit the {event} event\n"
|
emit_dec += " * Emit the {event} event\n"
|
||||||
emit_dec += " * @param me the {filename} itself\n"
|
emit_dec += " * @param me the {filename} itself\n"
|
||||||
emit_dec += " * @param t time to wait in ms before triggering event\n"
|
emit_dec += " * @param t time to wait in ms before triggering event\n"
|
||||||
emit_dec += " */"
|
emit_dec += " * @param data data to put on the event for XF\n"
|
||||||
emit_dec += "void {filename}_emit{Event}({filename}* me, uint16_t t);"
|
emit_dec += " */\n"
|
||||||
emit_dec = emit_dec.replace("{filename}", variables["filename"])
|
emit_dec += "void {filename}_emit{Event}({filename}* me, uint16_t t, int64_t data);"
|
||||||
|
emit_dec = emit_dec.replace("{filename}", fn_uc)
|
||||||
|
|
||||||
for event in events[1:]:
|
for event in events[1:]:
|
||||||
events_emits_dec.append(
|
events_emits_dec.append(
|
||||||
emit_dec.replace("{event}", event).replace("{Event}", event.capitalize())
|
emit_dec.replace("{event}", event).replace("{Event}", ucfirst(event))
|
||||||
)
|
)
|
||||||
|
|
||||||
variables["EVENTS_EMITS_DEC"] = "\n\n".join(events_emits_dec)
|
variables["EVENTS_EMITS_DEC"] = "\n\n".join(events_emits_dec)
|
||||||
@@ -204,10 +266,10 @@ def main():
|
|||||||
setter_def += "void {filename}_set{Name}({filename}* me, {type} v) {\n"
|
setter_def += "void {filename}_set{Name}({filename}* me, {type} v) {\n"
|
||||||
setter_def += " me->{name} = v;\n"
|
setter_def += " me->{name} = v;\n"
|
||||||
setter_def += "}"
|
setter_def += "}"
|
||||||
setter_def = setter_def.replace("{filename}", variables["filename"])
|
setter_def = setter_def.replace("{filename}", fn_uc)
|
||||||
|
|
||||||
setter_dec = "void {filename}_set{Name}({filename}* me, {type} v);"
|
setter_dec = "void {filename}_set{Name}({filename}* me, {type} v);"
|
||||||
setter_dec = setter_dec.replace("{filename}", variables["filename"])
|
setter_dec = setter_dec.replace("{filename}", fn_uc)
|
||||||
|
|
||||||
print("Variables:")
|
print("Variables:")
|
||||||
print("(leave name empty to end)")
|
print("(leave name empty to end)")
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
void ${filename}_init(${filename}* me){
|
void ${filename}_init(${filename}* me){
|
||||||
me->state = ST${fn}_INIT;
|
me->state = ST${fn}_INIT;
|
||||||
${VARS_INIT}
|
${VARS_INIT}
|
||||||
|
${STATES_CBS_INIT}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ${filename}_startBehaviour(${filename}* me){
|
void ${filename}_startBehaviour(${filename}* me){
|
||||||
@@ -19,6 +20,10 @@ void ${filename}_startBehaviour(${filename}* me){
|
|||||||
bool ${filename}_processEvent(Event* ev) {
|
bool ${filename}_processEvent(Event* ev) {
|
||||||
bool processed = false;
|
bool processed = false;
|
||||||
${filename}* me = (${filename}*)Event_getTarget(ev);
|
${filename}* me = (${filename}*)Event_getTarget(ev);
|
||||||
|
${filename}_STATES oldState = me->state;
|
||||||
|
evIDT evid = Event_getId(ev);
|
||||||
|
uint64_t data = Event_getData(ev);
|
||||||
|
|
||||||
switch (me->state) { // onState
|
switch (me->state) { // onState
|
||||||
case ST${fn}_INIT:
|
case ST${fn}_INIT:
|
||||||
if (ev->id == ev${fn}init) {
|
if (ev->id == ev${fn}init) {
|
||||||
@@ -41,7 +46,7 @@ bool ${filename}_processEvent(Event* ev) {
|
|||||||
case ST${fn}_INIT:
|
case ST${fn}_INIT:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
${STATES_CASES}
|
${STATES_CASES_ENTRY}
|
||||||
}
|
}
|
||||||
|
|
||||||
processed = true;
|
processed = true;
|
||||||
@@ -49,6 +54,12 @@ bool ${filename}_processEvent(Event* ev) {
|
|||||||
return processed;
|
return processed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*************
|
||||||
|
* Callbacks *
|
||||||
|
*************/
|
||||||
|
|
||||||
|
${CALLBACKS_DEF}
|
||||||
|
|
||||||
/************
|
/************
|
||||||
* EMITTERS *
|
* EMITTERS *
|
||||||
************/
|
************/
|
||||||
@@ -59,4 +70,4 @@ ${EVENTS_EMITS_DEF}
|
|||||||
* SETTERS *
|
* SETTERS *
|
||||||
***********/
|
***********/
|
||||||
|
|
||||||
${VARS_SETTERS_DEF}
|
${VARS_SETTERS_DEF}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
#include "../xf/xf.h"
|
#include "../xf/xf.h"
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
ST${fn}_INIT,
|
||||||
${STATES_ENUM}
|
${STATES_ENUM}
|
||||||
} ${filename}_STATES;
|
} ${filename}_STATES;
|
||||||
|
|
||||||
@@ -17,9 +18,16 @@ typedef enum {
|
|||||||
${EVENTS_ENUM}
|
${EVENTS_ENUM}
|
||||||
} ${filename}_EVENTS;
|
} ${filename}_EVENTS;
|
||||||
|
|
||||||
|
typedef void (*${filename}_CALLBACK_FUNCTION)(void*);
|
||||||
|
typedef struct {
|
||||||
|
${filename}_CALLBACK_FUNCTION f; // function
|
||||||
|
void* p; // param(s)
|
||||||
|
} ${filename}_CALLBACK;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
${filename}_STATES state;
|
${filename}_STATES state;
|
||||||
${VARS_STRUCT}
|
${VARS_STRUCT}
|
||||||
|
${STATES_CBS_STRUCT}
|
||||||
} ${filename};
|
} ${filename};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -41,6 +49,12 @@ void ${filename}_startBehaviour(${filename}* me);
|
|||||||
*/
|
*/
|
||||||
bool ${filename}_processEvent(Event* ev);
|
bool ${filename}_processEvent(Event* ev);
|
||||||
|
|
||||||
|
/*************
|
||||||
|
* Callbacks *
|
||||||
|
*************/
|
||||||
|
|
||||||
|
${CALLBACKS_DEC}
|
||||||
|
|
||||||
/************
|
/************
|
||||||
* EMITTERS *
|
* EMITTERS *
|
||||||
************/
|
************/
|
||||||
|
|||||||
Reference in New Issue
Block a user