mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-05-28 08:27:07 +02:00
i2c
This commit is contained in:
parent
13ccfdd7f2
commit
e71eab8d8f
1 changed files with 44 additions and 1 deletions
|
|
@ -5,23 +5,66 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include "core/core.h"
|
#include "core/core.h"
|
||||||
|
#include "core/hle/result.h"
|
||||||
#include "core/hle/service/i2c/i2c.h"
|
#include "core/hle/service/i2c/i2c.h"
|
||||||
#include "core/hle/service/ipc_helpers.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/service.h"
|
||||||
|
#include "core/hle/service/server_manager.h"
|
||||||
|
|
||||||
namespace Service::I2C {
|
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> {
|
class I2C final : public ServiceFramework<I2C> {
|
||||||
public:
|
public:
|
||||||
explicit I2C(Core::System& system_)
|
explicit I2C(Core::System& system_)
|
||||||
: ServiceFramework{system_, "i2c"}
|
: ServiceFramework{system_, "i2c"}
|
||||||
{
|
{
|
||||||
static const FunctionInfo functions[] = {
|
static const FunctionInfo functions[] = {
|
||||||
{0, nullptr, "Cmd0"},
|
{0, nullptr, "OpenSessionForDev"},
|
||||||
|
{1, C<&I2C::OpenSession>, "OpenSession"},
|
||||||
|
{2, nullptr, "HasDevice"},
|
||||||
|
{3, nullptr, "HasDeviceForDev"},
|
||||||
|
{4, nullptr, "OpenSession2"},
|
||||||
};
|
};
|
||||||
RegisterHandlers(functions);
|
RegisterHandlers(functions);
|
||||||
}
|
}
|
||||||
~I2C() override = default;
|
~I2C() override = default;
|
||||||
|
|
||||||
|
Result OpenSession(I2CDevice device, OutInterface<I2CSession> out_session) {
|
||||||
|
LOG_DEBUG(Service, "(stubbed)");
|
||||||
|
*out_session = std::make_shared<I2CSession>(system);
|
||||||
|
R_SUCCEED();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void LoopProcess(Core::System& system) {
|
void LoopProcess(Core::System& system) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue