| // Copyright 2012 Google Inc. All Rights Reserved. |
| // Author: alicejwang@google.com (Alice Wang) |
| |
| #include "bruno/logging.h" |
| #include "bruno/sigslot.h" |
| #include "platform.h" |
| |
| namespace bruno_platform_peripheral { |
| |
| /* Platform table */ |
| const Platform Platform::kPlatformTable[] = { |
| /* model type hdd aux1 fan */ |
| Platform("GFMS100", BRUNO_GFMS100, true, false, true), |
| Platform("GFHD100", BRUNO_GFHD100, false, false, true), |
| Platform("GFHD200", BRUNO_GFHD200, false, false, false), |
| Platform("GFRG200", BRUNO_GFRG200, false, false, true), |
| Platform("GFRG210", BRUNO_GFRG210, true, false, true), |
| Platform("GFRG250", BRUNO_GFRG250, true, true, true), |
| Platform("GFSC100", BRUNO_GFSC100, true, false, true), |
| Platform("GFLT110", BRUNO_GFLT110, false, false, false), |
| Platform("GFLT120", BRUNO_GFLT110, false, false, false), |
| Platform("GFHD254", BRUNO_GFHD254, false, true, true), |
| Platform("GFLT300", BRUNO_GFLT300, false, false, false), |
| Platform("GFLT400", BRUNO_GFLT400, false, false, false), |
| Platform("GFCH100", BRUNO_GFCH100, false, false, false), |
| Platform("UNKNOWN PLATFORM", BRUNO_UNKNOWN, false, false, false), |
| }; |
| |
| void Platform::Init(void) { |
| GetPlatformType(); |
| } |
| |
| #define ARRAYSIZE(a) \ |
| (static_cast<size_t>((sizeof(a) / sizeof(*(a)))) / \ |
| static_cast<size_t>(!(sizeof(a) % sizeof(*(a))))) |
| |
| void Platform::GetPlatformType(void) { |
| std::string result = GetLine((char *)PLATFORM_FILE, NULL); |
| |
| for (int i = 0; i < (int)ARRAYSIZE(Platform::kPlatformTable); i++) { |
| if (result == kPlatformTable[i].name_) { |
| name_ = kPlatformTable[i].name_; |
| type_ = kPlatformTable[i].type_; |
| has_hdd_ = kPlatformTable[i].has_hdd_; |
| has_aux1_ = kPlatformTable[i].has_aux1_; |
| has_fan_ = kPlatformTable[i].has_fan_; |
| break; |
| } |
| } |
| |
| if (type_ == BRUNO_UNKNOWN) { |
| LOG(LS_ERROR) << "Unsupported Platform - " << result << std::endl; |
| } |
| fprintf(stderr, "plat_type=%s\n", name_.c_str()); |
| return; |
| } |
| |
| /* Search the pattern in the file. |
| * 1) If the pattern found in the string, return the string. |
| * 2) Otherwse, a NULL string. |
| */ |
| std::string Platform::GetLine(char *file, std::string *pattern) { |
| std::string result; |
| std::ifstream opened_file; |
| |
| result.clear(); |
| opened_file.open (file); |
| if(opened_file.is_open()) { |
| while(!opened_file.eof()) { |
| getline(opened_file, result); |
| if (pattern == NULL) { |
| /* If no pattern specified, return the first read line */ |
| break; |
| } |
| /* skip this line if leading chararcter is '#' */ |
| else if (result[0] != COMMENT_CHAR && |
| result.compare(0, pattern->size(), *pattern) == 0) { |
| break; /* Found the pattern. Exit */ |
| } |
| } |
| opened_file.close(); |
| } |
| else { |
| LOG(LS_INFO) << "Unable to open this file." << std::endl; |
| } |
| |
| return result; |
| } |
| |
| } // namespace bruno_platform_peripheral |