mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +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; | ||||
| 
 | ||||
| void GetAdapterState(Service::Interface* self) { | ||||
| void GetAdapterState(Interface* self) { | ||||
|     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x5, 0, 0); | ||||
| 
 | ||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); | ||||
|  | @ -40,7 +40,7 @@ void GetAdapterState(Service::Interface* self) { | |||
|     LOG_WARNING(Service_PTM, "(STUBBED) called"); | ||||
| } | ||||
| 
 | ||||
| void GetShellState(Service::Interface* self) { | ||||
| void GetShellState(Interface* self) { | ||||
|     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x6, 0, 0); | ||||
| 
 | ||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); | ||||
|  | @ -48,7 +48,7 @@ void GetShellState(Service::Interface* self) { | |||
|     rb.Push(shell_open); | ||||
| } | ||||
| 
 | ||||
| void GetBatteryLevel(Service::Interface* self) { | ||||
| void GetBatteryLevel(Interface* self) { | ||||
|     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x7, 0, 0); | ||||
| 
 | ||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); | ||||
|  | @ -58,7 +58,7 @@ void GetBatteryLevel(Service::Interface* self) { | |||
|     LOG_WARNING(Service_PTM, "(STUBBED) called"); | ||||
| } | ||||
| 
 | ||||
| void GetBatteryChargeState(Service::Interface* self) { | ||||
| void GetBatteryChargeState(Interface* self) { | ||||
|     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x8, 0, 0); | ||||
| 
 | ||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); | ||||
|  | @ -68,7 +68,7 @@ void GetBatteryChargeState(Service::Interface* self) { | |||
|     LOG_WARNING(Service_PTM, "(STUBBED) called"); | ||||
| } | ||||
| 
 | ||||
| void GetPedometerState(Service::Interface* self) { | ||||
| void GetPedometerState(Interface* self) { | ||||
|     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x9, 0, 0); | ||||
| 
 | ||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); | ||||
|  | @ -78,7 +78,29 @@ void GetPedometerState(Service::Interface* self) { | |||
|     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::RequestBuilder rb = rp.MakeBuilder(2, 0); | ||||
|  | @ -88,7 +110,7 @@ void GetTotalStepCount(Service::Interface* self) { | |||
|     LOG_WARNING(Service_PTM, "(STUBBED) called"); | ||||
| } | ||||
| 
 | ||||
| void GetSoftwareClosedFlag(Service::Interface* self) { | ||||
| void GetSoftwareClosedFlag(Interface* self) { | ||||
|     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x80F, 0, 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)); | ||||
| } | ||||
| 
 | ||||
| void CheckNew3DS(Service::Interface* self) { | ||||
| void CheckNew3DS(Interface* self) { | ||||
|     IPC::RequestBuilder rb(Kernel::GetCommandBuffer(), 0x40A, 0, 0); // 0x040A0000
 | ||||
|     CheckNew3DS(rb); | ||||
| } | ||||
|  |  | |||
|  | @ -82,6 +82,18 @@ void GetBatteryChargeState(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 | ||||
|  *  Outputs: | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ const Interface::FunctionInfo FunctionTable[] = { | |||
|     {0x00080000, GetBatteryChargeState, "GetBatteryChargeState"}, | ||||
|     {0x00090000, nullptr, "GetPedometerState"}, | ||||
|     {0x000A0042, nullptr, "GetStepHistoryEntry"}, | ||||
|     {0x000B00C2, nullptr, "GetStepHistory"}, | ||||
|     {0x000B00C2, GetStepHistory, "GetStepHistory"}, | ||||
|     {0x000C0000, GetTotalStepCount, "GetTotalStepCount"}, | ||||
|     {0x000D0040, nullptr, "SetPedometerRecordingMode"}, | ||||
|     {0x000E0000, nullptr, "GetPedometerRecordingMode"}, | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ const Interface::FunctionInfo FunctionTable[] = { | |||
|     {0x00080000, GetBatteryChargeState, "GetBatteryChargeState"}, | ||||
|     {0x00090000, nullptr, "GetPedometerState"}, | ||||
|     {0x000A0042, nullptr, "GetStepHistoryEntry"}, | ||||
|     {0x000B00C2, nullptr, "GetStepHistory"}, | ||||
|     {0x000B00C2, GetStepHistory, "GetStepHistory"}, | ||||
|     {0x000C0000, GetTotalStepCount, "GetTotalStepCount"}, | ||||
|     {0x000D0040, nullptr, "SetPedometerRecordingMode"}, | ||||
|     {0x000E0000, nullptr, "GetPedometerRecordingMode"}, | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ const Interface::FunctionInfo FunctionTable[] = { | |||
|     {0x00080000, GetBatteryChargeState, "GetBatteryChargeState"}, | ||||
|     {0x00090000, nullptr, "GetPedometerState"}, | ||||
|     {0x000A0042, nullptr, "GetStepHistoryEntry"}, | ||||
|     {0x000B00C2, nullptr, "GetStepHistory"}, | ||||
|     {0x000B00C2, GetStepHistory, "GetStepHistory"}, | ||||
|     {0x000C0000, GetTotalStepCount, "GetTotalStepCount"}, | ||||
|     {0x000D0040, nullptr, "SetPedometerRecordingMode"}, | ||||
|     {0x000E0000, nullptr, "GetPedometerRecordingMode"}, | ||||
|  |  | |||
|  | @ -19,7 +19,7 @@ const Interface::FunctionInfo FunctionTable[] = { | |||
|     {0x00080000, GetBatteryChargeState, "GetBatteryChargeState"}, | ||||
|     {0x00090000, GetPedometerState, "GetPedometerState"}, | ||||
|     {0x000A0042, nullptr, "GetStepHistoryEntry"}, | ||||
|     {0x000B00C2, nullptr, "GetStepHistory"}, | ||||
|     {0x000B00C2, GetStepHistory, "GetStepHistory"}, | ||||
|     {0x000C0000, GetTotalStepCount, "GetTotalStepCount"}, | ||||
|     {0x000D0040, nullptr, "SetPedometerRecordingMode"}, | ||||
|     {0x000E0000, nullptr, "GetPedometerRecordingMode"}, | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue