protgen/templates/blocks.tmpl

66 lines
1.3 KiB
Cheetah

{{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}}