Запускается аппаратный таймер и периодически проверяется обратный отсчет с помощью команды devctl.
MsgType tData;
tData.sFacadeNo = IohFac_SIO; // has value 8
tData.sCmdNo = IohSIO_startOvertempTimer; // has value 6
tData.sStatus = IOH_STAT_RMGRERR; // has value 4
tData.tSpecData.tStandardMsg.uiValue1 = 1;
devctl( iFD, (int) DEVDIR_TOFROM, &tData, (unsigned) (int) tData.sLen, (int*) NULL );
return tData.sStatus;
iFD - это дескриптор файла, полученный командой open64 для устройства в / dev / SomeDeviceCustomTous. Тип устройства - «n», что означает «Именованный специальный» (область совместно используемой памяти, например / dev / shmem / Pg101e0001.)
Ответ получен в tData.
Некоторые соответствующие перечисления
struct MsgTag {
short sCmdNo; //## attribute sCmdNo
short sFacadeNo; //## attribute sFacadeNo
short sLen; //## attribute sLen
short sStatus; //## attribute sStatus
tSpecDataTag tSpecData; //## attribute tSpecData
MsgTag()
{
sLen=sizeof(MsgTag);
}
};
//#]
union tSpecDataTag {
HndlMsgType tHndlMsg;
StandardMsgType tStandardMsg;
};
typedef MsgTag MsgType;
struct HndlMsgTag {
void * pPortID;
unsigned int uiValue1;
unsigned int uiValue2;
};
typedef HndlMsgTag HndlMsgType;
struct StandardMsgTag {
int iSetID;
unsigned int uiTimeout;
unsigned int uiValue1;
unsigned int uiValue2;
};
typedef StandardMsgTag StandardMsgType;
Проблема
Для аппаратного таймера по умолчанию установлено значение 30 минут, и он ведет обратный отсчет, пока не станет равным 0 и не станет неактивным. Я не уверен, где он установлен на 30. Требование, которое мы имеем, состоит в том, чтобы изменить обратный отсчет до 10 минут, но я не думаю, что он установлен где-нибудь в коде.
Любые предложения приветствуются.