From 6a06d06fca757b39ec6f2b25ca6cb188af01cd3a Mon Sep 17 00:00:00 2001 From: fyraimar Date: Thu, 1 Aug 2013 14:29:46 +0800 Subject: [PATCH] Implement BUILD --- system_info/system_info.gypi | 2 ++ system_info/system_info_build.cc | 66 ++++++++++++++++++++++++++++++++++++++ system_info/system_info_build.h | 34 ++++++++++++++++++++ system_info/system_info_context.cc | 22 +++++++++---- 4 files changed, 118 insertions(+), 6 deletions(-) create mode 100644 system_info/system_info_build.cc create mode 100644 system_info/system_info_build.h diff --git a/system_info/system_info.gypi b/system_info/system_info.gypi index 2f1a3ff..d3d5c88 100644 --- a/system_info/system_info.gypi +++ b/system_info/system_info.gypi @@ -15,6 +15,8 @@ 'system_info_api.js', 'system_info_battery.cc', 'system_info_battery.h', + 'system_info_build.cc', + 'system_info_build.h', 'system_info_context.cc', 'system_info_context.h', 'system_info_context_desktop.cc', diff --git a/system_info/system_info_build.cc b/system_info/system_info_build.cc new file mode 100644 index 0000000..ea3dd41 --- /dev/null +++ b/system_info/system_info_build.cc @@ -0,0 +1,66 @@ +// Copyright (c) 2013 Intel Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "system_info/system_info_build.h" + +#include +#include +#include +#include + +#include + +#include "common/picojson.h" +#include "system_info/system_info_utils.h" + +using namespace system_info; + +SysInfoBuild::SysInfoBuild(picojson::value& error) { + udev_ = udev_new(); + if (!udev_) { + SetPicoJsonObjectValue(error, "message", + picojson::value("Can't create udev.")); + } +} + +SysInfoBuild::~SysInfoBuild() { + if(udev_) + udev_unref(udev_); +} + +bool SysInfoBuild::GetBuildInfo(std::string& Manufactor, + std::string& Model, + std::string& Build) { + static struct utsname buf; + memset(&buf, 0, sizeof (struct utsname)); + uname(&buf); + char *tmpbuild = strcat(buf.sysname, buf.release); + Build.assign(tmpbuild); + + std::ifstream in; + in.open("/var/log/dmesg"); + + int dmipos; + std::string info; + do { + getline(in, info); + dmipos = info.find("] DMI: ", 0); + } while (dmipos == std::string::npos); + info.erase(0, dmipos + 7); + + int ManufacHead = 0; + int ManufacTail = -1; + ManufacTail = info.find(' ', 0); + Manufactor.assign(info, ManufacHead, ManufacTail - ManufacHead); + + int ModelHead = 0; + int ModelTail = -1; + ModelHead = ManufacTail + 1; + ModelTail = info.find(',', 0); + Model.assign(info, ModelHead, ModelTail-ModelHead); + + in.close(); + + return !(Model.empty() || Manufactor.empty()); +} diff --git a/system_info/system_info_build.h b/system_info/system_info_build.h new file mode 100644 index 0000000..fec900d --- /dev/null +++ b/system_info/system_info_build.h @@ -0,0 +1,34 @@ +// Copyright (c) 2013 Intel Corporation. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef SYSTEM_INFO_SYSTEM_INFO_BUILD_H_ +#define SYSTEM_INFO_SYSTEM_INFO_BUILD_H_ + +#include + +#include + +#include "common/picojson.h" +#include "common/utils.h" + +class SysInfoBuild { + public: + static SysInfoBuild& GetSysInfoBuild(picojson::value& error) { + static SysInfoBuild instance(error); + return instance; + } + ~SysInfoBuild(); + bool GetBuildInfo(std::string& Manufactor, + std::string& Model, + std::string& Build); + + private: + SysInfoBuild(picojson::value& error); + + struct udev* udev_; + + DISALLOW_COPY_AND_ASSIGN(SysInfoBuild); +}; + +#endif // SYSTEM_INFO_SYSTEM_INFO_BUILD_H_ diff --git a/system_info/system_info_context.cc b/system_info/system_info_context.cc index ea124bc..dfb55a0 100644 --- a/system_info/system_info_context.cc +++ b/system_info/system_info_context.cc @@ -8,6 +8,7 @@ #include "common/picojson.h" #include "system_info/system_info_battery.h" +#include "system_info/system_info_build.h" #include "system_info/system_info_display.h" #include "system_info/system_info_storage.h" #include "system_info/system_info_utils.h" @@ -44,7 +45,7 @@ void SystemInfoContext::GetBattery(picojson::value& error, void SystemInfoContext::GetCPU(picojson::value& error, picojson::value& data) { double load[1]; - if (getloadavg(load, 1) == -1) { + if (getloadavg(load, 1) == -1) { SetPicoJsonObjectValue(error, "message", picojson::value("Get CPU load failed.")); return; @@ -111,11 +112,20 @@ void SystemInfoContext::GetDisplay(picojson::value& error, void SystemInfoContext::GetBuild(picojson::value& error, picojson::value& data) { - // FIXME(halton): Add actual implementation - SetPicoJsonObjectValue(data, "model", picojson::value("Tizen PC")); - SetPicoJsonObjectValue(data, "manufacturer", picojson::value("Intel Corp.")); - SetPicoJsonObjectValue(data, "buildVersion", picojson::value("3.0")); - SetPicoJsonObjectValue(error, "message", picojson::value("")); + SysInfoBuild& build = SysInfoBuild::GetSysInfoBuild(error); + + std::string Manufacturer; + std::string Model; + std::string Build; + if (build.GetBuildInfo(Manufacturer, Model, Build)) { + SetPicoJsonObjectValue(data, "model", picojson::value(Model)); + SetPicoJsonObjectValue(data, "manufacturer", picojson::value(Manufacturer)); + SetPicoJsonObjectValue(data, "buildVersion", picojson::value(Build)); + SetPicoJsonObjectValue(error, "message", picojson::value("")); + } else { + SetPicoJsonObjectValue(error, "message", + picojson::value("Unable to get info.")); + } } void SystemInfoContext::GetLocale(picojson::value& error, -- 2.7.4