mc.mitm: add extension IPC call for external app to signal that it has peeked at the hid report buffer when using event redirection

This commit is contained in:
ndeadly 2021-06-23 02:10:05 +02:00
parent c6866db302
commit 31250f09fb
4 changed files with 22 additions and 10 deletions

View file

@ -41,6 +41,7 @@ namespace ams::bluetooth::hid::report {
os::SystemEvent g_system_event_user_fwd(os::EventClearMode_AutoClear, true);
os::Event g_init_event(os::EventClearMode_ManualClear);
os::Event g_report_read_event(os::EventClearMode_AutoClear);
SharedMemory g_real_bt_shmem;
SharedMemory g_fake_bt_shmem;
@ -70,6 +71,10 @@ namespace ams::bluetooth::hid::report {
g_init_event.Wait();
}
void SignalReportRead(void) {
g_report_read_event.Signal();
}
SharedMemory *GetRealSharedMemory(void) {
if (hos::GetVersion() < hos::Version_7_0_0)
return nullptr;
@ -272,17 +277,17 @@ namespace ams::bluetooth::hid::report {
}
void HandleEvent(void) {
if (!g_redirect_hid_report_events) {
if (hos::GetVersion() >= hos::Version_12_0_0)
HandleHidReportEventV12();
else if (hos::GetVersion() >= hos::Version_7_0_0)
HandleHidReportEventV7();
else
HandleHidReportEventV1();
}
else {
if (g_redirect_hid_report_events) {
g_system_event_user_fwd.Signal();
g_report_read_event.Wait();
}
if (hos::GetVersion() >= hos::Version_12_0_0)
HandleHidReportEventV12();
else if (hos::GetVersion() >= hos::Version_7_0_0)
HandleHidReportEventV7();
else
HandleHidReportEventV1();
}
}

View file

@ -22,6 +22,7 @@ namespace ams::bluetooth::hid::report {
bool IsInitialized(void);
void WaitInitialized(void);
void SignalReportRead(void);
SharedMemory *GetRealSharedMemory(void);
SharedMemory *GetFakeSharedMemory(void);

View file

@ -266,4 +266,8 @@ namespace ams::mitm::bluetooth {
g_redirect_ble_events = redirect;
}
void BtdrvMitmService::SignalHidReportRead(void) {
ams::bluetooth::hid::report::SignalReportRead();
}
}

View file

@ -39,7 +39,8 @@
AMS_SF_METHOD_INFO(C, H, 65003, void, RedirectHidEvents, (bool redirect), (redirect)) \
AMS_SF_METHOD_INFO(C, H, 65004, void, RedirectHidReportEvents, (bool redirect), (redirect)) \
AMS_SF_METHOD_INFO(C, H, 65005, void, RedirectBleEvents, (bool redirect), (redirect)) \
AMS_SF_METHOD_INFO(C, H, 65006, void, SignalHidReportRead, (void), ()) \
AMS_SF_DEFINE_MITM_INTERFACE(ams::mitm::bluetooth, IBtdrvMitmInterface, AMS_BTDRV_MITM_INTERFACE_INFO)
namespace ams::mitm::bluetooth {
@ -79,6 +80,7 @@ namespace ams::mitm::bluetooth {
void RedirectHidEvents(bool redirect);
void RedirectHidReportEvents(bool redirect);
void RedirectBleEvents(bool redirect);
void SignalHidReportRead(void);
};
static_assert(IsIBtdrvMitmInterface<BtdrvMitmService>);