i2c/gpio: hook up open session for sf interface

This commit is contained in:
Michael Scire 2020-10-31 21:50:21 -07:00 committed by SciresM
parent b74b309a77
commit 42caa4ffd1
15 changed files with 571 additions and 16 deletions

View file

@ -33,8 +33,7 @@ namespace ams::gpio::server {
}
Result ManagerImpl::OpenSession(ams::sf::Out<std::shared_ptr<gpio::sf::IPadSession>> out, gpio::GpioPadName pad_name) {
/* TODO */
AMS_ABORT();
return this->OpenSession2(out, ConvertToDeviceCode(pad_name), ddsf::AccessMode_ReadWrite);
}
Result ManagerImpl::OpenSessionForTest(ams::sf::Out<std::shared_ptr<gpio::sf::IPadSession>> out, gpio::GpioPadName pad_name) {
@ -63,8 +62,15 @@ namespace ams::gpio::server {
}
Result ManagerImpl::OpenSession2(ams::sf::Out<std::shared_ptr<gpio::sf::IPadSession>> out, DeviceCode device_code, ddsf::AccessMode access_mode) {
/* TODO */
AMS_ABORT();
/* Allocate a session. */
auto session = ams::sf::AllocateShared<gpio::sf::IPadSession, PadSessionImpl>(this->pad_allocator, this);
/* Open the session. */
R_TRY(session->GetImpl().OpenSession(device_code, access_mode));
/* We succeeded. */
out.SetValue(std::move(session));
return ResultSuccess();
}
Result ManagerImpl::IsWakeEventActive2(ams::sf::Out<bool> out, DeviceCode device_code) {
@ -82,5 +88,4 @@ namespace ams::gpio::server {
AMS_ABORT();
}
}

View file

@ -35,10 +35,10 @@ namespace ams::gpio::server {
}
}
Result OpenSession(DeviceCode device_code) {
Result OpenSession(DeviceCode device_code, ddsf::AccessMode access_mode) {
AMS_ABORT_UNLESS(!this->has_session);
R_TRY(gpio::driver::OpenSession(std::addressof(this->internal_pad_session), device_code));
R_TRY(gpio::driver::OpenSession(std::addressof(this->internal_pad_session), device_code, access_mode));
this->has_session = true;
return ResultSuccess();
}