mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Merge pull request #2969 from mailwl/ptm_step
Service/PTM: Stub GetStepHistory function
This commit is contained in:
		
						commit
						5eabe60aa3
					
				
					 6 changed files with 46 additions and 12 deletions
				
			
		|  | @ -30,7 +30,7 @@ static bool battery_is_charging; | ||||||
| 
 | 
 | ||||||
| static bool pedometer_is_counting; | static bool pedometer_is_counting; | ||||||
| 
 | 
 | ||||||
| void GetAdapterState(Service::Interface* self) { | void GetAdapterState(Interface* self) { | ||||||
|     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x5, 0, 0); |     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x5, 0, 0); | ||||||
| 
 | 
 | ||||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); |     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); | ||||||
|  | @ -40,7 +40,7 @@ void GetAdapterState(Service::Interface* self) { | ||||||
|     LOG_WARNING(Service_PTM, "(STUBBED) called"); |     LOG_WARNING(Service_PTM, "(STUBBED) called"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GetShellState(Service::Interface* self) { | void GetShellState(Interface* self) { | ||||||
|     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x6, 0, 0); |     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x6, 0, 0); | ||||||
| 
 | 
 | ||||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); |     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); | ||||||
|  | @ -48,7 +48,7 @@ void GetShellState(Service::Interface* self) { | ||||||
|     rb.Push(shell_open); |     rb.Push(shell_open); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GetBatteryLevel(Service::Interface* self) { | void GetBatteryLevel(Interface* self) { | ||||||
|     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x7, 0, 0); |     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x7, 0, 0); | ||||||
| 
 | 
 | ||||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); |     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); | ||||||
|  | @ -58,7 +58,7 @@ void GetBatteryLevel(Service::Interface* self) { | ||||||
|     LOG_WARNING(Service_PTM, "(STUBBED) called"); |     LOG_WARNING(Service_PTM, "(STUBBED) called"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GetBatteryChargeState(Service::Interface* self) { | void GetBatteryChargeState(Interface* self) { | ||||||
|     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x8, 0, 0); |     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x8, 0, 0); | ||||||
| 
 | 
 | ||||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); |     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); | ||||||
|  | @ -68,7 +68,7 @@ void GetBatteryChargeState(Service::Interface* self) { | ||||||
|     LOG_WARNING(Service_PTM, "(STUBBED) called"); |     LOG_WARNING(Service_PTM, "(STUBBED) called"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GetPedometerState(Service::Interface* self) { | void GetPedometerState(Interface* self) { | ||||||
|     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x9, 0, 0); |     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x9, 0, 0); | ||||||
| 
 | 
 | ||||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); |     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); | ||||||
|  | @ -78,7 +78,29 @@ void GetPedometerState(Service::Interface* self) { | ||||||
|     LOG_WARNING(Service_PTM, "(STUBBED) called"); |     LOG_WARNING(Service_PTM, "(STUBBED) called"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GetTotalStepCount(Service::Interface* self) { | void GetStepHistory(Interface* self) { | ||||||
|  |     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0xB, 3, 2); | ||||||
|  | 
 | ||||||
|  |     u32 hours = rp.Pop<u32>(); | ||||||
|  |     u64 start_time = rp.Pop<u64>(); | ||||||
|  |     size_t steps_buff_size; | ||||||
|  |     const VAddr steps_buff_addr = rp.PopMappedBuffer(&steps_buff_size); | ||||||
|  |     ASSERT_MSG(sizeof(u16) * hours == steps_buff_size, "Buffer for steps count has incorrect size"); | ||||||
|  | 
 | ||||||
|  |     // Stub: set zero steps count for every hour
 | ||||||
|  |     for (u32 i = 0; i < hours; ++i) { | ||||||
|  |         const u16 steps_per_hour = 0; | ||||||
|  |         Memory::Write16(steps_buff_addr + i * sizeof(u16), steps_per_hour); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | ||||||
|  |     rb.Push(RESULT_SUCCESS); | ||||||
|  | 
 | ||||||
|  |     LOG_WARNING(Service_PTM, "(STUBBED) called, from time(raw): 0x%llx, for %d hours", start_time, | ||||||
|  |                 hours); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void GetTotalStepCount(Interface* self) { | ||||||
|     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0xC, 0, 0); |     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0xC, 0, 0); | ||||||
| 
 | 
 | ||||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); |     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); | ||||||
|  | @ -88,7 +110,7 @@ void GetTotalStepCount(Service::Interface* self) { | ||||||
|     LOG_WARNING(Service_PTM, "(STUBBED) called"); |     LOG_WARNING(Service_PTM, "(STUBBED) called"); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GetSoftwareClosedFlag(Service::Interface* self) { | void GetSoftwareClosedFlag(Interface* self) { | ||||||
|     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x80F, 0, 0); |     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x80F, 0, 0); | ||||||
| 
 | 
 | ||||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); |     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); | ||||||
|  | @ -112,7 +134,7 @@ void CheckNew3DS(IPC::RequestBuilder& rb) { | ||||||
|     LOG_WARNING(Service_PTM, "(STUBBED) called isNew3DS = 0x%08x", static_cast<u32>(is_new_3ds)); |     LOG_WARNING(Service_PTM, "(STUBBED) called isNew3DS = 0x%08x", static_cast<u32>(is_new_3ds)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void CheckNew3DS(Service::Interface* self) { | void CheckNew3DS(Interface* self) { | ||||||
|     IPC::RequestBuilder rb(Kernel::GetCommandBuffer(), 0x40A, 0, 0); // 0x040A0000
 |     IPC::RequestBuilder rb(Kernel::GetCommandBuffer(), 0x40A, 0, 0); // 0x040A0000
 | ||||||
|     CheckNew3DS(rb); |     CheckNew3DS(rb); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -82,6 +82,18 @@ void GetBatteryChargeState(Interface* self); | ||||||
|  */ |  */ | ||||||
| void GetPedometerState(Interface* self); | void GetPedometerState(Interface* self); | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * PTM::GetStepHistory service function | ||||||
|  |  *  Inputs: | ||||||
|  |  *      1 : Number of hours | ||||||
|  |  *    2-3 : Start time | ||||||
|  |  *      4 : Buffer mapping descriptor | ||||||
|  |  *      5 : (short*) Buffer for step counts | ||||||
|  |  *  Outputs: | ||||||
|  |  *      1 : Result of function, 0 on success, otherwise error code | ||||||
|  |  */ | ||||||
|  | void GetStepHistory(Interface* self); | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * PTM::GetTotalStepCount service function |  * PTM::GetTotalStepCount service function | ||||||
|  *  Outputs: |  *  Outputs: | ||||||
|  |  | ||||||
|  | @ -20,7 +20,7 @@ const Interface::FunctionInfo FunctionTable[] = { | ||||||
|     {0x00080000, GetBatteryChargeState, "GetBatteryChargeState"}, |     {0x00080000, GetBatteryChargeState, "GetBatteryChargeState"}, | ||||||
|     {0x00090000, nullptr, "GetPedometerState"}, |     {0x00090000, nullptr, "GetPedometerState"}, | ||||||
|     {0x000A0042, nullptr, "GetStepHistoryEntry"}, |     {0x000A0042, nullptr, "GetStepHistoryEntry"}, | ||||||
|     {0x000B00C2, nullptr, "GetStepHistory"}, |     {0x000B00C2, GetStepHistory, "GetStepHistory"}, | ||||||
|     {0x000C0000, GetTotalStepCount, "GetTotalStepCount"}, |     {0x000C0000, GetTotalStepCount, "GetTotalStepCount"}, | ||||||
|     {0x000D0040, nullptr, "SetPedometerRecordingMode"}, |     {0x000D0040, nullptr, "SetPedometerRecordingMode"}, | ||||||
|     {0x000E0000, nullptr, "GetPedometerRecordingMode"}, |     {0x000E0000, nullptr, "GetPedometerRecordingMode"}, | ||||||
|  |  | ||||||
|  | @ -20,7 +20,7 @@ const Interface::FunctionInfo FunctionTable[] = { | ||||||
|     {0x00080000, GetBatteryChargeState, "GetBatteryChargeState"}, |     {0x00080000, GetBatteryChargeState, "GetBatteryChargeState"}, | ||||||
|     {0x00090000, nullptr, "GetPedometerState"}, |     {0x00090000, nullptr, "GetPedometerState"}, | ||||||
|     {0x000A0042, nullptr, "GetStepHistoryEntry"}, |     {0x000A0042, nullptr, "GetStepHistoryEntry"}, | ||||||
|     {0x000B00C2, nullptr, "GetStepHistory"}, |     {0x000B00C2, GetStepHistory, "GetStepHistory"}, | ||||||
|     {0x000C0000, GetTotalStepCount, "GetTotalStepCount"}, |     {0x000C0000, GetTotalStepCount, "GetTotalStepCount"}, | ||||||
|     {0x000D0040, nullptr, "SetPedometerRecordingMode"}, |     {0x000D0040, nullptr, "SetPedometerRecordingMode"}, | ||||||
|     {0x000E0000, nullptr, "GetPedometerRecordingMode"}, |     {0x000E0000, nullptr, "GetPedometerRecordingMode"}, | ||||||
|  |  | ||||||
|  | @ -20,7 +20,7 @@ const Interface::FunctionInfo FunctionTable[] = { | ||||||
|     {0x00080000, GetBatteryChargeState, "GetBatteryChargeState"}, |     {0x00080000, GetBatteryChargeState, "GetBatteryChargeState"}, | ||||||
|     {0x00090000, nullptr, "GetPedometerState"}, |     {0x00090000, nullptr, "GetPedometerState"}, | ||||||
|     {0x000A0042, nullptr, "GetStepHistoryEntry"}, |     {0x000A0042, nullptr, "GetStepHistoryEntry"}, | ||||||
|     {0x000B00C2, nullptr, "GetStepHistory"}, |     {0x000B00C2, GetStepHistory, "GetStepHistory"}, | ||||||
|     {0x000C0000, GetTotalStepCount, "GetTotalStepCount"}, |     {0x000C0000, GetTotalStepCount, "GetTotalStepCount"}, | ||||||
|     {0x000D0040, nullptr, "SetPedometerRecordingMode"}, |     {0x000D0040, nullptr, "SetPedometerRecordingMode"}, | ||||||
|     {0x000E0000, nullptr, "GetPedometerRecordingMode"}, |     {0x000E0000, nullptr, "GetPedometerRecordingMode"}, | ||||||
|  |  | ||||||
|  | @ -19,7 +19,7 @@ const Interface::FunctionInfo FunctionTable[] = { | ||||||
|     {0x00080000, GetBatteryChargeState, "GetBatteryChargeState"}, |     {0x00080000, GetBatteryChargeState, "GetBatteryChargeState"}, | ||||||
|     {0x00090000, GetPedometerState, "GetPedometerState"}, |     {0x00090000, GetPedometerState, "GetPedometerState"}, | ||||||
|     {0x000A0042, nullptr, "GetStepHistoryEntry"}, |     {0x000A0042, nullptr, "GetStepHistoryEntry"}, | ||||||
|     {0x000B00C2, nullptr, "GetStepHistory"}, |     {0x000B00C2, GetStepHistory, "GetStepHistory"}, | ||||||
|     {0x000C0000, GetTotalStepCount, "GetTotalStepCount"}, |     {0x000C0000, GetTotalStepCount, "GetTotalStepCount"}, | ||||||
|     {0x000D0040, nullptr, "SetPedometerRecordingMode"}, |     {0x000D0040, nullptr, "SetPedometerRecordingMode"}, | ||||||
|     {0x000E0000, nullptr, "GetPedometerRecordingMode"}, |     {0x000E0000, nullptr, "GetPedometerRecordingMode"}, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue