From 61ec5fa776ee14115e2c3c755c730c44cb0cfd20 Mon Sep 17 00:00:00 2001
From: mailwl <mailwl@gmail.com>
Date: Fri, 8 Apr 2016 22:39:52 +0300
Subject: [PATCH] cecd:u: stub GetCecStateAbbreviated (#1648)

---
 src/common/logging/log.h             |  2 +-
 src/core/hle/service/cecd/cecd.cpp   |  9 +++++++++
 src/core/hle/service/cecd/cecd.h     | 18 ++++++++++++++++++
 src/core/hle/service/cecd/cecd_u.cpp |  1 +
 4 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/src/common/logging/log.h b/src/common/logging/log.h
index b8eede3b8d..5213623179 100644
--- a/src/common/logging/log.h
+++ b/src/common/logging/log.h
@@ -62,7 +62,7 @@ enum class Class : ClassType {
     Service_NIM,                ///< The NIM (Network interface manager) service
     Service_NWM,                ///< The NWM (Network wlan manager) service
     Service_CAM,                ///< The CAM (Camera) service
-    Service_CECD,               ///< The CECD service
+    Service_CECD,               ///< The CECD (StreetPass) service
     Service_CFG,                ///< The CFG (Configuration) service
     Service_DSP,                ///< The DSP (DSP control) service
     Service_DLP,                ///< The DLP (Download Play) service
diff --git a/src/core/hle/service/cecd/cecd.cpp b/src/core/hle/service/cecd/cecd.cpp
index e6e36e7ecb..50c03495e3 100644
--- a/src/core/hle/service/cecd/cecd.cpp
+++ b/src/core/hle/service/cecd/cecd.cpp
@@ -16,6 +16,15 @@ namespace CECD {
 static Kernel::SharedPtr<Kernel::Event> cecinfo_event;
 static Kernel::SharedPtr<Kernel::Event> change_state_event;
 
+void GetCecStateAbbreviated(Service::Interface* self) {
+    u32* cmd_buff = Kernel::GetCommandBuffer();
+
+    cmd_buff[1] = RESULT_SUCCESS.raw; // No error
+    cmd_buff[2] = static_cast<u32>(CecStateAbbreviated::CEC_STATE_ABBREV_IDLE);
+
+    LOG_WARNING(Service_CECD, "(STUBBED) called");
+}
+
 void GetCecInfoEventHandle(Service::Interface* self) {
     u32* cmd_buff = Kernel::GetCommandBuffer();
 
diff --git a/src/core/hle/service/cecd/cecd.h b/src/core/hle/service/cecd/cecd.h
index 89a8d67bbe..4356113631 100644
--- a/src/core/hle/service/cecd/cecd.h
+++ b/src/core/hle/service/cecd/cecd.h
@@ -10,6 +10,24 @@ class Interface;
 
 namespace CECD {
 
+enum class CecStateAbbreviated {
+    CEC_STATE_ABBREV_IDLE      = 1, ///< Corresponds to CEC_STATE_IDLE
+    CEC_STATE_ABBREV_NOT_LOCAL = 2, ///< Corresponds to CEC_STATEs *FINISH*, *POST, and OVER_BOSS
+    CEC_STATE_ABBREV_SCANNING  = 3, ///< Corresponds to CEC_STATE_SCANNING
+    CEC_STATE_ABBREV_WLREADY   = 4, ///< Corresponds to CEC_STATE_WIRELESS_READY when some unknown bool is true
+    CEC_STATE_ABBREV_OTHER     = 5, ///< Corresponds to CEC_STATEs besides *FINISH*, *POST, and OVER_BOSS and those listed here
+};
+
+/**
+ * GetCecStateAbbreviated service function
+ *  Inputs:
+ *      0: 0x000E0000
+ *  Outputs:
+ *      1: ResultCode
+ *      2: CecStateAbbreviated
+ */
+void GetCecStateAbbreviated(Service::Interface* self);
+
 /**
  * GetCecInfoEventHandle service function
  *  Inputs:
diff --git a/src/core/hle/service/cecd/cecd_u.cpp b/src/core/hle/service/cecd/cecd_u.cpp
index ace1c73c02..be6d4d8f61 100644
--- a/src/core/hle/service/cecd/cecd_u.cpp
+++ b/src/core/hle/service/cecd/cecd_u.cpp
@@ -9,6 +9,7 @@ namespace Service {
 namespace CECD {
 
 static const Interface::FunctionInfo FunctionTable[] = {
+    {0x000E0000, GetCecStateAbbreviated,    "GetCecStateAbbreviated"},
     {0x000F0000, GetCecInfoEventHandle,     "GetCecInfoEventHandle"},
     {0x00100000, GetChangeStateEventHandle, "GetChangeStateEventHandle"},
     {0x00120104, nullptr,                   "ReadSavedData"},