Установите аппаратный таймер на пользовательское значение в команде QNX - devctl - PullRequest
0 голосов
/ 18 января 2019

Запускается аппаратный таймер и периодически проверяется обратный отсчет с помощью команды 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 минут, но я не думаю, что он установлен где-нибудь в коде.

Любые предложения приветствуются.

...