KWSys: Retrieve QNX specific memory and processor info (#11329)
Author: Rolf Eike Beer <eike@sf-mail.de> 2010-10-18 12:03:39
This commit is contained in:
parent
1c2a9b8140
commit
99ddf6a12d
|
@ -264,6 +264,10 @@ protected:
|
|||
//For Haiku OS
|
||||
bool QueryHaikuInfo();
|
||||
|
||||
//For QNX
|
||||
bool QueryQNXMemory();
|
||||
bool QueryQNXProcessor();
|
||||
|
||||
// Evaluate the memory information.
|
||||
int QueryMemory();
|
||||
size_t TotalVirtualMemory;
|
||||
|
@ -597,6 +601,8 @@ void SystemInformationImplementation::RunCPUCheck()
|
|||
this->QuerySolarisInfo();
|
||||
#elif defined(__HAIKU__)
|
||||
this->QueryHaikuInfo();
|
||||
#elif defined(__QNX__)
|
||||
this->QueryQNXProcessor();
|
||||
#else
|
||||
this->RetreiveInformationFromCpuInfoFile();
|
||||
#endif
|
||||
|
@ -615,6 +621,8 @@ void SystemInformationImplementation::RunMemoryCheck()
|
|||
this->QuerySolarisInfo();
|
||||
#elif defined(__HAIKU__)
|
||||
this->QueryHaikuInfo();
|
||||
#elif defined(__QNX__)
|
||||
this->QueryQNXMemory();
|
||||
#else
|
||||
this->QueryMemory();
|
||||
#endif
|
||||
|
@ -3264,6 +3272,89 @@ bool SystemInformationImplementation::QueryHaikuInfo()
|
|||
#endif
|
||||
}
|
||||
|
||||
bool SystemInformationImplementation::QueryQNXMemory()
|
||||
{
|
||||
#if defined(__QNX__)
|
||||
kwsys_stl::string buffer;
|
||||
kwsys_stl::vector<const char*> args;
|
||||
args.clear();
|
||||
|
||||
args.push_back("showmem");
|
||||
args.push_back("-S");
|
||||
args.push_back(0);
|
||||
buffer = this->RunProcess(args);
|
||||
args.clear();
|
||||
|
||||
size_t pos = buffer.find("System RAM:");
|
||||
if (pos == buffer.npos)
|
||||
return false;
|
||||
pos = buffer.find(":", pos);
|
||||
size_t pos2 = buffer.find("M (", pos);
|
||||
if (pos2 == buffer.npos)
|
||||
return false;
|
||||
|
||||
pos++;
|
||||
while (buffer[pos] == ' ')
|
||||
pos++;
|
||||
|
||||
this->TotalPhysicalMemory = atoi(buffer.substr(pos, pos2 - pos).c_str());
|
||||
return true;
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SystemInformationImplementation::QueryQNXProcessor()
|
||||
{
|
||||
#if defined(__QNX__)
|
||||
// the output on my QNX 6.4.1 looks like this:
|
||||
// Processor1: 686 Pentium II Stepping 3 2175MHz FPU
|
||||
kwsys_stl::string buffer;
|
||||
kwsys_stl::vector<const char*> args;
|
||||
args.clear();
|
||||
|
||||
args.push_back("pidin");
|
||||
args.push_back("info");
|
||||
args.push_back(0);
|
||||
buffer = this->RunProcess(args);
|
||||
args.clear();
|
||||
|
||||
size_t pos = buffer.find("Processor1:");
|
||||
if (pos == buffer.npos)
|
||||
return false;
|
||||
|
||||
size_t pos2 = buffer.find("MHz", pos);
|
||||
if (pos2 == buffer.npos)
|
||||
return false;
|
||||
|
||||
size_t pos3 = pos2;
|
||||
while (buffer[pos3] != ' ')
|
||||
--pos3;
|
||||
|
||||
this->CPUSpeedInMHz = atoi(buffer.substr(pos3 + 1, pos2 - pos3 - 1).c_str());
|
||||
|
||||
pos2 = buffer.find(" Stepping", pos);
|
||||
if (pos2 != buffer.npos)
|
||||
{
|
||||
pos2 = buffer.find(" ", pos2 + 1);
|
||||
if (pos2 != buffer.npos && pos2 < pos3)
|
||||
{
|
||||
this->ChipID.Revision = atoi(buffer.substr(pos2 + 1, pos3 - pos2).c_str());
|
||||
}
|
||||
}
|
||||
|
||||
this->NumberOfPhysicalCPU = 0;
|
||||
do
|
||||
{
|
||||
pos = buffer.find("\nProcessor", pos + 1);
|
||||
++this->NumberOfPhysicalCPU;
|
||||
} while (pos != buffer.npos);
|
||||
this->NumberOfLogicalCPU = 1;
|
||||
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
/** Query the operating system information */
|
||||
bool SystemInformationImplementation::QueryOSInformation()
|
||||
|
|
Loading…
Reference in New Issue