{{define "cenum"}} typedef enum { {{- range .Entries }} {{ .Name }} = {{ printf "0x%X" .ID }}, {{- end }} }{{.EnumName}}; {{end}} {{define "payloads"}} {{- range . }} typedef struct { {{- if not .Entries}} // empty payload {{- end}} {{- range .Entries }} {{.DataType}} {{.Name}}; {{- end }} }{{ .Name }}Payload; {{ end }} {{end}} {{define "union"}} typedef union { {{- range .}} {{.Name}} {{ .Name | snake}} {{- end }} }PayloadUnion: {{end}} {{define "handler"}} {{- range . }} void (*on_{{ .Name | snake }})({{ .Name }}Payload*) = NULL; {{- end}} {{end}} {{define "dispatcher"}} void dispatch_message(uint8_t msg_id, void* payload) { switch (msg_id) { {{- range . }} case {{ .Name }}: if (on_{{ .Name | snake }}) on_{{ .Name | snake }}(({{ .Name }}Payload*)payload); break; {{- end }} default: // Unknown message break; } } {{end}} {{define "send_functions"}} {{- range .}} void send_{{.Name | snake}}({{- range .Payload}}{{.DataType}} {{.Name}}, {{- end}}) { {{.Name}}Payload payload; // Payload-Daten zuweisen {{- range .Payload}} payload.{{.Name}} = {{.Name}}; {{- end}} // Nachricht senden send_message({{.Name}}, &payload); } {{- end }} {{end}}