protgen/templates/blocks.tmpl

87 lines
1.8 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}}Payload {{ .Name | snake}};
{{- end }}
} PayloadUnion;
{{end}}
{{define "basemessage"}}
typdef struct {
uint8_t version;
MessageID {{.CenumPCTOESP.EnumName}};
uint8_t length;
PayloadUnion payload;
} PCTOESPBaseMessage;
typdef struct {
uint8_t version;
MessageID {{.CenumESPTOPC.EnumName}};
uint8_t length;
PayloadUnion payload;
} ESPTOPCBaseMessage;
{{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}} {{if .ArrayLength}}*{{end}}{{$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}}