106 lines
2.5 KiB
Cheetah
106 lines
2.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}}Payload {{ .Name | snake}};
|
|
{{- end }}
|
|
} PayloadUnion;
|
|
{{end}}
|
|
|
|
{{define "basemessage"}}
|
|
typedef struct {
|
|
uint8_t Version;
|
|
{{.CenumPCTOESP.EnumName}} MessageID;
|
|
uint8_t Length;
|
|
PayloadUnion Payload;
|
|
} PCTOESPBaseMessage;
|
|
|
|
typedef struct {
|
|
uint8_t Version;
|
|
{{.CenumESPTOPC.EnumName}} MessageID;
|
|
uint8_t Length;
|
|
PayloadUnion Payload;
|
|
} ESPTOPCBaseMessage;
|
|
{{end}}
|
|
|
|
{{define "handler"}}
|
|
{{- range . }}
|
|
void (*on_{{ .Name | snake }})({{ .Name }}Payload*);
|
|
{{- 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_function_prototype"}}
|
|
void send_message(ESP_TO_PC_MESSAGE_IDS msgid, PayloadUnion *payload);
|
|
{{end}}
|
|
|
|
{{define "send_function_source"}}
|
|
void send_message(ESP_TO_PC_MESSAGE_IDS msgid, PayloadUnion *payload) {}
|
|
{{end}}
|
|
|
|
{{define "send_functions_prototype"}}
|
|
{{- 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}});
|
|
{{- end }}
|
|
{{end}}
|
|
|
|
{{define "send_functions_source"}}
|
|
{{- 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}}
|
|
{{- if .ArrayLength }}
|
|
memcpy(payload.{{.Name}}, {{.Name}}, {{.ArrayLength}});
|
|
{{- else }}
|
|
payload.{{.Name}} = {{.Name}};
|
|
{{- end}}
|
|
{{- end}}
|
|
|
|
// Nachricht senden
|
|
send_message({{.Name}}, (PayloadUnion *)&payload);
|
|
}
|
|
{{end}}
|
|
{{end}}
|