#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; } }