- Connections write timeouts were incorrectly handled in asynnetc. Fixed.
- Implemented the desired run/drive behaviour: drive waits for what it started run starts, and success waits for everything to finish. This required changes to a lot of files. - Fixed a bug in remob which supressed required messages
This commit is contained in:
33
countersec.c
33
countersec.c
@ -61,6 +61,7 @@ static int SecStartCount(void *pData, SConnection *pCon)
|
||||
}
|
||||
|
||||
status = SecCtrInvokeFunction(self,pCon, START);
|
||||
self->haltFixFlag = 0;
|
||||
if(status == 1){
|
||||
self->isUpToDate = 0;
|
||||
self->badStatusCount = 0;
|
||||
@ -68,6 +69,13 @@ static int SecStartCount(void *pData, SConnection *pCon)
|
||||
node = GetHipadabaNode(self->pDes->parNode, "status");
|
||||
UpdateHipadabaPar(node,MakeHdbText("run"), pCon);
|
||||
SetHdbProperty(node,"geterror", NULL);
|
||||
/*
|
||||
* set time to 0. Otherwise, if there is a delay,
|
||||
* the check for overrun counters in SecCtrCheckStatus
|
||||
* may trigger!
|
||||
*/
|
||||
node = GetHipadabaNode(self->pDes->parNode, "time");
|
||||
UpdateHipadabaPar(node,MakeHdbFloat(.0), pCon);
|
||||
InvokeCallBack(self->pCall,COUNTSTART, pCon);
|
||||
return 1;
|
||||
} else {
|
||||
@ -135,13 +143,15 @@ static int SecCtrCheckStatus(void *pData, SConnection *pCon)
|
||||
ReleaseCountLock(self->pCountInt);
|
||||
status = HWFault;
|
||||
}
|
||||
|
||||
ReleaseHdbValue(&v);
|
||||
|
||||
/*
|
||||
* check for overrun timers
|
||||
*/
|
||||
if(self->getMode(self) == eTimer &&
|
||||
time(NULL) > self->tStart + self->getPreset(self)){
|
||||
time(NULL) > self->tStart + self->getPreset(self) && self->haltFixFlag == 0){
|
||||
SecCtrHalt(self);
|
||||
self->haltFixFlag = 1;
|
||||
}
|
||||
|
||||
node = GetHipadabaNode(self->pDes->parNode,"control");
|
||||
@ -182,11 +192,14 @@ static int SecCtrTransferData(void *pData, SConnection *pCon)
|
||||
assert(self != NULL);
|
||||
pHdb node = NULL;
|
||||
hdbValue v;
|
||||
int status;
|
||||
|
||||
node = GetHipadabaNode(self->pDes->parNode,"values");
|
||||
assert(node != NULL);
|
||||
self->isUpToDate = 1;
|
||||
return GetHipadabaPar(node,&v,pCon);
|
||||
status = GetHipadabaPar(node,&v,pCon);
|
||||
ReleaseHdbValue(&v);
|
||||
return status;
|
||||
}
|
||||
/*------------------------------------------------------------------------*/
|
||||
static void *SecCtrCounterGetInterface(void *pData, int iID)
|
||||
@ -225,16 +238,19 @@ static CounterMode SecCtrGetMode(pCounter self)
|
||||
{
|
||||
hdbValue v;
|
||||
pHdb node = NULL;
|
||||
CounterMode mode;
|
||||
|
||||
node = GetHipadabaNode(self->pDes->parNode,"mode");
|
||||
assert(node != NULL);
|
||||
GetHipadabaPar(node,&v,NULL);
|
||||
assert(v.v.text != NULL);
|
||||
if(strcmp(v.v.text,"timer") == 0){
|
||||
return eTimer;
|
||||
mode = eTimer;
|
||||
} else {
|
||||
return ePreset;
|
||||
mode = ePreset;
|
||||
}
|
||||
ReleaseHdbValue(&v);
|
||||
return mode;
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
static int SecCtrSetPreset(pCounter self, float val)
|
||||
@ -287,6 +303,7 @@ static long SecCtrGetMonitor(pCounter self, int iNum, SConnection *pCon)
|
||||
{
|
||||
hdbValue v;
|
||||
pHdb node = NULL;
|
||||
long val;
|
||||
|
||||
if (!self->isUpToDate) {
|
||||
self->pCountInt->TransferData(self, pCon);
|
||||
@ -295,10 +312,12 @@ static long SecCtrGetMonitor(pCounter self, int iNum, SConnection *pCon)
|
||||
assert(node != NULL);
|
||||
GetHipadabaPar(node,&v,pCon);
|
||||
if(iNum >= 0 && iNum < v.arrayLength){
|
||||
return (long)v.v.intArray[iNum];
|
||||
val = (long)v.v.intArray[iNum];
|
||||
} else {
|
||||
return -1L;
|
||||
val = -1L;
|
||||
}
|
||||
ReleaseHdbValue(&v);
|
||||
return val;
|
||||
}
|
||||
/*--------------------------------------------------------------------------*/
|
||||
static long SecCtrGetCounts(pCounter self, SConnection *pCon)
|
||||
|
Reference in New Issue
Block a user