mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-11-03 23:28:48 +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