Implement BUILD
authorfyraimar <fyraimar@gmail.com>
Thu, 1 Aug 2013 06:29:46 +0000 (14:29 +0800)
committerHalton Huo <halton.huo@intel.com>
Thu, 1 Aug 2013 21:23:27 +0000 (05:23 +0800)
system_info/system_info.gypi
system_info/system_info_build.cc [new file with mode: 0644]
system_info/system_info_build.h [new file with mode: 0644]
system_info/system_info_context.cc

index 2f1a3ff..d3d5c88 100644 (file)
@@ -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 (file)
index 0000000..ea3dd41
--- /dev/null
@@ -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 <libudev.h>
+#include <stdlib.h>
+#include <sys/utsname.h>
+#include <unistd.h>
+
+#include <fstream>
+
+#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 (file)
index 0000000..fec900d
--- /dev/null
@@ -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 <libudev.h>
+
+#include <string>
+
+#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_
index ea124bc..dfb55a0 100644 (file)
@@ -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,