qsysinfo.cpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651
  1. #include "qappctrl.h"
  2. #include "helpers.h"
  3. #include "defines.h"
  4. /////////////////////////////////////////////////////////////////////////////
  5. /////////////////////////////////////////////////////////////////////////////
  6. /////////////////////////////////////////////////////////////////////////////
  7. #define _countof(a) (sizeof(a) / sizeof(*a))
  8. /////////////////////////////////////////////////////////////////////////////
  9. #define _OPT_STRING(s, o) (*s ? s : o)
  10. #define _NA_STRING(s) _OPT_STRING(s, "n/a")
  11. /////////////////////////////////////////////////////////////////////////////
  12. typedef enum
  13. {
  14. SDR_DiskName = Qt::UserRole,
  15. SDR_DiskDevNode,
  16. SDR_DiskBusType,
  17. SDR_DiskVendorName,
  18. SDR_DiskVendorID,
  19. SDR_DiskProductID,
  20. SDR_PartFsLabel,
  21. SDR_PartFsType,
  22. SDR_PartFsVersion,
  23. SDR_PartDevNode,
  24. SDR_PartMountPoint,
  25. SDR_PartSize,
  26. SDR_PartFsSize,
  27. SDR_PartFsFree,
  28. SDR_PartFsUsed
  29. }StgDevRoles;
  30. typedef struct _STG_DEV_ROLES
  31. {
  32. int nRole;
  33. const char *pszRoleName;
  34. }STG_DEV_ROLES, *LPSTG_DEV_ROLES;
  35. typedef const STG_DEV_ROLES *LPCSTG_DEV_ROLES;
  36. /////////////////////////////////////////////////////////////////////////////
  37. static const STG_DEV_ROLES g_roles[] =
  38. {
  39. {SDR_DiskName, "DiskName"},
  40. {SDR_DiskDevNode, "DiskDevNode"},
  41. {SDR_DiskBusType, "DiskDevType"},
  42. {SDR_DiskVendorName, "DiskVendorName"},
  43. {SDR_DiskVendorID, "DiskVendorID"},
  44. {SDR_DiskProductID, "DiskProductID"},
  45. {SDR_PartFsLabel, "PartFsLabel"},
  46. {SDR_PartFsType, "PartFsType"},
  47. {SDR_PartFsVersion, "PartFsVersion"},
  48. {SDR_PartDevNode, "PartDevNode"},
  49. {SDR_PartMountPoint, "PartMountPoint"},
  50. {SDR_PartSize, "PartSize"},
  51. {SDR_PartFsSize, "PartFsSize"},
  52. {SDR_PartFsFree, "PartFsFree"},
  53. {SDR_PartFsUsed, "PartFsUsed"}
  54. };
  55. /////////////////////////////////////////////////////////////////////////////
  56. QGfaStgDevList::QGfaStgDevList(QObject *pParent) : QAbstractTableModel(pParent)
  57. {
  58. memset(&m_stgDevShadowCpy, 0, sizeof(m_stgDevShadowCpy));
  59. setObjectName("QGfaStgDevList");
  60. }
  61. QGfaStgDevList::~QGfaStgDevList(void)
  62. {
  63. }
  64. int QGfaStgDevList::rowCount(const QModelIndex &parent) const
  65. {
  66. Q_UNUSED(parent);
  67. return (int)m_partVec.size();
  68. }
  69. int QGfaStgDevList::columnCount(const QModelIndex &parent) const
  70. {
  71. Q_UNUSED(parent);
  72. return (int)_countof(g_roles);
  73. }
  74. QVariant QGfaStgDevList::data(const QModelIndex &index, int role) const
  75. {
  76. if(!index.isValid())
  77. return QVariant();
  78. QVariant val;
  79. char szBuf[64];
  80. int nIndex = index.row();
  81. const STG_DEV_DISK_PART &dp = m_partVec[nIndex];
  82. const GFA_SYSINFO_DISK &disk = m_stgDevShadowCpy.disks[dp.nDiskIdx];
  83. const GFA_SYSINFO_PARTITION &part = m_stgDevShadowCpy.parts[dp.nPartIdx];
  84. if(disk.valid && part.valid)
  85. {
  86. switch(role)
  87. {
  88. case SDR_DiskName:
  89. val = _NA_STRING(disk.szName);
  90. break;
  91. case SDR_DiskDevNode:
  92. val = _NA_STRING(disk.szDevNode);
  93. break;
  94. case SDR_DiskBusType:
  95. val = _OPT_STRING(disk.szBus, "mmc");
  96. break;
  97. case SDR_DiskVendorName:
  98. val = _NA_STRING(disk.szVendor);
  99. break;
  100. case SDR_DiskVendorID:
  101. val = (int)disk.nVendorID;
  102. break;
  103. case SDR_DiskProductID:
  104. val = (int)disk.nProductID;
  105. break;
  106. case SDR_PartFsLabel:
  107. val = _NA_STRING(part.szFsLabel);
  108. break;
  109. case SDR_PartFsType:
  110. val = _NA_STRING(part.szFsType);
  111. break;
  112. case SDR_PartFsVersion:
  113. val = _NA_STRING(part.szFsVersion);
  114. break;
  115. case SDR_PartDevNode:
  116. val = _NA_STRING(part.szDevNode);
  117. break;
  118. case SDR_PartMountPoint:
  119. val = _NA_STRING(part.szMntPoint);
  120. break;
  121. case SDR_PartSize:
  122. val = FormatByteSize(part.nKiBPartSize * _BYTE_SIZE_KIB, szBuf, _countof(szBuf));
  123. break;
  124. case SDR_PartFsSize:
  125. val = FormatByteSize(part.nKiBSize * _BYTE_SIZE_KIB, szBuf, _countof(szBuf));
  126. break;
  127. case SDR_PartFsFree:
  128. val = FormatByteSize(part.nKiBFree * _BYTE_SIZE_KIB, szBuf, _countof(szBuf));
  129. break;
  130. case SDR_PartFsUsed:
  131. val = FormatByteSize(part.nKiBUsed * _BYTE_SIZE_KIB, szBuf, _countof(szBuf));
  132. break;
  133. default:
  134. break;
  135. }
  136. }
  137. return val;
  138. }
  139. QHash<int, QByteArray> QGfaStgDevList::roleNames(void) const
  140. {
  141. QHash<int, QByteArray> roles;
  142. for(size_t i = 0; i < _countof(g_roles); ++i)
  143. {
  144. roles[g_roles[i].nRole] = g_roles[i].pszRoleName;
  145. }
  146. return roles;
  147. }
  148. int QGfaStgDevList::FindPartVecEntry(int nDiskIdx, int nPartIdx)
  149. {
  150. for(auto it = m_partVec.begin(); it != m_partVec.end(); ++it)
  151. {
  152. const STG_DEV_DISK_PART &dp = *it;
  153. if((dp.nDiskIdx == nDiskIdx) && (dp.nPartIdx == nPartIdx))
  154. return it - m_partVec.begin();
  155. }
  156. return -1;
  157. }
  158. void QGfaStgDevList::insertPartition(int nDiskIdx, int nPartIdx)
  159. {
  160. QModelIndex parent = QModelIndex();
  161. int nIndex = (int)m_partVec.size();
  162. emit beginInsertRows(parent, nIndex, nIndex);
  163. m_partVec.emplace_back(nDiskIdx, nPartIdx);
  164. emit endInsertRows();
  165. }
  166. void QGfaStgDevList::removePartition(int nDiskIdx, int nPartIdx)
  167. {
  168. int nIndex;
  169. if((nIndex = FindPartVecEntry(nDiskIdx, nPartIdx)) >= 0)
  170. {
  171. QModelIndex parent = QModelIndex();
  172. emit beginRemoveRows(parent, nIndex, nIndex);
  173. m_partVec.erase(m_partVec.begin() + nIndex);
  174. emit endRemoveRows();
  175. }
  176. }
  177. void QGfaStgDevList::diskAdded(int nIndex, const GFA_SYSINFO_DISK &disk)
  178. {
  179. if((nIndex >= 0) && (nIndex < (int)_countof(m_stgDevShadowCpy.disks)) && !disk.internal)
  180. {
  181. TRACE("Disk [ID=%d] added: %s [%s]\n", nIndex, disk.szDevNode, *disk.szName ? disk.szName : "Unnamed");
  182. memcpy(&m_stgDevShadowCpy.disks[nIndex], &disk, sizeof(GFA_SYSINFO_DISK));
  183. }
  184. }
  185. void QGfaStgDevList::diskRemoved(int nIndex, const GFA_SYSINFO_DISK &disk)
  186. {
  187. if((nIndex >= 0) && (nIndex < (int)_countof(m_stgDevShadowCpy.disks)) && !disk.internal)
  188. {
  189. TRACE("Disk [ID=%d] removed: %s [%s]\n", nIndex, disk.szDevNode, *disk.szName ? disk.szName : "Unnamed");
  190. m_stgDevShadowCpy.disks[nIndex].valid = false;
  191. }
  192. }
  193. void QGfaStgDevList::partitionAdded(int nIndex, const GFA_SYSINFO_PARTITION &part)
  194. {
  195. if((nIndex >= 0) && (nIndex < (int)_countof(m_stgDevShadowCpy.parts)) && !part.internal)
  196. {
  197. TRACE("Partition [ID=%d:%d] added: %s [%s]\n", part.nDiskIdx, nIndex, part.szDevNode, *part.szFsLabel ? part.szFsLabel : "Unnamed");
  198. memcpy(&m_stgDevShadowCpy.parts[nIndex], &part, sizeof(GFA_SYSINFO_PARTITION));
  199. insertPartition(part.nDiskIdx, nIndex);
  200. }
  201. }
  202. void QGfaStgDevList::partitionRemoved(int nIndex, const GFA_SYSINFO_PARTITION &part)
  203. {
  204. if((nIndex >= 0) && (nIndex < (int)_countof(m_stgDevShadowCpy.parts)) && !part.internal)
  205. {
  206. TRACE("Partition [ID=%d:%d] removed: %s [%s]\n", part.nDiskIdx, nIndex, part.szDevNode, *part.szFsLabel ? part.szFsLabel : "Unnamed");
  207. m_stgDevShadowCpy.parts[nIndex].valid = false;
  208. removePartition(part.nDiskIdx, nIndex);
  209. }
  210. }
  211. void QGfaStgDevList::mountAdded(int nIndex, const GFA_SYSINFO_PARTITION &part)
  212. {
  213. if((nIndex >= 0) && (nIndex < (int)_countof(m_stgDevShadowCpy.parts)) && !part.internal)
  214. {
  215. TRACE("Partition [ID=%d:%d] mounted: %s -> %s\n", part.nDiskIdx, nIndex, part.szDevNode, part.szMntPoint);
  216. GFA_SYSINFO_PARTITION &p = m_stgDevShadowCpy.parts[nIndex];
  217. memcpy(&p.szMntPoint, &part.szMntPoint, sizeof(GFA_SYSINFO_PARTITION::szMntPoint));
  218. if((nIndex = FindPartVecEntry(part.nDiskIdx, nIndex)) >= 0)
  219. {
  220. p.nKiBSize = part.nKiBSize;
  221. p.nKiBFree = part.nKiBFree;
  222. p.nKiBUsed = part.nKiBUsed;
  223. QModelIndex i = createIndex(nIndex, 0);
  224. emit dataChanged(i, i, {SDR_PartMountPoint, SDR_PartFsSize, SDR_PartFsFree, SDR_PartFsUsed});
  225. }
  226. }
  227. }
  228. void QGfaStgDevList::mountRemoved(int nIndex, const GFA_SYSINFO_PARTITION &part)
  229. {
  230. if((nIndex >= 0) && (nIndex < (int)_countof(m_stgDevShadowCpy.parts)) && !part.internal)
  231. {
  232. TRACE("Partition [ID=%d:%d] unmounted: %s\n", part.nDiskIdx, nIndex, part.szDevNode);
  233. GFA_SYSINFO_PARTITION &p = m_stgDevShadowCpy.parts[nIndex];
  234. memset(&p.szMntPoint, 0, sizeof(GFA_SYSINFO_PARTITION::szMntPoint));
  235. if((nIndex = FindPartVecEntry(part.nDiskIdx, nIndex)) >= 0)
  236. {
  237. p.nKiBSize = 0;
  238. p.nKiBFree = 0;
  239. p.nKiBUsed = 0;
  240. QModelIndex i = createIndex(nIndex, 0);
  241. emit dataChanged(i, i, {SDR_PartMountPoint, SDR_PartFsSize, SDR_PartFsFree, SDR_PartFsUsed});
  242. }
  243. }
  244. }
  245. void QGfaStgDevList::clearAll(void)
  246. {
  247. int nLast = m_partVec.size() - 1;
  248. if(nLast >= 0)
  249. {
  250. QModelIndex parent = QModelIndex();
  251. emit beginRemoveRows(parent, 0, nLast);
  252. m_partVec.clear();
  253. memset(&m_stgDevShadowCpy, 0, sizeof(m_stgDevShadowCpy));
  254. emit endRemoveRows();
  255. }
  256. }
  257. void QGfaStgDevList::updateModel(void)
  258. {
  259. // beginResetModel();
  260. // endResetModel();
  261. }
  262. /////////////////////////////////////////////////////////////////////////////
  263. /////////////////////////////////////////////////////////////////////////////
  264. /////////////////////////////////////////////////////////////////////////////
  265. QTivaInfo::QTivaInfo(QObject *pParent) : QObject(pParent)
  266. {
  267. memset(&m_spiShadow, 0, sizeof(m_spiShadow));
  268. }
  269. QTivaInfo::~QTivaInfo(void)
  270. {
  271. }
  272. quint64 QTivaInfo::upTime(void) const
  273. {
  274. return m_spiShadow.nUptimeSec;
  275. }
  276. void QTivaInfo::setUpTime(quint64 val)
  277. {
  278. if(m_spiShadow.nUptimeSec != val)
  279. {
  280. m_spiShadow.nUptimeSec = val;
  281. emit upTimeChanged(m_spiShadow.nUptimeSec);
  282. }
  283. }
  284. qint32 QTivaInfo::hwVersion(void) const
  285. {
  286. return m_spiShadow.nHwVersion;
  287. }
  288. void QTivaInfo::setHwVersion(qint32 val)
  289. {
  290. if(m_spiShadow.nHwVersion != val)
  291. {
  292. m_spiShadow.nHwVersion = val;
  293. emit hwVersionChanged(m_spiShadow.nHwVersion);
  294. }
  295. }
  296. qint32 QTivaInfo::swVersion(void) const
  297. {
  298. return m_spiShadow.nSwVersion;
  299. }
  300. void QTivaInfo::setSwVersion(qint32 val)
  301. {
  302. if(m_spiShadow.nSwVersion != val)
  303. {
  304. m_spiShadow.nSwVersion = val;
  305. emit swVersionChanged(m_spiShadow.nSwVersion);
  306. }
  307. }
  308. double QTivaInfo::voltPowSup(void) const
  309. {
  310. return (double)m_spiShadow.adc.fVoltagePowerSupply;
  311. }
  312. void QTivaInfo::setVoltPowSup(float val)
  313. {
  314. if(m_spiShadow.adc.fVoltagePowerSupply != val)
  315. {
  316. m_spiShadow.adc.fVoltagePowerSupply = val;
  317. emit voltPowSupChanged((double)m_spiShadow.adc.fVoltagePowerSupply);
  318. }
  319. }
  320. double QTivaInfo::voltBakBat(void) const
  321. {
  322. return (double)m_spiShadow.adc.fVoltageBackupBattery;
  323. }
  324. void QTivaInfo::setVoltBakBat(float val)
  325. {
  326. if(m_spiShadow.adc.fVoltageBackupBattery != val)
  327. {
  328. m_spiShadow.adc.fVoltageBackupBattery = val;
  329. emit voltBakBatChanged((double)m_spiShadow.adc.fVoltageBackupBattery);
  330. }
  331. }
  332. double QTivaInfo::voltSys(void) const
  333. {
  334. return (double)m_spiShadow.adc.fVoltageSys;
  335. }
  336. void QTivaInfo::setVoltSys(float val)
  337. {
  338. if(m_spiShadow.adc.fVoltageSys != val)
  339. {
  340. m_spiShadow.adc.fVoltageSys = val;
  341. emit voltSysChanged((double)m_spiShadow.adc.fVoltageSys);
  342. }
  343. }
  344. double QTivaInfo::voltBat(void) const
  345. {
  346. return (double)m_spiShadow.adc.fVoltageBattery;
  347. }
  348. void QTivaInfo::setVoltBat(float val)
  349. {
  350. if(m_spiShadow.adc.fVoltageBattery != val)
  351. {
  352. m_spiShadow.adc.fVoltageBattery = val;
  353. emit voltBatChanged((double)m_spiShadow.adc.fVoltageBattery);
  354. }
  355. }
  356. double QTivaInfo::tempBoard(void) const
  357. {
  358. return (double)m_spiShadow.adc.fTemperatureBoard;
  359. }
  360. void QTivaInfo::setTempBoard(float val)
  361. {
  362. if(m_spiShadow.adc.fTemperatureBoard != val)
  363. {
  364. m_spiShadow.adc.fTemperatureBoard = val;
  365. emit tempBoardChanged((double)m_spiShadow.adc.fTemperatureBoard);
  366. }
  367. }
  368. double QTivaInfo::tempTiva(void) const
  369. {
  370. return (double)m_spiShadow.adc.fTemperatureTiva;
  371. }
  372. void QTivaInfo::setTempTiva(float val)
  373. {
  374. if(m_spiShadow.adc.fTemperatureTiva != val)
  375. {
  376. m_spiShadow.adc.fTemperatureTiva = val;
  377. emit tempTivaChanged((double)m_spiShadow.adc.fTemperatureTiva);
  378. }
  379. }
  380. void QTivaInfo::UpdateSpiInfo(const GFA_SYSINFO_SPI &spi, bool bReset)
  381. {
  382. if(bReset)
  383. {
  384. setUpTime(0);
  385. setHwVersion(0);
  386. setSwVersion(0);
  387. setVoltPowSup(0.f);
  388. setVoltBakBat(0.f);
  389. setVoltSys(0.f);
  390. setVoltBat(0.f);
  391. setTempBoard(0.f);
  392. setTempTiva(0.f);
  393. }
  394. else
  395. {
  396. setUpTime(spi.nUptimeSec);
  397. setHwVersion(spi.nHwVersion);
  398. setSwVersion(spi.nSwVersion);
  399. setVoltPowSup(spi.adc.fVoltagePowerSupply);
  400. setVoltBakBat(spi.adc.fVoltageBackupBattery);
  401. setVoltSys(spi.adc.fVoltageSys);
  402. setVoltBat(spi.adc.fVoltageBattery);
  403. setTempBoard(spi.adc.fTemperatureBoard);
  404. setTempTiva(spi.adc.fTemperatureTiva);
  405. }
  406. }
  407. void QTivaInfo::ResetSpiInfo(void)
  408. {
  409. setUpTime(0);
  410. setHwVersion(0);
  411. setSwVersion(0);
  412. setVoltPowSup(0.f);
  413. setVoltBakBat(0.f);
  414. setVoltSys(0.f);
  415. setVoltBat(0.f);
  416. setTempBoard(0.f);
  417. setTempTiva(0.f);
  418. }
  419. /////////////////////////////////////////////////////////////////////////////
  420. /////////////////////////////////////////////////////////////////////////////
  421. /////////////////////////////////////////////////////////////////////////////
  422. QGfaSysInfo::QGfaSysInfo(QObject *pParent) : QObject(pParent),
  423. m_bSysInfoRunning(false),
  424. m_nMemTotal(0),
  425. m_nMemUsed(0),
  426. m_nMemFree(0),
  427. m_nMemAvailable(0),
  428. m_nMemBuffers(0),
  429. m_nMemCached(0),
  430. m_bootFromEmmc(false)
  431. {
  432. }
  433. QGfaSysInfo::~QGfaSysInfo(void)
  434. {
  435. setObjectName("QGfaSysInfo");
  436. }
  437. /////////////////////////////////////////////////////////////////////////////
  438. void QGfaSysInfo::setSysInfoRunning(bool bRunning)
  439. {
  440. if(m_bSysInfoRunning != bRunning)
  441. {
  442. if(!(m_bSysInfoRunning = bRunning))
  443. {
  444. setSysMemInfo(NULL);
  445. m_stgDevList.clearAll();
  446. }
  447. else
  448. {
  449. m_stgDevList.updateModel();
  450. }
  451. }
  452. }
  453. void QGfaSysInfo::setSysMemInfo(LPCGFA_APPCTRL_SYSMEM psm, bool bDoHeavyLoadUpdate)
  454. {
  455. if(psm && m_bSysInfoRunning)
  456. {
  457. if(bDoHeavyLoadUpdate)
  458. {
  459. if(m_nMemTotal != psm->nMemTotal)
  460. {
  461. m_nMemTotal = psm->nMemTotal;
  462. emit memTotalChanged(m_nMemTotal);
  463. }
  464. if(m_nMemUsed != psm->nMemUsed)
  465. {
  466. m_nMemUsed = psm->nMemUsed;
  467. emit memUsedChanged(m_nMemUsed);
  468. }
  469. if(m_nMemFree != psm->nMemFree)
  470. {
  471. m_nMemFree = psm->nMemFree;
  472. emit memFreeChanged(m_nMemFree);
  473. }
  474. if(m_nMemAvailable != psm->nMemAvailable)
  475. {
  476. m_nMemAvailable = psm->nMemAvailable;
  477. emit memAvailableChanged(m_nMemAvailable);
  478. }
  479. if(m_nMemBuffers != psm->nMemBuffers)
  480. {
  481. m_nMemBuffers = psm->nMemBuffers;
  482. emit memBuffersChanged(m_nMemBuffers);
  483. }
  484. if(m_nMemCached != psm->nMemCached)
  485. {
  486. m_nMemCached = psm->nMemCached;
  487. emit memCachedChanged(m_nMemCached);
  488. }
  489. }
  490. }
  491. else
  492. {
  493. if(m_nMemTotal != 0)
  494. {
  495. m_nMemTotal = 0;
  496. emit memTotalChanged(m_nMemTotal);
  497. }
  498. if(m_nMemUsed != 0)
  499. {
  500. m_nMemUsed = 0;
  501. emit memUsedChanged(m_nMemUsed);
  502. }
  503. if(m_nMemFree != 0)
  504. {
  505. m_nMemFree = 0;
  506. emit memFreeChanged(m_nMemFree);
  507. }
  508. if(m_nMemAvailable != 0)
  509. {
  510. m_nMemAvailable = 0;
  511. emit memAvailableChanged(m_nMemAvailable);
  512. }
  513. if(m_nMemBuffers != 0)
  514. {
  515. m_nMemBuffers = 0;
  516. emit memBuffersChanged(m_nMemBuffers);
  517. }
  518. if(m_nMemCached != 0)
  519. {
  520. m_nMemCached = 0;
  521. emit memCachedChanged(m_nMemCached);
  522. }
  523. }
  524. }
  525. /////////////////////////////////////////////////////////////////////////////
  526. quint64 QGfaSysInfo::memTotal(void) const
  527. {
  528. return m_nMemTotal;
  529. }
  530. quint64 QGfaSysInfo::memUsed(void) const
  531. {
  532. return m_nMemUsed;
  533. }
  534. quint64 QGfaSysInfo::memFree(void) const
  535. {
  536. return m_nMemFree;
  537. }
  538. quint64 QGfaSysInfo::memAvailable(void) const
  539. {
  540. return m_nMemAvailable;
  541. }
  542. quint64 QGfaSysInfo::memBuffers(void) const
  543. {
  544. return m_nMemBuffers;
  545. }
  546. quint64 QGfaSysInfo::memCached(void) const
  547. {
  548. return m_nMemCached;
  549. }
  550. QGfaStgDevList* QGfaSysInfo::stgDev(void)
  551. {
  552. return &m_stgDevList;
  553. }
  554. QTivaInfo* QGfaSysInfo::tivaInfo(void)
  555. {
  556. return &m_tivaInfo;
  557. }
  558. bool QGfaSysInfo::bootFromEmmc(void) const
  559. {
  560. return m_bootFromEmmc;
  561. }
  562. void QGfaSysInfo::setBootFromEmmc(bool bootFromEmmc)
  563. {
  564. if(m_bootFromEmmc != bootFromEmmc)
  565. {
  566. m_bootFromEmmc = bootFromEmmc;
  567. emit bootFromEmmcChanged(m_bootFromEmmc);
  568. }
  569. }