summaryrefslogtreecommitdiff
path: root/src/core/hle
diff options
context:
space:
mode:
authorGravatar german772021-10-27 18:06:13 -0500
committerGravatar Narr the Reg2021-11-24 20:30:26 -0600
commit2d3a63b28969089746e43ed232dc74630fbfc3b2 (patch)
treef75d3245b6e23815611796c85b96fa4c7674c3e2 /src/core/hle
parentcore/hid: Add TAS input (diff)
downloadyuzu-2d3a63b28969089746e43ed232dc74630fbfc3b2.tar.gz
yuzu-2d3a63b28969089746e43ed232dc74630fbfc3b2.tar.xz
yuzu-2d3a63b28969089746e43ed232dc74630fbfc3b2.zip
core/hid: Update structs to 13.1.0
Diffstat (limited to 'src/core/hle')
-rw-r--r--src/core/hle/service/hid/controllers/debug_pad.cpp4
-rw-r--r--src/core/hle/service/hid/controllers/gesture.cpp8
-rw-r--r--src/core/hle/service/hid/controllers/keyboard.cpp4
-rw-r--r--src/core/hle/service/hid/controllers/mouse.cpp6
-rw-r--r--src/core/hle/service/hid/controllers/npad.cpp15
-rw-r--r--src/core/hle/service/hid/controllers/npad.h60
-rw-r--r--src/core/hle/service/hid/controllers/touchscreen.cpp4
-rw-r--r--src/core/hle/service/hid/controllers/xpad.cpp4
-rw-r--r--src/core/hle/service/hid/ring_lifo.h26
9 files changed, 89 insertions, 42 deletions
diff --git a/src/core/hle/service/hid/controllers/debug_pad.cpp b/src/core/hle/service/hid/controllers/debug_pad.cpp
index 5b1946f13..345134357 100644
--- a/src/core/hle/service/hid/controllers/debug_pad.cpp
+++ b/src/core/hle/service/hid/controllers/debug_pad.cpp
@@ -30,8 +30,8 @@ void Controller_DebugPad::OnRelease() {}
30void Controller_DebugPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data, 30void Controller_DebugPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data,
31 std::size_t size) { 31 std::size_t size) {
32 if (!IsControllerActivated()) { 32 if (!IsControllerActivated()) {
33 debug_pad_lifo.entry_count = 0; 33 debug_pad_lifo.buffer_count = 0;
34 debug_pad_lifo.last_entry_index = 0; 34 debug_pad_lifo.buffer_tail = 0;
35 std::memcpy(data + SHARED_MEMORY_OFFSET, &debug_pad_lifo, sizeof(debug_pad_lifo)); 35 std::memcpy(data + SHARED_MEMORY_OFFSET, &debug_pad_lifo, sizeof(debug_pad_lifo));
36 return; 36 return;
37 } 37 }
diff --git a/src/core/hle/service/hid/controllers/gesture.cpp b/src/core/hle/service/hid/controllers/gesture.cpp
index 47760b4f8..00df50f32 100644
--- a/src/core/hle/service/hid/controllers/gesture.cpp
+++ b/src/core/hle/service/hid/controllers/gesture.cpp
@@ -31,8 +31,8 @@ Controller_Gesture::Controller_Gesture(Core::System& system_) : ControllerBase(s
31Controller_Gesture::~Controller_Gesture() = default; 31Controller_Gesture::~Controller_Gesture() = default;
32 32
33void Controller_Gesture::OnInit() { 33void Controller_Gesture::OnInit() {
34 gesture_lifo.entry_count = 0; 34 gesture_lifo.buffer_count = 0;
35 gesture_lifo.last_entry_index = 0; 35 gesture_lifo.buffer_tail = 0;
36 force_update = true; 36 force_update = true;
37} 37}
38 38
@@ -41,8 +41,8 @@ void Controller_Gesture::OnRelease() {}
41void Controller_Gesture::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data, 41void Controller_Gesture::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data,
42 std::size_t size) { 42 std::size_t size) {
43 if (!IsControllerActivated()) { 43 if (!IsControllerActivated()) {
44 gesture_lifo.entry_count = 0; 44 gesture_lifo.buffer_count = 0;
45 gesture_lifo.last_entry_index = 0; 45 gesture_lifo.buffer_tail = 0;
46 std::memcpy(data + SHARED_MEMORY_OFFSET, &gesture_lifo, sizeof(gesture_lifo)); 46 std::memcpy(data + SHARED_MEMORY_OFFSET, &gesture_lifo, sizeof(gesture_lifo));
47 return; 47 return;
48 } 48 }
diff --git a/src/core/hle/service/hid/controllers/keyboard.cpp b/src/core/hle/service/hid/controllers/keyboard.cpp
index 632679a17..f4d49965f 100644
--- a/src/core/hle/service/hid/controllers/keyboard.cpp
+++ b/src/core/hle/service/hid/controllers/keyboard.cpp
@@ -27,8 +27,8 @@ void Controller_Keyboard::OnRelease() {}
27void Controller_Keyboard::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data, 27void Controller_Keyboard::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data,
28 std::size_t size) { 28 std::size_t size) {
29 if (!IsControllerActivated()) { 29 if (!IsControllerActivated()) {
30 keyboard_lifo.entry_count = 0; 30 keyboard_lifo.buffer_count = 0;
31 keyboard_lifo.last_entry_index = 0; 31 keyboard_lifo.buffer_tail = 0;
32 std::memcpy(data + SHARED_MEMORY_OFFSET, &keyboard_lifo, sizeof(keyboard_lifo)); 32 std::memcpy(data + SHARED_MEMORY_OFFSET, &keyboard_lifo, sizeof(keyboard_lifo));
33 return; 33 return;
34 } 34 }
diff --git a/src/core/hle/service/hid/controllers/mouse.cpp b/src/core/hle/service/hid/controllers/mouse.cpp
index 6d3bd0a2b..7ec75e8c8 100644
--- a/src/core/hle/service/hid/controllers/mouse.cpp
+++ b/src/core/hle/service/hid/controllers/mouse.cpp
@@ -24,11 +24,9 @@ void Controller_Mouse::OnRelease() {}
24 24
25void Controller_Mouse::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data, 25void Controller_Mouse::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data,
26 std::size_t size) { 26 std::size_t size) {
27 mouse_lifo.timestamp = core_timing.GetCPUTicks();
28
29 if (!IsControllerActivated()) { 27 if (!IsControllerActivated()) {
30 mouse_lifo.entry_count = 0; 28 mouse_lifo.buffer_count = 0;
31 mouse_lifo.last_entry_index = 0; 29 mouse_lifo.buffer_tail = 0;
32 std::memcpy(data + SHARED_MEMORY_OFFSET, &mouse_lifo, sizeof(mouse_lifo)); 30 std::memcpy(data + SHARED_MEMORY_OFFSET, &mouse_lifo, sizeof(mouse_lifo));
33 return; 31 return;
34 } 32 }
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp
index 9f84e20c2..9f82f872a 100644
--- a/src/core/hle/service/hid/controllers/npad.cpp
+++ b/src/core/hle/service/hid/controllers/npad.cpp
@@ -101,7 +101,8 @@ Controller_NPad::Controller_NPad(Core::System& system_,
101 for (std::size_t i = 0; i < controller_data.size(); ++i) { 101 for (std::size_t i = 0; i < controller_data.size(); ++i) {
102 auto& controller = controller_data[i]; 102 auto& controller = controller_data[i];
103 controller.device = system.HIDCore().GetEmulatedControllerByIndex(i); 103 controller.device = system.HIDCore().GetEmulatedControllerByIndex(i);
104 controller.vibration[Core::HID::DeviceIndex::LeftIndex].latest_vibration_value = DEFAULT_VIBRATION_VALUE; 104 controller.vibration[Core::HID::DeviceIndex::LeftIndex].latest_vibration_value =
105 DEFAULT_VIBRATION_VALUE;
105 controller.vibration[Core::HID::DeviceIndex::RightIndex].latest_vibration_value = 106 controller.vibration[Core::HID::DeviceIndex::RightIndex].latest_vibration_value =
106 DEFAULT_VIBRATION_VALUE; 107 DEFAULT_VIBRATION_VALUE;
107 Core::HID::ControllerUpdateCallback engine_callback{ 108 Core::HID::ControllerUpdateCallback engine_callback{
@@ -178,7 +179,7 @@ void Controller_NPad::InitNewlyAddedController(std::size_t controller_idx) {
178 shared_memory.system_properties.use_plus.Assign(1); 179 shared_memory.system_properties.use_plus.Assign(1);
179 shared_memory.system_properties.use_minus.Assign(1); 180 shared_memory.system_properties.use_minus.Assign(1);
180 shared_memory.assignment_mode = NpadJoyAssignmentMode::Single; 181 shared_memory.assignment_mode = NpadJoyAssignmentMode::Single;
181 shared_memory.footer_type = AppletFooterUiType::SwitchProController; 182 shared_memory.applet_footer.type = AppletFooterUiType::SwitchProController;
182 break; 183 break;
183 case Core::HID::NpadType::Handheld: 184 case Core::HID::NpadType::Handheld:
184 shared_memory.style_set.handheld.Assign(1); 185 shared_memory.style_set.handheld.Assign(1);
@@ -188,7 +189,7 @@ void Controller_NPad::InitNewlyAddedController(std::size_t controller_idx) {
188 shared_memory.system_properties.use_plus.Assign(1); 189 shared_memory.system_properties.use_plus.Assign(1);
189 shared_memory.system_properties.use_minus.Assign(1); 190 shared_memory.system_properties.use_minus.Assign(1);
190 shared_memory.assignment_mode = NpadJoyAssignmentMode::Dual; 191 shared_memory.assignment_mode = NpadJoyAssignmentMode::Dual;
191 shared_memory.footer_type = AppletFooterUiType::HandheldJoyConLeftJoyConRight; 192 shared_memory.applet_footer.type = AppletFooterUiType::HandheldJoyConLeftJoyConRight;
192 break; 193 break;
193 case Core::HID::NpadType::JoyconDual: 194 case Core::HID::NpadType::JoyconDual:
194 shared_memory.style_set.joycon_dual.Assign(1); 195 shared_memory.style_set.joycon_dual.Assign(1);
@@ -198,7 +199,7 @@ void Controller_NPad::InitNewlyAddedController(std::size_t controller_idx) {
198 shared_memory.system_properties.use_plus.Assign(1); 199 shared_memory.system_properties.use_plus.Assign(1);
199 shared_memory.system_properties.use_minus.Assign(1); 200 shared_memory.system_properties.use_minus.Assign(1);
200 shared_memory.assignment_mode = NpadJoyAssignmentMode::Dual; 201 shared_memory.assignment_mode = NpadJoyAssignmentMode::Dual;
201 shared_memory.footer_type = AppletFooterUiType::JoyDual; 202 shared_memory.applet_footer.type = AppletFooterUiType::JoyDual;
202 break; 203 break;
203 case Core::HID::NpadType::JoyconLeft: 204 case Core::HID::NpadType::JoyconLeft:
204 shared_memory.style_set.joycon_left.Assign(1); 205 shared_memory.style_set.joycon_left.Assign(1);
@@ -206,7 +207,7 @@ void Controller_NPad::InitNewlyAddedController(std::size_t controller_idx) {
206 shared_memory.system_properties.is_horizontal.Assign(1); 207 shared_memory.system_properties.is_horizontal.Assign(1);
207 shared_memory.system_properties.use_minus.Assign(1); 208 shared_memory.system_properties.use_minus.Assign(1);
208 shared_memory.assignment_mode = NpadJoyAssignmentMode::Single; 209 shared_memory.assignment_mode = NpadJoyAssignmentMode::Single;
209 shared_memory.footer_type = AppletFooterUiType::JoyLeftHorizontal; 210 shared_memory.applet_footer.type = AppletFooterUiType::JoyLeftHorizontal;
210 break; 211 break;
211 case Core::HID::NpadType::JoyconRight: 212 case Core::HID::NpadType::JoyconRight:
212 shared_memory.style_set.joycon_right.Assign(1); 213 shared_memory.style_set.joycon_right.Assign(1);
@@ -214,7 +215,7 @@ void Controller_NPad::InitNewlyAddedController(std::size_t controller_idx) {
214 shared_memory.system_properties.is_horizontal.Assign(1); 215 shared_memory.system_properties.is_horizontal.Assign(1);
215 shared_memory.system_properties.use_plus.Assign(1); 216 shared_memory.system_properties.use_plus.Assign(1);
216 shared_memory.assignment_mode = NpadJoyAssignmentMode::Single; 217 shared_memory.assignment_mode = NpadJoyAssignmentMode::Single;
217 shared_memory.footer_type = AppletFooterUiType::JoyRightHorizontal; 218 shared_memory.applet_footer.type = AppletFooterUiType::JoyRightHorizontal;
218 break; 219 break;
219 case Core::HID::NpadType::GameCube: 220 case Core::HID::NpadType::GameCube:
220 shared_memory.style_set.gamecube.Assign(1); 221 shared_memory.style_set.gamecube.Assign(1);
@@ -919,7 +920,7 @@ void Controller_NPad::DisconnectNpadAtIndex(std::size_t npad_index) {
919 .right = {}, 920 .right = {},
920 }; 921 };
921 shared_memory_entry.assignment_mode = NpadJoyAssignmentMode::Dual; 922 shared_memory_entry.assignment_mode = NpadJoyAssignmentMode::Dual;
922 shared_memory_entry.footer_type = AppletFooterUiType::None; 923 shared_memory_entry.applet_footer.type = AppletFooterUiType::None;
923 924
924 controller.is_connected = false; 925 controller.is_connected = false;
925 controller.device->Disconnect(); 926 controller.device->Disconnect();
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h
index 0a2dc6992..af4934c55 100644
--- a/src/core/hle/service/hid/controllers/npad.h
+++ b/src/core/hle/service/hid/controllers/npad.h
@@ -330,10 +330,43 @@ private:
330 BitField<13, 1, s32> handheld_lark_nes_left; 330 BitField<13, 1, s32> handheld_lark_nes_left;
331 BitField<14, 1, s32> handheld_lark_nes_right; 331 BitField<14, 1, s32> handheld_lark_nes_right;
332 BitField<15, 1, s32> lucia; 332 BitField<15, 1, s32> lucia;
333 BitField<16, 1, s32> lagon;
334 BitField<17, 1, s32> lager;
333 BitField<31, 1, s32> system; 335 BitField<31, 1, s32> system;
334 }; 336 };
335 }; 337 };
336 338
339 // This is nn::hid::detail::NfcXcdDeviceHandleStateImpl
340 struct NfcXcdDeviceHandleStateImpl {
341 u64 handle;
342 bool is_available;
343 bool is_activated;
344 INSERT_PADDING_BYTES(0x6); // Reserved
345 u64 sampling_number;
346 };
347 static_assert(sizeof(NfcXcdDeviceHandleStateImpl) == 0x18,
348 "NfcXcdDeviceHandleStateImpl is an invalid size");
349
350 // nn::hid::detail::NfcXcdDeviceHandleStateImplAtomicStorage
351 struct NfcXcdDeviceHandleStateImplAtomicStorage {
352 u64 sampling_number;
353 NfcXcdDeviceHandleStateImpl nfc_xcd_device_handle_state;
354 };
355 static_assert(sizeof(NfcXcdDeviceHandleStateImplAtomicStorage) == 0x20,
356 "NfcXcdDeviceHandleStateImplAtomicStorage is an invalid size");
357
358 // This is nn::hid::detail::NfcXcdDeviceHandleState
359 struct NfcXcdDeviceHandleState {
360 // TODO(german77): Make this struct a ring lifo object
361 INSERT_PADDING_BYTES(0x8); // Unused
362 s64 total_buffer_count = max_buffer_size;
363 s64 buffer_tail{};
364 s64 buffer_count{};
365 std::array<NfcXcdDeviceHandleStateImplAtomicStorage, 2> nfc_xcd_device_handle_storage;
366 };
367 static_assert(sizeof(NfcXcdDeviceHandleState) == 0x60,
368 "NfcXcdDeviceHandleState is an invalid size");
369
337 // This is nn::hid::system::AppletFooterUiAttributesSet 370 // This is nn::hid::system::AppletFooterUiAttributesSet
338 struct AppletFooterUiAttributes { 371 struct AppletFooterUiAttributes {
339 INSERT_PADDING_BYTES(0x4); 372 INSERT_PADDING_BYTES(0x4);
@@ -365,6 +398,14 @@ private:
365 Lagon = 21, 398 Lagon = 21,
366 }; 399 };
367 400
401 struct AppletFooterUi {
402 AppletFooterUiAttributes attributes;
403 AppletFooterUiType type;
404 INSERT_PADDING_BYTES(0x5B); // Reserved
405 };
406 static_assert(sizeof(AppletFooterUi) == 0x60,
407 "AppletFooterUi is an invalid size");
408
368 // This is nn::hid::NpadLarkType 409 // This is nn::hid::NpadLarkType
369 enum class NpadLarkType : u32 { 410 enum class NpadLarkType : u32 {
370 Invalid, 411 Invalid,
@@ -382,6 +423,11 @@ private:
382 U, 423 U,
383 }; 424 };
384 425
426 // This is nn::hid::NpadLagonType
427 enum class NpadLagonType : u32 {
428 Invalid,
429 };
430
385 // This is nn::hid::NpadLagerType 431 // This is nn::hid::NpadLagerType
386 enum class NpadLagerType : u32 { 432 enum class NpadLagerType : u32 {
387 Invalid, 433 Invalid,
@@ -416,17 +462,19 @@ private:
416 Core::HID::BatteryLevel battery_level_dual; 462 Core::HID::BatteryLevel battery_level_dual;
417 Core::HID::BatteryLevel battery_level_left; 463 Core::HID::BatteryLevel battery_level_left;
418 Core::HID::BatteryLevel battery_level_right; 464 Core::HID::BatteryLevel battery_level_right;
419 AppletFooterUiAttributes footer_attributes; 465 union {
420 AppletFooterUiType footer_type; 466 NfcXcdDeviceHandleState nfc_xcd_device_handle;
421 // GetXcdHandleForNpadWithNfc needs to be checked switchbrew doesn't match with HW 467 AppletFooterUi applet_footer;
422 INSERT_PADDING_BYTES(0x78); // Unknown 468 };
469 INSERT_PADDING_BYTES(0x20); // Unknown
423 Lifo<NpadGcTriggerState> gc_trigger_lifo; 470 Lifo<NpadGcTriggerState> gc_trigger_lifo;
424 NpadLarkType lark_type_l; 471 NpadLarkType lark_type_l_and_main;
425 NpadLarkType lark_type_r; 472 NpadLarkType lark_type_r;
426 NpadLuciaType lucia_type; 473 NpadLuciaType lucia_type;
474 NpadLagonType lagon_type;
427 NpadLagerType lager_type; 475 NpadLagerType lager_type;
428 INSERT_PADDING_BYTES( 476 INSERT_PADDING_BYTES(
429 0x8); // FW 13.x Investigate there is some sort of bitflag related to joycons 477 0x4); // FW 13.x Investigate there is some sort of bitflag related to joycons
430 INSERT_PADDING_BYTES(0xc08); // Unknown 478 INSERT_PADDING_BYTES(0xc08); // Unknown
431 }; 479 };
432 static_assert(sizeof(NpadInternalState) == 0x5000, "NpadInternalState is an invalid size"); 480 static_assert(sizeof(NpadInternalState) == 0x5000, "NpadInternalState is an invalid size");
diff --git a/src/core/hle/service/hid/controllers/touchscreen.cpp b/src/core/hle/service/hid/controllers/touchscreen.cpp
index 5ba8d96a8..9ae2bf2b1 100644
--- a/src/core/hle/service/hid/controllers/touchscreen.cpp
+++ b/src/core/hle/service/hid/controllers/touchscreen.cpp
@@ -30,8 +30,8 @@ void Controller_Touchscreen::OnUpdate(const Core::Timing::CoreTiming& core_timin
30 touch_screen_lifo.timestamp = core_timing.GetCPUTicks(); 30 touch_screen_lifo.timestamp = core_timing.GetCPUTicks();
31 31
32 if (!IsControllerActivated()) { 32 if (!IsControllerActivated()) {
33 touch_screen_lifo.entry_count = 0; 33 touch_screen_lifo.buffer_count = 0;
34 touch_screen_lifo.last_entry_index = 0; 34 touch_screen_lifo.buffer_tail = 0;
35 std::memcpy(data, &touch_screen_lifo, sizeof(touch_screen_lifo)); 35 std::memcpy(data, &touch_screen_lifo, sizeof(touch_screen_lifo));
36 return; 36 return;
37 } 37 }
diff --git a/src/core/hle/service/hid/controllers/xpad.cpp b/src/core/hle/service/hid/controllers/xpad.cpp
index aa9f044f1..a2ed1e7c2 100644
--- a/src/core/hle/service/hid/controllers/xpad.cpp
+++ b/src/core/hle/service/hid/controllers/xpad.cpp
@@ -20,8 +20,8 @@ void Controller_XPad::OnRelease() {}
20void Controller_XPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data, 20void Controller_XPad::OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data,
21 std::size_t size) { 21 std::size_t size) {
22 if (!IsControllerActivated()) { 22 if (!IsControllerActivated()) {
23 basic_xpad_lifo.entry_count = 0; 23 basic_xpad_lifo.buffer_count = 0;
24 basic_xpad_lifo.last_entry_index = 0; 24 basic_xpad_lifo.buffer_tail = 0;
25 std::memcpy(data + SHARED_MEMORY_OFFSET, &basic_xpad_lifo, sizeof(basic_xpad_lifo)); 25 std::memcpy(data + SHARED_MEMORY_OFFSET, &basic_xpad_lifo, sizeof(basic_xpad_lifo));
26 return; 26 return;
27 } 27 }
diff --git a/src/core/hle/service/hid/ring_lifo.h b/src/core/hle/service/hid/ring_lifo.h
index f68d82762..382350a2d 100644
--- a/src/core/hle/service/hid/ring_lifo.h
+++ b/src/core/hle/service/hid/ring_lifo.h
@@ -8,7 +8,7 @@
8#include "common/swap.h" 8#include "common/swap.h"
9 9
10namespace Service::HID { 10namespace Service::HID {
11constexpr std::size_t max_entry_size = 17; 11constexpr std::size_t max_buffer_size = 17;
12 12
13template <typename State> 13template <typename State>
14struct AtomicStorage { 14struct AtomicStorage {
@@ -19,13 +19,13 @@ struct AtomicStorage {
19template <typename State> 19template <typename State>
20struct Lifo { 20struct Lifo {
21 s64 timestamp{}; 21 s64 timestamp{};
22 s64 total_entry_count = max_entry_size; 22 s64 total_buffer_count = max_buffer_size;
23 s64 last_entry_index{}; 23 s64 buffer_tail{};
24 s64 entry_count{}; 24 s64 buffer_count{};
25 std::array<AtomicStorage<State>, max_entry_size> entries{}; 25 std::array<AtomicStorage<State>, max_buffer_size> entries{};
26 26
27 const AtomicStorage<State>& ReadCurrentEntry() const { 27 const AtomicStorage<State>& ReadCurrentEntry() const {
28 return entries[last_entry_index]; 28 return entries[buffer_tail];
29 } 29 }
30 30
31 const AtomicStorage<State>& ReadPreviousEntry() const { 31 const AtomicStorage<State>& ReadPreviousEntry() const {
@@ -33,21 +33,21 @@ struct Lifo {
33 } 33 }
34 34
35 std::size_t GetPreviuousEntryIndex() const { 35 std::size_t GetPreviuousEntryIndex() const {
36 return (last_entry_index + total_entry_count - 1) % total_entry_count; 36 return (buffer_tail + total_buffer_count - 1) % total_buffer_count;
37 } 37 }
38 38
39 std::size_t GetNextEntryIndex() const { 39 std::size_t GetNextEntryIndex() const {
40 return (last_entry_index + 1) % total_entry_count; 40 return (buffer_tail + 1) % total_buffer_count;
41 } 41 }
42 42
43 void WriteNextEntry(const State& new_state) { 43 void WriteNextEntry(const State& new_state) {
44 if (entry_count < total_entry_count - 1) { 44 if (buffer_count < total_buffer_count - 1) {
45 entry_count++; 45 buffer_count++;
46 } 46 }
47 last_entry_index = GetNextEntryIndex(); 47 buffer_tail = GetNextEntryIndex();
48 const auto& previous_entry = ReadPreviousEntry(); 48 const auto& previous_entry = ReadPreviousEntry();
49 entries[last_entry_index].sampling_number = previous_entry.sampling_number + 1; 49 entries[buffer_tail].sampling_number = previous_entry.sampling_number + 1;
50 entries[last_entry_index].state = new_state; 50 entries[buffer_tail].state = new_state;
51 } 51 }
52}; 52};
53 53