mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-09-09 05:32:36 +00:00
87e5d0b6e4
Signed-off-by: lizzie <lizzie@eden-emu.dev> - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- `OpenSystemApplicationProxy` `OpenSystemApplicationProxy` ALSO yes those cmds DO NOT take an attribute Implemented SVC infos to match Atmosphere's values Implement more stub I2C session cmds stub CMD2103 for rhythm groove better error handling on svc get info to match ams (see ams svc info) Virtual Boy classic fix adept from https://git.ryujinx.app/projects/Kenji-NX/commit/2288084b531b185f5840a696b23265014f07e2f2 by @Mythrax acc:u1 was missing the *Deprecated cmd Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4343 Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Reviewed-by: Maufeat <sahyno1996@gmail.com>
95 lines
3.3 KiB
C++
95 lines
3.3 KiB
C++
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#include "core/core.h"
|
|
#include "core/hle/result.h"
|
|
#include "core/hle/service/i2c/i2c.h"
|
|
#include "core/hle/service/ipc_helpers.h"
|
|
#include "core/hle/service/cmif_serialization.h"
|
|
#include "core/hle/service/cmif_types.h"
|
|
#include "core/hle/service/service.h"
|
|
#include "core/hle/service/server_manager.h"
|
|
|
|
namespace Service::I2C {
|
|
|
|
class I2CSession final : public ServiceFramework<I2CSession> {
|
|
public:
|
|
explicit I2CSession(Core::System& system_)
|
|
: ServiceFramework{system_, "I2CSession"}
|
|
{
|
|
static const FunctionInfo functions[] = {
|
|
{0, nullptr, "SendOld"},
|
|
{1, nullptr, "ReceiveOld"},
|
|
{2, nullptr, "ExecuteCommandListOld"},
|
|
{10, C<&I2CSession::Send>, "Send"},
|
|
{11, nullptr, "Receive"},
|
|
{12, nullptr, "ExecuteCommandList"},
|
|
{13, nullptr, "SetRetryPolicy"},
|
|
};
|
|
RegisterHandlers(functions);
|
|
}
|
|
~I2CSession() override = default;
|
|
Result Send(InBuffer<BufferAttr_HipcMapAlias> in_data, u32 transaction_option) {
|
|
LOG_WARNING(Service, "(stubbed) topt={}", transaction_option);
|
|
R_THROW(ResultUnknown);
|
|
}
|
|
};
|
|
|
|
enum class I2CDevice : u32 {
|
|
ClassicController,
|
|
Ftm3bd56,
|
|
};
|
|
|
|
class I2C final : public ServiceFramework<I2C> {
|
|
public:
|
|
explicit I2C(Core::System& system_)
|
|
: ServiceFramework{system_, "i2c"}
|
|
{
|
|
static const FunctionInfo functions[] = {
|
|
{0, C<&I2C::OpenSessionForDev>, "OpenSessionForDev"},
|
|
{1, C<&I2C::OpenSession>, "OpenSession"},
|
|
{2, C<&I2C::HasDevice>, "HasDevice"},
|
|
{3, C<&I2C::HasDeviceForDev>, "HasDeviceForDev"},
|
|
{4, C<&I2C::OpenSession2>, "OpenSession2"},
|
|
};
|
|
RegisterHandlers(functions);
|
|
}
|
|
~I2C() override = default;
|
|
Result OpenSessionForDev(OutInterface<I2CSession> out_session, s32 bus_idx, u32 slave_address, u32 addressing_mode, u32 speed_mode) {
|
|
LOG_DEBUG(Service, "(stubbed)");
|
|
*out_session = std::make_shared<I2CSession>(system);
|
|
R_SUCCEED();
|
|
}
|
|
Result OpenSession(OutInterface<I2CSession> out_session, I2CDevice device) {
|
|
LOG_DEBUG(Service, "(stubbed)");
|
|
*out_session = std::make_shared<I2CSession>(system);
|
|
R_SUCCEED();
|
|
}
|
|
Result HasDevice(Out<bool> out_has_device, I2CDevice device) {
|
|
LOG_DEBUG(Service, "(stubbed)");
|
|
*out_has_device = false;
|
|
R_SUCCEED();
|
|
}
|
|
Result HasDeviceForDev(Out<bool> out_has_device, I2CDevice device) {
|
|
LOG_DEBUG(Service, "(stubbed)");
|
|
*out_has_device = false;
|
|
R_SUCCEED();
|
|
}
|
|
Result OpenSession2(OutInterface<I2CSession> out_session, u32 device_code) {
|
|
LOG_DEBUG(Service, "(stubbed) device_code={}", device_code);
|
|
*out_session = std::make_shared<I2CSession>(system);
|
|
R_SUCCEED();
|
|
}
|
|
};
|
|
|
|
void LoopProcess(Core::System& system) {
|
|
auto server_manager = std::make_unique<ServerManager>(system);
|
|
server_manager->RegisterNamedService("i2c", std::make_shared<I2C>(system));
|
|
ServerManager::RunServer(std::move(server_manager));
|
|
}
|
|
|
|
} // namespace Service::I2C
|