|
@@ -51,7 +51,7 @@ static const char *g_pszKnownAppNames[] =
|
|
|
"GEB"
|
|
|
};
|
|
|
|
|
|
-static_assert(_countof(g_pszKnownAppNames) == (GAI_Last - GAI_Remanent), "enum GfaAppIndex does not meet string representation!");
|
|
|
+static_assert(_countof(g_pszKnownAppNames) == (GAI_Last - GAI_Remanent), "enum GfaAppIndex does not meet string representation in g_pszKnownAppNames!");
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
@@ -495,7 +495,7 @@ const char* CAppCtrl::GetStateText(GfaIpcAppStates state)
|
|
|
"Zombie",
|
|
|
"Invalid"
|
|
|
};
|
|
|
-
|
|
|
+
|
|
|
static_assert(_countof(pszStateNames) == (GIAS_Invalid - GIAS_StateNotRunning + 1), "enum GfaIpcAppStates does not meet string representation!");
|
|
|
|
|
|
if(state >= GIAS_StateNotRunning && state <= GIAS_Invalid)
|
|
@@ -1007,92 +1007,93 @@ bool CAppCtrl::UpdateStorageDeviceMap(const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm,
|
|
|
{
|
|
|
GFA_SYSINFO_DISK &diskShm = sys.sdm.disks[i];
|
|
|
_DELETE_DISK(diskShm);
|
|
|
- sys.nDiskMask &= ~(0x01 << i);
|
|
|
}
|
|
|
|
|
|
for(int i = 0; i < (int)_countof(sys.sdm.parts); ++i)
|
|
|
{
|
|
|
GFA_SYSINFO_PARTITION &partShm = sys.sdm.parts[i];
|
|
|
_DELETE_PARTITION(partShm);
|
|
|
- sys.nPartMask &= ~(0x01 << i);
|
|
|
_DELETE_MOUNTPOINT(partShm);
|
|
|
- sys.nMountMask &= ~i;
|
|
|
}
|
|
|
-
|
|
|
- return true;
|
|
|
- }
|
|
|
|
|
|
- while(nPartChangeMask)
|
|
|
+ sys.nDiskMask = 0;
|
|
|
+ sys.nPartMask = 0;
|
|
|
+ sys.nMountMask = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- int nPartIdx = ffsll(nPartChangeMask) - 1;
|
|
|
- uint32_t nPartBit = (0x01 << nPartIdx);
|
|
|
- nPartChangeMask &= ~nPartBit;
|
|
|
-
|
|
|
- if((nPartIdx >= 0) && (nPartIdx < (ssize_t)_countof(sdm.parts)))
|
|
|
+ while(nPartChangeMask)
|
|
|
{
|
|
|
- const GFA_SYSINFO_PARTITION &partNew = sdm.parts[nPartIdx];
|
|
|
- GFA_SYSINFO_PARTITION &partShm = sys.sdm.parts[nPartIdx];
|
|
|
- int nDiskIdx = partNew.nDiskIdx;
|
|
|
-
|
|
|
- if((nDiskIdx >= 0) && (nDiskIdx < (ssize_t)_countof(sdm.disks)))
|
|
|
+ int nPartIdx = ffsll(nPartChangeMask) - 1;
|
|
|
+ uint32_t nPartBit = (0x01 << nPartIdx);
|
|
|
+ nPartChangeMask &= ~nPartBit;
|
|
|
+
|
|
|
+ if((nPartIdx >= 0) && (nPartIdx < (int)_countof(sdm.parts)))
|
|
|
{
|
|
|
- const GFA_SYSINFO_DISK &diskNew = sdm.disks[nDiskIdx];
|
|
|
- GFA_SYSINFO_DISK &diskShm = sys.sdm.disks[nDiskIdx];
|
|
|
- uint32_t nDiskBit = (0x01 << nDiskIdx);
|
|
|
+ const GFA_SYSINFO_PARTITION &partNew = sdm.parts[nPartIdx];
|
|
|
+ GFA_SYSINFO_PARTITION &partShm = sys.sdm.parts[nPartIdx];
|
|
|
+ int nDiskIdx = partNew.nDiskIdx;
|
|
|
|
|
|
- if(diskNew.valid && !diskShm.valid)
|
|
|
- {
|
|
|
- // disk add
|
|
|
- _COPY_DISK(diskShm, diskNew);
|
|
|
- sys.nDiskMask |= nDiskBit;
|
|
|
- }
|
|
|
- else if(!diskNew.valid && diskShm.valid)
|
|
|
+ if((nDiskIdx >= 0) && (nDiskIdx < (ssize_t)_countof(sdm.disks)))
|
|
|
{
|
|
|
- // disk remove
|
|
|
- _DELETE_DISK(diskShm);
|
|
|
- sys.nDiskMask &= ~nDiskBit;
|
|
|
- }
|
|
|
- else if(diskNew.valid && diskShm.valid)
|
|
|
- {
|
|
|
- // disk change
|
|
|
- _COPY_DISK(diskShm, diskNew);
|
|
|
- sys.nDiskMask |= nDiskBit;
|
|
|
- }
|
|
|
+ const GFA_SYSINFO_DISK &diskNew = sdm.disks[nDiskIdx];
|
|
|
+ GFA_SYSINFO_DISK &diskShm = sys.sdm.disks[nDiskIdx];
|
|
|
+ uint32_t nDiskBit = (0x01 << nDiskIdx);
|
|
|
|
|
|
- if(partNew.valid && !partShm.valid)
|
|
|
- {
|
|
|
- // partition add
|
|
|
- _COPY_PARTITION(partShm, partNew);
|
|
|
- sys.nPartMask |= nPartBit;
|
|
|
- }
|
|
|
- else if(!partNew.valid && partShm.valid)
|
|
|
- {
|
|
|
- // partition remove
|
|
|
- _DELETE_PARTITION(partShm);
|
|
|
- sys.nPartMask &= ~nPartBit;
|
|
|
- }
|
|
|
+ if(diskNew.valid && !diskShm.valid)
|
|
|
+ {
|
|
|
+ // disk add
|
|
|
+ _COPY_DISK(diskShm, diskNew);
|
|
|
+ sys.nDiskMask |= nDiskBit;
|
|
|
+ }
|
|
|
+ else if(!diskNew.valid && diskShm.valid)
|
|
|
+ {
|
|
|
+ // disk remove
|
|
|
+ _DELETE_DISK(diskShm);
|
|
|
+ sys.nDiskMask &= ~nDiskBit;
|
|
|
+ }
|
|
|
+ else if(diskNew.valid && diskShm.valid)
|
|
|
+ {
|
|
|
+ // disk change
|
|
|
+ _COPY_DISK(diskShm, diskNew);
|
|
|
+ sys.nDiskMask |= nDiskBit;
|
|
|
+ }
|
|
|
|
|
|
- if(partNew.valid && partShm.valid)
|
|
|
- {
|
|
|
- // partition change
|
|
|
- if(*partNew.szMntPoint && !*partShm.szMntPoint)
|
|
|
+ if(partNew.valid && !partShm.valid)
|
|
|
{
|
|
|
- // mountpoint add
|
|
|
- _COPY_MOUNTPOINT(partShm, partNew);
|
|
|
- sys.nMountMask |= nPartBit;
|
|
|
+ // partition add
|
|
|
+ _COPY_PARTITION(partShm, partNew);
|
|
|
+ sys.nPartMask |= nPartBit;
|
|
|
}
|
|
|
- else if(!*partNew.szMntPoint && *partShm.szMntPoint)
|
|
|
+ else if(!partNew.valid && partShm.valid)
|
|
|
{
|
|
|
- // mountpoint remove
|
|
|
- _DELETE_MOUNTPOINT(partShm);
|
|
|
- sys.nMountMask &= ~nPartBit;
|
|
|
+ // partition remove
|
|
|
+ _DELETE_PARTITION(partShm);
|
|
|
+ sys.nPartMask &= ~nPartBit;
|
|
|
}
|
|
|
- else if(*partNew.szMntPoint && *partShm.szMntPoint)
|
|
|
+
|
|
|
+ if(partNew.valid && partShm.valid)
|
|
|
{
|
|
|
- // mountpoint change
|
|
|
- if(strcmp(partNew.szMntPoint, partShm.szMntPoint))
|
|
|
+ // partition change
|
|
|
+ if(*partNew.szMntPoint && !*partShm.szMntPoint)
|
|
|
+ {
|
|
|
+ // mountpoint add
|
|
|
_COPY_MOUNTPOINT(partShm, partNew);
|
|
|
- sys.nMountMask |= nPartBit;
|
|
|
+ sys.nMountMask |= nPartBit;
|
|
|
+ }
|
|
|
+ else if(!*partNew.szMntPoint && *partShm.szMntPoint)
|
|
|
+ {
|
|
|
+ // mountpoint remove
|
|
|
+ _DELETE_MOUNTPOINT(partShm);
|
|
|
+ sys.nMountMask &= ~nPartBit;
|
|
|
+ }
|
|
|
+ else if(*partNew.szMntPoint && *partShm.szMntPoint)
|
|
|
+ {
|
|
|
+ // mountpoint change
|
|
|
+ if(strcmp(partNew.szMntPoint, partShm.szMntPoint))
|
|
|
+ _COPY_MOUNTPOINT(partShm, partNew);
|
|
|
+ sys.nMountMask |= nPartBit;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1259,16 +1260,15 @@ bool CAppCtrl::UpdateDbInfo(const GFA_SYSINFO_DATABASE &sdb)
|
|
|
if(m_hShm)
|
|
|
{
|
|
|
sysevt_t evt = 0;
|
|
|
-
|
|
|
GFA_SYSINFO_DATABASE &rsdb = m_pAppCtrl->sdb;
|
|
|
CAppCtrlShmLocker locker(*this);
|
|
|
-
|
|
|
+
|
|
|
if(rsdb.bIsInit != sdb.bIsInit)
|
|
|
{
|
|
|
evt |= GFA_APPCTRL_SYSEVENT_MYSQL_INIT_EVT;
|
|
|
rsdb.bIsInit = sdb.bIsInit;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if(sdb.bIsInit)
|
|
|
{
|
|
|
if(memcmp(&rsdb.svr, &sdb.svr, sizeof(GFA_MYSQL_SERVER)))
|
|
@@ -1312,7 +1312,50 @@ bool CAppCtrl::UpdateDbInfo(const GFA_SYSINFO_DATABASE &sdb)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+/////////////////////////////////////////////////////////////////////////////
|
|
|
+
|
|
|
+bool CAppCtrl::UpdateSpiInfo(const GFA_SYSINFO_SPI &spi, bool bReset)
|
|
|
+{
|
|
|
+ if(m_hShm)
|
|
|
+ {
|
|
|
+ sysevt_t evt = 0;
|
|
|
+ GFA_SYSINFO_SPI &spiShm = m_pAppCtrl->sys.spi;
|
|
|
+ CAppCtrlShmLocker locker(*this);
|
|
|
|
|
|
+ if(bReset)
|
|
|
+ {
|
|
|
+ memset(&spiShm, 0, sizeof(spiShm));
|
|
|
+ evt |= GFA_APPCTRL_SYSEVENT_TIVA_RST;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(memcmp(&spiShm, &spi, sizeof(spiShm)))
|
|
|
+ {
|
|
|
+ memcpy(&spiShm, &spi, sizeof(spiShm));
|
|
|
+ evt |= GFA_APPCTRL_SYSEVENT_TIVA_EVT;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(evt)
|
|
|
+ {
|
|
|
+ for(int i = 0; i < _APP_CTRL_MAX_SLOTS; ++i)
|
|
|
+ {
|
|
|
+ APP_CTRL_PROCESS &proc = m_pAppCtrl->proc[i];
|
|
|
+
|
|
|
+ if(_IS_VALID_APP_ID(proc.nAppID) && (evt & proc.nSysEvtRegistered))
|
|
|
+ {
|
|
|
+ proc.nSysEvtPending |= evt;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return true;
|
|
|
}
|
|
|
|
|
@@ -1622,6 +1665,14 @@ extern "C" bool GfaIpcAppCtrlUpdateDbInfo(HAPPCTRL hAC, const GFA_SYSINFO_DATABA
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+extern "C" bool GfaIpcAppCtrlUpdateSpiInfo(HAPPCTRL hAC, const GFA_SYSINFO_SPI &spi, bool bReset)
|
|
|
+{
|
|
|
+ CAppCtrl *p = reinterpret_cast<CAppCtrl*>(hAC);
|
|
|
+ if(p)
|
|
|
+ return p->UpdateSpiInfo(spi, bReset);
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
extern "C" bool GfaIpcAppCtrlTriggertHeartBeat(HAPPCTRL hAC)
|
|
|
{
|
|
|
CAppCtrl *p = reinterpret_cast<CAppCtrl*>(hAC);
|