You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.6 KiB
106 lines
3.6 KiB
|
2 weeks ago
|
{% set counter = event_start %}
|
||
|
|
|
||
|
|
{%- for event in events %}
|
||
|
|
|
||
|
|
#define EVENT_ID_{{ event.name }} ({{ counter + loop.index }})
|
||
|
|
|
||
|
|
struct event_{{ event.name }}
|
||
|
|
{
|
||
|
|
{%- for field in event.fields %}
|
||
|
|
{%- if field.size %}
|
||
|
|
{{ field.type }} {{ field.name }}[{{ field.size }}];
|
||
|
|
{%- else %}
|
||
|
|
{{ field.type }} {{ field.name }};
|
||
|
|
{%- endif %}
|
||
|
|
{%- endfor %}
|
||
|
|
};
|
||
|
|
|
||
|
|
void event_trace_{{ event.name }}(
|
||
|
|
{%- for field in event.fields %}
|
||
|
|
{%- if field.size or field.pass_by == "ptr" %}
|
||
|
|
const {{ field.type }} * {{ field.name }}{%- if not loop.last %}, {% endif %}
|
||
|
|
{%- else %}
|
||
|
|
{{ field.type }} {{ field.name }}{%- if not loop.last %}, {% endif %}
|
||
|
|
{%- endif %}
|
||
|
|
{%- endfor %}
|
||
|
|
)
|
||
|
|
{
|
||
|
|
struct event_{{ event.name }} d;
|
||
|
|
{%- for field in event.fields %}
|
||
|
|
{%- if field.size %}
|
||
|
|
strncpy(d.{{ field.name }}, {{ field.name }}, sizeof(d.{{ field.name }}) - 1);
|
||
|
|
d.{{ field.name }}[sizeof(d.{{ field.name }}) - 1] = '\0';
|
||
|
|
{%- elif "const char*" == field.type %}
|
||
|
|
strncpy(d.{{ field.name }}, {{ field.name }}, sizeof(d.{{ field.name }}) - 1);
|
||
|
|
d.{{ field.name }}[sizeof(d.{{ field.name }}) - 1] = '\0';
|
||
|
|
{%- elif field.pass_by == "ptr" %}
|
||
|
|
d.{{ field.name }} = *{{ field.name }};
|
||
|
|
{%- else %}
|
||
|
|
d.{{ field.name }} = {{ field.name }};
|
||
|
|
{%- endif %}
|
||
|
|
{%- endfor %}
|
||
|
|
eventlog_emit_event_struct(eventlog_get_timestamp(), EVENT_ID_{{ event.name }}, &d, sizeof(d));
|
||
|
|
}
|
||
|
|
|
||
|
|
void print_{{ event.name }}(const void* data, char* buf, size_t buf_size)
|
||
|
|
{
|
||
|
|
const struct event_{{ event.name }}* d = (const struct event_{{ event.name }}*)data;
|
||
|
|
{%- set format_parts = [] %}
|
||
|
|
{%- set args = [] %}
|
||
|
|
{%- set unknown = false %}
|
||
|
|
{%- for field in event.fields %}
|
||
|
|
{%- if field.converter %}
|
||
|
|
{%- set _ = format_parts.append(field.format) %}
|
||
|
|
{%- if field.pass_by == "ptr" %}
|
||
|
|
{%- set _ = args.append(field.converter + "(&d->" + field.name + ")") %}
|
||
|
|
{%- else %}
|
||
|
|
{%- set _ = args.append(field.converter + "(d->" + field.name + ")") %}
|
||
|
|
{%- endif %}
|
||
|
|
{%- elif "uint64_t" == field.type %}
|
||
|
|
{%- set _ = format_parts.append("%llu") %}
|
||
|
|
{%- elif "int64_t" == field.type %}
|
||
|
|
{%- set _ = format_parts.append("%lld") %}
|
||
|
|
{%- elif "uint32_t" == field.type %}
|
||
|
|
{%- set _ = format_parts.append("%u") %}
|
||
|
|
{%- elif "int32_t" == field.type %}
|
||
|
|
{%- set _ = format_parts.append("%d") %}
|
||
|
|
{%- elif "uint16_t" == field.type %}
|
||
|
|
{%- set _ = format_parts.append("%u") %}
|
||
|
|
{%- elif "int16_t" == field.type %}
|
||
|
|
{%- set _ = format_parts.append("%d") %}
|
||
|
|
{%- elif "uint8_t" == field.type %}
|
||
|
|
{%- set _ = format_parts.append("%u") %}
|
||
|
|
{%- elif "int8_t" == field.type %}
|
||
|
|
{%- set _ = format_parts.append("%d") %}
|
||
|
|
{%- elif "char" == field.type and not field.size %}
|
||
|
|
{%- set _ = format_parts.append("%c") %}
|
||
|
|
{%- elif "int" == field.type %}
|
||
|
|
{%- set _ = format_parts.append("%d") %}
|
||
|
|
{%- elif "unsigned" == field.type %}
|
||
|
|
{%- set _ = format_parts.append("%u") %}
|
||
|
|
{%- elif "char[" in field.type or (field.size and field.type == "char") %}
|
||
|
|
{%- set _ = format_parts.append("%s") %}
|
||
|
|
{%- elif "const char*" == field.type %}
|
||
|
|
{%- set _ = format_parts.append("%s") %}
|
||
|
|
{%- elif "void*" == field.type %}
|
||
|
|
{%- set _ = format_parts.append("%p") %}
|
||
|
|
{%- else %}
|
||
|
|
{%- set _ = format_parts.append("%s") %}
|
||
|
|
{%- set unknown = true %}
|
||
|
|
{%- endif %}
|
||
|
|
|
||
|
|
{%- if not unknown %}
|
||
|
|
{%- if not field.converter and field.pass_by == "ptr" %}
|
||
|
|
{%- set _ = args.append("&d->" + field.name) %}
|
||
|
|
{%- else %}
|
||
|
|
{%- set _ = args.append("d->" +field.name) %}
|
||
|
|
{%- endif %}
|
||
|
|
{%- else %}
|
||
|
|
{%- set _ = args.append("\"<unknown>\"") %}
|
||
|
|
{%- endif %}
|
||
|
|
|
||
|
|
{%- endfor %}
|
||
|
|
snprintf(buf, buf_size, "{{ event.name }}({{ format_parts|join(', ') }})", {{ args|join(', ') }});
|
||
|
|
}
|
||
|
|
{%- endfor %}
|