#ifndef SYSTEM_INFO_SYSTEM_INFO_PERIPHERAL_H_
#define SYSTEM_INFO_SYSTEM_INFO_PERIPHERAL_H_
+#if defined(TIZEN_MOBILE)
+#include <vconf.h>
+#include <vconf-keys.h>
+#endif
+
#include "common/extension_adapter.h"
#include "common/picojson.h"
#include "common/utils.h"
private:
explicit SysInfoPeripheral(ContextAPI* api) {
api_ = api;
+ PlatformInitialize();
}
+ void PlatformInitialize();
+
+#if defined(TIZEN_MOBILE)
+ void SetWFD(int wfd);
+ void SetHDMI(int hdmi);
+
+ void UpdateIsVideoOutputOn();
+ void SendData(picojson::value& data);
+
+ static void OnWFDChanged(keynode_t* node, void* user_data);
+ static void OnHDMIChanged(keynode_t* node, void* user_data);
+#endif
+
ContextAPI* api_;
+ bool is_video_output_;
+ int wfd_;
+ int hdmi_;
DISALLOW_COPY_AND_ASSIGN(SysInfoPeripheral);
};
void SysInfoPeripheral::Get(picojson::value& error,
picojson::value& data) {
- // FIXME(halton): Add actual implementation
- system_info::SetPicoJsonObjectValue(error, "message",
- picojson::value("NOT IMPLEMENTED."));
+ if (vconf_get_int(VCONFKEY_MIRACAST_WFD_SOURCE_STATUS, &wfd_) != 0) {
+ system_info::SetPicoJsonObjectValue(error, "message",
+ picojson::value("Get wireless display Status failed."));
+ return;
+ }
+
+ if (vconf_get_int(VCONFKEY_SYSMAN_HDMI, &hdmi_) != 0) {
+ system_info::SetPicoJsonObjectValue(error, "message",
+ picojson::value("Get HDMI status failed."));
+ return;
+ }
+
+ SendData(data);
+ system_info::SetPicoJsonObjectValue(error, "message", picojson::value(""));
+}
+
+void SysInfoPeripheral::SendData(picojson::value& data) {
+ is_video_output_ = (wfd_ == VCONFKEY_MIRACAST_WFD_SOURCE_ON) ||
+ (hdmi_ == VCONFKEY_SYSMAN_HDMI_CONNECTED);
+ system_info::SetPicoJsonObjectValue(data, "isVideoOutputOn",
+ picojson::value(is_video_output_));
+}
+
+void SysInfoPeripheral::UpdateIsVideoOutputOn() {
+ picojson::value output = picojson::value(picojson::object());
+ picojson::value data = picojson::value(picojson::object());
+
+ bool old_is_video_output = is_video_output_;
+ SendData(data);
+ if (old_is_video_output == is_video_output_)
+ return;
+
+ system_info::SetPicoJsonObjectValue(output, "cmd",
+ picojson::value("SystemInfoPropertyValueChanged"));
+ system_info::SetPicoJsonObjectValue(output, "prop",
+ picojson::value("PERIPHERAL"));
+ system_info::SetPicoJsonObjectValue(output, "data", data);
+
+ std::string result = output.serialize();
+ api_->PostMessage(result.c_str());
+}
+
+void SysInfoPeripheral::SetWFD(int wfd) {
+ wfd_ = wfd;
+ UpdateIsVideoOutputOn();
+}
+
+void SysInfoPeripheral::SetHDMI(int hdmi) {
+ hdmi_ = hdmi;
+ UpdateIsVideoOutputOn();
+}
+
+void SysInfoPeripheral::OnWFDChanged(keynode_t* node, void* user_data) {
+ int wfd = vconf_keynode_get_int(node);
+ SysInfoPeripheral* peripheral =
+ static_cast<SysInfoPeripheral*>(user_data);
+
+ peripheral->SetWFD(wfd);
+}
+
+void SysInfoPeripheral::OnHDMIChanged(keynode_t* node, void* user_data) {
+ int hdmi = vconf_keynode_get_int(node);
+ SysInfoPeripheral* peripheral =
+ static_cast<SysInfoPeripheral*>(user_data);
+
+ peripheral->SetHDMI(hdmi);
+}
+
+void SysInfoPeripheral::PlatformInitialize() {
+ vconf_notify_key_changed(VCONFKEY_MIRACAST_WFD_SOURCE_STATUS,
+ (vconf_callback_fn)OnWFDChanged, this);
+ vconf_notify_key_changed(VCONFKEY_SYSMAN_HDMI,
+ (vconf_callback_fn)OnHDMIChanged, this);
}