2026-01-14 22:55:33 +00:00

57 lines
1.9 KiB
C++

#include "mapper.hpp"
#include "parcer.h"
Mapper::Mapper(const uint8_t *buf, size_t size) : buffer(buf), buffer_size(size), offset(0), ok(1) {}
uint8_t Mapper::get_message_type() {
if (buffer_size < 1) {
this->ok = false;
return 0;
}
return buffer[0];
}
void Mapper::parse_new_session(trackAtributes &track) {
reset();
int __ok;
track.protocol_version = read_uint8(buffer, buffer_size, &offset, &__ok);
track.session_index = read_uint8(buffer, buffer_size, &offset, &__ok);
track.current_session_index = read_uint8(buffer, buffer_size, &offset, &__ok);
track.session_count = read_uint8(buffer, buffer_size, &offset, &__ok);
track.session_type = (SessionType)track.session_index;
uint8_t str_len = read_uint8(buffer, buffer_size, &offset, &__ok);
read_utf32le_string(buffer, buffer_size, &offset, track.server_name, str_len, &__ok);
str_len = read_uint8(buffer, buffer_size, &offset, &__ok);
read_string(buffer, buffer_size, &offset, track.track, str_len, &__ok);
str_len = read_uint8(buffer, buffer_size, &offset, &__ok);
read_string(buffer, buffer_size, &offset, track.track_config, str_len, &__ok);
str_len = read_uint8(buffer, buffer_size, &offset, &__ok);
read_string(buffer, buffer_size, &offset, track.session_name, str_len, &__ok);
track.typ = read_uint8(buffer, buffer_size, &offset, &__ok);
track.time = read_uint16_le(buffer, buffer_size, &offset, &__ok);
track.laps = read_uint16_le(buffer, buffer_size, &offset, &__ok);
track.wait_time = read_uint16_le(buffer, buffer_size, &offset, &__ok);
track.ambient_temp = read_uint8(buffer, buffer_size, &offset, &__ok);
track.road_temp = read_uint8(buffer, buffer_size, &offset, &__ok);
str_len = read_uint8(buffer, buffer_size, &offset, &__ok);
read_string(buffer, buffer_size, &offset, track.weather_graphics, str_len, &__ok);
track.elapsed_ms = read_uint32(buffer, buffer_size, &offset, &__ok);
if (__ok == 0) {
this->ok = false;
} else {
this->ok = true;
}
}