34 if (!frame_data || frame_size == 0) {
38 size_t reset_pos = frame_find_final_reset(frame_data, frame_size);
39 if (reset_pos == SIZE_MAX) {
41 log_warn(
"FRAME_VALIDATION: No ESC[0m reset sequence found in %zu byte frame", frame_size);
45 size_t expected_end = reset_pos + 4;
48 if (expected_end < frame_size) {
50 size_t garbage_size = frame_size - expected_end;
53 const uint8_t *garbage = (
const uint8_t *)&frame_data[expected_end];
56 log_warn(
"FRAME_VALIDATION: Found %zu garbage bytes after reset at offset %zu (frame size %zu): "
57 "[%02x %02x %02x %02x ...]",
58 garbage_size, expected_end, frame_size, garbage[0], garbage_size > 1 ? garbage[1] : 0,
59 garbage_size > 2 ? garbage[2] : 0, garbage_size > 3 ? garbage[3] : 0);
65 log_debug(
"FRAME_VALIDATION: Frame OK (%zu bytes, ends at offset %zu)", frame_size, expected_end);