From e89b640088fe64cb2afcb2c88ed0ad9e2bbc0ed5 Mon Sep 17 00:00:00 2001 From: Mark Koennecke Date: Wed, 7 May 2014 14:24:44 +0200 Subject: [PATCH] Bug fixes - transfer of monitor values in mutlicountersec - Permission denied mesage when restarting a second generation motor fixed --- motorsec.c | 2 +- multicountersec.c | 70 +++++++++++++++++++++++++++++------------------ 2 files changed, 44 insertions(+), 28 deletions(-) diff --git a/motorsec.c b/motorsec.c index af3cf59e..e0f01a06 100644 --- a/motorsec.c +++ b/motorsec.c @@ -271,7 +271,7 @@ static int checkPosition(pMotor self, SConnection * pCon) SetHipadabaPar(node, MakeHdbFloat(target), pCon); node = GetHipadabaNode(self->pDescriptor->parNode, "targetposition"); assert(node != NULL); - SetHipadabaPar(node, MakeHdbFloat(target), pCon); + UpdateHipadabaPar(node, MakeHdbFloat(target), pCon); return HWBusy; } return HWIdle; diff --git a/multicountersec.c b/multicountersec.c index 3dc133f6..00dda9d8 100644 --- a/multicountersec.c +++ b/multicountersec.c @@ -16,6 +16,12 @@ #include #include #include "sicshipadaba.h" +/*---------------------------------------------------------------------------*/ +typedef struct { + float fPreset; + float fCurrent; + char *pName; +} MonEvent, *pMonEvent; /*-------------------------------------------------------------------------*/ static void SecCounterSetError(pCounter self, char *text) { @@ -232,6 +238,31 @@ static hdbCallbackReturn MultiSecControllCallback(pHdb node, return hdbContinue; } +/*--------------------------------------------------------------------------*/ +static int MultiSecTransfer(void *pData, SConnection * pCon) +{ + int i, retVal = OKOK, tclStatus; + char pBueffel[132]; + pCounter pCount = NULL; + pHdb transfer; + + pCount = (pCounter) pData; + + transfer = GetHipadabaNode(pCount->objectNode,"transfer"); + if(transfer != NULL){ + MacroPush(pCon); + tclStatus = Tcl_Eval(InterpGetTcl(pServ->pSics), transfer->value.v.text); + if (tclStatus != TCL_OK) { + snprintf(pBueffel, 131, "ERROR: TransferScript returned: %s", + Tcl_GetStringResult(InterpGetTcl(pServ->pSics))); + SCWrite(pCon, pBueffel, eError); + MacroPop(); + return HWFault; + } + MacroPop(); + } + return retVal; +} /*-------------------------------------------------------------------------------------*/ static int isMultiMasterRunning(pCounter self, SConnection *pCon, int *status) { @@ -241,6 +272,7 @@ static int isMultiMasterRunning(pCounter self, SConnection *pCon, int *status) void *data; pICountable pCount; float controlVal, tVal; + MonEvent sMon; mID = GetHipadabaNode(self->objectNode,"masterID"); master = GetHipadabaNode(self->objectNode,"master"); @@ -291,6 +323,16 @@ static int isMultiMasterRunning(pCounter self, SConnection *pCon, int *status) default: *status = HWBusy; UpdateHipadabaPar(myStatus,MakeHdbText("run"),pCon); + if (self->iCallbackCounter > 20) { + MultiSecTransfer(self,pCon); + sMon.fCurrent = controlVal; + sMon.fPreset = GetCounterPreset(self); + sMon.pName = self->name; + InvokeCallBack(self->pCall, MONITOR, &sMon); + self->iCallbackCounter = 0; + } else { + self->iCallbackCounter++; + } break; } } else { @@ -360,7 +402,7 @@ static void multiEndCounting(pCounter self, SConnection *pCon) InvokeCallBack(self->pCall, COUNTEND, NULL); ReleaseCountLock(self->pCountInt); - + MultiSecTransfer(self,pCon); } /*-------------------------------------------------------------------------------------*/ @@ -385,32 +427,6 @@ static int MultiSecStatus(void *pData, SConnection * pCon) return HWIdle; } -/*--------------------------------------------------------------------------*/ -static int MultiSecTransfer(void *pData, SConnection * pCon) -{ - int i, retVal = OKOK, tclStatus; - char pBueffel[132]; - pCounter pCount = NULL; - pHdb transfer; - - pCount = (pCounter) pData; - - transfer = GetHipadabaNode(pCount->objectNode,"transfer"); - if(transfer != NULL){ - MacroPush(pCon); - tclStatus = Tcl_Eval(InterpGetTcl(pServ->pSics), transfer->value.v.text); - if (tclStatus != TCL_OK) { - snprintf(pBueffel, 131, "ERROR: TransferScript returned: %s", - Tcl_GetStringResult(InterpGetTcl(pServ->pSics))); - SCWrite(pCon, pBueffel, eError); - MacroPop(); - return HWFault; - } - MacroPop(); - } - return retVal; -} - /*--------------------------------------------------------------------------- Forward unknown commands to the master counter -----------------------------------------------------------------------------*/