protgen/templates/blocks.tmpl

71 lines
1.5 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 }}
{{- if (.ArrayLength) }}
{{.DataType}} {{.Name}}[{{.ArrayLength}}];
{{- else }}
{{.DataType}} {{.Name}};
{{- end}}
{{- 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 .}}
{{ $argLen := len .Payload }}
void send_{{.Name | snake}}({{- range $i, $p := .Payload}}{{$p.DataType}} {{$p.Name}} {{- if not (isLast $argLen $i) }}, {{ end}} {{- end}}) {
{{.Name}}Payload payload;
// Payload-Daten zuweisen
{{- range .Payload}}
payload.{{.Name}} = {{.Name}};
{{- end}}
// Nachricht senden
send_message({{.Name}}, &payload);
}
{{- end }}
{{end}}