mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	HID: Added static asserts to check register position in shared memory.
This commit is contained in:
		
							parent
							
								
									f213000cc4
								
							
						
					
					
						commit
						e9b9f1842b
					
				
					 1 changed files with 16 additions and 2 deletions
				
			
		|  | @ -89,7 +89,7 @@ struct TouchDataEntry { | |||
|  * Structure of data stored in HID shared memory | ||||
|  */ | ||||
| struct SharedMem { | ||||
|     // Offset 0x0 : "PAD" data, this is used for buttons and the circle pad
 | ||||
|     // "Pad data, this is used for buttons and the circle pad
 | ||||
|     struct { | ||||
|         s64 index_reset_ticks; | ||||
|         s64 index_reset_ticks_previous; | ||||
|  | @ -105,7 +105,7 @@ struct SharedMem { | |||
|         std::array<PadDataEntry, 8> entries; // Pad state history
 | ||||
|     } pad; | ||||
| 
 | ||||
|     // Offset 0xA8 : Touchpad data, this is used for touchpad input
 | ||||
|     // Touchpad data, this is used for touchpad input
 | ||||
|     struct { | ||||
|         s64 index_reset_ticks; | ||||
|         s64 index_reset_ticks_previous; | ||||
|  | @ -117,6 +117,20 @@ struct SharedMem { | |||
|     } touch; | ||||
| }; | ||||
| 
 | ||||
| // TODO: MSVC does not support using offsetof() on non-static data members even though this
 | ||||
| //       is technically allowed since C++11. This macro should be enabled once MSVC adds
 | ||||
| //       support for that.
 | ||||
| #ifndef _MSC_VER | ||||
| #define ASSERT_REG_POSITION(field_name, position)                  \ | ||||
|     static_assert(offsetof(SharedMem, field_name) == position * 4, \ | ||||
|                   "Field "#field_name" has invalid position") | ||||
| 
 | ||||
| ASSERT_REG_POSITION(pad.index_reset_ticks, 0x0); | ||||
| ASSERT_REG_POSITION(touch.index_reset_ticks, 0x2A); | ||||
| 
 | ||||
| #undef ASSERT_REG_POSITION | ||||
| #endif // !defined(_MSC_VER)
 | ||||
| 
 | ||||
| // Pre-defined PadStates for single button presses
 | ||||
| const PadState PAD_NONE         = {{0}}; | ||||
| const PadState PAD_A            = {{1u << 0}}; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue